Просмотр исходного кода

Merge branch 'feature-dgy-创客分期扣款和预扣款' into feature-dgy-后台测试

# Conflicts:
#	Models/PosMachinesTwo.cs
#	wwwroot/users/退押结果模版.xlsx
DuGuYang 3 лет назад
Родитель
Сommit
c37e54e831
100 измененных файлов с 6789 добавлено и 601 удалено
  1. BIN
      .DS_Store
  2. 16 16
      .vscode/maindb.code-snippets
  3. BIN
      AppStart/.DS_Store
  4. BIN
      AppStart/Alipay/.DS_Store
  5. BIN
      AppStart/Aliyun/.DS_Store
  6. BIN
      AppStart/Aliyun/Push/.DS_Store
  7. BIN
      AppStart/ApiFunction/.DS_Store
  8. BIN
      AppStart/DictionaryClass/.DS_Store
  9. 47 25
      AppStart/ExcelHelper.cs
  10. 124 0
      AppStart/Helper/InstallmentDeductionService.cs
  11. 2 7
      AppStart/Helper/SycnHelpProfitService.cs
  12. 94 9
      AppStart/Helper/SycnProfitServiceV2.cs
  13. 441 0
      AppStart/Helper/SycnProfitServiceV3.cs
  14. 75 0
      AppStart/Helper/TimeOutPosChargeReturnService.cs
  15. 207 0
      AppStart/Helper/TimeOutPosChargeService.cs
  16. 83 0
      AppStart/Helper/TimeOutPosSendMessageService.cs
  17. 32 24
      AppStart/OpExcelHelper.cs
  18. 63 13
      AppStart/PublicFunction.cs
  19. 5 2
      AppStart/RelationClassForConst.cs
  20. 58 0
      AppStart/SycnUserMachineCountHelper.cs
  21. BIN
      AppStart/Tables/.DS_Store
  22. BIN
      Areas/.DS_Store
  23. BIN
      Areas/Admin/.DS_Store
  24. BIN
      Areas/Admin/Controllers/.DS_Store
  25. BIN
      Areas/Admin/Controllers/BsServer/.DS_Store
  26. 2 0
      Areas/Admin/Controllers/BsServer/AdvertismentController.cs
  27. 1 0
      Areas/Admin/Controllers/BsServer/BaseController.cs
  28. 18 0
      Areas/Admin/Controllers/BsServer/ColController.cs
  29. 0 10
      Areas/Admin/Controllers/BsServer/MsgPlacardController.cs
  30. BIN
      Areas/Admin/Controllers/MainServer/.DS_Store
  31. 4 4
      Areas/Admin/Controllers/MainServer/ActiveRewardController.cs
  32. 2 2
      Areas/Admin/Controllers/MainServer/KqProductRuleSetController.cs
  33. 8 8
      Areas/Admin/Controllers/MainServer/MachineRenewController.cs
  34. 234 41
      Areas/Admin/Controllers/MainServer/MerchantDepositReturnsController.cs
  35. 26 2
      Areas/Admin/Controllers/MainServer/MsgAlertController.cs
  36. 4 4
      Areas/Admin/Controllers/MainServer/OpenRewardDetailController.cs
  37. 3 3
      Areas/Admin/Controllers/MainServer/OpenSnSnapshotController.cs
  38. 4 4
      Areas/Admin/Controllers/MainServer/OrdersController.cs
  39. 4 4
      Areas/Admin/Controllers/MainServer/PosMachinesController.cs
  40. 5 5
      Areas/Admin/Controllers/MainServer/PosMachinesTwoChangeController.cs
  41. 279 16
      Areas/Admin/Controllers/MainServer/PosMachinesTwoController.cs
  42. 6 6
      Areas/Admin/Controllers/MainServer/PosMerchantInfoController.cs
  43. 160 9
      Areas/Admin/Controllers/MainServer/PosMerchantInfoListController.cs
  44. 1 1
      Areas/Admin/Controllers/MainServer/ProfitRewardRecordController.cs
  45. 432 0
      Areas/Admin/Controllers/MainServer/RecycMachineOrderController.cs
  46. 363 0
      Areas/Admin/Controllers/MainServer/RecycMachineOrderPosController.cs
  47. 5 4
      Areas/Admin/Controllers/MainServer/StoreChangeHistoryController.cs
  48. 117 8
      Areas/Admin/Controllers/MainServer/StoreHouseController.cs
  49. 16 4
      Areas/Admin/Controllers/MainServer/StoreMachineApplyController.cs
  50. 2 0
      Areas/Admin/Controllers/MainServer/StoreStockChangeController.cs
  51. 4 4
      Areas/Admin/Controllers/MainServer/StoreSwapSnController.cs
  52. 4 1
      Areas/Admin/Controllers/MainServer/SysRechargeRecordController.cs
  53. 858 84
      Areas/Admin/Controllers/MainServer/SysToolsController.cs
  54. 643 0
      Areas/Admin/Controllers/MainServer/ToChargeBackRecordController.cs
  55. 373 0
      Areas/Admin/Controllers/MainServer/ToChargeBackRecordSubController.cs
  56. 420 0
      Areas/Admin/Controllers/MainServer/ToChargeByStageController.cs
  57. 11 6
      Areas/Admin/Controllers/MainServer/UserAccountRecordController.cs
  58. 41 5
      Areas/Admin/Controllers/MainServer/UserCashRecordController.cs
  59. 2 2
      Areas/Admin/Controllers/MainServer/UserMallLargeSnController.cs
  60. 8 8
      Areas/Admin/Controllers/MainServer/UserSnActInfoController.cs
  61. 4 4
      Areas/Admin/Controllers/MainServer/UserSnDelayChangeController.cs
  62. 4 4
      Areas/Admin/Controllers/MainServer/UserStoreChangeController.cs
  63. 4 4
      Areas/Admin/Controllers/MainServer/UserSwapDetailController.cs
  64. 162 0
      Areas/Admin/Controllers/MainServer/UsersController.cs
  65. 44 53
      Areas/Admin/Controllers/OperateServer/StoreHouseOperateController.cs
  66. 12 0
      Areas/Admin/Controllers/OperateServer/StoreMachineApplyOperateController.cs
  67. 12 0
      Areas/Admin/Controllers/OperateServer/StoreMachineApplysOperateController.cs
  68. 0 1
      Areas/Admin/Controllers/OperateServer/UserAccountRecordOperateController.cs
  69. 2 0
      Areas/Admin/Controllers/OperateServer/UserCashRecordOperateController.cs
  70. 1 0
      Areas/Admin/Controllers/SpServer/SpTradeRecordController.cs
  71. 1 0
      Areas/Admin/Controllers/SpServer/TradeFluxRecordController.cs
  72. BIN
      Areas/Admin/Views/.DS_Store
  73. BIN
      Areas/Admin/Views/BsServer/.DS_Store
  74. 8 2
      Areas/Admin/Views/BsServer/Advertisment/Add.cshtml
  75. 8 2
      Areas/Admin/Views/BsServer/Advertisment/Edit.cshtml
  76. 2 2
      Areas/Admin/Views/BsServer/Col/Add.cshtml
  77. 1 1
      Areas/Admin/Views/BsServer/Col/Edit.cshtml
  78. 1 2
      Areas/Admin/Views/BsServer/MsgPersonal/Add.cshtml
  79. 138 130
      Areas/Admin/Views/BsServer/MsgPlacard/Add.cshtml
  80. BIN
      Areas/Admin/Views/CashServer/.DS_Store
  81. BIN
      Areas/Admin/Views/MainServer/.DS_Store
  82. 2 2
      Areas/Admin/Views/MainServer/ActiveReward/Index.cshtml
  83. 2 2
      Areas/Admin/Views/MainServer/KqProductRuleSet/Add.cshtml
  84. 2 2
      Areas/Admin/Views/MainServer/KqProductRuleSet/Edit.cshtml
  85. 2 2
      Areas/Admin/Views/MainServer/Leaders/ChangeLeaderAmount.cshtml
  86. 4 4
      Areas/Admin/Views/MainServer/MachineRenew/Add.cshtml
  87. 2 2
      Areas/Admin/Views/MainServer/MachineRenew/Index.cshtml
  88. 26 6
      Areas/Admin/Views/MainServer/MerchantDepositReturns/Index.cshtml
  89. 31 10
      Areas/Admin/Views/MainServer/MerchantDepositReturns/Indexs.cshtml
  90. 24 9
      Areas/Admin/Views/MainServer/MsgAlert/Add.cshtml
  91. 26 11
      Areas/Admin/Views/MainServer/MsgAlert/Edit.cshtml
  92. 1 1
      Areas/Admin/Views/MainServer/OpenSnSnapshot/Index.cshtml
  93. 2 2
      Areas/Admin/Views/MainServer/PosMachinesTwo/Edit.cshtml
  94. 140 0
      Areas/Admin/Views/MainServer/PosMachinesTwo/Indexs.cshtml
  95. 2 2
      Areas/Admin/Views/MainServer/PosMachinesTwoChange/Edit.cshtml
  96. 7 0
      Areas/Admin/Views/MainServer/PosMerchantInfoList/Index.cshtml
  97. 105 0
      Areas/Admin/Views/MainServer/PosMerchantInfoList/Indexrg.cshtml
  98. 251 0
      Areas/Admin/Views/MainServer/RecycMachineOrder/Add.cshtml
  99. 256 0
      Areas/Admin/Views/MainServer/RecycMachineOrder/Edit.cshtml
  100. 193 0
      Areas/Admin/Views/MainServer/RecycMachineOrder/Index.cshtml

+ 16 - 16
.vscode/maindb.code-snippets

@@ -2225,7 +2225,7 @@
 "	DateTime PullNewStartDate = $3.PullNewStartDate; //活动开始时间",
 "	DateTime PullNewEndDate = $3.PullNewEndDate; //活动结束时间",
 "	int PullNewExtendDays = $3.PullNewExtendDays; //延长领机天数",
-"	decimal BigTotalAmount = $3.BigTotalAmount; //购买机起始价",
+"	decimal BigTotalAmount = $3.BigTotalAmount; //兑换机起始价",
 "	int BigExtendCycleDays = $3.BigExtendCycleDays; //延长循环周期天数",
 "	DateTime SubsidyStartDate = $3.SubsidyStartDate; //活动开始时间",
 "	DateTime SubsidyEndDate = $3.SubsidyEndDate; //活动结束时间",
@@ -2287,7 +2287,7 @@
 "	DateTime PullNewStartDate = $1.PullNewStartDate; //活动开始时间",
 "	DateTime PullNewEndDate = $1.PullNewEndDate; //活动结束时间",
 "	int PullNewExtendDays = $1.PullNewExtendDays; //延长领机天数",
-"	decimal BigTotalAmount = $1.BigTotalAmount; //购买机起始价",
+"	decimal BigTotalAmount = $1.BigTotalAmount; //兑换机起始价",
 "	int BigExtendCycleDays = $1.BigExtendCycleDays; //延长循环周期天数",
 "	DateTime SubsidyStartDate = $1.SubsidyStartDate; //活动开始时间",
 "	DateTime SubsidyEndDate = $1.SubsidyEndDate; //活动结束时间",
@@ -2343,7 +2343,7 @@
 "	$1.PullNewStartDate = $28; //活动开始时间",
 "	$1.PullNewEndDate = $29; //活动结束时间",
 "	$1.PullNewExtendDays = $30; //延长领机天数",
-"	$1.BigTotalAmount = $31; //购买机起始价",
+"	$1.BigTotalAmount = $31; //兑换机起始价",
 "	$1.BigExtendCycleDays = $32; //延长循环周期天数",
 "	$1.SubsidyStartDate = $33; //活动开始时间",
 "	$1.SubsidyEndDate = $34; //活动结束时间",
@@ -2406,7 +2406,7 @@
 "	PullNewStartDate = $27, //活动开始时间",
 "	PullNewEndDate = $28, //活动结束时间",
 "	PullNewExtendDays = $29, //延长领机天数",
-"	BigTotalAmount = $30, //购买机起始价",
+"	BigTotalAmount = $30, //兑换机起始价",
 "	BigExtendCycleDays = $31, //延长循环周期天数",
 "	SubsidyStartDate = $32, //活动开始时间",
 "	SubsidyEndDate = $33, //活动结束时间",
@@ -4914,8 +4914,8 @@
 "	string RewardDesc = $3.RewardDesc; //奖励描述",
 "	string Remark = $3.Remark; //备注",
 "	string OpenDetailRec = $3.OpenDetailRec; //明细单号",
-"	int BuySnNum = $3.BuySnNum; //购买机数量",
-"	int StdBuySnNum = $3.StdBuySnNum; //标准购买机数量",
+"	int BuySnNum = $3.BuySnNum; //兑换机数量",
+"	int StdBuySnNum = $3.StdBuySnNum; //标准兑换机数量",
 "	decimal RewardAmount = $3.RewardAmount; //奖励金额",
 "	string FailReason = $3.FailReason; //失败原因",
 "	string UserNav = $3.UserNav; //创客路径",
@@ -4958,8 +4958,8 @@
 "	string RewardDesc = $1.RewardDesc; //奖励描述",
 "	string Remark = $1.Remark; //备注",
 "	string OpenDetailRec = $1.OpenDetailRec; //明细单号",
-"	int BuySnNum = $1.BuySnNum; //购买机数量",
-"	int StdBuySnNum = $1.StdBuySnNum; //标准购买机数量",
+"	int BuySnNum = $1.BuySnNum; //兑换机数量",
+"	int StdBuySnNum = $1.StdBuySnNum; //标准兑换机数量",
 "	decimal RewardAmount = $1.RewardAmount; //奖励金额",
 "	string FailReason = $1.FailReason; //失败原因",
 "	string UserNav = $1.UserNav; //创客路径",
@@ -4996,8 +4996,8 @@
 "	$1.RewardDesc = $22; //奖励描述",
 "	$1.Remark = $23; //备注",
 "	$1.OpenDetailRec = $24; //明细单号",
-"	$1.BuySnNum = $25; //购买机数量",
-"	$1.StdBuySnNum = $26; //标准购买机数量",
+"	$1.BuySnNum = $25; //兑换机数量",
+"	$1.StdBuySnNum = $26; //标准兑换机数量",
 "	$1.RewardAmount = $27; //奖励金额",
 "	$1.FailReason = $28; //失败原因",
 "	$1.UserNav = $29; //创客路径",
@@ -5041,8 +5041,8 @@
 "	RewardDesc = $21, //奖励描述",
 "	Remark = $22, //备注",
 "	OpenDetailRec = $23, //明细单号",
-"	BuySnNum = $24, //购买机数量",
-"	StdBuySnNum = $25, //标准购买机数量",
+"	BuySnNum = $24, //兑换机数量",
+"	StdBuySnNum = $25, //标准兑换机数量",
 "	RewardAmount = $26, //奖励金额",
 "	FailReason = $27, //失败原因",
 "	UserNav = $28, //创客路径",
@@ -15269,7 +15269,7 @@
 "	decimal DebitNotCapTradeAmt = $3.DebitNotCapTradeAmt; //商户非封顶借记卡交易总金额",
 "	decimal DebitCapTradeAmt = $3.DebitCapTradeAmt; //商户借记卡封顶交易总额",
 "	int DebitCapTradeNum = $3.DebitCapTradeNum; //商户借记卡封顶交易总笔数",
-"	int MallPosOrderStatus = $3.MallPosOrderStatus; //商城购买机具状态",
+"	int MallPosOrderStatus = $3.MallPosOrderStatus; //商城兑换机具状态",
 "	int ActiveBuddyMerStatus = $3.ActiveBuddyMerStatus; //激活创客同名商户",
 "	string Remark = $3.Remark; //备注",
 "}"
@@ -15296,7 +15296,7 @@
 "	decimal DebitNotCapTradeAmt = $1.DebitNotCapTradeAmt; //商户非封顶借记卡交易总金额",
 "	decimal DebitCapTradeAmt = $1.DebitCapTradeAmt; //商户借记卡封顶交易总额",
 "	int DebitCapTradeNum = $1.DebitCapTradeNum; //商户借记卡封顶交易总笔数",
-"	int MallPosOrderStatus = $1.MallPosOrderStatus; //商城购买机具状态",
+"	int MallPosOrderStatus = $1.MallPosOrderStatus; //商城兑换机具状态",
 "	int ActiveBuddyMerStatus = $1.ActiveBuddyMerStatus; //激活创客同名商户",
 "	string Remark = $1.Remark; //备注",
 "}"
@@ -15317,7 +15317,7 @@
 "	$1.DebitNotCapTradeAmt = $8; //商户非封顶借记卡交易总金额",
 "	$1.DebitCapTradeAmt = $9; //商户借记卡封顶交易总额",
 "	$1.DebitCapTradeNum = $10; //商户借记卡封顶交易总笔数",
-"	$1.MallPosOrderStatus = $11; //商城购买机具状态",
+"	$1.MallPosOrderStatus = $11; //商城兑换机具状态",
 "	$1.ActiveBuddyMerStatus = $12; //激活创客同名商户",
 "	$1.Remark = $13; //备注",
 "}"
@@ -15345,7 +15345,7 @@
 "	DebitNotCapTradeAmt = $7, //商户非封顶借记卡交易总金额",
 "	DebitCapTradeAmt = $8, //商户借记卡封顶交易总额",
 "	DebitCapTradeNum = $9, //商户借记卡封顶交易总笔数",
-"	MallPosOrderStatus = $10, //商城购买机具状态",
+"	MallPosOrderStatus = $10, //商城兑换机具状态",
 "	ActiveBuddyMerStatus = $11, //激活创客同名商户",
 "	Remark = $12, //备注",
 "});"

BIN
AppStart/.DS_Store


BIN
AppStart/Alipay/.DS_Store


BIN
AppStart/Aliyun/.DS_Store


BIN
AppStart/Aliyun/Push/.DS_Store


BIN
AppStart/ApiFunction/.DS_Store


BIN
AppStart/DictionaryClass/.DS_Store


+ 47 - 25
AppStart/ExcelHelper.cs

@@ -778,6 +778,7 @@ namespace MySystem
                                     {
                                         Size = list.Rows.Count - DoCount;
                                     }
+                                    List<string> opData = new List<string>();
                                     for (int i = DoCount; i < DoCount + Size; i++)
                                     {
                                         DataRow dr = list.Rows[i];
@@ -821,6 +822,10 @@ namespace MySystem
                                                     if (machine.Id > 0)
                                                     {
                                                         function.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(machine), "机具回仓库日志");
+                                                        if(!opData.Contains(machine.BuyUserId + ":" + machine.BrandId))
+                                                        {
+                                                            opData.Add(machine.BuyUserId + ":" + machine.BrandId);
+                                                        }
                                                         machine.StoreId = tostorefor.StoreId;
                                                         machine.BuyUserId = 0;
                                                         machine.UserId = 0;
@@ -839,6 +844,7 @@ namespace MySystem
                                                         machine.IsPurchase = 0;
                                                         machine.LeaderUserId = 0;
                                                         machine.PreUserId = 0;
+                                                        PublicFunction.ClearPosHistory(db, SnNo); //清除机具历史记录
                                                         db.SaveChanges();
                                                         if (!storeData.ContainsKey(storefor.StoreId + "_" + BrandId))
                                                         {
@@ -954,6 +960,11 @@ namespace MySystem
                                         db.SaveChanges();
                                     }
                                     db.SaveChanges();
+                                    foreach(string sub in opData)
+                                    {
+                                        string[] datalist = sub.Split(":");
+                                        PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+                                    }
                                     tran.Commit();
                                     RedisDbconn.Instance.Set("CheckImport:" + checkKey, "success|" + SuccessCount);
                                     RedisDbconn.Instance.SetExpire("CheckImport:" + checkKey, 60000);
@@ -1140,7 +1151,7 @@ namespace MySystem
                                                 {
                                                     UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == edit.UserId);
                                                     if (account != null)
-                                                    {
+                                                    {                                                        
                                                         account.QueryCount = 1;
                                                         decimal TradeAmount = edit.TradeAmount;
                                                         decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
@@ -1206,31 +1217,38 @@ namespace MySystem
                                                     if (account != null)
                                                     {
                                                         decimal TradeAmount = edit.TradeAmount;
-                                                        decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
-                                                        decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
-                                                        decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-                                                        account.BalanceAmount += TradeAmount;
-                                                        account.FreezeAmount -= TradeAmount;
-                                                        decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
-                                                        decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
-                                                        decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
-                                                        db.UserAccountRecord.Add(new UserAccountRecord()
+                                                        if(account.FreezeAmount < TradeAmount)
                                                         {
-                                                            CreateDate = DateTime.Now,
-                                                            UpdateDate = DateTime.Now,
-                                                            UserId = edit.UserId, //创客
-                                                            ChangeType = 6, //变动类型
-                                                            ProductType = 99, //产品类型
-                                                            ChangeAmount = TradeAmount, //变更金额
-                                                            BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
-                                                            AfterTotalAmount = AfterTotalAmount, //变更后总金额
-                                                            BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
-                                                            AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
-                                                            BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
-                                                            AfterBalanceAmount = AfterBalanceAmount, //变更后余额
-                                                        });
-                                                        db.SaveChanges();
-                                                        RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
+                                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "提现记录单号为" + CashOrderNo + "的创客冻结金额异常");
+                                                        }
+                                                        else
+                                                        {
+                                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                            account.BalanceAmount += TradeAmount;
+                                                            account.FreezeAmount -= TradeAmount;
+                                                            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                                                            decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                                                            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                                                            db.UserAccountRecord.Add(new UserAccountRecord()
+                                                            {
+                                                                CreateDate = DateTime.Now,
+                                                                UpdateDate = DateTime.Now,
+                                                                UserId = edit.UserId, //创客
+                                                                ChangeType = 6, //变动类型
+                                                                ProductType = 99, //产品类型
+                                                                ChangeAmount = TradeAmount, //变更金额
+                                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                            });
+                                                            db.SaveChanges();
+                                                            RedisDbconn.Instance.Set("UserAccount:" + edit.UserId, account);
+                                                        }
                                                     }
                                                 }
                                                 db.SaveChanges();
@@ -1240,6 +1258,10 @@ namespace MySystem
                                             }
 
                                         }
+                                        else
+                                        {
+                                            RedisDbconn.Instance.AddList("ErrList" + checkKey, "提现记录单号为" + CashOrderNo + "不存在或者金额不符");
+                                        }
                                     }
                                     DoCount += Size;
 

+ 124 - 0
AppStart/Helper/InstallmentDeductionService.cs

@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 分期扣款(每月20号执行)
+    /// </summary>
+    public class InstallmentDeductionService
+    {
+        public readonly static InstallmentDeductionService Instance = new InstallmentDeductionService();
+        private InstallmentDeductionService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                // if (DateTime.Now.Day == 20 && DateTime.Now.Hour < 12)
+                if (DateTime.Now.Hour < 20)
+                {
+                    try
+                    {
+                        string check = function.ReadInstance("/InstallmentDeduction/check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            WebCMSEntities db = new WebCMSEntities();
+                            var startdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-20 00:00:00"));
+                            var enddate = startdate.AddDays(1);
+                            // var info = db.ToChargeBackRecordSub.Where(m => m.Status == 0 && m.StartDate >= startdate && m.StartDate < enddate).ToList();//分期扣款记录明细
+                            var info = db.ToChargeByStage.Where(m => m.Status == 0).ToList();//分期扣款记录
+                            foreach (var item in info)
+                            {
+                                var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub();
+                                if (toChargeBackRecordSub.Id > 0)
+                                {
+                                    var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId);
+                                    if (userAccount == null)
+                                    {
+                                        userAccount = db.UserAccount.Add(new UserAccount()
+                                        {
+                                            Id = item.UserId,
+                                            UserId = item.UserId,
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    toChargeBackRecordSub.Status = 2;
+                                    userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款
+                                    var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        Sort = toChargeBackRecordSub.Id,
+                                        UserId = item.UserId,
+                                        ChargeAmount = toChargeBackRecordSub.ChargeAmount,
+                                        ChargeType = 2,//分期预扣款
+                                        Remark = toChargeBackRecordSub.Remark,
+
+                                    }).Entity;
+                                }
+
+                                // //只能存在一笔分期扣款记录(先前有的但是余额不够未扣除的则不添加新的)
+                                // var checks = db.ToChargeBackRecord.Any(m => m.Sort > 0 && (m.Status == 0 || m.Status == 3) && m.ChargeType == 2 && m.UserId == item.UserId);
+                                // if (!checks)
+                                // {
+                                //     string checkAdd = RedisDbconn.Instance.Get<string>("InstallmentDeductionAddRecord:" + item.UserId);
+                                //     if (string.IsNullOrEmpty(check))
+                                //     {
+                                //         var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub();
+                                //         if (toChargeBackRecordSub.Id > 0)
+                                //         {
+                                //             var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId);
+                                //             if (userAccount == null)
+                                //             {
+                                //                 userAccount = db.UserAccount.Add(new UserAccount()
+                                //                 {
+                                //                     Id = item.UserId,
+                                //                     UserId = item.UserId,
+                                //                 }).Entity;
+                                //                 db.SaveChanges();
+                                //             }
+                                //             userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款
+                                //             var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                                //             {
+                                //                 CreateDate = DateTime.Now,
+                                //                 Sort = toChargeBackRecordSub.Id,
+                                //                 UserId = item.UserId,
+                                //                 ChargeAmount = toChargeBackRecordSub.ChargeAmount,
+                                //                 ChargeType = 2,//分期预扣款
+                                //                 Remark = "分期预扣款",
+
+                                //             }).Entity;
+                                //         }
+                                //     }
+                                //     RedisDbconn.Instance.Set("InstallmentDeductionAddRecord:" + item.UserId, "wait");
+                                //     RedisDbconn.Instance.SetExpire("InstallmentDeductionAddRecord:" + item.UserId, 300);
+                                // }
+                            }
+                            db.SaveChanges();
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "执行分期扣费异常");
+                    }
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 2 - 7
AppStart/Helper/SycnHelpProfitService.cs

@@ -76,7 +76,7 @@ namespace MySystem
             OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
             
             DataTable dt = OtherMySqlConn.dtable("select UserId,RewardType,sum(CreditRewardAmount),sum(CreditTradeAmt) from HelpProfitReward where Status=1 and TradeMonth='" + month + "' GROUP BY UserId,RewardType");
-            function.WriteLog("数量:" + dt.Rows.Count, "同步助力宝分润数据");
+            function.WriteLog("数量:" + dt.Rows.Count, "同步助利宝分润");
             int index = 0;
             foreach (DataRow dr in dt.Rows)
             {
@@ -133,14 +133,9 @@ namespace MySystem
                     function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步助利宝分润异常");
                     tran.Rollback();
                 }
-                if(op)
-                {
-                    RedisDbconn.Instance.AddList("UserMonthFeeQueue", UserId.ToString());
-                }
-                function.WriteLog(index.ToString(), "同步补贴数据");
+                function.WriteLog(index.ToString(), "同步助利宝分润");
             }
             OtherMySqlConn.dtable("update HelpProfitReward set Status=2 where Status=1 and TradeMonth='" + month + "'");
-                
             db.Dispose();
         }
 

+ 94 - 9
AppStart/Helper/SycnProfitServiceV2.cs

@@ -25,7 +25,7 @@ namespace MySystem
         {
             while (true)
             {
-                string content = RedisDbconn.Instance.RPop<string>("SycnProfitQueue3");
+                string content = RedisDbconn.Instance.RPop<string>("SycnProfitQueue2");
                 if (!string.IsNullOrEmpty(content))
                 {
                     try
@@ -40,11 +40,16 @@ namespace MySystem
                         {
                             DoTradeProfit(BrandId, date, SysUserName);
                             DoSubsidyProfit(BrandId, date);
+                            // RedisDbconn.Instance.AddList("PosExpiredRingQueue", "1");
                         }
                         else if (OpType == 1)
                         {
                             DoTradeProfit2(BrandId, date, SysUserName);
                             DoSubsidyProfit2(BrandId, date);
+                            if(BrandId == 1)
+                            {
+                                DoUserServiceFee();
+                            }
                         }
                         function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "同步分润数据");
                     }
@@ -133,11 +138,11 @@ namespace MySystem
                             decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
                             decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
                             decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-                            account.BalanceAmount += ProfitAmount;
-                            account.TotalAmount += ProfitAmount;
-                            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                            // account.BalanceAmount += ProfitAmount;
+                            // account.TotalAmount += ProfitAmount;
+                            decimal AfterTotalAmount = account.TotalAmount + ProfitAmount; //变更后总金额
                             decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
-                            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                            decimal AfterBalanceAmount = account.BalanceAmount + ProfitAmount; //变更后余额
                             UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
                             {
                                 CreateDate = DateTime.Now,
@@ -154,6 +159,17 @@ namespace MySystem
                                 AfterBalanceAmount = AfterBalanceAmount, //变更后余额
                                 Remark = DirectFlag == 1 ? "直拓商户分润" : "品牌推广服务费",
                             }).Entity;
+                            UserProfit profit = db.UserProfit.FirstOrDefault(m => m.Id == UserId);
+                            if (profit == null)
+                            {
+                                profit = db.UserProfit.Add(new UserProfit()
+                                {
+                                    Id = UserId,
+                                    UserId = UserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            profit.ProfitRate += ProfitAmount;
                             db.SaveChanges();
                             if(!UserIds.Contains(UserId))
                             {
@@ -260,11 +276,11 @@ namespace MySystem
                             decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
                             decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
                             decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-                            account.BalanceAmount += ProfitMoney;
-                            account.TotalAmount += ProfitMoney;
-                            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                            // account.BalanceAmount += ProfitMoney;
+                            // account.TotalAmount += ProfitMoney;
+                            decimal AfterTotalAmount = account.TotalAmount + ProfitMoney; //变更后总金额
                             decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
-                            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                            decimal AfterBalanceAmount = account.BalanceAmount + ProfitMoney; //变更后余额
                             UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
                             {
                                 CreateDate = DateTime.Now,
@@ -281,6 +297,17 @@ namespace MySystem
                                 AfterBalanceAmount = AfterBalanceAmount, //变更后余额
                                 Remark = "直拓商户补贴",
                             }).Entity;
+                            UserProfit profit = db.UserProfit.FirstOrDefault(m => m.Id == UserId);
+                            if (profit == null)
+                            {
+                                profit = db.UserProfit.Add(new UserProfit()
+                                {
+                                    Id = UserId,
+                                    UserId = UserId,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            profit.ProfitRate += ProfitMoney;
                             db.SaveChanges();
                             tran.Commit();
                         }
@@ -386,7 +413,55 @@ namespace MySystem
 
         #endregion
 
+        #region 扣创客服务费
 
+        private void DoUserServiceFee()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            int startId = 0;
+            bool op = true;
+            while(op)
+            {
+                var list = db.UserProfit.Select(m => new { m.Id, m.ProfitRate }).Where(m => m.Id > startId).OrderBy(m => m.Id).Take(50).ToList();
+                if(list.Count > 0)
+                {
+                    foreach(var item in list)
+                    {
+                        UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == item.Id);
+                        if (account == null)
+                        {
+                            account = db.UserAccount.Add(new UserAccount()
+                            {
+                                Id = item.Id,
+                                UserId = item.Id,
+                            }).Entity;
+                            db.SaveChanges();
+                        }
+                        account.BalanceAmount += item.ProfitRate;
+                        account.TotalAmount += item.ProfitRate;
+                        db.SaveChanges();
+                        if(CheckUser(db, item.Id))
+                        {
+                            RedisDbconn.Instance.AddList("UserMonthFeeQueue", item.Id.ToString());
+                        }
+                        else
+                        {
+                            RedisDbconn.Instance.AddList("PosExpiredPayQueue", item.Id.ToString());
+                        }
+                        startId = item.Id;
+                    }
+                    list.Clear();
+                    Thread.Sleep(100);
+                }
+                else
+                {
+                    op = false;
+                }
+            }
+            db.Dispose();
+        }
+
+        #endregion
 
 
 
@@ -513,5 +588,15 @@ namespace MySystem
             }
             db.Dispose();
         }
+
+
+        #region
+        private bool CheckUser(WebCMSEntities db, int Id)
+        {
+            DateTime ExpireDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00").AddDays(-90); //创客认证超过90天比对时间
+            //超过90天创客判断
+            return db.Users.Any(m => m.Id == Id && m.AuthFlag == 1 && m.AuthDate < ExpireDate);
+        }
+        #endregion
     }
 }

+ 441 - 0
AppStart/Helper/SycnProfitServiceV3.cs

@@ -0,0 +1,441 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    public class SycnProfitServiceV3
+    {
+        public readonly static SycnProfitServiceV3 Instance = new SycnProfitServiceV3();
+        private SycnProfitServiceV3()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("SycnProfitQueue2");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "同步分润数据");
+                        string[] data = content.Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                        int BrandId = int.Parse(data[0]);
+                        string date = data[1];
+                        int OpType = int.Parse(data[2]);
+                        string SysUserName = data[3];
+                        if (OpType == 0)
+                        {
+                            DoTradeProfit(BrandId, date, SysUserName);
+                            DoSubsidyProfit(BrandId, date);
+                        }
+                        else if (OpType == 1)
+                        {
+                            DoTradeProfit2(BrandId, date, SysUserName);
+                            DoSubsidyProfit2(BrandId, date);
+                            if(BrandId == 1)
+                            {
+                                DoUserProfit(date);
+                                DoUserServiceFee();
+                                //扣过期机具费
+                                // RedisDbconn.Instance.AddList("DoChargeAmountQueue", "0");
+                            }
+                        }
+                        function.WriteLog(DateTime.Now.ToString() + "\r\n\r\n", "同步分润数据");
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "同步分润数据异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(60000);
+                }
+            }
+        }
+
+        private void DoTradeProfit(int BrandId, string date, string SysUserName)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            string StartId = function.ReadInstance("/PublicParams/ProfitRewardRecordId" + date + ".txt");
+            if(string.IsNullOrEmpty(StartId))
+            {
+                StartId = "0";
+            }
+            OtherMySqlConn.op("insert into ProfitRecord (CreateDate,CreateMan,SeoTitle,ParentNav,BrandId,UserId,DirectFlag,ProfitAmount) select now(),'root','" + date + "',(select ParentNav from Users where Id=p.UserId)," + BrandId + ",UserId,ProfitType,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord p where Id>=" + StartId + " and CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "' group by UserId,ProfitType order by UserId");
+            DataTable dt = OtherMySqlConn.dtable("select UserId,sum(CreditTradeProfit+DebitNonTradeCapProfit+DebitTradeCapProfit) from ProfitRewardRecord where Id>=" + StartId + " and CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "' group by UserId");
+            function.WriteLog("分润:" + BrandId + ":" + dt.Rows.Count, "同步分润数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["UserId"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[1].ToString());
+                try
+                {
+                    string content = UserId + "|" + BrandId + "|" + ProfitMoney + "|" + index;
+                    RedisDbconn.Instance.AddList("DoTradeProfitQueue", content);
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步到余额异常");
+                }
+                function.WriteLog(index.ToString(), "同步分润数据");
+            }
+            OtherMySqlConn.op("update ProfitRewardRecord set CheckStatus=1 where Id>=" + StartId + " and CheckStatus=0 and BrandId=" + BrandId + " and UserId>0 and TradeMonth='" + date + "'");
+
+            db.Dispose();
+            dt.Dispose();
+
+            RedisDbconn.Instance.AddList("DoTradeProfitQueue", "end");
+            SycnProfitServiceV2.Instance.StartProfit();
+        }
+        private void DoTradeProfit2(int BrandId, string date, string SysUserName)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            CustomerSqlConn.op("insert into UserAccountRecord (CreateDate,UpdateDate,UserId,ProductType,ChangeType,ChangeAmount,BeforeTotalAmount,AfterTotalAmount,BeforeFreezeAmount,AfterFreezeAmount,BeforeBalanceAmount,AfterBalanceAmount,Remark) select tb.CreateDate,tb.UpdateDate,tb.UserId,ProductType,ChangeType,ProfitAmount,a.TotalAmount BeforeTotalAmount,a.TotalAmount+ProfitAmount AfterTotalAmount,a.FreezeAmount BeforeFreezeAmount,a.FreezeAmount AfterFreezeAmount,a.BalanceAmount BeforeBalanceAmount,a.BalanceAmount+ProfitAmount AfterBalanceAmount,Remark from (select now() CreateDate,now() UpdateDate,UserId," + BrandId + " ProductType,1 ChangeType,ProfitAmount,(case when DirectFlag=1 then '直拓商户分润' else '品牌推广服务费' end) Remark from ProfitRecord where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Version=0 and UserId>0 order by Id) tb left join UserAccount a on tb.UserId=a.Id", conn);
+
+            CustomerSqlConn.op("update ProfitRecord set Version=1 where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Version=0 and UserId>0", conn);
+            db.Dispose();
+        }
+
+
+        //分润补贴
+        private void DoSubsidyProfit(int BrandId, string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            string StartId = function.ReadInstance("/PublicParams/ProfitSubsidyDetailId" + date + ".txt");
+            if(string.IsNullOrEmpty(StartId))
+            {
+                StartId = "0";
+            }
+            
+            CustomerSqlConn.op("insert into SubsidyRecord (CreateDate,SeoKeyword,SeoTitle,ParentNav,BrandId,UserId,ProfitAmount) select now(),'root','" + date + "',(select ParentNav from Users where Id=p.SubsidyUserId)," + BrandId + ",SubsidyUserId,sum(SubsidyProfitRate) from ProfitSubsidyDetail p where Id>=" + StartId + " and Status=0 and BrandId=" + BrandId + " and TradeMonth='" + date + "' GROUP BY SubsidyUserId", conn);
+
+            DataTable dt = CustomerSqlConn.dtable("select SubsidyUserId,sum(SubsidyProfitRate) from ProfitSubsidyDetail where Id>=" + StartId + " and Status=0 and BrandId=" + BrandId + " and TradeMonth='" + date + "' GROUP BY SubsidyUserId", conn);
+            function.WriteLog("补贴:" + BrandId + ":" + dt.Rows.Count, "同步补贴数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["SubsidyUserId"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[1].ToString());
+                try
+                {
+                    string content = UserId + "|" + BrandId + "|" + ProfitMoney + "|" + index;
+                    RedisDbconn.Instance.AddList("DoSubsidyProfitQueue", content);
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步到补贴异常");
+                }
+            }
+            CustomerSqlConn.op("update ProfitSubsidyDetail set Status=1 where Id>=" + StartId + " and Status=0 and BrandId=" + BrandId + " and TradeMonth='" + date + "'", conn);
+                
+            db.Dispose();
+            dt.Dispose();
+            
+            RedisDbconn.Instance.AddList("DoSubsidyProfitQueue", "end");
+            SycnProfitServiceV2.Instance.StartSubsidy();
+        }
+
+        private void DoSubsidyProfit2(int BrandId, string date)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            CustomerSqlConn.op("insert into UserAccountRecord (CreateDate,UpdateDate,UserId,ProductType,ChangeType,ChangeAmount,BeforeTotalAmount,AfterTotalAmount,BeforeFreezeAmount,AfterFreezeAmount,BeforeBalanceAmount,AfterBalanceAmount,Remark) select tb.CreateDate,tb.UpdateDate,tb.UserId,ProductType,ChangeType,ProfitAmount,a.TotalAmount BeforeTotalAmount,a.TotalAmount+ProfitAmount AfterTotalAmount,a.FreezeAmount BeforeFreezeAmount,a.FreezeAmount AfterFreezeAmount,a.BalanceAmount BeforeBalanceAmount,a.BalanceAmount+ProfitAmount AfterBalanceAmount,Remark from (select now() CreateDate,now() UpdateDate,UserId," + BrandId + " ProductType,111 ChangeType,ProfitAmount,'直拓商户补贴' Remark from SubsidyRecord where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Status=0 and UserId>0 order by Id) tb left join UserAccount a on tb.UserId=a.Id", conn);
+            
+            CustomerSqlConn.op("update SubsidyRecord set Status=1 where BrandId=" + BrandId + " and SeoTitle='" + date + "' and Status=0 and UserId>0", conn);
+
+            db.Dispose();
+        }
+
+
+        #region 助力宝分润展示
+
+        public void DoHelpProfit(string month)
+        {
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            CustomerSqlConn.dtable("update HelpProfitReward set Status=1 where Status=0 and TradeMonth='" + month + "'", conn);
+        }
+
+        #endregion
+
+        #region 助力宝分润到账
+
+        public void DoHelpProfit2(string month)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+            
+            DataTable dt = CustomerSqlConn.dtable("select UserId,RewardType,sum(CreditRewardAmount),sum(CreditTradeAmt) from HelpProfitReward where Status=1 and TradeMonth='" + month + "' GROUP BY UserId,RewardType", conn);
+            function.WriteLog("数量:" + dt.Rows.Count, "同步助力宝分润数据");
+            int index = 0;
+            foreach (DataRow dr in dt.Rows)
+            {
+                index += 1;
+                int UserId = int.Parse(dr["UserId"].ToString());
+                int RewardType = int.Parse(dr["RewardType"].ToString());
+                decimal ProfitMoney = decimal.Parse(dr[2].ToString());
+                decimal TradeAmt = decimal.Parse(dr[3].ToString());
+                var tran = db.Database.BeginTransaction();
+                try
+                {
+                    Users user = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == UserId);
+                    if (account == null)
+                    {
+                        account = db.UserAccount.Add(new UserAccount()
+                        {
+                            Id = UserId,
+                            UserId = UserId,
+                        }).Entity;
+                        db.SaveChanges();
+                    }
+                    decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                    decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                    decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                    account.BalanceAmount += ProfitMoney;
+                    account.TotalAmount += ProfitMoney;
+                    decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                    decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                    decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                    UserAccountRecord userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord()
+                    {
+                        CreateDate = DateTime.Now,
+                        UpdateDate = DateTime.Now,
+                        UserId = UserId, //创客
+                        ProductType = 101,
+                        ChangeType = RewardType, //变动类型
+                        ChangeAmount = ProfitMoney, //变更金额
+                        BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                        AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                        BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                        AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                        BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                        AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                        Remark = user.RealName.Substring(0, 1) + "**:" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "交易" + TradeAmt.ToString("f2"),
+                    }).Entity;
+                    db.SaveChanges();
+                    tran.Commit();
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + UserId + "," + ProfitMoney + "\n" + ex.ToString(), "同步助利宝分润异常");
+                    tran.Rollback();
+                }
+                function.WriteLog(index.ToString(), "同步补贴数据");
+            }
+            OtherMySqlConn.dtable("update HelpProfitReward set Status=2 where Status=1 and TradeMonth='" + month + "'");
+            
+            db.Dispose();
+        }
+
+        #endregion
+
+        #region 分润结果临时数据
+
+        private void DoUserProfit(string date)
+        {
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            CustomerSqlConn.op("delete from UserProfit;insert into UserProfit (Id,UserId,ProfitRate) select UserId,UserId,sum(ProfitAmount) from (select UserId,ProfitAmount from ProfitRecord where SeoTitle='" + date + "' and Version=1 and UserId>0 union all select UserId,ProfitAmount from SubsidyRecord where SeoTitle='" + date + "' and Status=1 and UserId>0) tb group by UserId", conn);
+        }
+        #endregion
+
+        #region 扣创客服务费
+
+        private void DoUserServiceFee()
+        {
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            CustomerSqlConn.op("insert into UserAccount (Id,UserId) select Id,Id from UserProfit where Id not in (select Id from UserAccount)", conn);
+
+            CustomerSqlConn.op("update UserAccount a set BalanceAmount=BalanceAmount+(select ProfitRate from UserProfit where Id=a.Id),TotalAmount=TotalAmount+(select ProfitRate from UserProfit where Id=a.Id) where Id in (select Id from UserProfit)", conn);
+
+            string Month = DateTime.Now.AddDays(-90).ToString("yyyy-MM");
+            
+            CustomerSqlConn.op("insert into UserAccountRecord (CreateDate,UpdateDate,UserId,ChangeType,ChangeAmount,BeforeTotalAmount,AfterTotalAmount,BeforeFreezeAmount,AfterFreezeAmount,BeforeBalanceAmount,AfterBalanceAmount) select now(),now(),Id,125,BalanceAmount,TotalAmount BeforeTotalAmount,TotalAmount AfterTotalAmount,FreezeAmount,FreezeAmount,BalanceAmount BeforeBalanceAmount,BalanceAmount-BalanceAmount AfterBalanceAmount from UserAccount where Id in (select Id from Users where AuthFlag=1 and AuthDate<'" + Month + "-01 00:00:00') and BalanceAmount>0 and BalanceAmount<10", conn);
+
+            CustomerSqlConn.op("insert into UserAccountRecord (CreateDate,UpdateDate,UserId,ChangeType,ChangeAmount,BeforeTotalAmount,AfterTotalAmount,BeforeFreezeAmount,AfterFreezeAmount,BeforeBalanceAmount,AfterBalanceAmount) select now(),now(),Id,125,10,TotalAmount BeforeTotalAmount,TotalAmount AfterTotalAmount,FreezeAmount,FreezeAmount,BalanceAmount BeforeBalanceAmount,BalanceAmount-10 AfterBalanceAmount from UserAccount where Id in (select Id from Users where AuthFlag=1 and AuthDate<'" + Month + "-01 00:00:00') and BalanceAmount>=10;", conn);
+
+            CustomerSqlConn.op("update UserAccount a set BalanceAmount=0 where Id in (select Id from Users where AuthFlag=1 and AuthDate<'" + Month + "-01 00:00:00') and BalanceAmount>0 and BalanceAmount<10", conn);
+
+            CustomerSqlConn.op("update UserAccount a set BalanceAmount=BalanceAmount-10 where Id in (select Id from Users where AuthFlag=1 and AuthDate<'" + Month + "-01 00:00:00') and BalanceAmount>=10", conn);
+        }
+
+        #endregion
+        
+        #region 扣过期机具费
+
+        private void DoExpiredPosFee()
+        {
+            string conn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+
+            string checck = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00:00").AddDays(-60).ToString("yyyy-MM-dd HH:mm:ss");
+            
+            DataTable dt = CustomerSqlConn.dtable("select DISTINCT BuyUserId from PosMachinesTwo where RecycEndDate<'" + checck + "' and Status>-1 and BindingState=0 and ScanQrTrade<999", conn);
+            foreach(DataRow dr in dt.Rows)
+            {
+                RedisDbconn.Instance.AddList("PosExpiredPayQueue", dr["BuyUserId"].ToString());
+            }
+        }
+
+        #endregion
+
+
+
+
+
+
+
+
+
+        public void StartProfit()
+        {
+            Thread th = new Thread(StartProfitDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartProfitDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            bool op = true;
+            while (op)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoTradeProfitQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    if(content == "end")
+                    {
+                        op = false;
+                    }
+                    else
+                    {
+                        try
+                        {
+                            string[] data = content.Split('|');
+                            int UserId = int.Parse(data[0]);
+                            int BrandId = int.Parse(data[1]);
+                            decimal ProfitMoney = decimal.Parse(data[2]);
+                            int index = int.Parse(data[3]);
+                            
+                            string IdBrand = UserId + "_" + BrandId;
+                            UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (MachineData == null)
+                            {
+                                MachineData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            MachineData.TradeProfit += ProfitMoney;
+                            db.SaveChanges();
+
+                            function.WriteLog(index.ToString() + "--" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "同步分润队列数据");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "同步分润队列数据异常");
+                        }
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(1000);
+                }
+            }
+            db.Dispose();
+        }
+
+        public void StartSubsidy()
+        {
+            Thread th = new Thread(StartSubsidyDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartSubsidyDo()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            bool op = true;
+            while (op)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoSubsidyProfitQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    if(content == "end")
+                    {
+                        op = false;
+                    }
+                    else
+                    {
+                        try
+                        {
+                            string[] data = content.Split('|');
+                            int UserId = int.Parse(data[0]);
+                            int BrandId = int.Parse(data[1]);
+                            decimal ProfitMoney = decimal.Parse(data[2]);
+                            int index = int.Parse(data[3]);
+
+                            string IdBrand = UserId + "_" + BrandId;
+                            UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                            if (MachineData == null)
+                            {
+                                MachineData = db.UserMachineData.Add(new UserMachineData()
+                                {
+                                    IdBrand = IdBrand,
+                                }).Entity;
+                                db.SaveChanges();
+                            }
+                            MachineData.OtherProfit += ProfitMoney;
+                            db.SaveChanges();
+
+                            function.WriteLog(index.ToString() + "--" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), "同步补贴队列数据");
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "同步补贴队列数据异常");
+                        }
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(1000);
+                }
+            }
+            db.Dispose();
+        }
+
+
+        #region
+        private bool CheckUser(WebCMSEntities db, int Id)
+        {
+            DateTime ExpireDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00").AddDays(-90); //创客认证超过90天比对时间
+            //超过90天创客判断
+            return db.Users.Any(m => m.Id == Id && m.AuthFlag == 1 && m.AuthDate < ExpireDate);
+        }
+        #endregion
+    }
+}

+ 75 - 0
AppStart/Helper/TimeOutPosChargeReturnService.cs

@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 过期兑换机具循环截止时间超过15天激活扣费退还
+    /// </summary>
+    public class TimeOutPosChargeReturnService
+    {
+        public readonly static TimeOutPosChargeReturnService Instance = new TimeOutPosChargeReturnService();
+        private TimeOutPosChargeReturnService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                if (DateTime.Now.Hour < 18)
+                {
+                    try
+                    {
+                        string check = function.ReadInstance("/TimeOutPosChargeReturn/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/TimeOutPosChargeReturn/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            WebCMSEntities db = new WebCMSEntities();
+                            DataTable dt = CustomerSqlConn.dtable("SELECT a.Id Id FROM ToChargeBackRecord a LEFT JOIN PosMachinesTwo b ON a.Remark=b.PosSn WHERE a.`Status`=1 AND b.PosSnType=0  AND b.BindingState=1 AND b.ActivationState=1", MysqlConn.connstr);//循环过期超过15天激活机具退费创客
+                            foreach (DataRow item in dt.Rows)
+                            {
+                                int Id = int.Parse(item["Id"].ToString());
+                                var toChargeBackRecord = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == Id && m.Status == 1) ?? new ToChargeBackRecord();
+                                if (toChargeBackRecord.Id > 0)
+                                {
+                                    var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == toChargeBackRecord.UserId) ?? new UserAccount();
+                                    var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        UserId = toChargeBackRecord.UserId,
+                                        BeforeBalanceAmount = userAccount.BalanceAmount,
+                                        AfterBalanceAmount = userAccount.BalanceAmount + toChargeBackRecord.ChargeAmount,
+                                        ChangeAmount = toChargeBackRecord.ChargeAmount,
+                                        ChangeType = 126,//过期兑换机具超过15天激活扣费退还
+                                        Remark = "机具货款退还",
+
+                                    }).Entity;
+                                    toChargeBackRecord.Status = 2;//过期兑换机具循环截止时间超过15天激活扣费退还标识
+                                    userAccount.BalanceAmount += toChargeBackRecord.ChargeAmount;
+                                    db.SaveChanges();
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "过期兑换机具超过15天激活扣费退还");
+                    }
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 207 - 0
AppStart/Helper/TimeOutPosChargeService.cs

@@ -0,0 +1,207 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 过期机具执行扣费
+    /// </summary>
+    public class TimeOutPosChargeService
+    {
+        public readonly static TimeOutPosChargeService Instance = new TimeOutPosChargeService();
+        private TimeOutPosChargeService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                if (DateTime.Now.Hour < 3)
+                {
+                    try
+                    {
+                        string check = function.ReadInstance("/TimeOutPosCharge/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/TimeOutPosCharge/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            WebCMSEntities db = new WebCMSEntities();
+                            var date = DateTime.Now.AddDays(-60).ToString("yyyy-MM-dd 00:00:00");//过期限制时间
+                            var time = DateTime.Parse(date);//过期限制时间
+
+                            DataTable dt = CustomerSqlConn.dtable("SELECT BuyUserId FROM PosMachinesTwo WHERE `Status`>-1 AND BuyUserId>0 AND BindingState=0 AND ActivationState=0 AND ScanQrTrade=0 AND RecycEndDate <'" + date + "' GROUP BY BuyUserId", MysqlConn.SqlConnStr);//扣费创客
+                            var query = db.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId > 0 && m.BindingState == 0 && m.ActivationState == 0 && m.ScanQrTrade == 0 && m.RecycEndDate < time).ToList();//循环过期超过15天机具
+                            var brandInfo = db.KqProducts.ToList();
+                            foreach (DataRow item in dt.Rows)
+                            {
+                                int BuyUserId = int.Parse(item["BuyUserId"].ToString());
+                                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == BuyUserId);
+                                if (userAccount == null)
+                                {
+                                    userAccount = db.UserAccount.Add(new UserAccount()
+                                    {
+                                        Id = BuyUserId,
+                                        UserId = BuyUserId,
+                                    }).Entity;
+                                    db.SaveChanges();
+                                }
+                                var posInfo = query.Where(m => m.BuyUserId == BuyUserId);
+                                var amount = 0;
+                                foreach (var pos in posInfo)
+                                {
+                                    var poss = db.PosMachinesTwo.FirstOrDefault(m => m.Id == pos.Id) ?? new PosMachinesTwo();
+                                    poss.ScanQrTrade = 999;
+                                    var Brand = brandInfo.FirstOrDefault(m => m.Id == pos.BrandId);
+                                    if (Brand.Name.Contains("电签"))
+                                    {
+                                        amount = 200;
+                                    }
+                                    if (Brand.Name.Contains("大POS"))
+                                    {
+                                        amount = 300;
+                                    }
+                                    userAccount.ToChargeAmount += amount;//增加预扣款
+                                    var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        UserId = BuyUserId,
+                                        ChargeAmount = amount,
+                                        ChargeType = 124,//过期机具货款扣费
+                                        Remark = pos.PosSn,
+
+                                    }).Entity;
+                                }
+                            }
+                            db.SaveChanges();
+
+                            DoChargeAmount(db);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "过期机具执行扣费异常");
+                    }
+                }
+                Thread.Sleep(1000);
+            }
+        }
+
+
+
+        public void StartDoChargeAmount()
+        {
+            Thread th = new Thread(StartDoChargeAmountReady);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDoChargeAmountReady()
+        {
+            while (true)
+            {
+                WebCMSEntities db = new WebCMSEntities();
+                DoChargeAmount(db);
+                db.Dispose();
+                Thread.Sleep(600000);
+            }
+        }
+
+        public void ListenChargeAmount()
+        {
+            Thread th = new Thread(ListenChargeAmountReady);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void ListenChargeAmountReady()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoChargeAmountQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    WebCMSEntities db = new WebCMSEntities();
+                    DoChargeAmount(db, int.Parse(function.CheckInt(content)));
+                    db.Dispose();
+                }
+            }
+        }
+
+        public void DoChargeAmount(WebCMSEntities db, int UserId = 0)
+        {
+            IQueryable<ToChargeBackRecord> list = db.ToChargeBackRecord.Where(m => m.Status == 0);//过期机具扣费记录
+            if (UserId > 0)
+            {
+                list = list.Where(m => m.UserId == UserId);
+            }
+            var info = list.ToList();
+            foreach (var items in info)
+            {
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount();
+                var record = info.FirstOrDefault(m => m.Id == items.Id);
+
+                if (userAccount.BalanceAmount >= record.ChargeAmount)
+                {
+                    var ChangeType = 0;
+                    var Remark = "";
+                    if (record.ChargeType == 124)//过期机具货款扣费
+                    {
+                        ChangeType = 124;
+                        Remark = "扣机具货款";
+                    }
+                    if (record.ChargeType == 1)//普通预扣款
+                    {
+                        ChangeType = 202;
+                        Remark = "普通扣款";
+                    }
+                    if (record.ChargeType == 2)//分期预扣款
+                    {
+                        ChangeType = 201;
+                        Remark = "分期扣款";
+                    }
+                    var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                    {
+                        CreateDate = DateTime.Now,
+                        UserId = items.UserId,
+                        BeforeBalanceAmount = userAccount.BalanceAmount,
+                        AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
+                        ChangeAmount = record.ChargeAmount,
+                        ChangeType = ChangeType,
+                        Remark = Remark,
+
+                    }).Entity;
+                    record.Status = 1;
+                    if (record.ChargeType == 2)
+                    {
+                        var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == record.Sort) ?? new ToChargeBackRecordSub();
+                        var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId && m.TimeNumber > m.QueryCount) ?? new ToChargeByStage();
+                        toChargeBackRecordSub.Status = 1;
+                        toChargeByStage.QueryCount += 1;
+                        toChargeByStage.ChargeAmount += toChargeBackRecordSub.ChargeAmount;
+                        if (toChargeByStage.TimeNumber == toChargeByStage.QueryCount)
+                        {
+                            toChargeByStage.Status = 1;
+                        }
+                    }
+                    if (userAccount.ToChargeAmount >= record.ChargeAmount)
+                    {
+                        userAccount.ToChargeAmount -= record.ChargeAmount;//分期扣款
+                    }
+                    userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额
+                }
+            }
+            db.SaveChanges();
+        }
+    }
+}

+ 83 - 0
AppStart/Helper/TimeOutPosSendMessageService.cs

@@ -0,0 +1,83 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 过期机具预扣费消息推送
+    /// </summary>
+    public class TimeOutPosSendMessageService
+    {
+        public readonly static TimeOutPosSendMessageService Instance = new TimeOutPosSendMessageService();
+        private TimeOutPosSendMessageService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                if (DateTime.Now.Hour < 20)
+                {
+                    try
+                    {
+                        string check = function.ReadInstance("/TimeOutPosSendMessage/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/TimeOutPosSendMessage/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            WebCMSEntities db = new WebCMSEntities();
+                            var date = DateTime.Now.AddDays(-55).ToString("yyyy-MM-dd 00:00:00");//过期限制时间
+                            var time = DateTime.Parse(date);//过期限制时间
+
+                            DataTable dt = CustomerSqlConn.dtable("SELECT BuyUserId FROM PosMachinesTwo WHERE `Status`>-1 AND BuyUserId>0 AND BindingState=0 AND ActivationState=0 AND ScanQrTrade=0 AND RecycEndDate <'" + date + "' GROUP BY BuyUserId", MysqlConn.connstr);//消息推送创客
+                            var query = db.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId > 0 && m.BindingState == 0 && m.ActivationState == 0 && m.ScanQrTrade == 0 && m.RecycEndDate < time).ToList();//循环过期超过55天机具
+                            var brandInfo = db.KqProducts.ToList();
+                            foreach (DataRow item in dt.Rows)
+                            {
+                                int BuyUserId = int.Parse(item["BuyUserId"].ToString());
+                                var BrandName = "";
+                                var PosSn = "";
+                                var SendInfo = "";
+                                foreach (var items in brandInfo)
+                                {
+                                    int BrandId = int.Parse(items.Id.ToString());
+                                    BrandName = items.Name.ToString();
+                                    var posInfo = query.Where(m => m.BuyUserId == BuyUserId && m.BrandId == BrandId);
+                                    foreach (var pos in posInfo)
+                                    {
+                                        PosSn += BrandName +":"+pos.PosSn + "," + "<br/>";
+                                    }
+                                }
+                                SendInfo = PosSn.TrimEnd(',') + "<br/>";
+                                RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
+                                {
+                                    UserId = BuyUserId, //创客
+                                    Title = "机具循环过期提醒", //标题
+                                    Content = "<div class='f16'>尊敬的创客您好:<br/>您的" + SendInfo + "循环已过期五十五天以上,请在五日内完成激活或通过机具回收回寄该机具。</ div > ",//内容
+                                    Summary = "系统检测到您的部分机具可回收,请打开我的-回收机具及时处理!",
+                                    CreateDate = DateTime.Now,
+                                }));
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "过期机具预扣费消息推送异常");
+                    }
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 32 - 24
AppStart/OpExcelHelper.cs

@@ -183,31 +183,39 @@ namespace MySystem
                                                     if (account != null)
                                                     {
                                                         decimal TradeAmount = edit.TradeAmount;
-                                                        decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
-                                                        decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
-                                                        decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
-                                                        account.BalanceAmount += TradeAmount;
-                                                        account.FreezeAmount -= TradeAmount;
-                                                        decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
-                                                        decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
-                                                        decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
-                                                        db.UserAccountRecord.Add(new UserAccountRecord()
+                                                        if(account.FreezeAmount < TradeAmount)
                                                         {
-                                                            CreateDate = DateTime.Now,
-                                                            UpdateDate = DateTime.Now,
-                                                            UserId = edit.UserId, //创客
-                                                            ChangeType = 6, //变动类型
-                                                            ProductType = 99, //产品类型
-                                                            ChangeAmount = TradeAmount, //变更金额
-                                                            BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
-                                                            AfterTotalAmount = AfterTotalAmount, //变更后总金额
-                                                            BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
-                                                            AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
-                                                            BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
-                                                            AfterBalanceAmount = AfterBalanceAmount, //变更后余额
-                                                        });
-                                                        db.SaveChanges();
-                                                        RedisDbconn.Instance.Set("OpUserAccount:" + edit.UserId, account);
+                                                            // TODO: 需要返回错误提示消息
+                                                            // RedisDbconn.Instance.AddList("ErrList" + checkKey, "提现记录单号为" + CashOrderNo + "的创客冻结金额异常");
+                                                        }
+                                                        else
+                                                        {
+                                                            decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
+                                                            decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
+                                                            decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
+                                                            account.BalanceAmount += TradeAmount;
+                                                            account.FreezeAmount -= TradeAmount;
+                                                            decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
+                                                            decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
+                                                            decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
+                                                            db.UserAccountRecord.Add(new UserAccountRecord()
+                                                            {
+                                                                CreateDate = DateTime.Now,
+                                                                UpdateDate = DateTime.Now,
+                                                                UserId = edit.UserId, //创客
+                                                                ChangeType = 6, //变动类型
+                                                                ProductType = 99, //产品类型
+                                                                ChangeAmount = TradeAmount, //变更金额
+                                                                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                                                                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                                                                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                                                                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                                                                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                                                                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                                                            });
+                                                            db.SaveChanges();
+                                                            RedisDbconn.Instance.Set("OpUserAccount:" + edit.UserId, account);
+                                                        }
                                                     }
                                                 }
                                                 db.SaveChanges();

+ 63 - 13
AppStart/PublicFunction.cs

@@ -419,22 +419,72 @@ namespace MySystem
 
         public static void SycnMachineCount(int Id = 0, int BrandId = 0)
         {
-            WebCMSEntities dbnew = new WebCMSEntities();
-            string IdBrand = Id + "_" + BrandId;
-            UserMachineData machineData = dbnew.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
-            if (machineData == null)
+            RedisDbconn.Instance.AddList("SycnUserMachineCountQueue", "{\"UserId\":\"" + Id + "\",\"BrandId\":\"" + BrandId + "\"}");
+        }
+
+        #endregion
+
+        #region 统计机具绑定数据
+
+        public static void StatUserMachineData(int UserId, int BrandId, int Count)
+        {
+            using (WebCMSEntities db = new WebCMSEntities())
             {
-                machineData = dbnew.UserMachineData.Add(new UserMachineData()
+                string IdBrand = UserId + "_" + BrandId;
+                UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                if (MachineData == null)
                 {
-                    IdBrand = IdBrand
-                }).Entity;
-                dbnew.SaveChanges();
+                    MachineData = db.UserMachineData.Add(new UserMachineData()
+                    {
+                        IdBrand = IdBrand,
+                    }).Entity;
+                    db.SaveChanges();
+                }
+                if(Count < 0)
+                {
+                    MachineData.TotalMachineCount -= Math.Abs(Count);
+                    MachineData.UnBindCount -= Math.Abs(Count);
+                }
+                else
+                {
+                    MachineData.TotalMachineCount += Count;
+                    MachineData.UnBindCount += Count;
+                }
+                db.SaveChanges();
             }
-            machineData.BindCount = dbnew.PosMachinesTwo.Count(m => m.Status > -1 && m.BuyUserId == Id && m.BrandId == BrandId && m.BindingState == 1);
-            machineData.UnBindCount = dbnew.PosMachinesTwo.Count(m => m.Status > -1 && m.BuyUserId == Id && m.BrandId == BrandId && m.BindingState == 0);
-            machineData.TotalMachineCount = machineData.BindCount + machineData.UnBindCount;
-            dbnew.SaveChanges();
-            dbnew.Dispose();
+        }
+
+        #endregion
+
+        #region 退回仓库,清除历史记录
+
+        public static void ClearPosHistory(WebCMSEntities db, string PosSn)
+        {
+            PreSendStockDetail prepos = db.PreSendStockDetail.FirstOrDefault(m => m.SnNo == PosSn && m.Status == 1);
+            if(prepos != null)
+            {
+                prepos.Status = -1;
+                prepos.ApplyFlag = 0;
+                SmallStoreHouse sstore = db.SmallStoreHouse.FirstOrDefault(m => m.UserId == prepos.ToUserId);
+                if(sstore != null)
+                {
+                    sstore.LaveNum += 1;
+                    sstore.TotalNum -= 1;
+                }
+                StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.UserId == prepos.FromStoreId);
+                if(store != null)
+                {
+                    store.LaveNum += 1;
+                }
+                // db.SaveChanges();
+            }
+            MachineApply apply = db.MachineApply.FirstOrDefault(m => m.SwapSnExpand.Contains(PosSn));
+            if(apply != null)
+            {
+                apply.SwapSnExpand = apply.SwapSnExpand.Replace(PosSn, PosSn.Substring(0, 3) + "d" + PosSn.Substring(4));
+                // db.SaveChanges();
+            }
+
         }
 
         #endregion

+ 5 - 2
AppStart/RelationClassForConst.cs

@@ -124,10 +124,13 @@ namespace MySystem
                     result = "分仓临时额度退还";
                     break;
                 case 124:
-                    result = "机具过期";
+                    result = "扣机具货款";
                     break;
                 case 125:
-                    result = "创客月费";
+                    result = "软件服务费";
+                    break;
+                case 126:
+                    result = "机具货款退还";
                     break;
             }
             return result;

+ 58 - 0
AppStart/SycnUserMachineCountHelper.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using LitJson;
+
+
+namespace MySystem
+{
+    public class SycnUserMachineCountHelper
+    {
+        public readonly static SycnUserMachineCountHelper Instance = new SycnUserMachineCountHelper();
+        private SycnUserMachineCountHelper()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(StartDo);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        public void StartDo()
+        {
+            while (true)
+            {
+                string data = RedisDbconn.Instance.RPop<string>("SycnUserMachineCountQueue");
+                if (!string.IsNullOrEmpty(data))
+                {
+                    JsonData json = JsonMapper.ToObject(data);
+                    int UserId = int.Parse(json["UserId"].ToString());
+                    int BrandId = int.Parse(json["BrandId"].ToString());
+                    WebCMSEntities dbnew = new WebCMSEntities();
+                    string IdBrand = UserId + "_" + BrandId;
+                    UserMachineData machineData = dbnew.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
+                    if (machineData == null)
+                    {
+                        machineData = dbnew.UserMachineData.Add(new UserMachineData()
+                        {
+                            IdBrand = IdBrand
+                        }).Entity;
+                        dbnew.SaveChanges();
+                    }
+                    machineData.BindCount = dbnew.PosMachinesTwo.Count(m => m.Status > -1 && m.BuyUserId == UserId && m.BrandId == BrandId && m.BindingState == 1);
+                    machineData.UnBindCount = dbnew.PosMachinesTwo.Count(m => m.Status > -1 && m.BuyUserId == UserId && m.BrandId == BrandId && m.BindingState == 0);
+                    machineData.TotalMachineCount = machineData.BindCount + machineData.UnBindCount;
+                    dbnew.SaveChanges();
+                    dbnew.Dispose();
+                }
+                else
+                {
+                    Thread.Sleep(10000);
+                }
+            }
+        }
+    }
+}

BIN
AppStart/Tables/.DS_Store


BIN
Areas/.DS_Store


BIN
Areas/Admin/.DS_Store


BIN
Areas/Admin/Controllers/.DS_Store


BIN
Areas/Admin/Controllers/BsServer/.DS_Store


+ 2 - 0
Areas/Admin/Controllers/BsServer/AdvertismentController.cs

@@ -107,6 +107,7 @@ namespace MySystem.Areas.Admin.Controllers
             Fields.Add("PicPath", data.PicPath); //图片
             Fields.Add("Contents", data.Contents); //内容
             Fields.Add("Url", data.Url); //链接地址
+            Fields.Add("SeoTitle", data.SeoTitle); //参数
             Fields.Add("Status", 1);
 
             int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Add("Advertisment", Fields, 0);
@@ -154,6 +155,7 @@ namespace MySystem.Areas.Admin.Controllers
             Fields.Add("PicPath", data.PicPath); //图片
             Fields.Add("Contents", data.Contents); //内容
             Fields.Add("Url", data.Url); //链接地址
+            Fields.Add("SeoTitle", data.SeoTitle); //参数
 
             new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Edit("Advertisment", Fields, data.Id);
             AddSysLog(data.Id.ToString(), "Advertisment", "update");

+ 1 - 0
Areas/Admin/Controllers/BsServer/BaseController.cs

@@ -43,6 +43,7 @@ namespace MySystem.Areas.Admin.Controllers
 
         //数据库连接字符串
         public string OpConn = Library.ConfigurationManager.AppSettings["OpSqlConnStr"].ToString();
+        public string SqlConn = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
         
         public int SysId;
         public int SysRealRole;

+ 18 - 0
Areas/Admin/Controllers/BsServer/ColController.cs

@@ -368,8 +368,26 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     ColIds.Add(item.ColId);
                 }
+                var check = bsdb.Col.Any(m => m.ParentId == item.Id);
+                if (check)
+                {
+                    var cols = bsdb.Col.Where(m => m.ParentId == item.Id).ToList();
+                    foreach (var col in cols)
+                    {
+                        var dcol = cols.FirstOrDefault(m => m.Id == col.Id);
+                        int colId = int.Parse(dcol.Id.ToString());
+                        new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Delete("Col", colId);
+                    }
+                }
+                var studys = db.SchoolMakerStudy.Where(m => m.SeoKeyword.StartsWith(item.ColId)).ToList();
+                foreach (var items in studys)
+                {
+                    var study = studys.FirstOrDefault(m => m.Id == items.Id);
+                    study.SeoKeyword = null;
+                }
                 new AdminContentOther(_accessor.HttpContext, PublicFunction.BsTables).Delete("Col", id);
             }
+            db.SaveChanges();
             bsdb.SaveChanges();
 
             foreach (string CurColId in ColIds)

+ 0 - 10
Areas/Admin/Controllers/BsServer/MsgPlacardController.cs

@@ -164,16 +164,6 @@ namespace MySystem.Areas.Admin.Controllers
             AddSysLog(Id.ToString(), "MsgPlacard", "add");
             db.SaveChanges();
 
-            SetRedis(Id, true);
-
-            List<int> uids = db.Users.Select(m => m.Id).ToList();
-            foreach (int uid in uids)
-            {
-                MsgNotRead msg = RedisDbconn.Instance.Get<MsgNotRead>("MsgNotRead:" + uid) ?? new MsgNotRead();
-                msg.PlacardCount += 1;
-                RedisDbconn.Instance.Set("MsgNotRead:" + uid, msg);
-            }
-
             return "success";
         }
 

BIN
Areas/Admin/Controllers/MainServer/.DS_Store


+ 4 - 4
Areas/Admin/Controllers/MainServer/ActiveRewardController.cs

@@ -231,8 +231,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //激活类型
                 int ActType = int.Parse(dic["ActType"].ToString());
                 if (ActType == 0) dic["ActType"] = "正常激活";
@@ -582,8 +582,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //激活类型
                 int ActType = int.Parse(dic["ActType"].ToString());
                 if (ActType == 0) dic["ActType"] = "正常激活";

+ 2 - 2
Areas/Admin/Controllers/MainServer/KqProductRuleSetController.cs

@@ -138,7 +138,7 @@ Fields.Add("CyclePosDays", data.CyclePosDays); //领机天数
 Fields.Add("PullNewStartDate", data.PullNewStartDate); //活动开始时间
 Fields.Add("PullNewEndDate", data.PullNewEndDate); //活动结束时间
 Fields.Add("PullNewExtendDays", data.PullNewExtendDays); //延长领机天数
-Fields.Add("BigTotalAmount", data.BigTotalAmount); //购买机起始价
+Fields.Add("BigTotalAmount", data.BigTotalAmount); //兑换机起始价
 Fields.Add("BigExtendCycleDays", data.BigExtendCycleDays); //延长循环周期天数
 Fields.Add("SubsidyStartDate", data.SubsidyStartDate); //活动开始时间
 Fields.Add("SubsidyEndDate", data.SubsidyEndDate); //活动结束时间
@@ -229,7 +229,7 @@ Fields.Add("CyclePosDays", data.CyclePosDays); //领机天数
 Fields.Add("PullNewStartDate", data.PullNewStartDate); //活动开始时间
 Fields.Add("PullNewEndDate", data.PullNewEndDate); //活动结束时间
 Fields.Add("PullNewExtendDays", data.PullNewExtendDays); //延长领机天数
-Fields.Add("BigTotalAmount", data.BigTotalAmount); //购买机起始价
+Fields.Add("BigTotalAmount", data.BigTotalAmount); //兑换机起始价
 Fields.Add("BigExtendCycleDays", data.BigExtendCycleDays); //延长循环周期天数
 Fields.Add("SubsidyStartDate", data.SubsidyStartDate); //活动开始时间
 Fields.Add("SubsidyEndDate", data.SubsidyEndDate); //活动结束时间

+ 8 - 8
Areas/Admin/Controllers/MainServer/MachineRenewController.cs

@@ -96,12 +96,12 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["RealName"] = user.RealName;
 
                 int DamagedSnType = int.Parse(dic["DamagedSnType"].ToString());
-                if(DamagedSnType == 0) dic["DamagedSnType"] = "购买机具";
-                if(DamagedSnType == 1) dic["DamagedSnType"] = "赠送机具";
+                if(DamagedSnType == 0) dic["DamagedSnType"] = "兑换机具";
+                if(DamagedSnType == 1) dic["DamagedSnType"] = "循环机具";
                 
                 int ReplaceSnType = int.Parse(dic["ReplaceSnType"].ToString());
-                if(ReplaceSnType == 0) dic["ReplaceSnType"] = "购买机具";
-                if(ReplaceSnType == 1) dic["ReplaceSnType"] = "赠送机具";
+                if(ReplaceSnType == 0) dic["ReplaceSnType"] = "兑换机具";
+                if(ReplaceSnType == 1) dic["ReplaceSnType"] = "循环机具";
                 
                 int AuditStatus = int.Parse(dic["AuditStatus"].ToString());
                 if(AuditStatus == 0) dic["AuditStatus"] = "未审核";
@@ -399,12 +399,12 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["RealName"] = user.RealName;
 
                 int DamagedSnType = int.Parse(dic["DamagedSnType"].ToString());
-                if(DamagedSnType == 0) dic["DamagedSnType"] = "购买机具";
-                if(DamagedSnType == 1) dic["DamagedSnType"] = "赠送机具";
+                if(DamagedSnType == 0) dic["DamagedSnType"] = "兑换机具";
+                if(DamagedSnType == 1) dic["DamagedSnType"] = "循环机具";
                 
                 int ReplaceSnType = int.Parse(dic["ReplaceSnType"].ToString());
-                if(ReplaceSnType == 0) dic["ReplaceSnType"] = "购买机具";
-                if(ReplaceSnType == 1) dic["ReplaceSnType"] = "赠送机具";
+                if(ReplaceSnType == 0) dic["ReplaceSnType"] = "兑换机具";
+                if(ReplaceSnType == 1) dic["ReplaceSnType"] = "循环机具";
                 
                 int AuditStatus = int.Parse(dic["AuditStatus"].ToString());
                 if(AuditStatus == 0) dic["AuditStatus"] = "未审核";

+ 234 - 41
Areas/Admin/Controllers/MainServer/MerchantDepositReturnsController.cs

@@ -52,7 +52,7 @@ namespace MySystem.Areas.Admin.Controllers
         /// 首台商户退押金申请记录列表
         /// </summary>
         /// <returns></returns>
-        public JsonResult IndexData(MerchantDepositReturns data, string CreateDateData, string StatusSelect = "0", int page = 1, int limit = 30)
+        public JsonResult IndexData(MerchantDepositReturns data, string CreateDateData, string UpdateDateData, string MerchantName, string PosSn, string StatusSelect = "0", int page = 1, int limit = 30)
         {
 
             Dictionary<string, string> Fields = new Dictionary<string, string>();
@@ -75,6 +75,36 @@ namespace MySystem.Areas.Admin.Controllers
                 string end = datelist[1];
                 condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
             }
+            //发放时间
+            if (!string.IsNullOrEmpty(UpdateDateData))
+            {
+                string[] datelist = UpdateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and UpdateDate>='" + start + " 00:00:00' and UpdateDate<='" + end + " 23:59:59'";
+            }
+            if (!string.IsNullOrEmpty(MerchantName))
+            {
+                var Ids = "";
+                var posMerchantInfo = db.PosMerchantInfo.Where(m => m.MerRealName == MerchantName).ToList();
+                foreach (var item in posMerchantInfo)
+                {
+                    Ids += item.Id + ",";
+                }
+                Ids = Ids.TrimEnd(',');
+                condition += " and MerchantId in(" + Ids + ")";
+            }
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                var Ids = "";
+                var posMerchantInfo = db.PosMerchantInfo.Where(m => m.KqSnNo == PosSn).ToList();
+                foreach (var item in posMerchantInfo)
+                {
+                    Ids += item.Id + ",";
+                }
+                Ids = Ids.TrimEnd(',');
+                condition += " and MerchantId in(" + Ids + ")";
+            }
 
 
             Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("MerchantDepositReturns", Fields, "Id desc", "0", page, limit, condition);
@@ -87,13 +117,15 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["MerchantIdMerRealName"] = merchantid_PosMerchantInfo.MerRealName;
                 dic["MerchantIdMerchantMobile"] = merchantid_PosMerchantInfo.MerchantMobile;
                 dic["MerchantIdMerIdcardNo"] = merchantid_PosMerchantInfo.MerIdcardNo;
+                dic["MerchantIdKqSnNo"] = merchantid_PosMerchantInfo.KqSnNo;
                 dic.Remove("MerchantId");
                 int Status = int.Parse(dic["Status"].ToString());
                 if (Status == 0) dic["StatusName"] = "待处理";
                 if (Status == 1) dic["StatusName"] = "成功";
                 if (Status == 2) dic["StatusName"] = "失败";
-                if (Status == 4) dic["StatusName"] = "通过";
-                if (Status == 5) dic["StatusName"] = "未通过";
+                // if (Status == 4) dic["StatusName"] = "通过";
+                // if (Status == 5) dic["StatusName"] = "未通过";
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(merchantid_PosMerchantInfo.BrandId.ToString()));
                 //创客
                 int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
                 Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
@@ -111,8 +143,8 @@ namespace MySystem.Areas.Admin.Controllers
             DataTable dt = OtherMySqlConn.dtable("SELECT SUM(ReturnAmount),SUM(ReturnAmount*0.92) FROM MerchantDepositReturns WHERE 1=1" + condition);
             if (dt.Rows.Count > 0)
             {
-                ReturnAmount = decimal.Parse(dt.Rows[0][0].ToString());
-                fReturnAmount = decimal.Parse(dt.Rows[0][1].ToString());
+                ReturnAmount = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+                fReturnAmount = decimal.Parse(function.CheckNum(dt.Rows[0][1].ToString()));
             }
             other.Add("ReturnAmount", ReturnAmount.ToString("f2"));
             other.Add("fReturnAmount", fReturnAmount.ToString("f2"));
@@ -146,7 +178,7 @@ namespace MySystem.Areas.Admin.Controllers
         /// 非首台商户退押金申请记录列表
         /// </summary>
         /// <returns></returns>
-        public JsonResult IndexsData(MerchantDepositReturns data, string CreateDateData, string StatusSelect = "0", int page = 1, int limit = 30)
+        public JsonResult IndexsData(MerchantDepositReturns data, string CreateDateData, string UpdateDateData, string MerchantName, string PosSn, string StatusSelect = "0", int page = 1, int limit = 30)
         {
 
             Dictionary<string, string> Fields = new Dictionary<string, string>();
@@ -169,6 +201,36 @@ namespace MySystem.Areas.Admin.Controllers
                 string end = datelist[1];
                 condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
             }
+            //发放时间
+            if (!string.IsNullOrEmpty(UpdateDateData))
+            {
+                string[] datelist = UpdateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and UpdateDate>='" + start + " 00:00:00' and UpdateDate<='" + end + " 23:59:59'";
+            }
+            if (!string.IsNullOrEmpty(MerchantName))
+            {
+                var Ids = "";
+                var posMerchantInfo = db.PosMerchantInfo.Where(m => m.MerRealName == MerchantName).ToList();
+                foreach (var item in posMerchantInfo)
+                {
+                    Ids += item.Id + ",";
+                }
+                Ids = Ids.TrimEnd(',');
+                condition += " and MerchantId in(" + Ids + ")";
+            }
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                var Ids = "";
+                var posMerchantInfo = db.PosMerchantInfo.Where(m => m.KqSnNo == PosSn).ToList();
+                foreach (var item in posMerchantInfo)
+                {
+                    Ids += item.Id + ",";
+                }
+                Ids = Ids.TrimEnd(',');
+                condition += " and MerchantId in(" + Ids + ")";
+            }
 
 
             Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("MerchantDepositReturns", Fields, "Id desc", "0", page, limit, condition);
@@ -181,6 +243,7 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["MerchantIdMerRealName"] = merchantid_PosMerchantInfo.MerRealName;
                 dic["MerchantIdMerchantMobile"] = merchantid_PosMerchantInfo.MerchantMobile;
                 dic["MerchantIdMerIdcardNo"] = merchantid_PosMerchantInfo.MerIdcardNo;
+                dic["MerchantIdKqSnNo"] = merchantid_PosMerchantInfo.KqSnNo;
                 dic.Remove("MerchantId");
                 int Status = int.Parse(dic["Status"].ToString());
                 if (Status == 0) dic["StatusName"] = "待处理";
@@ -188,6 +251,7 @@ namespace MySystem.Areas.Admin.Controllers
                 if (Status == 2) dic["StatusName"] = "失败";
                 if (Status == 4) dic["StatusName"] = "通过";
                 if (Status == 5) dic["StatusName"] = "未通过";
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(merchantid_PosMerchantInfo.BrandId.ToString()));
                 //创客
                 int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
                 Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
@@ -205,8 +269,8 @@ namespace MySystem.Areas.Admin.Controllers
             DataTable dt = OtherMySqlConn.dtable("SELECT SUM(ReturnAmount),SUM(ReturnAmount*0.92) FROM MerchantDepositReturns WHERE 1=1" + condition);
             if (dt.Rows.Count > 0)
             {
-                ReturnAmount = decimal.Parse(dt.Rows[0][0].ToString());
-                fReturnAmount = decimal.Parse(dt.Rows[0][1].ToString());
+                ReturnAmount = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+                fReturnAmount = decimal.Parse(function.CheckNum(dt.Rows[0][1].ToString()));
             }
             other.Add("ReturnAmount", ReturnAmount.ToString("f2"));
             other.Add("fReturnAmount", fReturnAmount.ToString("f2"));
@@ -386,7 +450,7 @@ namespace MySystem.Areas.Admin.Controllers
         }
         #endregion
 
-        #region 导入数据
+        #region 首台导入数据
         /// <summary>
         /// 导入数据
         /// </summary>
@@ -399,28 +463,76 @@ namespace MySystem.Areas.Admin.Controllers
             for (int i = 1; i < list.Count; i++)
             {
                 JsonData dr = list[i];
-                string SeoDescription = dr[0].ToString(); // 退押订单编号
-                int Status = int.Parse(dr[1].ToString()); // 审核结果
-                var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.SeoDescription == SeoDescription && m.Status == 0) ?? new MerchantDepositReturns();
-                if (true)
+                string itemJson = dr.ToJson();
+                string PosSn = itemJson.Contains("\"A\"") ? dr["A"].ToString() : "";// 退押机具Sn
+                string Statuss = itemJson.Contains("\"B\"") ? dr["B"].ToString() : ""; // 结果
+                string SeoDescription = itemJson.Contains("\"C\"") ? dr["C"].ToString() : "";// 备注
+                int Status = int.Parse(Statuss);
+                // string PosSn = dr[0].ToString(); // 退押机具Sn
+                // int Status = int.Parse(dr[1].ToString()); // 结果
+                // string SeoDescription = dr[2].ToString(); // 备注
+                var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PosMachinesTwo();
+                var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.Status == 0) ?? new MerchantDepositReturns();
+                if (merchantDepositReturns.Id == 0)
                 {
-                    merchantDepositReturns.Id = 0;
-                    error += "以下操作失败" + SeoDescription + ',' + "该订单未找到或不符合规则" + '\n';
+                    error += "以下操作失败,机具" + PosSn + ',' + "对应的退押订单" + merchantDepositReturns.SeoKeyword + "该订单未找到或不符合规则" + '\n';
                 }
-                if (Status == 1)
+                //失败
+                if (Status == 2)
                 {
-                    Status = 4;
+                    var posm = db.PosMerchantInfo.FirstOrDefault(m => m.Id == merchantDepositReturns.MerchantId) ?? new PosMerchantInfo();
+                    posm.StandardStatus = 101;
                 }
-                else if (Status == 2)
+                merchantDepositReturns.Status = Status;
+                merchantDepositReturns.UpdateDate = DateTime.Now;
+                merchantDepositReturns.SeoDescription = SeoDescription;
+                merchantDepositReturns.SeoTitle = SysUserName + "-" + SysRealName;
+            }
+            if (!string.IsNullOrEmpty(error))
+            {
+                return "Warning|" + error;
+            }
+            db.SaveChanges();
+            return "success";
+        }
+        #endregion
+
+        #region 非首台导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Imports(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            string error = "";
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                string itemJson = dr.ToJson();
+                string PosSn = itemJson.Contains("\"A\"") ? dr["A"].ToString() : "";// 退押机具Sn
+                string Statuss = itemJson.Contains("\"B\"") ? dr["B"].ToString() : ""; // 结果
+                string SeoDescription = itemJson.Contains("\"C\"") ? dr["C"].ToString() : "";// 备注
+                int Status = int.Parse(Statuss);
+                // string PosSn = dr[0].ToString(); // 退押机具Sn
+                // int Status = int.Parse(dr[1].ToString()); // 结果
+                // string SeoDescription = dr[2].ToString(); // 备注
+                var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PosMachinesTwo();
+                var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.MerchantId == pos.BindMerchantId && m.Status == 0) ?? new MerchantDepositReturns();
+                if (merchantDepositReturns.Id == 0)
                 {
-                    Status = 5;
+                    error += "以下操作失败,机具" + PosSn + ',' + "对应的退押订单" + merchantDepositReturns.SeoKeyword + "该订单未找到或不符合规则" + '\n';
                 }
-                else
+                //失败
+                if (Status == 2)
                 {
-                    Status = 0;
+                    var posm = db.PosMerchantInfo.FirstOrDefault(m => m.Id == merchantDepositReturns.MerchantId) ?? new PosMerchantInfo();
+                    posm.StandardStatus = 101;
                 }
                 merchantDepositReturns.Status = Status;
                 merchantDepositReturns.UpdateDate = DateTime.Now;
+                merchantDepositReturns.SeoDescription = SeoDescription;
                 merchantDepositReturns.SeoTitle = SysUserName + "-" + SysRealName;
             }
             if (!string.IsNullOrEmpty(error))
@@ -449,7 +561,10 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 int id = int.Parse(subid);
                 var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.Id == id && m.Status == 4) ?? new MerchantDepositReturns();
-                Ids += Id + ",";
+                if (merchantDepositReturns.Id > 0)
+                {
+                    Ids += subid + ",";
+                }
             }
             DataTable dt = OtherMySqlConn.dtable("UPDATE MerchantDepositReturns SET `Status`=3  WHERE Id IN(" + Ids.TrimEnd(',') + ")");
             string text = string.Format("商户押金退还,记录Id: '" + Ids.TrimEnd(',') + "',操作人: '" + SysUserName + "_" + SysRealName + "',Time'" + DateTime.Now + "'");
@@ -460,7 +575,7 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
-        #region 导出Excel
+        #region 首台导出Excel
 
         /// <summary>
         /// 导出Excel
@@ -470,9 +585,9 @@ namespace MySystem.Areas.Admin.Controllers
         {
             Dictionary<string, string> Fields = new Dictionary<string, string>();
             Fields.Add("AlipayAccountNo", "1"); //支付宝账号
-            Fields.Add("OrderNo", "1"); //退押订单号
+            Fields.Add("SeoKeyword", "1"); //退押订单号
 
-            string condition = " and Status>-1";
+            string condition = " and Status>-1 and QueryCount=1";
 
             //提现状态
             if (!string.IsNullOrEmpty(StatusSelect))
@@ -489,39 +604,41 @@ namespace MySystem.Areas.Admin.Controllers
             }
 
 
-            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("MerchantDepositReturns", Fields, "Id desc", "0", 1, 20000, condition, "Id,MerchantId,AlipayAccountNo,ReturnAmount,UserId", false);
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("MerchantDepositReturns", Fields, "Id desc", "0", 1, 20000, condition, "MerchantId,SeoKeyword,CreateDate,SeoDescription,AlipayAccountNo", false);
             List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
             foreach (Dictionary<string, object> dic in diclist)
             {
                 //商户
                 int MerchantId = int.Parse(function.CheckInt(dic["MerchantId"].ToString()));
+                var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.MerchantId == MerchantId) ?? new MerchantDepositReturns();
                 PosMerchantInfo merchantid_PosMerchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo();
                 dic["MerchantIdMerRealName"] = merchantid_PosMerchantInfo.MerRealName;
-                dic["MerchantIdMerchantMobile"] = merchantid_PosMerchantInfo.MerchantMobile;
-                dic["MerchantIdMerIdcardNo"] = merchantid_PosMerchantInfo.MerIdcardNo;
+                // dic["MerchantIdMerchantMobile"] = merchantid_PosMerchantInfo.MerchantMobile;
+                // dic["MerchantIdMerIdcardNo"] = merchantid_PosMerchantInfo.MerIdcardNo;
                 dic.Remove("MerchantId");
-                // dic["StatusName"] = dic["Status"].ToString() == "1" ? "正常" : "关闭";
-                //创客
-                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
-                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
-                dic["UserIdRealName"] = userid_Users.RealName;
-                dic["UserIdMakerCode"] = userid_Users.MakerCode;
-                dic.Remove("UserId");
-
+                dic["PosSn"] = merchantid_PosMerchantInfo.KqSnNo;
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(merchantid_PosMerchantInfo.BrandId.ToString()));
+                // 实际返还金额
+                decimal amt = decimal.Parse(merchantDepositReturns.ReturnAmount.ToString());
+                dic["ReturnAmount"] = (amt * 0.92M).ToString("f2");
             }
 
             Dictionary<string, object> result = new Dictionary<string, object>();
-            result.Add("Status", "0");
+            // result.Add("Status", "0");
             result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
             result.Add("Obj", diclist);
             Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
-            ReturnFields.Add("Id", "记录ID");
-            // ReturnFields.Add("MerchantIdMerRealName", "商户真实姓名");
+            // ReturnFields.Add("Id", "记录ID");
+            ReturnFields.Add("CreateDate", "申请提现时间");
+            ReturnFields.Add("MerchantIdMerRealName", "商户真实姓名");
+            ReturnFields.Add("BrandId", "机具品牌");
+            ReturnFields.Add("PosSn", "机具Sn");
             // ReturnFields.Add("MerchantIdMerchantMobile", "商户手机号");
             // ReturnFields.Add("MerchantIdMerIdcardNo", "商户身份证号");
-            ReturnFields.Add("SeoDescription", "退押订单号");
+            ReturnFields.Add("SeoKeyword", "退押订单号");
             ReturnFields.Add("AlipayAccountNo", "支付宝账号");
-            ReturnFields.Add("ReturnAmount", "返还金额");
+            ReturnFields.Add("ReturnAmount", "实际返还金额");
+            ReturnFields.Add("SeoDescription", "备注");
             // ReturnFields.Add("UserIdRealName", "创客真实姓名");
             // ReturnFields.Add("UserIdMakerCode", "创客编号");
 
@@ -532,5 +649,81 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+        #region 非首台导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcels(MerchantDepositReturns data, string StatusSelect, string CreateDateData)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("AlipayAccountNo", "1"); //支付宝账号
+            Fields.Add("SeoKeyword", "1"); //退押订单号
+
+            string condition = " and Status>-1 and QueryCount=0";
+
+            //提现状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+            //创建时间
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("MerchantDepositReturns", Fields, "Id desc", "0", 1, 20000, condition, "MerchantId,CreateDate,SeoKeyword,SeoDescription,AlipayAccountNo", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //商户
+                int MerchantId = int.Parse(function.CheckInt(dic["MerchantId"].ToString()));
+                var merchantDepositReturns = db.MerchantDepositReturns.FirstOrDefault(m => m.MerchantId == MerchantId) ?? new MerchantDepositReturns();
+                PosMerchantInfo merchantid_PosMerchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.Id == MerchantId) ?? new PosMerchantInfo();
+                dic["MerchantIdMerRealName"] = merchantid_PosMerchantInfo.MerRealName;
+                // dic["MerchantIdMerchantMobile"] = merchantid_PosMerchantInfo.MerchantMobile;
+                // dic["MerchantIdMerIdcardNo"] = merchantid_PosMerchantInfo.MerIdcardNo;
+                dic.Remove("MerchantId");
+                dic["PosSn"] = merchantid_PosMerchantInfo.KqSnNo;
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(merchantid_PosMerchantInfo.BrandId.ToString()));
+                // 实际返还金额
+                decimal amt = decimal.Parse(merchantDepositReturns.ReturnAmount.ToString());
+                dic["ReturnAmount"] = (amt * 0.92M).ToString("f2");
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            // result.Add("Status", "0");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            // ReturnFields.Add("Id", "记录ID");
+            ReturnFields.Add("CreateDate", "申请提现时间");
+            ReturnFields.Add("MerchantIdMerRealName", "商户真实姓名");
+            ReturnFields.Add("BrandId", "机具品牌");
+            ReturnFields.Add("PosSn", "机具Sn");
+            // ReturnFields.Add("MerchantIdMerchantMobile", "商户手机号");
+            // ReturnFields.Add("MerchantIdMerIdcardNo", "商户身份证号");
+            ReturnFields.Add("SeoKeyword", "退押订单号");
+            ReturnFields.Add("AlipayAccountNo", "支付宝账号");
+            ReturnFields.Add("ReturnAmount", "实际返还金额");
+            ReturnFields.Add("SeoDescription", "备注");
+            // ReturnFields.Add("UserIdRealName", "创客真实姓名");
+            // ReturnFields.Add("UserIdMakerCode", "创客编号");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "MerchantDepositReturnsn", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
     }
 }

+ 26 - 2
Areas/Admin/Controllers/MainServer/MsgAlertController.cs

@@ -77,7 +77,7 @@ namespace MySystem.Areas.Admin.Controllers
                 condition += " and PushFlag=" + PushFlagSelect;
             }
             //创建时间
-            if(!string.IsNullOrEmpty(CreateDateData))
+            if (!string.IsNullOrEmpty(CreateDateData))
             {
                 string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
                 string start = datelist[0];
@@ -140,9 +140,10 @@ namespace MySystem.Areas.Admin.Controllers
         /// </summary>
         /// <returns></returns>
         [HttpPost]
-        public string Add(MsgAlert data)
+        public string Add(MsgAlert data, string MakerCodes)
         {
             Dictionary<string, object> Fields = new Dictionary<string, object>();
+            // string[] MakerCodeList = MakerCodes.Replace("\r", "").Replace("\n", ",").Split(',');
 
             Fields.Add("MsgType", data.MsgType); //消息类型
             Fields.Add("Status", 1); //默认开启
@@ -168,6 +169,29 @@ namespace MySystem.Areas.Admin.Controllers
             Fields.Add("SeoKeyword", DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8));
             Fields.Add("SeoDescription", data.SeoDescription);
             int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("MsgAlert", Fields, 0);
+            if (!string.IsNullOrEmpty(MakerCodes))
+            {
+                string[] MakerCodeList = MakerCodes.Replace("\r", "").Replace("\n", ",").Split(',');
+                foreach (var item in MakerCodeList)
+                {
+                    var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == item) ?? new UserForMakerCode();
+                    var userSwapWhite = db.UserSwapWhite.FirstOrDefault(m => m.QueryCount == Id && m.UserId == userForMakerCode.UserId) ?? new UserSwapWhite();
+                    if (userForMakerCode.UserId > 0 && userSwapWhite.Id == 0)
+                    {
+                        var userSwapWhiteAdd = db.UserSwapWhite.Add(new UserSwapWhite()
+                        {
+                            QueryCount = Id,//弹窗Id
+                            CreateDate = DateTime.Now,
+                            CreateMan = SysUserName + "_" + SysRealName,
+                            UserId = userForMakerCode.UserId,
+                        }).Entity;
+                    }
+                    else
+                    {
+                        return "创客" + item + "不存在或者已经添加了相关信息";
+                    }
+                }
+            }
             AddSysLog(data.Id.ToString(), "MsgAlert", "add");
             db.SaveChanges();
 

+ 4 - 4
Areas/Admin/Controllers/MainServer/OpenRewardDetailController.cs

@@ -128,8 +128,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
 
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
 
                 int MerBuddyType = int.Parse(dic["MerBuddyType"].ToString());
                 if (MerBuddyType == 0) dic["MerBuddyType"] = "非商户型创客";
@@ -435,8 +435,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
 
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
 
                 int MerBuddyType = int.Parse(dic["MerBuddyType"].ToString());
                 if (MerBuddyType == 0) dic["MerBuddyType"] = "非商户型创客";

+ 3 - 3
Areas/Admin/Controllers/MainServer/OpenSnSnapshotController.cs

@@ -122,7 +122,7 @@ namespace MySystem.Areas.Admin.Controllers
                 if (Status == 1) dic["Status"] = "成功";
             }
             Dictionary<string, object> other = new Dictionary<string, object>();
-            string PrizeAmt = "0.00", BuyPosCount = "0.00", StadardBuyPosCount = "0.00";//奖励金额 购买机数量 标准购买机数量
+            string PrizeAmt = "0.00", BuyPosCount = "0.00", StadardBuyPosCount = "0.00";//奖励金额 兑换机数量 标准兑换机数量
             DataTable dt = OtherMySqlConn.dtable("select sum(PrizeAmt),sum(BuyPosCount),sum(StadardBuyPosCount) from OpenSnSnapshot where 1=1" + condition);
             if(dt.Rows.Count > 0)
             {
@@ -425,8 +425,8 @@ namespace MySystem.Areas.Admin.Controllers
             ReturnFields.Add("TopMakerCode", "顶级创客编号");
             ReturnFields.Add("TopRealName", "顶级创客名称");
             ReturnFields.Add("BrandId", "产品名称");
-            ReturnFields.Add("BuySnNum", "购买机数量");
-            ReturnFields.Add("StdBuySnNum", "标准购买机数量");
+            ReturnFields.Add("BuySnNum", "兑换机数量");
+            ReturnFields.Add("StdBuySnNum", "标准兑换机数量");
             ReturnFields.Add("RewardAmount", "奖励金额");
             ReturnFields.Add("MerchantNo", "商户编号");
             ReturnFields.Add("MerchantName", "商户名称");

+ 4 - 4
Areas/Admin/Controllers/MainServer/OrdersController.cs

@@ -1300,7 +1300,7 @@ namespace MySystem.Areas.Admin.Controllers
             result += "订单号:" + order.OrderNo + "\n";
             result += "下单创客\n创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",手机号:" + user.Mobile + "\n";
             result += "上级创客\n创客编号:" + puser.MakerCode + ",姓名:" + puser.RealName + ",手机号:" + puser.Mobile + "\n";
-            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买
+            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台兑换
             int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
             if (machineCount + ActiveCount >= 3)
             {
@@ -1330,7 +1330,7 @@ namespace MySystem.Areas.Admin.Controllers
             }
             else
             {
-                result += "上级创客未满足条件\n购买机:" + machineCount + "台,激活机:" + ActiveCount + "台\n";
+                result += "上级创客未满足条件\n兑换机:" + machineCount + "台,激活机:" + ActiveCount + "台\n";
                 dic.Add("code", "1");
             }
             dic.Add("result", result);
@@ -1352,7 +1352,7 @@ namespace MySystem.Areas.Admin.Controllers
                         if (user != null)
                         {
                             int ParentUserId = user.ParentUserId;
-                            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.PosSnType == 0); //判断是否拥有3台购买
+                            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.PosSnType == 0); //判断是否拥有3台兑换
                             int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
                             if (machineCount + ActiveCount >= 3)
                             {
@@ -1407,7 +1407,7 @@ namespace MySystem.Areas.Admin.Controllers
                             }
                             else
                             {
-                                return "上级创客未满足条件:购买机:" + machineCount + "台,激活机:" + ActiveCount + "台";
+                                return "上级创客未满足条件:兑换机:" + machineCount + "台,激活机:" + ActiveCount + "台";
                             }
                         }
                     }

+ 4 - 4
Areas/Admin/Controllers/MainServer/PosMachinesController.cs

@@ -112,8 +112,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 //设备类型
                 string DeviceType = dic["DeviceType"].ToString();
                 if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";
@@ -393,8 +393,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 //设备类型
                 string DeviceType = dic["DeviceType"].ToString();
                 if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";

+ 5 - 5
Areas/Admin/Controllers/MainServer/PosMachinesTwoChangeController.cs

@@ -59,7 +59,7 @@ namespace MySystem.Areas.Admin.Controllers
             Fields.Add("PosSn", "1"); //SN编号
             Fields.Add("BrandId", "0"); //品牌
 
-            string condition = " and Status>-1 AND BindingState = 1 AND DATE_SUB(CURDATE(), INTERVAL 120 DAY) >= date(BindingTime) and UpFeeFlag=1 and DownFeeFlag=0 and SeoDescription!='设置成功'";
+            string condition = " and Status>-1 AND BindingState = 1 AND DATE_SUB(CURDATE(), INTERVAL 120 DAY) >= date(BindingTime) and UpFeeFlag=1 and DownFeeFlag=0 and (SeoDescription!='设置成功' or SeoDescription is null or SeoDescription='')";
             //绑定状态
             if (!string.IsNullOrEmpty(BindingStateSelect))
             {
@@ -172,8 +172,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 //设备类型
                 string DeviceType = dic["DeviceType"].ToString();
                 if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";
@@ -912,8 +912,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 // //设备类型
                 // string DeviceType = dic["DeviceType"].ToString();
                 // if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";

+ 279 - 16
Areas/Admin/Controllers/MainServer/PosMachinesTwoController.cs

@@ -179,8 +179,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 //设备类型
                 string DeviceType = dic["DeviceType"].ToString();
                 if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";
@@ -201,18 +201,18 @@ namespace MySystem.Areas.Admin.Controllers
                 if (IsFirst == 1) dic["IsFirst"] = "是";
 
                 //循环开始时间
-                if (!string.IsNullOrEmpty(dic["RecycEndDate"].ToString()))
-                {
-                    // var RecycStartDate = Convert.ToDateTime(dic["RecycEndDate"].ToString()).AddDays(-360).ToString("yyyy-MM-dd HH:mm:ss");
-                    // dic["RecycStartDate"] = RecycStartDate;
-                    string PosSn = dic["PosSn"].ToString();
-                    bool op = db.StoreChangeHistory.Any(m => m.SnNo == PosSn && m.TransType == 2);
-                    if(op)
-                    {
-                        StoreChangeHistory item = db.StoreChangeHistory.FirstOrDefault(m => m.SnNo == PosSn && m.TransType == 2) ?? new StoreChangeHistory();
-                        dic["RecycStartDate"] = item.ToDate == null ? "" : item.ToDate.Value.ToString("yyyy-MM-dd");
-                    }
-                }
+                // if (!string.IsNullOrEmpty(dic["RecycEndDate"].ToString()))
+                // {
+                //     // var RecycStartDate = Convert.ToDateTime(dic["RecycEndDate"].ToString()).AddDays(-360).ToString("yyyy-MM-dd HH:mm:ss");
+                //     // dic["RecycStartDate"] = RecycStartDate;
+                //     string PosSn = dic["PosSn"].ToString();
+                //     bool op = db.StoreChangeHistory.Any(m => m.SnNo == PosSn && m.TransType == 2);
+                //     if(op)
+                //     {
+                //         StoreChangeHistory item = db.StoreChangeHistory.FirstOrDefault(m => m.SnNo == PosSn && m.TransType == 2) ?? new StoreChangeHistory();
+                //         dic["RecycStartDate"] = item.ToDate == null ? "" : item.ToDate.Value.ToString("yyyy-MM-dd");
+                //     }
+                // }
 
                 //实际押金
                 string SeoKeyword = dic["SeoKeyword"].ToString();
@@ -690,8 +690,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("BindMerchantId");
                 //机具类型
                 int PosSnType = int.Parse(dic["PosSnType"].ToString());
-                if (PosSnType == 0) dic["PosSnType"] = "购买机具";
-                if (PosSnType == 1) dic["PosSnType"] = "赠送机具";
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
                 // //设备类型
                 // string DeviceType = dic["DeviceType"].ToString();
                 // if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";
@@ -729,5 +729,268 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+
+        #region 过期机具扣费列表
+
+        /// <summary>
+        /// 根据条件查询过期机具扣费列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Indexs(PosMachinesTwo data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询过期机具扣费列表
+
+        /// <summary>
+        /// 过期机具扣费列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexsData(PosMachinesTwo data, string PosSn, string UserIdMakerCode, string StoreMakerCode, string BrandId, string RecycEndDateData, string AmountYk, string Amountk, string AmountDk, int ShowFlag = 0, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            if (ShowFlag == 0)
+            {
+                Dictionary<string, object> objs = new Dictionary<string, object>();
+
+                Dictionary<string, object> others = new Dictionary<string, object>();
+                others.Add("TotalCount", 0);
+                others.Add("AmountYks", 0);
+                others.Add("AmountDks", 0);
+                objs.Add("other", others);
+                return Json(objs);
+            }
+            decimal AmountYks = 0;//已扣
+            decimal AmountDks = 0;//待扣
+            var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            string condition = " and Status>-1 and RecycEndDate<'" + time + "' and ScanQrTrade>0 and ScanQrTrade<999 and BindingState=0";
+
+            //所属创客编号
+            if (!string.IsNullOrEmpty(UserIdMakerCode))
+            {
+                condition += " and BuyUserId in (select UserId from UserForMakerCode where MakerCode='" + UserIdMakerCode + "')";
+            }
+            //仓库所属创客编号
+            if (!string.IsNullOrEmpty(StoreMakerCode))
+            {
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == StoreMakerCode) ?? new UserForMakerCode();
+                var user = db.Users.FirstOrDefault(m => m.Id == userForMakerCode.UserId) ?? new Users();
+                var store = db.StoreHouse.Where(m => m.UserId == user.Id && m.Status > -1).ToList();
+                var storeIds = "";
+                foreach (var item in store)
+                {
+                    storeIds += item.Id + ",";
+                }
+                storeIds = storeIds.TrimEnd(',');
+                condition += " and StoreId in (" + storeIds + ")";
+            }
+            //品牌
+            if (!string.IsNullOrEmpty(BrandId))
+            {
+                condition += " and BrandId =" + BrandId;
+            }
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                condition += " and PosSn =" + PosSn + "";
+            }
+            // if (!string.IsNullOrEmpty(AmountYk))
+            // {
+            //     condition += " and BrandId =" + BrandId;
+            // }
+            // if (!string.IsNullOrEmpty(Amountk))
+            // {
+            //     condition += " and BrandId =" + BrandId;
+            // }
+            // if (!string.IsNullOrEmpty(AmountDk))
+            // {
+            //     condition += " and BrandId =" + BrandId;
+            // }
+
+            if (!string.IsNullOrEmpty(RecycEndDateData))
+            {
+                string[] datelist = RecycEndDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and RecycEndDate>='" + start + " 00:00:00' and RecycEndDate<='" + end + " 23:59:59'";
+            }
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("PosMachinesTwo", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //绑定状态
+                int BindingState = int.Parse(dic["BindingState"].ToString());
+                if (BindingState == 0) dic["BindingState"] = "未绑定";
+                if (BindingState == 1) dic["BindingState"] = "已绑定";
+                //激活状态
+                int ActivationState = int.Parse(dic["ActivationState"].ToString());
+                if (ActivationState == 0) dic["ActivationState"] = "未激活";
+                if (ActivationState == 1) dic["ActivationState"] = "已激活";
+                //所属创客
+                int BuyUserId = int.Parse(function.CheckInt(dic["BuyUserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == BuyUserId) ?? new Users();
+                dic["UserIdMakerCode"] = userid_Users.MakerCode;
+                dic["UserIdRealName"] = userid_Users.RealName;
+                dic.Remove("BuyUserId");
+                //所属仓库
+                int StoreId = int.Parse(function.CheckInt(dic["StoreId"].ToString()));
+                StoreHouse storeid_StoreHouse = db.StoreHouse.FirstOrDefault(m => m.Id == StoreId) ?? new StoreHouse();
+                dic["StoreIdCode"] = storeid_StoreHouse.StoreNo;
+                dic["StoreIdName"] = storeid_StoreHouse.StoreName;
+                dic.Remove("StoreId");
+                //产品类型
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(dic["BrandId"].ToString()));
+                decimal ScanQrTrade = decimal.Parse(dic["ScanQrTrade"].ToString());
+                var brandInfo = dic["BrandId"].ToString();
+                decimal amount = 0;
+                if (brandInfo.Contains("电签"))
+                {
+                    amount = 200;
+                }
+                if (brandInfo.Contains("大POS"))
+                {
+                    amount = 300;
+                }
+                if (ScanQrTrade > 0 && ScanQrTrade < 999)
+                {
+                    dic["AmountYk"] = amount;
+                    dic["Amountk"] = ScanQrTrade;
+                    dic["AmountDk"] = amount - ScanQrTrade;
+                    // AmountYks += ScanQrTrade;
+                    // AmountDks += amount - ScanQrTrade;
+                }
+                if (ScanQrTrade == 999)
+                {
+                    dic["AmountYk"] = amount;
+                    dic["Amountk"] = amount;
+                    dic["AmountDk"] = 0;
+                    // AmountYks += amount;
+                }
+
+                //参加活动
+                dic["ActivityList"] = RelationClass.GetProfitObjectsActivesList(dic["ActivityList"].ToString());
+                //绑定商户
+                int BindMerchantId = int.Parse(function.CheckInt(dic["BindMerchantId"].ToString()));
+                PosMerchantInfo bindmerchantid_MerchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.Id == BindMerchantId) ?? new PosMerchantInfo();
+                dic["BindMerchantIdMerchantNo"] = bindmerchantid_MerchantInfo.MerchantNo;
+                dic["BindMerchantIdMerchantName"] = bindmerchantid_MerchantInfo.MerchantName;
+                dic.Remove("BindMerchantId");
+                //机具类型
+                int PosSnType = int.Parse(dic["PosSnType"].ToString());
+                if (PosSnType == 0) dic["PosSnType"] = "兑换机具";
+                if (PosSnType == 1) dic["PosSnType"] = "循环机具";
+                //设备类型
+                string DeviceType = dic["DeviceType"].ToString();
+                if (DeviceType == "KysSignPos") dic["DeviceType"] = "快益刷电签POS";
+                if (DeviceType == "KssSignPos") dic["DeviceType"] = "快闪刷电签POS";
+                if (DeviceType == "") dic["DeviceType"] = "";
+
+                //盟主信息
+                int LeaderUserId = int.Parse(function.CheckInt(dic["LeaderUserId"].ToString()));
+                if (LeaderUserId != 0)
+                {
+                    Users users = db.Users.FirstOrDefault(m => m.Id == LeaderUserId) ?? new Users();
+                    dic["UserInfo"] = users.MakerCode + "_" + users.RealName;
+                }
+
+                //是否为第一台机具
+                int IsFirst = int.Parse(dic["IsFirst"].ToString());
+                if (IsFirst == 0) dic["IsFirst"] = "否";
+                if (IsFirst == 1) dic["IsFirst"] = "是";
+
+                //循环开始时间
+                // if (!string.IsNullOrEmpty(dic["RecycEndDate"].ToString()))
+                // {
+                //     // var RecycStartDate = Convert.ToDateTime(dic["RecycEndDate"].ToString()).AddDays(-360).ToString("yyyy-MM-dd HH:mm:ss");
+                //     // dic["RecycStartDate"] = RecycStartDate;
+                //     string PosSn = dic["PosSn"].ToString();
+                //     bool op = db.StoreChangeHistory.Any(m => m.SnNo == PosSn && m.TransType == 2);
+                //     if(op)
+                //     {
+                //         StoreChangeHistory item = db.StoreChangeHistory.FirstOrDefault(m => m.SnNo == PosSn && m.TransType == 2) ?? new StoreChangeHistory();
+                //         dic["RecycStartDate"] = item.ToDate == null ? "" : item.ToDate.Value.ToString("yyyy-MM-dd");
+                //     }
+                // }
+
+                //实际押金
+                string SeoKeyword = dic["SeoKeyword"].ToString();
+                if (SeoKeyword.Length > 2)
+                {
+                    SeoKeyword = (decimal.Parse(SeoKeyword) / 100).ToString();
+                }
+                dic["SeoKeyword"] = SeoKeyword;
+
+                //设置押金
+                string PrizeParams = dic["PrizeParams"].ToString();
+                dic["PrizeParams"] = PrizeParams;
+
+                //所属运营中心
+                int OpId = int.Parse(dic["OpId"].ToString());
+                if (OpId != 0)
+                {
+                    var sys = opdb.SysAdmin.FirstOrDefault(m => m.QueryCount > 0 && m.UserId == OpId) ?? new OpModels.SysAdmin();
+                    dic["OpCode"] = sys.OpCode;
+                }
+
+            }
+            Dictionary<string, object> other = new Dictionary<string, object>();
+            int TotalCount = 0;//总机具数
+            DataTable dt = OtherMySqlConn.dtable("select count(0) from PosMachinesTwo where 1=1" + condition);
+            if (dt.Rows.Count > 0)
+            {
+                TotalCount = int.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+            }
+            DataTable dts = OtherMySqlConn.dtable("select Id from PosMachinesTwo where 1=1" + condition);
+            var Ids = "";
+            foreach (DataRow item in dts.Rows)
+            {
+                Ids += item["Id"].ToString() + ",";
+            }
+            var Id = "," + Ids;
+            var pos = db.PosMachinesTwo.Where(m => Id.Contains("," + m.Id + ",")).ToList();
+            string[] strids = Ids.TrimEnd(',').Split(',');
+            foreach (var items in strids)
+            {
+                int posId = int.Parse(items);
+                var posInfo = pos.FirstOrDefault(m => m.Id == posId) ?? new PosMachinesTwo();
+                decimal ScanQrTrade = decimal.Parse(posInfo.ScanQrTrade.ToString());
+                var brandInfo = RelationClass.GetKqProductBrandInfo(int.Parse(posInfo.BrandId.ToString()));
+                decimal amount = 0;
+                if (brandInfo.Contains("电签"))
+                {
+                    amount = 200;
+                }
+                if (brandInfo.Contains("大POS"))
+                {
+                    amount = 300;
+                }
+                if (ScanQrTrade > 0 && ScanQrTrade < 999)
+                {
+                    AmountYks += ScanQrTrade;
+                    AmountDks += amount - ScanQrTrade;
+                }
+                if (ScanQrTrade == 999)
+                {
+                    AmountYks += amount;
+                }
+            }
+            other.Add("TotalCount", TotalCount);
+            other.Add("AmountYks", AmountYks);
+            other.Add("AmountDks", AmountDks);
+            obj.Add("other", other);
+            return Json(obj);
+        }
+
+        #endregion
+
     }
 }

+ 6 - 6
Areas/Admin/Controllers/MainServer/PosMerchantInfoController.cs

@@ -153,8 +153,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型
@@ -298,8 +298,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型
@@ -620,8 +620,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型

+ 160 - 9
Areas/Admin/Controllers/MainServer/PosMerchantInfoListController.cs

@@ -52,7 +52,7 @@ namespace MySystem.Areas.Admin.Controllers
         /// 商户列表
         /// </summary>
         /// <returns></returns>
-        public JsonResult IndexData(PosMerchantInfo data, string MerIdcardNo, string MerchantName, string PhoneNo, int ShowFlag = 0, int page = 1, int limit = 30)
+        public JsonResult IndexData(PosMerchantInfo data, string MerIdcardNo, string MerchantName, string PhoneNo, string PosSn, int ShowFlag = 0, int page = 1, int limit = 30)
         {
 
             Dictionary<string, string> Fields = new Dictionary<string, string>();
@@ -82,6 +82,11 @@ namespace MySystem.Areas.Admin.Controllers
                 var PhoneNob = PhoneNo.Substring(PhoneNo.Length - 4);
                 condition += " and LEFT(MerchantMobile,3)=" + PhoneNof + " AND RIGHT(MerchantMobile,4)=" + PhoneNob + "";
             }
+            //机具号
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                condition += " and KqSnNo='" + PosSn + "'";
+            }
             Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("PosMerchantInfo", Fields, "Id desc", "0", page, limit, condition);
             List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
             foreach (Dictionary<string, object> dic in diclist)
@@ -113,8 +118,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型
@@ -144,6 +149,151 @@ namespace MySystem.Areas.Admin.Controllers
         #endregion
 
 
+        #region 人工已退商户列表
+
+        /// <summary>
+        /// 根据条件人工已退商户列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Indexrg(PosMerchantInfo data, string right, string BrandId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.BrandId = BrandId;
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询人工已退商户列表
+
+        /// <summary>
+        /// 人工已退商户列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexrgData(PosMerchantInfo data, string MerIdcardNo, string MerchantName, string PhoneNo, string PosSn, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            decimal ReturnAmounts = 0.00M;
+            string condition = " and Status>-1 and StandardStatus=-2";
+            //身份证号
+            if (!string.IsNullOrEmpty(MerIdcardNo))
+            {
+                var IdCardf = MerIdcardNo.Substring(0, 6);
+                var IdCardb = MerIdcardNo.Substring(MerIdcardNo.Length - 4);
+                condition += " and LEFT(MerIdcardNo,6)=" + IdCardf + " AND RIGHT(MerIdcardNo,4)=" + IdCardb + "";
+            }
+            //商户姓名
+            if (!string.IsNullOrEmpty(MerchantName))
+            {
+                condition += " and MerchantName like '%" + MerchantName + "%'";
+            }
+            //手机号
+            if (!string.IsNullOrEmpty(PhoneNo))
+            {
+                var PhoneNof = PhoneNo.Substring(0, 3);
+                var PhoneNob = PhoneNo.Substring(PhoneNo.Length - 4);
+                condition += " and LEFT(MerchantMobile,3)=" + PhoneNof + " AND RIGHT(MerchantMobile,4)=" + PhoneNob + "";
+            }
+            //机具号
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                condition += " and KqSnNo=" + PosSn;
+            }
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("PosMerchantInfo", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //直属创客
+                int UserId = int.Parse(dic["UserId"].ToString());
+                Users puser = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["MakerCode"] = puser.MakerCode;
+                dic["RealName"] = puser.RealName;
+                //顶级创客
+                int TopUserId = int.Parse(dic["TopUserId"].ToString());
+                Users tuser = db.Users.FirstOrDefault(m => m.Id == TopUserId) ?? new Users();
+                dic["TopMakerCode"] = tuser.MakerCode;
+                dic["TopRealName"] = tuser.RealName;
+                //商户创客
+                int MerUserId = int.Parse(dic["MerUserId"].ToString());
+                Users muser = db.Users.FirstOrDefault(m => m.Id == MerUserId) ?? new Users();
+                dic["MerMakerCode"] = muser.MakerCode;
+                dic["MerRealName"] = muser.RealName;
+                //申请创客
+                int SnApplyUserId = int.Parse(dic["SnApplyUserId"].ToString());
+                Users snuser = db.Users.FirstOrDefault(m => m.Id == SnApplyUserId) ?? new Users();
+                dic["SnApplyMakerCode"] = snuser.MakerCode;
+                dic["SnApplyRealName"] = snuser.RealName;
+                //SN仓库
+                int SnStoreId = int.Parse(dic["SnStoreId"].ToString());
+                StoreHouse store = db.StoreHouse.FirstOrDefault(m => m.Id == SnStoreId) ?? new StoreHouse();
+                dic["StoreNo"] = store.StoreNo;
+                dic["StoreName"] = store.StoreName;
+                //机具类型
+                int SnType = int.Parse(dic["SnType"].ToString());
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
+                //返利资格
+                dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
+                //激活类型
+                int ActType = int.Parse(dic["ActType"].ToString());
+                if (ActType == 0) dic["ActType"] = "正常激活";
+                if (ActType == 1) dic["ActType"] = "首次已激活MPOS";
+                if (ActType == 2) dic["ActType"] = "首次已激活KPOS";
+                if (ActType == 3) dic["ActType"] = "循环机划拨激活";
+                //商户状态
+                int MerStatus = int.Parse(dic["MerStatus"].ToString());
+                if (MerStatus == 0) dic["MerStatus"] = "正常";
+                if (MerStatus == 1) dic["MerStatus"] = "冻结";
+                if (MerStatus == 2) dic["MerStatus"] = "关闭";
+                //商户激活状态
+                int ActiveStatus = int.Parse(dic["ActiveStatus"].ToString());
+                if (ActiveStatus == 0) dic["ActiveStatus"] = "未激活";
+                if (ActiveStatus == 1) dic["ActiveStatus"] = "已激活";
+                if (ActiveStatus == 2) dic["ActiveStatus"] = "SN已返现";
+                //商户创客类型
+                int MerUserType = int.Parse(dic["MerUserType"].ToString());
+                if (MerUserType == 0) dic["MerUserType"] = "非商户型创客";
+                if (MerUserType == 1) dic["MerUserType"] = "商户型创客";
+
+                var KqSnNo = dic["KqSnNo"].ToString();
+                var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == KqSnNo) ?? new PosMachinesTwo();
+                //实际押金
+                string SeoKeyword = pos.SeoKeyword.ToString();
+                if (SeoKeyword.Length > 3)
+                {
+                    SeoKeyword = (decimal.Parse(SeoKeyword) / 100).ToString();
+                }
+                ReturnAmounts += decimal.Parse(SeoKeyword);
+                dic["SeoKeyword"] = SeoKeyword;
+
+                //设置押金
+                string PrizeParams = "0";
+                if (!string.IsNullOrEmpty(pos.PrizeParams))
+                {
+                    PrizeParams = pos.PrizeParams.ToString();
+                }
+                dic["PrizeParams"] = PrizeParams;
+            }
+            Dictionary<string, object> other = new Dictionary<string, object>();
+            decimal ReturnAmount = 0.00M;
+            DataTable dt = OtherMySqlConn.dtable("SELECT SUM(Remark) FROM PosMerchantInfo WHERE 1=1" + condition);
+            if (dt.Rows.Count > 0)
+            {
+                ReturnAmount = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString()));
+            }
+            other.Add("ReturnAmount", ReturnAmount.ToString("f2"));
+            other.Add("ReturnAmounts", ReturnAmounts.ToString("f2"));
+            obj.Add("other", other);
+            return Json(obj);
+        }
+
+        #endregion
+
+
         #region 达标商户列表
 
         /// <summary>
@@ -209,8 +359,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型
@@ -629,15 +779,16 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 JsonData dr = list[i];
                 string KqMerNo = dr[0].ToString(); // 商户编号
+                string Amount = dr[0].ToString(); // 已退金额
                 var posMerchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == KqMerNo) ?? new PosMerchantInfo();
                 posMerchantInfo.StandardStatus = -2;
-                Ids += posMerchantInfo.Id + ",";
+                posMerchantInfo.Remark = Amount;
+                Ids += posMerchantInfo.Id + "_" + Amount + ",";
                 db.SaveChanges();
             }
             AddSysLog("0", "PosMerchantInfo", "Import");
             string text = string.Format("导入人工已退,商户Id: '" + Ids.TrimEnd(',') + "',操作人: '" + SysUserName + "_" + SysRealName + "',Time'" + DateTime.Now + "'");
             function.WriteLog(text, "导入人工已退");
-            RedisDbconn.Instance.AddList("ToAlipayAccountQueue", Ids.TrimEnd(','));
             return "success";
         }
         #endregion
@@ -739,8 +890,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["StoreName"] = store.StoreName;
                 //机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //返利资格
                 dic["RebateQual"] = dic["RebateQual"].ToString() == "1" ? "是" : "否";
                 //激活类型

+ 1 - 1
Areas/Admin/Controllers/MainServer/ProfitRewardRecordController.cs

@@ -553,7 +553,7 @@ namespace MySystem.Areas.Admin.Controllers
                 function.WritePage("/Balance/" + BrandId + "/", date + OpTypeString + ".txt", DateTime.Now.ToString());
                 // DoTradeProfit(BrandId, date, OpType);
                 // DoSubsidyProfit(BrandId, date, OpType);
-                RedisDbconn.Instance.AddList("SycnProfitQueue3", BrandId + "#cut#" + date + "#cut#" + OpType + "#cut#" + SysUserName);
+                RedisDbconn.Instance.AddList("SycnProfitQueue2", BrandId + "#cut#" + date + "#cut#" + OpType + "#cut#" + SysUserName);
                 return "success";
             }
             return date + "分润已同步,请勿重复操作";

+ 432 - 0
Areas/Admin/Controllers/MainServer/RecycMachineOrderController.cs

@@ -0,0 +1,432 @@
+/*
+ * 机具回收申请
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class RecycMachineOrderController : BaseController
+    {
+        public RecycMachineOrderController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 机具回收申请列表
+
+        /// <summary>
+        /// 根据条件查询机具回收申请列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(RecycMachineOrder data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询机具回收申请列表
+
+        /// <summary>
+        /// 机具回收申请列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(RecycMachineOrder data, string UserIdMakerCode, string UserIdRealName, string RecycStoreIdStoreNo, string PostTypeSelect, string BrandIdSelect, string CreateDateData, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            // Fields.Add("CreateDate", "3"); //时间
+            Fields.Add("ErpName", "1"); //快递名称
+            Fields.Add("ErpCode", "1"); //快递单号
+            Fields.Add("RecycOrderNo", "1"); //申请单号
+
+
+            string condition = " and Status>-1";
+            //创客编号
+            if (!string.IsNullOrEmpty(UserIdMakerCode))
+            {
+                condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + UserIdMakerCode + "')";
+            }
+            //退回仓库编号
+            if (!string.IsNullOrEmpty(RecycStoreIdStoreNo))
+            {
+                condition += " and RecycStoreId in (select StoreId from StoreForCode where Code='" + RecycStoreIdStoreNo + "')";
+            }
+            //寄回方式
+            if (!string.IsNullOrEmpty(PostTypeSelect))
+            {
+                condition += " and PostType=" + PostTypeSelect;
+            }
+            //机具品牌
+            if (!string.IsNullOrEmpty(BrandIdSelect))
+            {
+                condition += " and BrandId=" + BrandIdSelect;
+            }
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("RecycMachineOrder", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["UserIdMakerCode"] = userid_Users.MakerCode;
+                dic["UserIdRealName"] = userid_Users.RealName;
+                dic.Remove("UserId");
+                //退回仓库
+                int RecycStoreId = int.Parse(function.CheckInt(dic["RecycStoreId"].ToString()));
+                StoreHouse recycstoreid_StoreHouse = db.StoreHouse.FirstOrDefault(m => m.Id == RecycStoreId) ?? new StoreHouse();
+                dic["RecycStoreIdStoreNo"] = recycstoreid_StoreHouse.StoreNo;
+                dic["RecycStoreIdStoreName"] = recycstoreid_StoreHouse.StoreName;
+                dic["RecycStoreIdManageMobile"] = recycstoreid_StoreHouse.ManageMobile;
+                dic.Remove("RecycStoreId");
+                //寄回方式
+                int PostType = int.Parse(dic["PostType"].ToString());
+                if (PostType == 1) dic["PostType"] = "邮寄";
+                if (PostType == 2) dic["PostType"] = "送货上门";
+                if (PostType == 0) dic["PostType"] = "";
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(dic["BrandId"].ToString()));
+
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加机具回收申请
+
+        /// <summary>
+        /// 增加或修改机具回收申请信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加机具回收申请
+
+        /// <summary>
+        /// 增加或修改机具回收申请信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(RecycMachineOrder data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("RecycStoreId", data.RecycStoreId); //退回仓库
+            Fields.Add("PostType", data.PostType); //寄回方式
+            Fields.Add("ErpName", data.ErpName); //快递名称
+            Fields.Add("ErpCode", data.ErpCode); //快递单号
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("RecycMachineOrder", Fields, 0);
+            AddSysLog(data.Id.ToString(), "RecycMachineOrder", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改机具回收申请
+
+        /// <summary>
+        /// 增加或修改机具回收申请信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            RecycMachineOrder editData = db.RecycMachineOrder.FirstOrDefault(m => m.Id == Id) ?? new RecycMachineOrder();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改机具回收申请
+
+        /// <summary>
+        /// 增加或修改机具回收申请信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(RecycMachineOrder data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("RecycStoreId", data.RecycStoreId); //退回仓库
+            Fields.Add("PostType", data.PostType); //寄回方式
+            Fields.Add("ErpName", data.ErpName); //快递名称
+            Fields.Add("ErpCode", data.ErpCode); //快递单号
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrder", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "RecycMachineOrder", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除机具回收申请信息
+
+        /// <summary>
+        /// 删除机具回收申请信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrder", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrder", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrder", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrder", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrder", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrder", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("RecycMachineOrder", Sort, Id);
+
+            AddSysLog(Id.ToString(), "RecycMachineOrder", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+
+                db.RecycMachineOrder.Add(new RecycMachineOrder()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "RecycMachineOrder", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(RecycMachineOrder data, string UserIdMakerCode, string UserIdRealName, string RecycStoreIdStoreNo, string RecycStoreIdStoreName, string RecycStoreIdManageMobile, string PostTypeSelect, string BrandIdSelect)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("CreateDate", "3"); //时间
+            Fields.Add("ErpName", "1"); //快递名称
+            Fields.Add("ErpCode", "1"); //快递单号
+            Fields.Add("RecycOrderNo", "1"); //申请单号
+
+
+            string condition = " and Status>-1";
+            //创客创客编号
+            if (!string.IsNullOrEmpty(UserIdMakerCode))
+            {
+                condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + UserIdMakerCode + "')";
+            }
+            //创客真实姓名
+            if (!string.IsNullOrEmpty(UserIdRealName))
+            {
+                condition += " and UserId in (select UserId from UserForRealName where RealName='" + UserIdRealName + "')";
+            }
+            //退回仓库仓库编号
+            if (!string.IsNullOrEmpty(RecycStoreIdStoreNo))
+            {
+                condition += " and RecycStoreId in (select RecycStoreId from StoreHouseForStoreNo where StoreNo='" + RecycStoreIdStoreNo + "')";
+            }
+            //退回仓库仓库名称
+            if (!string.IsNullOrEmpty(RecycStoreIdStoreName))
+            {
+                condition += " and RecycStoreId in (select RecycStoreId from StoreHouseForStoreName where StoreName='" + RecycStoreIdStoreName + "')";
+            }
+            //退回仓库管理者手机号
+            if (!string.IsNullOrEmpty(RecycStoreIdManageMobile))
+            {
+                condition += " and RecycStoreId in (select RecycStoreId from StoreHouseForManageMobile where ManageMobile='" + RecycStoreIdManageMobile + "')";
+            }
+            //寄回方式
+            if (!string.IsNullOrEmpty(PostTypeSelect))
+            {
+                condition += " and PostType=" + PostTypeSelect;
+            }
+            //机具品牌
+            if (!string.IsNullOrEmpty(BrandIdSelect))
+            {
+                condition += " and BrandId=" + BrandIdSelect;
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("RecycMachineOrder", Fields, "Id desc", "0", 1, 20000, condition, "UserId,RecycStoreId,PostType,ErpName,ErpCode,ResultDate,CancelDate,RecycOrderNo", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["UserIdMakerCode"] = userid_Users.MakerCode;
+                dic["UserIdRealName"] = userid_Users.RealName;
+                dic.Remove("UserId");
+                //退回仓库
+                int RecycStoreId = int.Parse(function.CheckInt(dic["RecycStoreId"].ToString()));
+                StoreHouse recycstoreid_StoreHouse = db.StoreHouse.FirstOrDefault(m => m.Id == RecycStoreId) ?? new StoreHouse();
+                dic["RecycStoreIdStoreNo"] = recycstoreid_StoreHouse.StoreNo;
+                dic["RecycStoreIdStoreName"] = recycstoreid_StoreHouse.StoreName;
+                dic["RecycStoreIdManageMobile"] = recycstoreid_StoreHouse.ManageMobile;
+                dic.Remove("RecycStoreId");
+                //寄回方式
+                int PostType = int.Parse(dic["PostType"].ToString());
+                if (PostType == 1) dic["PostType"] = "邮寄";
+                if (PostType == 2) dic["PostType"] = "送货上门";
+                if (PostType == 0) dic["PostType"] = "";
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            ReturnFields.Add("UserIdMakerCode", "创客创客编号");
+            ReturnFields.Add("UserIdRealName", "创客真实姓名");
+            ReturnFields.Add("RecycStoreIdStoreNo", "退回仓库仓库编号");
+            ReturnFields.Add("RecycStoreIdStoreName", "退回仓库仓库名称");
+            ReturnFields.Add("RecycStoreIdManageMobile", "退回仓库管理者手机号");
+            ReturnFields.Add("PostType", "寄回方式");
+            ReturnFields.Add("ErpName", "快递名称");
+            ReturnFields.Add("ErpCode", "快递单号");
+            ReturnFields.Add("ResultDate", "确认或驳回时间");
+            ReturnFields.Add("CancelDate", "创客撤销时间");
+            ReturnFields.Add("RecycOrderNo", "申请单号");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "RecycMachineOrder", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

+ 363 - 0
Areas/Admin/Controllers/MainServer/RecycMachineOrderPosController.cs

@@ -0,0 +1,363 @@
+/*
+ * 机具回收明细
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class RecycMachineOrderPosController : BaseController
+    {
+        public RecycMachineOrderPosController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 机具回收明细列表
+
+        /// <summary>
+        /// 根据条件查询机具回收明细列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(RecycMachineOrderPos data, string right, string OrderId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.OrderId = OrderId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询机具回收明细列表
+
+        /// <summary>
+        /// 机具回收明细列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(RecycMachineOrderPos data, string OrderNo, string CreateDateData, string BrandIdSelect, string StatusSelect, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            // Fields.Add("OrderId", "1");
+
+            // Fields.Add("CreateDate", "3"); //时间
+            Fields.Add("SnNo", "1"); //机具SN
+
+
+            string condition = " and Status>=-1";
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+            //申请订单
+            if (!string.IsNullOrEmpty(OrderNo))
+            {
+                var recycMachineOrder = db.RecycMachineOrder.FirstOrDefault(m => m.RecycOrderNo == OrderNo) ?? new RecycMachineOrder();
+                condition += " and OrderId=" + recycMachineOrder.Id;
+            }
+            //机具品牌
+            if (!string.IsNullOrEmpty(BrandIdSelect))
+            {
+                condition += " and BrandId=" + BrandIdSelect;
+            }
+            //状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("RecycMachineOrderPos", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //机具品牌
+                dic["BrandId"] = RelationClass.GetKqProductsInfo(int.Parse(dic["BrandId"].ToString()));
+
+                //状态
+                int Status = int.Parse(dic["Status"].ToString());//Status(-1 撤回 0 待处理 1 已确认 2 驳回)
+                if (Status == -1) dic["Status"] = "撤回";
+                if (Status == 0) dic["Status"] = "待处理";
+                if (Status == 1) dic["Status"] = "已确认";
+                if (Status == 2) dic["Status"] = "驳回";
+
+                int OrderId = int.Parse(dic["OrderId"].ToString());
+                var recycMachineOrder = db.RecycMachineOrder.FirstOrDefault(m => m.Id == OrderId) ?? new RecycMachineOrder();
+                dic["OrderNo"] = recycMachineOrder.RecycOrderNo;
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加机具回收明细
+
+        /// <summary>
+        /// 增加或修改机具回收明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right, string OrderId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.OrderId = OrderId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加机具回收明细
+
+        /// <summary>
+        /// 增加或修改机具回收明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(RecycMachineOrderPos data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            Fields.Add("OrderId", data.OrderId);
+
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("RecycMachineOrderPos", Fields, 0);
+            AddSysLog(data.Id.ToString(), "RecycMachineOrderPos", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改机具回收明细
+
+        /// <summary>
+        /// 增加或修改机具回收明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, string OrderId, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.OrderId = OrderId;
+
+
+            RecycMachineOrderPos editData = db.RecycMachineOrderPos.FirstOrDefault(m => m.Id == Id) ?? new RecycMachineOrderPos();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改机具回收明细
+
+        /// <summary>
+        /// 增加或修改机具回收明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(RecycMachineOrderPos data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            Fields.Add("OrderId", data.OrderId);
+
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrderPos", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "RecycMachineOrderPos", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除机具回收明细信息
+
+        /// <summary>
+        /// 删除机具回收明细信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrderPos", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrderPos", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrderPos", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrderPos", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "RecycMachineOrderPos", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("RecycMachineOrderPos", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("RecycMachineOrderPos", Sort, Id);
+
+            AddSysLog(Id.ToString(), "RecycMachineOrderPos", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+
+                db.RecycMachineOrderPos.Add(new RecycMachineOrderPos()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "RecycMachineOrderPos", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(RecycMachineOrderPos data, string OrderIdSelect, string BrandIdSelect)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("CreateDate", "3"); //时间
+            Fields.Add("SnNo", "1"); //机具SN
+
+
+            string condition = " and Status>-1";
+            //申请订单Id
+            if (!string.IsNullOrEmpty(OrderIdSelect))
+            {
+                condition += " and OrderId=" + OrderIdSelect;
+            }
+            //机具品牌
+            if (!string.IsNullOrEmpty(BrandIdSelect))
+            {
+                condition += " and BrandId=" + BrandIdSelect;
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("RecycMachineOrderPos", Fields, "Id desc", "0", 1, 20000, condition, "ResultDate,CancelDate", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //机具品牌
+                dic["BrandId"] = RelationClass.GetKqProductsInfo(int.Parse(dic["BrandId"].ToString()));
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            ReturnFields.Add("ResultDate", "确认或驳回时间");
+            ReturnFields.Add("CancelDate", "创客撤销时间");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "RecycMachineOrderPos", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

+ 5 - 4
Areas/Admin/Controllers/MainServer/StoreChangeHistoryController.cs

@@ -132,11 +132,12 @@ namespace MySystem.Areas.Admin.Controllers
                 if (TransType == 2) dic["TransType"] = "出货";
                 if (TransType == 3) dic["TransType"] = "退货";
                 if (TransType == 4) dic["TransType"] = "驳回";
+                if (TransType == 5) dic["TransType"] = "回仓退款";
                 if (TransType == 0) dic["TransType"] = "采购";
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //库存操作方向
                 int StockOpDirect = int.Parse(dic["StockOpDirect"].ToString());
                 if (StockOpDirect == 0) dic["StockOpDirect"] = "入库";
@@ -436,8 +437,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (TransType == 0) dic["TransType"] = "采购";
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //库存操作方向
                 int StockOpDirect = int.Parse(dic["StockOpDirect"].ToString());
                 if (StockOpDirect == 0) dic["StockOpDirect"] = "入库";

+ 117 - 8
Areas/Admin/Controllers/MainServer/StoreHouseController.cs

@@ -52,7 +52,7 @@ namespace MySystem.Areas.Admin.Controllers
         /// 仓库列表
         /// </summary>
         /// <returns></returns>
-        public JsonResult IndexData(StoreHouse data, string UserIdMakerCode, string UserIdRealName, string ManageUserIdRealName, string ManageUserIdMobile, string ManageUserIdMakerCode, string StoreStatusSelect, string CreateDateData, string MakerCode, string YZOpCode, string OpStatusSelect, string StoreKindSelect, int ShowFlag = 0, int page = 1, int limit = 30)
+        public JsonResult IndexData(StoreHouse data, string UserIdMakerCode, string UserIdRealName, string BrandId, string ManageUserIdRealName, string ManageUserIdMobile, string ManageUserIdMakerCode, string StoreStatusSelect, string CreateDateData, string MakerCode, string YZOpCode, string OpStatusSelect, string StoreKindSelect, int ShowFlag = 0, int page = 1, int limit = 30)
         {
 
             Dictionary<string, string> Fields = new Dictionary<string, string>();
@@ -67,6 +67,11 @@ namespace MySystem.Areas.Admin.Controllers
             }
 
             string condition = " and Status>-1";
+            //品牌
+            if (!string.IsNullOrEmpty(BrandId))
+            {
+                condition += " and BrandId =" + BrandId;
+            }
             //仓库归属人创客编号
             if (!string.IsNullOrEmpty(UserIdMakerCode))
             {
@@ -308,6 +313,7 @@ namespace MySystem.Areas.Admin.Controllers
                     {
                         return "您输入的仓库归属创客编号不存在,请重新输入正确的仓库归属创客编号";
                     }
+
                     Fields.Add("UserId", user.UserId); //仓库归属人
                     Fields.Add("Areas", data.Areas); //所属地区
                     Fields.Add("Address", data.Address); //仓库地址
@@ -336,6 +342,8 @@ namespace MySystem.Areas.Admin.Controllers
                     }
 
                     int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("StoreHouse", Fields, 0);
+                    int StoreId = Id;
+                    var StoreNos = "";
                     //添加分仓创建时间
                     var users = db.Users.FirstOrDefault(m => m.Id == user.UserId) ?? new Users();
                     if (users.Id > 0)
@@ -356,6 +364,7 @@ namespace MySystem.Areas.Admin.Controllers
                         }
                         No = "S" + No;
                         edit.StoreNo = No;
+                        StoreNos = No;
                         db.StoreForCode.Add(new StoreForCode()
                         {
                             Code = No,
@@ -391,10 +400,35 @@ namespace MySystem.Areas.Admin.Controllers
                         account.FixedAmount = 20000;
                         account.ValidAmount = 20000;
                     }
-
+                    var check = db.StoreHouse.Any(m => m.Status > 0 && m.Sort == 0 && m.OpId > 0 && m.UserId == user.UserId);
+                    var OpId = 0;
+                    if (check)
+                    {
+                        var store = db.StoreHouse.FirstOrDefault(m => m.Status > 0 && m.Sort == 0 && m.OpId > 0 && m.UserId == user.UserId);
+                        OpId = store.OpId;
+                        edit.OpId = OpId;
+                        var sysAdmin = opdb.SysAdmin.FirstOrDefault(m => m.Sort == m.Id && m.UserId == OpId) ?? new OpModels.SysAdmin();
+                        sysAdmin.StoreCount += 1;
+                        var query = opdb.StoreForOperate.FirstOrDefault(m => m.OpId == sysAdmin.UserId && m.StoreId == StoreId && m.Sort == 0 && m.QueryCount == user.UserId && m.Status == 0);
+                        if (query == null)
+                        {
+                            query = opdb.StoreForOperate.Add(new OpModels.StoreForOperate()
+                            {
+                                CreateDate = DateTime.Now, //创建时间
+                                CreateMan = SysUserName + "_" + SysRealName,
+                                QueryCount = user.UserId,//分仓所属人Id
+                                SeoTitle = user.MakerCode,
+                                SeoKeyword = StoreNos,
+                                SeoDescription = data.StoreName,
+                                OpId = sysAdmin.UserId,
+                                StoreId = StoreId,
+                            }).Entity;
+                        }
+                    }
                     RedisDbconn.Instance.Set("StoreForName:" + data.StoreName, Id);
                     AddSysLog(data.Id.ToString(), "StoreHouse", "add");
                     db.SaveChanges();
+                    opdb.SaveChanges();
 
                     SetRedis(Id, user.UserId);
                 }
@@ -457,13 +491,19 @@ namespace MySystem.Areas.Admin.Controllers
                 return "您输入的仓库负责人编号不存在,请重新输入正确的仓库负责人编号";
             }
             var store = db.StoreHouse.Where(m => m.Sort == 0 && m.Status == 1 && m.UserId == user.UserId).ToList();
-            var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == user.UserId) ?? new UserAccount();
-            if (userAccount.Id > 0)
+            UserAccount userAccount = db.UserAccount.FirstOrDefault(m => m.Id == user.UserId);
+            if (userAccount == null)
             {
-                userAccount.StoreDeposit = data.Deposit;
+                userAccount = db.UserAccount.Add(new UserAccount()
+                {
+                    Id = user.UserId,
+                    UserId = user.UserId,
+                }).Entity;
                 db.SaveChanges();
             }
-            RedisDbconn.Instance.AddList("ResetStoreReserveQueue", user.UserId.ToString());
+            userAccount.StoreDeposit = data.Deposit;
+            db.SaveChanges();
+            // RedisDbconn.Instance.AddList("ResetStoreReserveQueue", user.UserId.ToString());
             decimal olddeposit = 0;//旧押金
             decimal newdeposit = 0;//新押金
             var sto = db.StoreHouse.FirstOrDefault(m => m.Id == data.Id);
@@ -608,6 +648,8 @@ namespace MySystem.Areas.Admin.Controllers
             Fields.Add("Status", 1);
 
             int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("StoreHouse", Fields, 0);
+            int StoreId = Id;
+            var StoreNos = "";
             //添加分仓创建时间
             var users = db.Users.FirstOrDefault(m => m.Id == user.UserId) ?? new Users();
             if (users.Id > 0)
@@ -628,6 +670,7 @@ namespace MySystem.Areas.Admin.Controllers
                 }
                 No = "S" + No;
                 edit.StoreNo = No;
+                StoreNos = No;
                 db.StoreForCode.Add(new StoreForCode()
                 {
                     Code = No,
@@ -648,10 +691,35 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 storeForName.StoreId = Id;
             }
+            var check = db.StoreHouse.Any(m => m.Status > 0 && m.Sort == 0 && m.OpId > 0 && m.UserId == user.UserId);
+            var OpId = 0;
+            if (check)
+            {
+                var store = db.StoreHouse.FirstOrDefault(m => m.Status > 0 && m.Sort == 0 && m.OpId > 0 && m.UserId == user.UserId);
+                OpId = store.OpId;
+                edit.OpId = OpId;
+                var sysAdmin = opdb.SysAdmin.FirstOrDefault(m => m.Sort == m.Id && m.UserId == OpId) ?? new OpModels.SysAdmin();
+                sysAdmin.StoreCount += 1;
+                var query = opdb.StoreForOperate.FirstOrDefault(m => m.OpId == sysAdmin.UserId && m.StoreId == StoreId && m.Sort == 0 && m.QueryCount == user.UserId && m.Status == 0);
+                if (query == null)
+                {
+                    query = opdb.StoreForOperate.Add(new OpModels.StoreForOperate()
+                    {
+                        CreateDate = DateTime.Now, //创建时间
+                        CreateMan = SysUserName + "_" + SysRealName,
+                        QueryCount = user.UserId,//分仓所属人Id
+                        SeoTitle = user.MakerCode,
+                        SeoKeyword = StoreNos,
+                        SeoDescription = data.StoreName,
+                        OpId = sysAdmin.UserId,
+                        StoreId = StoreId,
+                    }).Entity;
+                }
+            }
             RedisDbconn.Instance.Set("StoreForName:" + data.StoreName, Id);
             AddSysLog(data.Id.ToString(), "StoreHouse", "add");
             db.SaveChanges();
-
+            opdb.SaveChanges();
             SetRedis(Id, user.UserId);
             return "success";
         }
@@ -851,6 +919,7 @@ namespace MySystem.Areas.Admin.Controllers
                 string error = "";
                 decimal amount = 0;
                 List<string> PosSnList = new List<string>();
+                List<string> opData = new List<string>();
                 for (int i = 1; i < list.Count; i++)
                 {
                     JsonData dr = list[i];
@@ -931,8 +1000,9 @@ namespace MySystem.Areas.Admin.Controllers
                                 db.StoreChangeHistory.Add(new StoreChangeHistory()
                                 {
                                     CreateDate = DateTime.Now,
+                                    CreateMan = SysUserName,
                                     UserId = user.Id, //创客
-                                    FromUserId = user.Id,//来源创客
+                                    FromUserId = posInfo.BuyUserId,//来源创客
                                     ToUserId = toStore.UserId,//接收创客
                                     StoreId = fromStore.Id, //出货仓库
                                     ToStoreId = toStore.Id, //发货仓库
@@ -976,6 +1046,11 @@ namespace MySystem.Areas.Admin.Controllers
                                     AfterOutNum = toStore.OutNum, //操作后出库数
                                 }).Entity;
                                 db.SaveChanges();
+                                
+                                if(!opData.Contains(posInfo.BuyUserId + ":" + posInfo.BrandId))
+                                {
+                                    opData.Add(posInfo.BuyUserId + ":" + posInfo.BrandId);
+                                }
 
                                 posInfo.StoreId = toStore.Id;
                                 posInfo.BuyUserId = 0;
@@ -1005,6 +1080,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 toStore.LaveNum += 1;
                                 fromStore.TotalNum -= 1;
                                 fromStore.LaveNum -= 1;
+                                PublicFunction.ClearPosHistory(db, posInfo.PosSn); //清除机具历史记录
                                 db.SaveChanges();
                             }
                             else
@@ -1034,6 +1110,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 db.StoreChangeHistory.Add(new StoreChangeHistory()
                                 {
                                     CreateDate = DateTime.Now,
+                                    CreateMan = SysUserName,
                                     UserId = user.Id, //创客
                                     FromUserId = user.Id,//来源创客
                                     ToUserId = toStore.UserId,//接收创客
@@ -1064,6 +1141,11 @@ namespace MySystem.Areas.Admin.Controllers
                                 }).Entity;
                                 db.SaveChanges();
 
+                                if(!opData.Contains(posInfo.BuyUserId + ":" + posInfo.BrandId))
+                                {
+                                    opData.Add(posInfo.BuyUserId + ":" + posInfo.BrandId);
+                                }
+
                                 posInfo.StoreId = toStore.Id;
                                 posInfo.BuyUserId = 0;
                                 posInfo.UserId = 0;
@@ -1090,6 +1172,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 fuserMachineData.UnBindCount -= 1;
                                 toStore.LaveNum += 1;
                                 toStore.TotalNum += 1;
+                                PublicFunction.ClearPosHistory(db, posInfo.PosSn); //清除机具历史记录
                                 db.SaveChanges();
                             }
                             db.SaveChanges();
@@ -1102,6 +1185,11 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     return "Warning|" + error;
                 }
+                foreach(string sub in opData)
+                {
+                    string[] datalist = sub.Split(":");
+                    PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+                }
             }
             AddSysLog("0", "MachinesRejectStore", "Import");
             return "success";
@@ -1536,6 +1624,27 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+        #region 重置仓库额度
+
+        /// <summary>
+        /// 重置仓库额度
+        /// </summary>
+        /// <returns></returns>
+        public string SycnAmountData(int Id = 0)
+        {
+            if (Id > 0)
+            {
+                var storeHouse = db.StoreHouse.FirstOrDefault(m => m.Id == Id && m.Sort == 0) ?? new StoreHouse();
+                RedisDbconn.Instance.AddList("ResetStoreReserveQueue", storeHouse.UserId);
+            }
+            AddSysLog(Id, "StoreHouse", "SycnAmountData");
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
         #region 设置缓存
 
         private void SetRedis(int Id, int UserId)

+ 16 - 4
Areas/Admin/Controllers/MainServer/StoreMachineApplyController.cs

@@ -103,7 +103,7 @@ namespace MySystem.Areas.Admin.Controllers
                 dic.Remove("UserId");
 
                 int OpId = int.Parse(function.CheckInt(dic["QueryCount"].ToString()));
-                var opInfo = opdb.SysAdmin.FirstOrDefault( m => m.UserId == OpId && m.QueryCount == 1 && m.Status > -1) ?? new OpModels.SysAdmin();
+                var opInfo = opdb.SysAdmin.FirstOrDefault(m => m.UserId == OpId && m.QueryCount == 1 && m.Status > -1) ?? new OpModels.SysAdmin();
                 dic["OpCode"] = opInfo.OpCode;
 
             }
@@ -527,6 +527,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandId);
                 if (items == null)
                 {
@@ -555,6 +557,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandIds == 7) FromStoreId = 1047;
                 if (BrandIds == 8) FromStoreId = 4831;
                 if (BrandIds == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 var brandInfo = db.KqProducts.FirstOrDefault(m => m.Id == BrandIds);
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandIds) ?? new CheckSendInfo();
                 if (items.Num > num)
@@ -577,6 +581,10 @@ namespace MySystem.Areas.Admin.Controllers
                 BrandId = Convert.ToInt32(Brand);
                 MachineForSnNo posInfo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
                 var pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posInfo.SnId) ?? new PosMachinesTwo();
+                if (pos.BindingState == 1 || pos.ActivationState == 1)
+                {
+                    error += "以下操作失败" + SnNo + ',' + "该机具已绑定或已激活" + '\n';
+                }
                 if (posInfo.SnId > 0)
                 {
                     if (pos.Id > 0)
@@ -596,6 +604,8 @@ namespace MySystem.Areas.Admin.Controllers
                     if (BrandId == 7) FromStoreId = 1047;
                     if (BrandId == 8) FromStoreId = 4831;
                     if (BrandId == 9) FromStoreId = 4832;
+                    if (BrandId == 10) FromStoreId = 5512;
+                    if (BrandId == 11) FromStoreId = 5513;
                     if (PosSnList.Contains(SnNo))
                     {
                         error += "以下操作失败" + SnNo + ',' + "该机具重复发货" + '\n';
@@ -633,7 +643,9 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
-                tostore = db.StoreHouse.FirstOrDefault(m => m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status > -1);
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
+                tostore = db.StoreHouse.FirstOrDefault(m => m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status > -1 && m.Sort == 0);
                 SendInfo item = sendInfos.FirstOrDefault(m => m.FromStoreId == FromStoreId && m.ToStoreId == tostore.Id && m.BrandId == BrandId);
                 if (item == null)
                 {
@@ -654,7 +666,7 @@ namespace MySystem.Areas.Admin.Controllers
                 apply.SeoDescription = function.CheckString(SnNo) + ',';
 
                 fromstore = db.StoreHouse.FirstOrDefault(m => m.Id == FromStoreId);
-                tostore = db.StoreHouse.FirstOrDefault(m => m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status > -1);
+                tostore = db.StoreHouse.FirstOrDefault(m => m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status > -1 && m.Sort == 0);
 
                 MachineForSnNo machinefor = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
                 PosMachinesTwo machine = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machinefor.SnId && m.BuyUserId == 0 && m.UserId == 0 && m.PreUserId == 0) ?? new PosMachinesTwo();
@@ -817,7 +829,7 @@ namespace MySystem.Areas.Admin.Controllers
             public int Num { get; set; }
         }
 
-         //检查发货信息实体类
+        //检查发货信息实体类
         private class CheckSendInfo
         {
             public int BrandId { get; set; }

+ 2 - 0
Areas/Admin/Controllers/MainServer/StoreStockChangeController.cs

@@ -141,6 +141,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (TransType == 2) dic["TransType"] = "出货";
                 if (TransType == 3) dic["TransType"] = "退货";
                 if (TransType == 0) dic["TransType"] = "采购";
+                if (TransType == 4) dic["TransType"] = "驳回";
+                if (TransType == 5) dic["TransType"] = "回仓退款";
                 //库存操作方向
                 int StockOpDirect = int.Parse(dic["StockOpDirect"].ToString());
                 if (StockOpDirect == 0) dic["StockOpDirect"] = "入库";

+ 4 - 4
Areas/Admin/Controllers/MainServer/StoreSwapSnController.cs

@@ -109,8 +109,8 @@ namespace MySystem.Areas.Admin.Controllers
 
                 //SN类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
 
                 //兑换状态
                 int SwapStatus = int.Parse(dic["SwapStatus"].ToString());
@@ -394,8 +394,8 @@ namespace MySystem.Areas.Admin.Controllers
 
                 //SN类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
 
                 //兑换状态
                 int SwapStatus = int.Parse(dic["SwapStatus"].ToString());

+ 4 - 1
Areas/Admin/Controllers/MainServer/SysRechargeRecordController.cs

@@ -128,18 +128,21 @@ namespace MySystem.Areas.Admin.Controllers
             string BizAmount31 = "0.00";//活动奖励
             string BizAmount114 = "0.00";//私董会分红
             string BizAmount115 = "0.00";//分仓奖励
-            DataTable dt = OtherMySqlConn.dtable("SELECT SUM(if(BizType=30,Amount,0)),SUM(if(BizType=31,Amount,0)),SUM(if(BizType=114,Amount,0)),SUM(if(BizType=115,Amount,0)) FROM SysRechargeRecord where 1=1 " + condition);
+            string BizAmount126 = "0.00";//机具货款退还
+            DataTable dt = OtherMySqlConn.dtable("SELECT SUM(if(BizType=30,Amount,0)),SUM(if(BizType=31,Amount,0)),SUM(if(BizType=114,Amount,0)),SUM(if(BizType=115,Amount,0)),SUM(if(BizType=126,Amount,0)) FROM SysRechargeRecord where 1=1 " + condition);
             if (dt.Rows.Count > 0)
             {
                 BizAmount30 = decimal.Parse(function.CheckNum(dt.Rows[0][0].ToString())).ToString("f2");
                 BizAmount31 = decimal.Parse(function.CheckNum(dt.Rows[0][1].ToString())).ToString("f2");
                 BizAmount114 = decimal.Parse(function.CheckNum(dt.Rows[0][2].ToString())).ToString("f2");
                 BizAmount115 = decimal.Parse(function.CheckNum(dt.Rows[0][3].ToString())).ToString("f2");
+                BizAmount126 = decimal.Parse(function.CheckNum(dt.Rows[0][4].ToString())).ToString("f2");
             }
             other.Add("BizAmount30", BizAmount30);
             other.Add("BizAmount31", BizAmount31);
             other.Add("BizAmount114", BizAmount114);
             other.Add("BizAmount115", BizAmount115);
+            other.Add("BizAmount126", BizAmount126);
             obj.Add("other", other);
             return Json(obj);
         }

+ 858 - 84
Areas/Admin/Controllers/MainServer/SysToolsController.cs

@@ -187,9 +187,12 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     CreditTrade = spdb.TradeRecord.Where(m => m.Id > StartId && m.TradeSnNo == pos.PosSn && m.ProductType == "9").Sum(m => m.TradeAmount) / 100;
                 }
+                else if (pos.BrandId == 10 || pos.BrandId == 11)
+                {
+                    CreditTrade = spdb.TradeRecord.Where(m => m.Id > StartId && m.TradeSnNo == pos.PosSn && m.ProductType == "10").Sum(m => m.TradeAmount);
+                }
                 pos.CreditTrade = CreditTrade;
                 db.SaveChanges();
-                StatTradeAmount(pos.PosSn, StartId);
             }
             if (AddActPrize == 1)
             {
@@ -470,10 +473,13 @@ namespace MySystem.Areas.Admin.Controllers
                 else if (pos.BrandId == 9)
                 {
                     CreditTrade = spdb.TradeRecord.Where(m => m.Id > StartId && m.TradeSnNo == pos.PosSn && m.ProductType == "9").Sum(m => m.TradeAmount) / 100;
+                }                
+                else if (pos.BrandId == 10 || pos.BrandId == 11)
+                {
+                    CreditTrade = spdb.TradeRecord.Where(m => m.Id > StartId && m.TradeSnNo == pos.PosSn && m.ProductType == "10").Sum(m => m.TradeAmount);
                 }
                 pos.CreditTrade = CreditTrade;
                 db.SaveChanges();
-                StatTradeAmount(pos.PosSn);
             }
             if (AddActPrize == 1)
             {
@@ -679,7 +685,11 @@ namespace MySystem.Areas.Admin.Controllers
                                 prizes.Add(40);
                             }
                         }
-                        else if (pos.BrandId == 6 && ActPrize == 0)
+                        else if (pos.BrandId == 6 && ActPrize == 0) //立刷首台无押金机返50
+                        {
+                            prizes.Add(50);
+                        }
+                        else if((pos.BrandId == 10 || pos.BrandId == 11) && pos.IsFirst == 1 && ActPrize == 0) //联动首台无押金机返50
                         {
                             prizes.Add(50);
                         }
@@ -798,18 +808,6 @@ namespace MySystem.Areas.Admin.Controllers
             }
             db.Dispose();
         }
-        //重置交易额
-        public void StatTradeAmount(string PosSn, int StartId = 0)
-        {
-            DateTime start = DateTime.Parse(DateTime.Now.ToString("yyyy-MM") + "-01 00:00:00");
-            if (DateTime.Now.Day == 1)
-            {
-                start = DateTime.Parse(DateTime.Now.AddMonths(-1).ToString("yyyy-MM") + "-01 00:00:00");
-            }
-            DateTime end = DateTime.Now;
-            SycnSpTradeService.Instance.Start(PosSn, start, end, StartId);
-            RedisDbconn.Instance.AddList("ResetTradeAmountList", PosSn);
-        }
 
         #endregion
 
@@ -997,7 +995,7 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 Users posUsers = db.Users.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new Users();
                 decimal Deposits = decimal.Parse(function.CheckNum(pos.SeoKeyword));
-                if (pos.BrandId != 2 && pos.BrandId != 7)
+                if (pos.BrandId != 2 && pos.BrandId != 7 && pos.BrandId != 10 && pos.BrandId != 11)
                 {
                     Deposits = Deposits / 100;
                 }
@@ -1090,7 +1088,7 @@ namespace MySystem.Areas.Admin.Controllers
             }
             string tradeAmount = pos.CreditTrade.ToString();
             decimal Deposit = decimal.Parse(function.CheckNum(pos.SeoKeyword));
-            if (pos.BrandId != 2 && pos.BrandId != 7)
+            if (pos.BrandId != 2 && pos.BrandId != 7 && pos.BrandId != 10 && pos.BrandId != 11)
             {
                 Deposit = Deposit / 100;
             }
@@ -1164,14 +1162,14 @@ namespace MySystem.Areas.Admin.Controllers
             if (leader10.Id > 0)
             {
                 Users user = db.Users.FirstOrDefault(m => m.Id == leader10.UserId) ?? new Users();
-                Leader10 = "金额:" + leader10.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName;
+                Leader10 = "金额:" + leader10.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",发奖时间:" + leader10.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss");
                 // Leader10 = "金额:" + leader10.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",手机号:" + user.Mobile;
             }
             var yyzx5 = db.UserAccountRecord.FirstOrDefault(m => m.QueryCount == pos.Id && m.ChangeType == 121) ?? new UserAccountRecord();
             if (yyzx5.Id > 0)
             {
                 Users user = db.Users.FirstOrDefault(m => m.Id == yyzx5.UserId) ?? new Users();
-                YYZX5 = "金额:" + yyzx5.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName;
+                YYZX5 = "金额:" + yyzx5.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",发奖时间:" + yyzx5.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss");
                 // YYZX5 = "金额:" + yyzx5.ChangeAmount + ",创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",手机号:" + user.Mobile;
             }
             MachineApply apply = db.MachineApply.FirstOrDefault(m => m.SwapSnExpand.Contains(pos.PosSn)) ?? new MachineApply();
@@ -1191,6 +1189,8 @@ namespace MySystem.Areas.Admin.Controllers
             result += "机器持有人顶级:创客编号:" + posTopUser.MakerCode + ",姓名:" + posTopUser.RealName + "\n";
             result += "\n";
             result += "机具SN:" + pos.PosSn + "\n";
+            string PosSnType = pos.PosSnType == 0 ? "兑换机" : "循环机";
+            result += "机具类型:" + PosSnType + "\n";
             result += "商户编号:" + merInfo + ",商户姓名:" + merName + "\n";
             result += "商户型机器/直拓机器:创客编号:" + posSubUser.MakerCode + ",姓名:" + posSubUser.RealName + "\n";
             // result += "商户型机器/直拓机器:创客编号:" + posSubUser.MakerCode + ",姓名:" + posSubUser.RealName + ",手机号:" + posSubUser.Mobile + "\n";
@@ -1237,8 +1237,8 @@ namespace MySystem.Areas.Admin.Controllers
             result += "流量费发放对象:" + FluxUser6 + "\n";
             result += "开机奖20:" + OpenUser20 + "\n";
             // result += "开机奖10:" + OpenUser10 + "\n";
-            result += "盟主奖" + Leader10 + "\n";
-            result += "运营中心奖" + YYZX5 + "\n";
+            result += "盟主奖" + Leader10 + "\n";
+            result += "运营中心奖" + YYZX5 + "\n";
             return result;
         }
         //解析金控日志
@@ -1417,6 +1417,10 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "请输入新机具SN";
             }
+            if (string.IsNullOrEmpty(MerNo))
+            {
+                return "请输入商户编号";
+            }
             string[] OldSnList = OldSn.Split('\n');
             string[] NewSnList = NewSn.Split('\n');
             if (OldSnList.Length != NewSnList.Length)
@@ -1473,22 +1477,19 @@ namespace MySystem.Areas.Admin.Controllers
                 // {
                 //     return "原机具未绑定";
                 // }
-                PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId);
+                PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId && m.PreUserId == 0);//添加新机是否为预发机判断
                 if (newpos == null)
                 {
-                    return "新机具SN不正确";
+                    return "新机具SN不正确或不满足条件";
                 }
                 oldPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == oldpos.BrandId) ?? new KqProducts();
                 newPosBrand = db.KqProducts.FirstOrDefault(m => m.Id == newpos.BrandId) ?? new KqProducts();
-                PosMerchantInfo merchant = new PosMerchantInfo();
-                if (!string.IsNullOrEmpty(MerNo))
-                {
-                    merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PosMerchantInfo();
-                }
-                else
+                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo);
+                if (merchant == null)
                 {
-                    merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == oldpos.BindMerchantId) ?? new PosMerchantInfo();
+                    CustomerSqlConn.op("insert into PosMerchantInfo select * from PosMerchantInfoBak where KqMerNo='" + MerNo + "'", MysqlConn.connstr);
                 }
+                merchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerNo) ?? new PosMerchantInfo();
                 newpos.BindMerchantId = merchant.Id;
                 newpos.BuyUserId = oldpos.BuyUserId;
                 newpos.UserId = oldpos.UserId;
@@ -1530,6 +1531,8 @@ namespace MySystem.Areas.Admin.Controllers
                     forMerNo.SnId = newpos.Id;
                 }
                 merchant.KqSnNo = NewSn;
+                merchant.ActiveStatus = newpos.ActivationState;
+                merchant.MerStandardDate = newpos.ActivationTime;
                 db.MachineChangeDetail.Add(new MachineChangeDetail()
                 {
                     CreateDate = DateTime.Now,
@@ -1597,6 +1600,7 @@ namespace MySystem.Areas.Admin.Controllers
             string[] OldSnList;
             string[] NewSnList;
             decimal amount = 0;
+            List<string> opData = new List<string>();
             //创客坏机换新
             if (ChangeType == "0")
             {
@@ -1649,10 +1653,10 @@ namespace MySystem.Areas.Admin.Controllers
                     {
                         return "您输入的坏机SN不存在或者不在" + MakerCode + "名下";
                     }
-                    PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId && m.BindingState == 0) ?? new PosMachinesTwo();
+                    PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId && m.BindingState == 0 && m.PreUserId == 0) ?? new PosMachinesTwo();
                     if (newpos.Id == 0)
                     {
-                        return "您输入的新机SN不存在";
+                        return "您输入的新机SN不存在或不满足条件";
                     }
                     StoreHouse storeFrom = db.StoreHouse.FirstOrDefault(m => m.Id == storeForCodeFrom.StoreId);
                     if (Convert.ToInt32(storeFrom.BrandId) != Convert.ToInt32(newpos.BrandId))
@@ -1711,6 +1715,11 @@ namespace MySystem.Areas.Admin.Controllers
                     newpos.UserId = oldpos.UserId;
                     newpos.PreUserId = oldpos.PreUserId;
 
+                    if (!opData.Contains(oldpos.BuyUserId + ":" + oldpos.BrandId))
+                    {
+                        opData.Add(oldpos.BuyUserId + ":" + oldpos.BrandId);
+                    }
+
                     oldpos.StoreId = storeBack.Id;
                     oldpos.QueryCount = 0;
                     oldpos.UpdateDate = null;
@@ -1752,6 +1761,7 @@ namespace MySystem.Areas.Admin.Controllers
                     oldpos.BuyUserId = 0;
                     oldpos.UserId = 0;
                     oldpos.Status = -1;
+                    PublicFunction.ClearPosHistory(db, oldpos.PosSn); //清除机具历史记录
                     db.SaveChanges();
 
                     PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == newpos.BindMerchantId);
@@ -1857,10 +1867,10 @@ namespace MySystem.Areas.Admin.Controllers
                     {
                         return "您输入的坏机SN不存在或者不在仓库" + StoreCode + "中";
                     }
-                    PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId && m.BindingState == 0) ?? new PosMachinesTwo();
+                    PosMachinesTwo newpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == newForSnNo.SnId && m.BindingState == 0 && m.PreUserId == 0) ?? new PosMachinesTwo();
                     if (newpos.Id == 0)
                     {
-                        return "您输入的新机SN不存在";
+                        return "您输入的新机SN不存在或不满足条件";
                     }
                     StoreHouse storeFrom = db.StoreHouse.FirstOrDefault(m => m.Id == storeForCodeFrom.StoreId);
                     if (Convert.ToInt32(storeFrom.BrandId) != Convert.ToInt32(oldpos.BrandId))
@@ -1899,6 +1909,11 @@ namespace MySystem.Areas.Admin.Controllers
                     newpos.IsFirst = oldpos.IsFirst;
                     newpos.TransferTime = oldpos.TransferTime;
 
+                    if (!opData.Contains(oldpos.BuyUserId + ":" + oldpos.BrandId))
+                    {
+                        opData.Add(oldpos.BuyUserId + ":" + oldpos.BrandId);
+                    }
+
                     oldpos.StoreId = storeBack.Id;
                     oldpos.QueryCount = 0;
                     oldpos.UpdateDate = null;
@@ -1940,6 +1955,7 @@ namespace MySystem.Areas.Admin.Controllers
                     oldpos.BuyUserId = 0;
                     oldpos.UserId = 0;
                     oldpos.Status = -1;
+                    PublicFunction.ClearPosHistory(db, oldpos.PosSn); //清除机具历史记录
                     db.SaveChanges();
 
                     BrokenMachineChange add = db.BrokenMachineChange.Add(new BrokenMachineChange()
@@ -2091,11 +2107,144 @@ namespace MySystem.Areas.Admin.Controllers
             //         }));
             //     }
             // }
+            foreach (string sub in opData)
+            {
+                string[] datalist = sub.Split(":");
+                PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+            }
             return "success";
         }
         #endregion
 
 
+        // #region 机具解绑
+
+        // public IActionResult Unbind(string right)
+        // {
+        //     ViewBag.RightInfo = RightInfo;
+        //     ViewBag.right = right;
+
+        //     return View();
+        // }
+
+        // [HttpPost]
+        // public string UnbindDo(string PosSn, string MakerCode, string MerNo, int IsSend = 0)
+        // {
+        //     if (string.IsNullOrEmpty(PosSn))
+        //     {
+        //         return "请输入机具SN";
+        //     }
+        //     if (string.IsNullOrEmpty(MakerCode))
+        //     {
+        //         return "请输入创客编号";
+        //     }
+        //     MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == PosSn);
+        //     if (forSnNo == null)
+        //     {
+        //         return "机具SN不存在";
+        //     }
+        //     PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == forSnNo.SnId);
+        //     if (pos == null)
+        //     {
+        //         return "机具SN不存在";
+        //     }
+        //     if (string.IsNullOrEmpty(MerNo) && pos.BrandId != 1 && pos.BrandId != 3)
+        //     {
+        //         return "请输入商户编号";
+        //     }
+        //     UserForMakerCode forMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+        //     if (forMakerCode == null)
+        //     {
+        //         return "创客不存在";
+        //     }
+        //     MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == MerNo);
+        //     if (forMerNo == null && pos.BrandId != 1 && pos.BrandId != 3)
+        //     {
+        //         return "商户编号不存在";
+        //     }
+        //     if (pos.BuyUserId != forMakerCode.UserId)
+        //     {
+        //         return "机具SN和创客不匹配";
+        //     }
+        //     if (pos.ActivationState == 1)
+        //     {
+        //         return "机具已激活,不能解绑";
+        //     }
+        //     if (pos.BuyUserId == 0)
+        //     {
+        //         return "机具是仓库机,不支持解绑";
+        //     }
+        //     if (pos.BindingState == 0)
+        //     {
+        //         return "机具未绑定,不支持解绑";
+        //     }
+        //     if (pos.BindingTime < DateTime.Now.AddDays(-30) && SysUserName != "admin")
+        //     {
+        //         return "机具绑定已超过30天,不支持解绑";
+        //     }
+        //     if (pos.CreditTrade > 0 || !string.IsNullOrEmpty(pos.SeoKeyword))
+        //     {
+        //         return "该机具已交易,无法解绑";
+        //     }
+        //     if (forMerNo != null)
+        //     {
+        //         PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+        //         if (merchant != null)
+        //         {
+        //             //机具解绑删除客小爽企业版对应数据
+        //             var merInfo = db.BusinessPartnerMerchant.FirstOrDefault(m => m.MerchantId == merchant.Id);
+        //             if (merInfo != null)
+        //             {
+        //                 db.BusinessPartnerMerchant.Remove(merInfo);
+        //             }
+        //             var posInfo = db.BusinessPartnerPos.FirstOrDefault(m => m.PosId == pos.Id);
+        //             if (posInfo != null)
+        //             {
+        //                 db.BusinessPartnerPos.Remove(posInfo);
+        //             }
+
+        //             db.PosMerchantInfo.Remove(merchant);
+        //         }
+        //         db.MachineForMerNo.Remove(forMerNo);
+        //         db.SaveChanges();
+        //     }
+        //     db.MachineUnBind.Add(new MachineUnBind()
+        //     {
+        //         CreateDate = DateTime.Now,
+        //         SeoTitle = SysUserName + "-" + SysRealName,
+        //         MerchantId = pos.BindMerchantId,
+        //         AuditDate = DateTime.Now,
+        //         AuditDesc = "平台操作解绑",
+        //         AuditStatus = 1,
+        //         SnNo = pos.PosSn,
+        //         BrandId = pos.BrandId,
+        //         UserId = pos.BuyUserId,
+        //         ApplyNo = "U" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8),
+        //     });
+        //     pos.BindMerchantId = 0;
+        //     pos.BindingState = 0;
+        //     pos.BindingTime = DateTime.Parse("1900-01-01");
+        //     pos.UserId = pos.BuyUserId;
+        //     string IdBrand = pos.BuyUserId + "_" + pos.BrandId;
+        //     db.SaveChanges();
+        //     PublicFunction.SycnMachineCount(pos.BuyUserId, pos.BrandId);
+        //     if (IsSend == 1)
+        //     {
+        //         RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
+        //         {
+        //             UserId = pos.BuyUserId, //接收创客
+        //             MsgType = 2,
+        //             Title = "解绑成功通知", //标题
+        //             Summary = "" + PosSn + "机具已成功解绑,当前机具如需绑定同一客户请再2个工作日后再进行绑定,直接绑定会导致数控异常,相关损失由您本人承担。",
+        //             CreateDate = DateTime.Now,
+        //         }));
+        //     }
+        //     return "success";
+        // }
+        // #endregion
+
+
+
         #region 机具解绑
 
         public IActionResult Unbind(string right)
@@ -2113,10 +2262,6 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "请输入机具SN";
             }
-            if (string.IsNullOrEmpty(MakerCode))
-            {
-                return "请输入创客编号";
-            }
             MachineForSnNo forSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == PosSn);
             if (forSnNo == null)
             {
@@ -2127,24 +2272,6 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "机具SN不存在";
             }
-            if (string.IsNullOrEmpty(MerNo) && pos.BrandId != 1 && pos.BrandId != 3)
-            {
-                return "请输入商户编号";
-            }
-            UserForMakerCode forMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
-            if (forMakerCode == null)
-            {
-                return "创客不存在";
-            }
-            MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == MerNo);
-            if (forMerNo == null && pos.BrandId != 1 && pos.BrandId != 3)
-            {
-                return "商户编号不存在";
-            }
-            if (pos.BuyUserId != forMakerCode.UserId)
-            {
-                return "机具SN和创客不匹配";
-            }
             if (pos.ActivationState == 1)
             {
                 return "机具已激活,不能解绑";
@@ -2161,13 +2288,68 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "机具绑定已超过30天,不支持解绑";
             }
-            if (forMerNo != null)
+            if (pos.CreditTrade > 0 || !string.IsNullOrEmpty(pos.SeoKeyword))
             {
-                PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
-                if (merchant != null)
+                return "该机具已交易,无法解绑";
+            }
+            if (pos.BrandId != 10 || pos.BrandId != 11)
+            {
+                if (string.IsNullOrEmpty(MakerCode))
+                {
+                    return "请输入创客编号";
+                }
+                // if (string.IsNullOrEmpty(MerNo) && pos.BrandId != 1 && pos.BrandId != 3)
+                if (string.IsNullOrEmpty(MerNo))
+                {
+                    return "请输入商户编号";
+                }
+                UserForMakerCode forMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+                if (forMakerCode == null)
+                {
+                    return "创客不存在";
+                }
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == MerNo);
+                // if (forMerNo == null && pos.BrandId != 1 && pos.BrandId != 3)
+                if (forMerNo == null)
+                {
+                    return "商户编号不存在";
+                }
+                if (pos.BuyUserId != forMakerCode.UserId)
                 {
+                    return "机具SN和创客不匹配";
+                }
+                if (forMerNo != null)
+                {
+                    PosMerchantInfo merchant = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId);
+                    if (merchant != null)
+                    {
+                        //机具解绑删除客小爽企业版对应数据
+                        var merInfo = db.BusinessPartnerMerchant.FirstOrDefault(m => m.MerchantId == merchant.Id);
+                        if (merInfo != null)
+                        {
+                            db.BusinessPartnerMerchant.Remove(merInfo);
+                        }
+                        var posInfo = db.BusinessPartnerPos.FirstOrDefault(m => m.PosId == pos.Id);
+                        if (posInfo != null)
+                        {
+                            db.BusinessPartnerPos.Remove(posInfo);
+                        }
+
+                        db.PosMerchantInfo.Remove(merchant);
+                    }
+                    db.MachineForMerNo.Remove(forMerNo);
+                    db.SaveChanges();
+                }
+            }
+            else
+            {
+                var posMerchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+                MachineForMerNo forMerNo = db.MachineForMerNo.FirstOrDefault(m => m.MerNo == MerNo);
+                if (forMerNo != null && posMerchantInfo != null)
+                {
+
                     //机具解绑删除客小爽企业版对应数据
-                    var merInfo = db.BusinessPartnerMerchant.FirstOrDefault(m => m.MerchantId == merchant.Id);
+                    var merInfo = db.BusinessPartnerMerchant.FirstOrDefault(m => m.MerchantId == posMerchantInfo.Id);
                     if (merInfo != null)
                     {
                         db.BusinessPartnerMerchant.Remove(merInfo);
@@ -2178,10 +2360,10 @@ namespace MySystem.Areas.Admin.Controllers
                         db.BusinessPartnerPos.Remove(posInfo);
                     }
 
-                    db.PosMerchantInfo.Remove(merchant);
+                    db.PosMerchantInfo.Remove(posMerchantInfo);
+                    db.MachineForMerNo.Remove(forMerNo);
+                    db.SaveChanges();
                 }
-                db.MachineForMerNo.Remove(forMerNo);
-                db.SaveChanges();
             }
             db.MachineUnBind.Add(new MachineUnBind()
             {
@@ -2444,6 +2626,54 @@ namespace MySystem.Areas.Admin.Controllers
         #endregion
 
 
+        #region 查询机具循环
+
+        /// <summary>
+        /// 根据条件查询机具来源机具和券码
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult SourceLoop(string right, string SnNos)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.SnNos = SnNos;
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询机具来源机具和券码
+
+        /// <summary>
+        /// 机具循环列表
+        /// </summary>
+        /// <returns></returns>
+
+        public string SourceLoopData(string SnNo, int page = 1, int limit = 30)
+        {
+            var result = "";
+            var machineForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
+            var pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machineForSnNo.SnId) ?? new PosMachinesTwo();
+            if (pos.Id == 0)
+            {
+                return "机具:" + SnNo + "不存在";
+            }
+            else
+            {
+                var stattime = pos.RecycStartDate == null ? "" : pos.RecycStartDate.Value.ToString("yyyy-MM-dd hh:mm:ss");
+                var endtime = pos.RecycEndDate == null ? "" : pos.RecycEndDate.Value.ToString("yyyy-MM-dd hh:mm:ss");
+                result += "循环开始时间:" + stattime + "\n";
+                result += "循环结束时间:" + endtime + "\n";
+                result += "来源机具/券:" + pos.SourcePosSn + "\n";
+            }
+            return result;
+
+        }
+
+        #endregion
+
+
         #region 查询创客直推奖
 
         public IActionResult Prize100(string right)
@@ -2495,7 +2725,7 @@ namespace MySystem.Areas.Admin.Controllers
             result += "订单号:" + order.OrderNo + "\n";
             result += "下单创客\n创客编号:" + user.MakerCode + ",姓名:" + user.RealName + ",手机号:" + user.Mobile + "\n";
             result += "上级创客\n创客编号:" + puser.MakerCode + ",姓名:" + puser.RealName + ",手机号:" + puser.Mobile + "\n";
-            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买
+            int machineCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台兑换
             int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
             if (machineCount + ActiveCount >= 3)
             {
@@ -2526,7 +2756,7 @@ namespace MySystem.Areas.Admin.Controllers
             }
             else
             {
-                result += "上级创客未满足条件\n购买机:" + machineCount + "台,激活机:" + ActiveCount + "台\n";
+                result += "上级创客未满足条件\n兑换机:" + machineCount + "台,激活机:" + ActiveCount + "台\n";
                 dic.Add("code", "1");
             }
             dic.Add("result", result);
@@ -2559,7 +2789,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 while (ParentUserId > 0)
                                 {
                                     Users puser = db.Users.FirstOrDefault(m => m.Id == ParentUserId) ?? new Users();
-                                    int machineCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.PosSnType == 0); //判断是否拥有3台购买
+                                    int machineCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.PosSnType == 0); //判断是否拥有3台兑换
                                     int ActiveCount = db.PosMachinesTwo.Count(m => m.UserId == ParentUserId && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
                                     int couponCount = db.PosCoupons.Count(m => m.UserId == ParentUserId && m.IsUse == 0); //判断是否拥有3张券
                                     if ((machineCount + ActiveCount + couponCount >= 3 || puser.LeaderLevel > 0) && !directPrize)
@@ -2696,6 +2926,10 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "机具未激活";
             }
+            if (pos.BindingTime <= pos.TransferTime)
+            {
+                return "补录机,不能补发开机奖";
+            }
             // if (pos.BindingTime < DateTime.Now.AddDays(-30))
             // {
             //     return "绑定已超过30天";
@@ -2730,7 +2964,7 @@ namespace MySystem.Areas.Admin.Controllers
                         Users puser = db.Users.FirstOrDefault(m => m.Id == UserId && m.AuthFlag == 1);
                         if (puser != null && Prize > 0)
                         {
-                            int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台购买
+                            int machineCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.PosSnType == 0); //判断是否拥有3台兑换
                             int ActiveCount = db.PosMachinesTwo.Count(m => m.BuyUserId == puser.Id && m.ActivationState == 1); //判断是否拥有3台激活机(不限购买或赠送)
                             int couponCount = db.PosCoupons.Count(m => m.UserId == puser.Id && m.IsUse == 0); //判断是否拥有3张券
                             if (machineCount + ActiveCount + couponCount >= 3)
@@ -2862,10 +3096,10 @@ namespace MySystem.Areas.Admin.Controllers
                         }
                     }
                     string result = "";
-                    if (!PrizeFlag.Contains("20"))
-                    {
-                        result += "20元奖励未发,请检查上级是否满足条件\n";
-                    }
+                    // if (!PrizeFlag.Contains("20"))
+                    // {
+                    //     result += "20元奖励未发,请检查上级是否满足条件\n";
+                    // }
                     // if (!PrizeFlag.Contains("10"))
                     // {
                     //     result += "10元奖励未发,请检查上级是否满足条件\n";
@@ -2980,7 +3214,7 @@ namespace MySystem.Areas.Admin.Controllers
             bool check = db.FluxProfitDetail.Any(m => m.MerNo == merchant.KqMerNo);
             if (check)
             {
-                return "开机奖励已发放,请勿重复操作";
+                return "流量费奖励已发放,请勿重复操作";
             }
             SpModels.TradeFluxRecord trade = spdb.TradeFluxRecord.FirstOrDefault(m => m.TradeSnNo == pos.PosSn);
             if (trade != null)
@@ -3545,7 +3779,7 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "请输入机具SN";
             }
-            string[] PosSnList = PosSn.Split('\n');
+            string[] PosSnList = PosSn.Replace("\r", "").Split('\n');
             var PosId = "";
             var error = "";
             foreach (var item in PosSnList)
@@ -3687,7 +3921,7 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 return "商户" + MerchantNo + "不存在";
             }
-            if (pos.Id == 0)
+            else if (pos.Id == 0)
             {
                 return "机具" + PosSn + "不存在";
             }
@@ -3703,6 +3937,61 @@ namespace MySystem.Areas.Admin.Controllers
         #endregion
 
 
+        #region 设置商户信息
+
+        public IActionResult SetMerchantInfo(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        [HttpPost]
+        public string SetMerchantInfoDo(string PosSn, string MerchantNo, string MerchantName, string MerIdcardNo, string MerchantMobile)
+        {
+            if (string.IsNullOrEmpty(PosSn))
+            {
+                return "请输入机具SN";
+            }
+            if (string.IsNullOrEmpty(MerchantNo))
+            {
+                return "请输入商户编号";
+            }
+            if (string.IsNullOrEmpty(MerchantName))
+            {
+                return "请输入商户姓名";
+            }
+            if (string.IsNullOrEmpty(MerIdcardNo))
+            {
+                return "请输入商户身份证号";
+            }
+            if (string.IsNullOrEmpty(MerchantMobile))
+            {
+                return "请输入商户手机号";
+            }
+            var posMerchant = db.PosMerchantInfo.FirstOrDefault(m => m.KqMerNo == MerchantNo && m.KqSnNo == PosSn && m.MerchantName.StartsWith(MerchantName.Substring(0, 1))) ?? new PosMerchantInfo();
+            var query = "";
+            query += "修改前:" + posMerchant.KqSnNo + "," + posMerchant.MerchantNo + "," + posMerchant.MerchantName + "," + posMerchant.MerIdcardNo + "," + posMerchant.MerchantMobile;
+            query += "修改后:" + PosSn + "," + MerchantNo + "," + MerchantName + "," + MerIdcardNo + "," + MerchantMobile;
+            if (posMerchant.Id == 0)
+            {
+                return "商户" + MerchantNo + "不存在或不在" + MerchantName + "名下";
+            }
+            else
+            {
+                posMerchant.MerIdcardNo = MerIdcardNo;
+                posMerchant.MerchantName = MerchantName;
+                posMerchant.MerchantMobile = MerchantMobile;
+                db.SaveChanges();
+                function.WriteLog(DateTime.Now.ToString() + ":请求参数," + query + ":" + SysUserName + "-" + SysRealName, "设置商户信息");
+            }
+
+            return "success";
+        }
+        #endregion
+
+
         #region 认证创客
 
         public IActionResult AuthMaker(string right)
@@ -3747,6 +4036,11 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 userInfo.UpdateDate = DateTime.Now;
                 userInfo.RealName = RealName;
+                userInfo.AuthFlag = 1;
+                if (userInfo.AuthDate == null)
+                {
+                    userInfo.AuthDate = DateTime.Now;
+                }
                 userInfo.CertId = CertId;
                 userInfo.SettleBankCardNo = BackCard;
                 userInfo.SettleBankCardName = BackName;
@@ -3806,8 +4100,21 @@ namespace MySystem.Areas.Admin.Controllers
             }
             if (posInfo.BindingState == 0)
             {
-                posInfo.BuyUserId = tUserId.Id;
-                posInfo.UserId = tUserId.Id;
+                if (posInfo.UserId == 0 || posInfo.BuyUserId == posInfo.UserId)
+                {
+                    posInfo.BuyUserId = tUserId.Id;
+                    posInfo.UserId = tUserId.Id;
+                }
+                else
+                {
+                    posInfo.BuyUserId = tUserId.Id;
+                }
+                var fUserPos = db.UserMachineData.FirstOrDefault(m => m.IdBrand == fUserId.Id + "_" + posInfo.BrandId) ?? new UserMachineData();
+                var tUserPos = db.UserMachineData.FirstOrDefault(m => m.IdBrand == tUserId.Id + "_" + posInfo.BrandId) ?? new UserMachineData();
+                fUserPos.TotalMachineCount -= 1;
+                fUserPos.UnBindCount -= 1;
+                tUserPos.TotalMachineCount += 1;
+                tUserPos.UnBindCount += 1;
                 db.SaveChanges();
                 function.WriteLog(DateTime.Now.ToString() + ":请求参数," + query + ":" + SysUserName + "-" + SysRealName, "划拨创客机具");
             }
@@ -3862,7 +4169,6 @@ namespace MySystem.Areas.Admin.Controllers
         }
         #endregion
 
-
         #region 查询创客循环资格
 
         public IActionResult SeeUserLoop(string right)
@@ -3885,18 +4191,48 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 var brand = item.Name;
                 //已过期
-                var overdue = pos.Count(m => m.RecycEndDate < DateTime.Now && m.BrandId == item.Id);
+                var overdue = pos.Count(m => m.RecycEndDate < DateTime.Now && m.BrandId == item.Id && m.PosSnType == 0);
                 //可申请
-                var use = pos.Count(m => m.IsPurchase == 0 && m.RecycEndDate > DateTime.Now && m.BrandId == item.Id);
+                var use = pos.Count(m => m.IsPurchase == 0 && m.RecycEndDate > DateTime.Now && m.BrandId == item.Id && m.PosSnType == 0);
                 //已使用
-                var used = pos.Count(m => m.IsPurchase == 1 && m.BrandId == item.Id);
+                // var used = pos.Count(m => m.IsPurchase == 1 && m.BrandId == item.Id && m.PosSnType == 0);
 
-                info += "品牌:" + brand + ",已过期:" + overdue + ",可申请:" + use + ",已使用:" + used + "\n";
+                // info += "品牌:" + brand + ",已过期:" + overdue + ",可申请:" + use + ",已使用:" + used + "\n";
+                info += "品牌:" + brand + ",已过期:" + overdue + ",可申请:" + use + "\n";
             }
             return info;
         }
         #endregion
 
+        #region 提交到代付排除的创客名单
+
+        public IActionResult CashWithoutUser(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        public string CashWithoutUserDo(string Content)
+        {
+            CustomTagSet set = db.CustomTagSet.FirstOrDefault(m => m.Tags == "CashWithoutUser");
+            if (set == null)
+            {
+                set = db.CustomTagSet.Add(new CustomTagSet()
+                {
+                    Tags = "CashWithoutUser",
+                    Title = "提交到代付排除的创客名单"
+                }).Entity;
+                db.SaveChanges();
+            }
+            set.Contents = Content;
+            db.SaveChanges();
+            db.Dispose();
+            return "success";
+        }
+        #endregion
+
 
         #region 坏机回仓
 
@@ -3914,15 +4250,22 @@ namespace MySystem.Areas.Admin.Controllers
             string[] OldSnList;
             OldSnList = OldSn.Replace("\r", "").Split('\n');
             string error = "";
+            List<string> opData = new List<string>();
             for (int i = 0; i < OldSnList.Length; i++)
             {
                 string OldSnNum = OldSnList[i];
                 MachineForSnNo oldForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == OldSnNum) ?? new MachineForSnNo();
-                PosMachinesTwo oldpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == oldForSnNo.SnId && m.Status == -1) ?? new PosMachinesTwo();
-                if (oldpos.Id == 0)
+                PosMachinesTwo oldpos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == oldForSnNo.SnId) ?? new PosMachinesTwo();
+                var store = db.StoreHouse.FirstOrDefault(m => m.Id == oldpos.StoreId) ?? new StoreHouse();
+                if (store.UserId != 142237)//判断是否是属于坏机仓的机具
+                {
+                    error += "以下操作失败" + OldSnNum + ',' + "该机具不在坏机仓或不存在" + '\n';
+                }
+                if (!opData.Contains(oldpos.BuyUserId + ":" + oldpos.BrandId))
                 {
-                    error += "以下操作失败" + OldSnNum + ',' + "该机具不是坏机或不存在" + '\n';
+                    opData.Add(oldpos.BuyUserId + ":" + oldpos.BrandId);
                 }
+                oldpos.Status = 1;
                 oldpos.QueryCount = 0;
                 oldpos.UpdateDate = null;
                 oldpos.ActivityList = null;
@@ -3962,12 +4305,443 @@ namespace MySystem.Areas.Admin.Controllers
                 oldpos.SourcePosSn = null;
                 oldpos.BuyUserId = 0;
                 oldpos.UserId = 0;
+                PublicFunction.ClearPosHistory(db, oldpos.PosSn); //清除机具历史记录
             }
             if (!string.IsNullOrEmpty(error))
             {
                 return "Warning|" + error;
             }
             db.SaveChanges();
+            foreach (string sub in opData)
+            {
+                string[] datalist = sub.Split(":");
+                PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+            }
+            return "success";
+        }
+        #endregion
+
+        #region 划拨创客机具券
+
+        public IActionResult TransferPosCoupon(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        public string TransferPosCouponDo(string PosCouponCodes, string FromMakerCode, string ToMakerCode, string LeaderMakerCode = "")
+        {
+            if (string.IsNullOrEmpty(PosCouponCodes))
+            {
+                return "请输入机具券码";
+            }
+            if (string.IsNullOrEmpty(FromMakerCode))
+            {
+                return "请输入机具来源创客编号";
+            }
+            if (string.IsNullOrEmpty(ToMakerCode))
+            {
+                return "请输入划拨对象创客编号";
+            }
+            var user = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == FromMakerCode) ?? new UserForMakerCode();
+            var tuser = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == ToMakerCode) ?? new UserForMakerCode();
+            var fUserId = db.Users.FirstOrDefault(m => m.Id == user.UserId) ?? new Users();
+            if (fUserId.Id == 0)
+            {
+                return "来源创客" + FromMakerCode + "不存在";
+            }
+            var tUserId = db.Users.FirstOrDefault(m => m.Id == tuser.UserId) ?? new Users();
+            if (tUserId.Id == 0)
+            {
+                return "划拨创客" + ToMakerCode + "不存在";
+            }
+            int LeaderUserId = 0;
+            if (!string.IsNullOrEmpty(LeaderMakerCode))
+            {
+                UserForMakerCode leaderuser = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == LeaderMakerCode) ?? new UserForMakerCode();
+                Users LeaderUserItem = db.Users.FirstOrDefault(m => m.Id == leaderuser.UserId) ?? new Users();
+                if (LeaderUserItem.Id == 0)
+                {
+                    return "大盟主创客编号" + LeaderMakerCode + "不存在";
+                }
+                LeaderUserId = leaderuser.UserId;
+            }
+
+            var query = PosCouponCodes + "\n" + FromMakerCode + "," + ToMakerCode;
+            string[] PosCouponList = PosCouponCodes.Replace("\r", "").Replace("\n", ",").Split(',');
+            foreach (string PosCouponCode in PosCouponList)
+            {
+                PosCoupons item = db.PosCoupons.FirstOrDefault(m => m.ExchangeCode == PosCouponCode) ?? new PosCoupons();
+                if (item.UserId != fUserId.Id)
+                {
+                    return "机具券" + PosCouponCode + "不在创客" + FromMakerCode + "名下";
+                }
+                if (item.Id == 0)
+                {
+                    return "机具券" + PosCouponCode + "不存在";
+                }
+                if (item.IsUse == 1)
+                {
+                    return "机具券" + PosCouponCode + "已使用";
+                }
+                item.UserId = tUserId.Id;
+                if (LeaderUserId > 0 && item.LeaderUserId == 0)
+                {
+                    item.LeaderUserId = LeaderUserId;
+                }
+            }
+            db.SaveChanges();
+            db.Dispose();
+
+            return "success";
+        }
+        #endregion
+
+
+
+        #region 机具回仓退款
+
+        public IActionResult RefundPosFee(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        [HttpPost]
+        public string RefundPosFeeDo(string PosSn, string BackStoreNo, int IsBack = 0)
+        {
+            if (string.IsNullOrEmpty(PosSn))
+            {
+                return "请输入机具SN";
+            }
+            if (IsBack == 1)
+            {
+                if (string.IsNullOrEmpty(BackStoreNo))
+                {
+                    return "请输入仓库编号";
+                }
+            }
+            string[] PosSnList = PosSn.Replace("\r", "").Split('\n');
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime time = DateTime.Parse(DateTime.Now.ToString(("yyyy-MM-dd") + " 00:00:00"));
+            var endTime = time.AddDays(20 - time.Day).AddDays(-60);
+            StoreForCode storeForBack = new StoreForCode();
+            StoreHouse BackStore = new StoreHouse();
+            List<string> opData = new List<string>();
+            foreach (var item in PosSnList)
+            {
+                MachineForSnNo machineForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == item) ?? new MachineForSnNo();
+                if (machineForSnNo.SnId == 0)
+                {
+                    return "未找到机具" + item + "关联数据";
+                }
+                PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machineForSnNo.SnId && m.Status > -1 && m.RecycEndDate < endTime && m.BindingState == 0) ?? new PosMachinesTwo();
+                if (pos.Id == 0)
+                {
+                    return "机具" + item + "不存在或者不满足条件";
+                }
+                if (IsBack == 1)
+                {
+                    storeForBack = db.StoreForCode.FirstOrDefault(m => m.Code == BackStoreNo) ?? new StoreForCode();
+                    if (storeForBack.StoreId == 0)
+                    {
+                        return "未找到" + BackStoreNo + "关联数据";
+                    }
+                    BackStore = db.StoreHouse.FirstOrDefault(m => m.Status > -1 && m.Id == storeForBack.StoreId && m.BrandId == pos.BrandId.ToString()) ?? new StoreHouse();
+                    if (BackStore.Id == 0)
+                    {
+                        return "仓库" + BackStoreNo + "不存在或与机具品牌不符";
+                    }
+                }
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == BackStore.UserId) ?? new UserAccount();
+                var refundUserAccount = db.UserAccount.FirstOrDefault(m => m.Id == pos.BuyUserId) ?? new UserAccount();
+                var brandInfo = db.KqProducts.FirstOrDefault(m => m.Id == pos.BrandId) ?? new KqProducts();
+                var amount = 0;
+                if (brandInfo.Name.Contains("电签"))
+                {
+                    amount = 200;
+                }
+                if (brandInfo.Name.Contains("大POS"))
+                {
+                    amount = 300;
+                }
+                if (IsBack == 1)
+                {
+                    userAccount.ValidAmount -= amount;//扣减分仓可用额度
+                    StoreStockChange stockchange = db.StoreStockChange.Add(new StoreStockChange()
+                    {
+                        CreateDate = DateTime.Now,
+                        CreateMan = SysUserName,
+                        StoreId = pos.StoreId, //出货仓库
+                        BrandId = pos.BrandId, //产品类型
+                        ProductName = RelationClass.GetKqProductBrandInfo(pos.BrandId), //产品名称
+                        TransType = 5, //交易类型
+                        SnNo = item, //SN编号
+                        StockOpDirect = 0, //库存操作方向
+                        SnStatus = 1, //SN状态
+                        DeviceVendor = pos.DeviceName, //设备厂商
+                        DeviceModel = pos.DeviceKind, //设备型号
+                        DeviceType = pos.DeviceType, //设备类型
+                        FromUserId = pos.BuyUserId, //来源创客
+                        ToRemark = "过期机具回仓退款", //入库备注
+                        ToStoreId = BackStore.Id, //退货收货仓库                        
+                        SourceStoreId = pos.SourceStoreId, //源仓库编号
+                        BrandType = pos.DeviceType, //品牌类型
+                    }).Entity;
+
+                    string ChangeNo = "HCTK";
+                    int StoreStockChangeId = stockchange.Id;
+                    string StoreStockChangeIdString = StoreStockChangeId.ToString();
+                    for (int j = 0; j < 18 - StoreStockChangeId.ToString().Length; j++)
+                    {
+                        StoreStockChangeIdString = "0" + StoreStockChangeIdString;
+                    }
+                    ChangeNo += StoreStockChangeIdString;
+                    stockchange.ChangeNo = ChangeNo; //交易流水编号
+                    db.StoreChangeHistory.Add(new StoreChangeHistory()
+                    {
+                        CreateDate = DateTime.Now,
+                        BrandId = pos.BrandId, //产品类型
+                        ChangeRecordNo = ChangeNo, //变更记录单号
+                        TransType = 5, //交易类型
+                        SnNo = item, //SN编号
+                        SnType = pos.PosSnType, //SN机具类型
+                        StockOpDirect = 0, //库存操作方向
+                        DeviceVendor = pos.DeviceName, //设备厂商
+                        DeviceModel = pos.DeviceKind, //设备型号
+                        DeviceType = pos.DeviceType, //设备类型
+                        FromUserId = pos.BuyUserId, //来源创客
+                        ToRemark = "过期机具回仓退款", //入库备注
+                        SourceStoreId = pos.SourceStoreId, //源仓库
+                        StoreId = pos.StoreId, //出货仓库
+                    });
+                    db.MachineReturn.Add(new MachineReturn()
+                    {
+                        CreateDate = DateTime.Now,
+                        Operator = SysUserName + "_" + SysRealName,//操作人
+                        BrandId = pos.BrandId, //产品类型
+                        DeviceSnNos = pos.PosSn,
+                        ToStoreId = BackStore.Id,
+                        ApplyNo = ChangeNo, //变更记录单号
+                        UserId = pos.BuyUserId, //来源创客
+                        Remark = "过期机具回仓退款", //入库备注
+                    });
+
+                    if (pos.ScanQrTrade > 0)
+                    {
+                        decimal ChangeAmount = 0;
+                        decimal BeforeBalanceAmount = 0;
+                        decimal AfterBalanceAmount = 0;
+                        if (pos.ScanQrTrade == 999)
+                        {
+                            refundUserAccount.BalanceAmount += amount;//退还创客机具货款
+                            BeforeBalanceAmount = refundUserAccount.BalanceAmount;
+                            AfterBalanceAmount = refundUserAccount.BalanceAmount + pos.ScanQrTrade;
+                            ChangeAmount = amount;
+                        }
+                        else
+                        {
+                            refundUserAccount.BalanceAmount += pos.ScanQrTrade;//退还创客机具货款
+                            BeforeBalanceAmount = refundUserAccount.BalanceAmount;
+                            AfterBalanceAmount = refundUserAccount.BalanceAmount + pos.ScanQrTrade;
+                            ChangeAmount = pos.ScanQrTrade;
+                        }
+                        db.UserAccountRecord.Add(new UserAccountRecord()
+                        {
+                            CreateDate = DateTime.Now,
+                            UpdateDate = DateTime.Now,
+                            UserId = pos.BuyUserId, //创客
+                            ChangeType = 126, //变动类型(机具货款退还)
+                            ProductType = 0, //产品类型
+                            ChangeAmount = ChangeAmount, //变更金额
+                            BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                            AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                        });
+                    }
+                    var bInfo = BackStore.UserId + "_" + pos.BrandId;
+                    var userMachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == bInfo) ?? new UserMachineData();
+                    userMachineData.TotalMachineCount += 1;
+                    userMachineData.UnBindCount += 1;
+                    BackStore.LaveNum += 1;
+                    BackStore.TotalNum += 1;
+
+                    var fInfo = pos.BuyUserId + "_" + pos.BrandId;
+                    var userMachineDatas = db.UserMachineData.FirstOrDefault(m => m.IdBrand == fInfo) ?? new UserMachineData();
+                    userMachineDatas.TotalMachineCount -= 1;
+                    userMachineDatas.UnBindCount -= 1;
+
+                    if (!opData.Contains(pos.BuyUserId + ":" + pos.BrandId))
+                    {
+                        opData.Add(pos.BuyUserId + ":" + pos.BrandId);
+                    }
+
+                    pos.StoreId = BackStore.Id;//变更机具所属仓库,重置为仓库机
+                    pos.Status = 1;
+                    pos.QueryCount = 0;
+                    pos.UpdateDate = null;
+                    pos.ActivityList = null;
+                    pos.SeoKeyword = null;
+                    pos.SeoDescription = null;
+                    pos.OrderId = 0;
+                    pos.RecycEndDate = null;
+                    pos.RecycBackCount = 0;
+                    pos.PrizeParams = null;
+                    pos.ScanQrTrade = 0;
+                    pos.BindMerchantId = 0;
+                    pos.CreditTrade = 0;
+                    pos.DebitCardTrade = 0;
+                    pos.IsVip = 0;
+                    pos.UserNav = null;
+                    pos.TransferTime = null;
+                    pos.IsPurchase = 0;
+                    pos.Detail = null;
+                    pos.BindingTime = null;
+                    pos.BindingState = 0;
+                    pos.ActivationTime = null;
+                    pos.ActivationState = 0;
+                    pos.LeaderUserId = 0;
+                    pos.PreUserId = 0;
+                    pos.IsFirst = 0;
+                    pos.DownFeeMan = null;
+                    pos.DownFeeFlag = 0;
+                    pos.DownFeeDate = null;
+                    pos.UpFeeMan = null;
+                    pos.UpFeeFlag = 0;
+                    pos.UpFeeDate = null;
+                    pos.OpReserve1 = 0;
+                    pos.OpReserve2 = 0;
+                    pos.OpReserve3 = 0;
+                    pos.OpId = 0;
+                    pos.RecycStartDate = null;
+                    pos.SourcePosSn = null;
+                    pos.BuyUserId = 0;
+                    pos.UserId = 0;
+                    PublicFunction.ClearPosHistory(db, pos.PosSn); //清除机具历史记录
+                }
+                else
+                {
+                    if (pos.ScanQrTrade > 0)
+                    {
+                        decimal ChangeAmount = 0;
+                        decimal BeforeBalanceAmount = 0;
+                        decimal AfterBalanceAmount = 0;
+                        if (pos.ScanQrTrade == 999)
+                        {
+                            refundUserAccount.BalanceAmount += amount;//退还创客机具货款
+                            BeforeBalanceAmount = refundUserAccount.BalanceAmount;
+                            AfterBalanceAmount = refundUserAccount.BalanceAmount + pos.ScanQrTrade;
+                            ChangeAmount = amount;
+                        }
+                        else
+                        {
+                            refundUserAccount.BalanceAmount += pos.ScanQrTrade;//退还创客机具货款
+                            BeforeBalanceAmount = refundUserAccount.BalanceAmount;
+                            AfterBalanceAmount = refundUserAccount.BalanceAmount + pos.ScanQrTrade;
+                            ChangeAmount = pos.ScanQrTrade;
+                        }
+                        pos.ScanQrTrade = 0;
+                        db.UserAccountRecord.Add(new UserAccountRecord()
+                        {
+                            CreateDate = DateTime.Now,
+                            UpdateDate = DateTime.Now,
+                            UserId = pos.BuyUserId, //创客
+                            ChangeType = 126, //变动类型(机具货款退还)
+                            ProductType = 0, //产品类型
+                            ChangeAmount = ChangeAmount, //变更金额
+                            BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                            AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+                        });
+                    }
+                }
+            }
+            db.SaveChanges();
+            foreach (string sub in opData)
+            {
+                string[] datalist = sub.Split(":");
+                PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+            }
+            return "success";
+        }
+        #endregion
+
+
+
+        #region 添加商户信息
+
+        public IActionResult AddMerchantnfo(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        [HttpPost]
+        public string AddMerchantnfoDo(string PosSn, string MerSn)
+        {
+            if (string.IsNullOrEmpty(PosSn))
+            {
+                return "请输入机具号";
+            }
+            if (string.IsNullOrEmpty(MerSn))
+            {
+                return "请输入商户号";
+            }
+            var machineForSnNo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == PosSn) ?? new MachineForSnNo();
+            var pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == machineForSnNo.SnId) ?? new PosMachinesTwo();
+            var merchantInfo = db.PosMerchantInfo.FirstOrDefault(m => m.Id == pos.BindMerchantId) ?? new PosMerchantInfo();
+            if (machineForSnNo.SnId == 0)
+            {
+                return "未找到机具" + PosSn + "关联数据";
+            }
+            if (pos.Id == 0)
+            {
+                return "未找到机具" + PosSn;
+            }
+            if (merchantInfo.Id > 0)
+            {
+                return "机具" + PosSn + "以经存在绑定商户";
+            }
+            var spInfo = spdb.BindRecord.FirstOrDefault(m => m.MerNo == MerSn && m.MerSnNo == PosSn) ?? new SpModels.BindRecord();
+            if (spInfo.Id > 0)
+            {
+                var MerUserType = 0;
+                var ActiveStatus = 0;
+                if (pos.BuyUserId != pos.UserId)
+                {
+                    MerUserType = 1;
+                }
+                if (string.IsNullOrEmpty(pos.ActivationTime.ToString()))
+                {
+                    ActiveStatus = 1;
+                }
+                PosMerchantInfo posMerchantInfo = db.PosMerchantInfo.Add(new PosMerchantInfo()
+                {
+                    CreateDate = pos.BindingTime,
+                    TopUserId = 1,
+                    BrandId = pos.BrandId,
+                    SnStoreId = pos.StoreId,
+                    MerStandardDate = pos.ActivationTime,
+                    SnType = pos.PosSnType,
+                    MerUserType = MerUserType,
+                    UserId = pos.UserId,
+                    ActiveStatus = ActiveStatus,
+                    MerStatus = 1,
+                    KqSnNo = PosSn,
+                    KqMerNo = MerSn,
+                    MerIdcardNo = spInfo.SeoKeyword,
+                    MerchantMobile = spInfo.MerNewSnNo,
+                    MerchantName = spInfo.MerName,
+                    MerchantNo = spInfo.MerNo,
+                }).Entity;
+                db.SaveChanges();
+                string text = string.Format("设置商户信息,机具Sn: " + PosSn + ",商户编号: " + MerSn + ",操作人:" + SysUserName + "_" + SysRealName + ",时间:" + DateTime.Now + "");
+                function.WriteLog(text, "设置商户信息");
+            }
             return "success";
         }
         #endregion

+ 643 - 0
Areas/Admin/Controllers/MainServer/ToChargeBackRecordController.cs

@@ -0,0 +1,643 @@
+/*
+ * 待扣款明细
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class ToChargeBackRecordController : BaseController
+    {
+        public ToChargeBackRecordController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 待扣款明细列表
+
+        /// <summary>
+        /// 根据条件查询待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(ToChargeBackRecord data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询待扣款明细列表
+
+        /// <summary>
+        /// 待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(ToChargeBackRecord data, string UserIdMakerCode, string PosSn, string CreateDateData, string ChargeTypeSelect, string StatusSelect, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            // Fields.Add("CreateDate", "3"); //时间
+
+
+            string condition = " and Status>-1";
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+            //创客编号
+            if (!string.IsNullOrEmpty(UserIdMakerCode))
+            {
+                condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + UserIdMakerCode + "')";
+            }
+            if (!string.IsNullOrEmpty(PosSn))
+            {
+                condition += " and Remark=" + PosSn;
+            }
+            //待扣类型
+            if (!string.IsNullOrEmpty(ChargeTypeSelect))
+            {
+                condition += " and ChargeType=" + ChargeTypeSelect;
+            }
+            //扣款状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecord", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["UserIdMakerCode"] = userid_Users.MakerCode;
+                dic["UserIdRealName"] = userid_Users.RealName;
+                dic["UserIdMobile"] = userid_Users.Mobile;
+                dic.Remove("UserId");
+                //待扣类型
+                int ChargeType = int.Parse(dic["ChargeType"].ToString());
+                if (ChargeType == 124) dic["ChargeTypeName"] = "过期机具扣款";
+                if (ChargeType == 1) dic["ChargeTypeName"] = "普通扣款";
+                if (ChargeType == 2) dic["ChargeTypeName"] = "分期扣款";
+                if (ChargeType == 0) dic["ChargeTypeName"] = "";
+
+                //扣款状态
+                int Status = int.Parse(dic["Status"].ToString());
+                if (Status == 0) dic["StatusName"] = "待扣款";
+                if (Status == 1) dic["StatusName"] = "已扣款";
+                if (Status == 2) dic["StatusName"] = "已退还";
+                if (Status == 3) dic["StatusName"] = "暂停扣款";
+
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(ToChargeBackRecord data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("ChargeType", data.ChargeType); //待扣类型
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("Field1", data.Field1); //备用字段
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("ToChargeBackRecord", Fields, 0);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecord", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            ToChargeBackRecord editData = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == Id) ?? new ToChargeBackRecord();
+            var user = db.Users.FirstOrDefault(m => m.Id == editData.UserId) ?? new Users();
+            ViewBag.data = editData;
+            ViewBag.MakerCode = user.MakerCode;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(ToChargeBackRecord data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("ChargeType", data.ChargeType); //待扣类型
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("Field1", data.Field1); //备用字段
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecord", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除待扣款明细信息
+
+        /// <summary>
+        /// 删除待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+
+        #region 暂停扣款
+
+        /// <summary>
+        /// 暂停扣款
+        /// </summary>
+        /// <returns></returns>
+        public string Break(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "Break");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 3);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启扣款
+
+        /// <summary>
+        /// 开启扣款
+        /// </summary>
+        /// <returns></returns>
+        public string Start(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "Start");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("ToChargeBackRecord", Sort, Id);
+
+            AddSysLog(Id.ToString(), "ToChargeBackRecord", "sort");
+            return "success";
+        }
+        #endregion
+
+
+        #region 导入预扣信息
+        /// <summary>
+        /// 导入预扣信息
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string ChargeImport(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            var info = "";
+            var error = "";
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                string itemJson = dr.ToJson();
+                string MakerCode = itemJson.Contains("\"A\"") ? dr["A"].ToString() : "";
+                string Name = itemJson.Contains("\"B\"") ? dr["B"].ToString() : "";
+                string Amount = itemJson.Contains("\"C\"") ? dr["C"].ToString() : "";
+                string Remark = itemJson.Contains("\"D\"") ? dr["D"].ToString() : "";
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
+                var users = db.Users.FirstOrDefault(m => m.Id == userForMakerCode.UserId && m.RealName == Name);
+                if (users.Id == 0)
+                {
+                    error += "失败:" + MakerCode + "_" + Name  + "创客不存在或创客编号和姓名不匹配" + '\n';
+                }
+                var ToChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                {
+                    CreateDate = DateTime.Now,
+                    SeoTitle = SysUserName + "_" + SysRealName,
+                    SeoDescription = Remark,
+                    Remark = Remark,
+                    ChargeType = 1,
+                    ChargeAmount = decimal.Parse(Amount),
+                    UserId =users.Id,
+                }).Entity;
+                info += "创客编号:"+MakerCode + ";创客姓名:" + Name + ";金额:" + Amount + ";备注:" + Remark + "<br/>";
+            }
+            if (!string.IsNullOrEmpty(error))
+            {
+                return "Warning|" + error;
+            }
+            string text = string.Format("预扣信息: '" + info + "',Time'" + DateTime.Now + "'");
+            function.WriteLog(text, "导入预扣信息");//机具扣款退还
+            db.SaveChanges();
+            AddSysLog("0", "ToChargeBackRecord", "ChargeImport");
+            return "success";
+        }
+        #endregion
+
+
+        #region 机具扣款退还
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            var info = "";
+            var error = "";
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                string PosSn = dr[0].ToString(); // 机具Sn
+                var toChargeBackRecord = db.ToChargeBackRecord.FirstOrDefault(m => m.Status < 2 && m.Remark == PosSn) ?? new ToChargeBackRecord();
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == toChargeBackRecord.UserId) ?? new UserAccount();
+                if (toChargeBackRecord.Id == 0)
+                {
+                    error += "失败" + PosSn + ',' + "不符合退还条件" + '\n';
+                }
+                if (toChargeBackRecord.Id > 0 && toChargeBackRecord.Status == 0)//待扣款
+                {
+                    userAccount.ToChargeAmount -= toChargeBackRecord.ChargeAmount;
+                    toChargeBackRecord.Status = 2;
+                }
+                if (toChargeBackRecord.Id > 0 && toChargeBackRecord.Status == 1)//已扣款
+                {
+                    var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                    {
+                        CreateDate = DateTime.Now,
+                        UserId = toChargeBackRecord.UserId,
+                        BeforeBalanceAmount = userAccount.BalanceAmount,
+                        AfterBalanceAmount = userAccount.BalanceAmount + toChargeBackRecord.ChargeAmount,
+                        ChangeAmount = toChargeBackRecord.ChargeAmount,
+                        ChangeType = 126,
+                        Remark = "机具货款退还",
+
+                    }).Entity;
+                    userAccount.BalanceAmount += toChargeBackRecord.ChargeAmount;
+                    toChargeBackRecord.Status = 2;
+                    info += toChargeBackRecord.Remark + "," + toChargeBackRecord.ChargeAmount + "<br/>";
+                }
+            }
+            if (!string.IsNullOrEmpty(error))
+            {
+                return "Warning|" + error;
+            }
+            string text = string.Format("退款信息: '" + info + "',Time'" + DateTime.Now + "'");
+            function.WriteLog(text, "机具扣款退还");//机具扣款退还
+            db.SaveChanges();
+            AddSysLog("0", "ToChargeBackRecord", "Import");
+            return "success";
+        }
+        #endregion
+
+
+        #region 机具回收确认退还
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Imports(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            var info = "";
+            var error = "";
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                string PosSn = dr[0].ToString(); // 机具Sn
+                var toChargeBackRecord = db.ToChargeBackRecord.FirstOrDefault(m => m.Remark == PosSn) ?? new ToChargeBackRecord();
+                var recycMachineOrderPos = db.RecycMachineOrderPos.FirstOrDefault(m => m.Status == 1 && m.SnNo == PosSn) ?? new RecycMachineOrderPos();
+                if (recycMachineOrderPos.Id == 0)
+                {
+                    error += "以下操作失败" + PosSn + ',' + "不符合退还条件" + '\n';
+                }
+                else
+                {
+                    var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == toChargeBackRecord.UserId) ?? new UserAccount();
+                    //已扣款
+                    if (toChargeBackRecord.Status == 1)
+                    {
+                        var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                        {
+                            CreateDate = DateTime.Now,
+                            UserId = toChargeBackRecord.UserId,
+                            BeforeBalanceAmount = userAccount.BalanceAmount,
+                            AfterBalanceAmount = userAccount.BalanceAmount + toChargeBackRecord.ChargeAmount,
+                            ChangeAmount = toChargeBackRecord.ChargeAmount,
+                            ChangeType = 126,
+                            Remark = "机具货款退还",
+
+                        }).Entity;
+                        userAccount.BalanceAmount += toChargeBackRecord.ChargeAmount;
+                        toChargeBackRecord.Status = 2;
+                        info += toChargeBackRecord.Remark + "," + toChargeBackRecord.ChargeAmount + "<br/>";
+                    }
+                    //未扣款
+                    if (toChargeBackRecord.Status == 0)
+                    {
+                        toChargeBackRecord.Status = 2;
+                    }
+                }
+            }
+            if (!string.IsNullOrEmpty(error))
+            {
+                return "Warning|" + error;
+            }
+            if (!string.IsNullOrEmpty(info))
+            {
+                string text = string.Format("退款信息: '" + info + "',Time'" + DateTime.Now + "'");
+                function.WriteLog(text, "机具回收确认退还");//机具回收确认退还
+            }
+            db.SaveChanges();
+            AddSysLog("0", "ToChargeBackRecord", "Import");
+            return "success";
+        }
+        #endregion
+
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(ToChargeBackRecord data, string CreateDateData, string UserIdMakerCode, string ChargeTypeSelect, string StatusSelect)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            // Fields.Add("CreateDate", "3"); //时间
+
+            string condition = " and Status>-1";
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+            //创客编号
+            if (!string.IsNullOrEmpty(UserIdMakerCode))
+            {
+                condition += " and UserId in (select UserId from UserForMakerCode where MakerCode='" + UserIdMakerCode + "')";
+            }
+            //待扣类型
+            if (!string.IsNullOrEmpty(ChargeTypeSelect))
+            {
+                condition += " and ChargeType=" + ChargeTypeSelect;
+            }
+            //扣款状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecord", Fields, "Id desc", "0", 1, 20000, condition, "Id,UserId,ChargeAmount,ChargeType,Remark", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                // 机具sn 机具品牌 机具类型 循环过期时间 创客编号 创客姓名 创客手机号 应扣金额 实扣金额 是否已返还
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["UserIdMakerCode"] = userid_Users.MakerCode;
+                dic["UserIdRealName"] = userid_Users.RealName;
+                dic["UserIdMobile"] = userid_Users.Mobile;
+                dic.Remove("UserId");
+                //待扣类型
+                int ChargeType = int.Parse(dic["ChargeType"].ToString());
+                if (ChargeType == 124) dic["ChargeType"] = "过期机具扣款";
+                // if (ChargeType == 2) dic["ChargeType"] = "人工预扣";
+                // if (ChargeType == 0) dic["ChargeType"] = "";
+
+                int Id = int.Parse(function.CheckInt(dic["Id"].ToString()));
+                var toChargeBackRecord = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == Id) ?? new ToChargeBackRecord();
+                //扣款状态
+                if (toChargeBackRecord.Status == 0) dic["Status"] = "待扣款未返还";
+                if (toChargeBackRecord.Status == 1) dic["Status"] = "已扣款未返还";
+                if (toChargeBackRecord.Status == 2) dic["Status"] = "已返还";
+                decimal ChargeAmount = decimal.Parse(dic["ChargeAmount"].ToString());//应扣金额
+                decimal ChargeAmountf = 0;//实扣金额
+                dic["ChargeAmountf"] = "";
+                if (toChargeBackRecord.Status == 1)//已扣款
+                {
+                    ChargeAmountf = ChargeAmount;
+                    dic["ChargeAmountf"] = ChargeAmountf;
+                }
+                var pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == toChargeBackRecord.Remark) ?? new PosMachinesTwo();
+                dic["BrandId"] = RelationClass.GetKqProductBrandInfo(pos.BrandId);
+                if (pos.PosSnType == 0) dic["PosSnType"] = "兑换机";
+                if (pos.PosSnType == 1) dic["PosSnType"] = "循环机";
+                dic["RecycEndDate"] = pos.RecycEndDate;
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            // result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            ReturnFields.Add("Id", "Id");
+            ReturnFields.Add("ChargeType", "类型");
+            ReturnFields.Add("Remark", "机具sn");
+            ReturnFields.Add("BrandId", "品牌");
+            ReturnFields.Add("PosSnType", "机具类型");
+            ReturnFields.Add("RecycEndDate", "循环过期时间");
+            ReturnFields.Add("UserIdMakerCode", "创客编号");
+            ReturnFields.Add("UserIdRealName", "创客姓名");
+            ReturnFields.Add("UserIdMobile", "创客手机号");
+            ReturnFields.Add("ChargeAmount", "应扣金额");
+            ReturnFields.Add("ChargeAmountf", "实扣金额");
+            ReturnFields.Add("Status", "扣款状态");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "ToChargeBackRecord", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+
+        #region 分期扣款
+
+        public IActionResult ChangeInfoDo(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        public string ChangeInfoDo(string PosCouponCodes, string FromMakerCode)
+        {
+            var result = "";
+            return result;
+        }
+        #endregion
+
+    }
+}

+ 373 - 0
Areas/Admin/Controllers/MainServer/ToChargeBackRecordSubController.cs

@@ -0,0 +1,373 @@
+/*
+ * 待扣款明细
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class ToChargeBackRecordSubController : BaseController
+    {
+        public ToChargeBackRecordSubController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 待扣款明细列表
+
+        /// <summary>
+        /// 根据条件查询待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(ToChargeBackRecordSub data, string right, string ParentId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询待扣款明细列表
+
+        /// <summary>
+        /// 待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(ToChargeBackRecordSub data, string OrderNo, string StatusSelect, string CreateDateData, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("ParentId", "1");
+
+            string condition = " and Status>-1";
+
+            //分期单号
+            if (!string.IsNullOrEmpty(OrderNo))
+            {
+                var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.SeoKeyword == OrderNo) ?? new ToChargeByStage();
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.ParentId == toChargeByStage.Id) ?? new ToChargeBackRecordSub();
+                condition += " and ParentId=" + toChargeByStage.Id;
+            }
+
+            //状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+
+            //创建时间
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecordSub", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //状态
+                int Status = int.Parse(function.CheckInt(dic["Status"].ToString()));
+                dic["StatusName"] = "";
+                if (Status == 0)
+                {
+                    dic["StatusName"] = "待扣款";
+                }
+                if (Status == 1)
+                {
+                    dic["StatusName"] = "已扣款";
+                }
+                if (Status == 2)
+                {
+                    dic["StatusName"] = "扣款中";
+                }
+
+                //分期单号
+                int ParentId = int.Parse(function.CheckInt(dic["ParentId"].ToString()));
+                var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == ParentId) ?? new ToChargeByStage();
+                dic["OrderNo"] = toChargeByStage.SeoKeyword;
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right, string ParentId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            Fields.Add("ParentId", data.ParentId);
+
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("ToChargeBackRecordSub", Fields, 0);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecordSub", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, string ParentId, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            ToChargeBackRecordSub editData = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == Id) ?? new ToChargeBackRecordSub();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == data.Id) ?? new ToChargeBackRecordSub();
+            var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId) ?? new ToChargeByStage();
+            if (toChargeByStage.QueryCount > 0)
+            {
+                return "该扣款记录正处于扣款中或已经结束,不能修改!";
+            }
+            if (toChargeBackRecordSub.ChargeAmount != data.ChargeAmount)
+            {
+                if (toChargeBackRecordSub.ChargeAmount > data.ChargeAmount)
+                {
+                    toChargeByStage.TotalAmount -= toChargeBackRecordSub.ChargeAmount - data.ChargeAmount;
+                }
+                if (toChargeBackRecordSub.ChargeAmount < data.ChargeAmount)
+                {
+                    toChargeByStage.TotalAmount += toChargeBackRecordSub.ChargeAmount - data.ChargeAmount;
+                }
+            }
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecordSub", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除待扣款明细信息
+
+        /// <summary>
+        /// 删除待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("ToChargeBackRecordSub", Sort, Id);
+
+            AddSysLog(Id.ToString(), "ToChargeBackRecordSub", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+
+                db.ToChargeBackRecordSub.Add(new ToChargeBackRecordSub()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "ToChargeBackRecordSub", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("CreateDate", "3"); //时间
+
+
+            string condition = " and Status>-1";
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecordSub", Fields, "Id desc", "0", 1, 20000, condition, "ChargeAmount,Remark", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            ReturnFields.Add("ChargeAmount", "待扣金额");
+            ReturnFields.Add("Remark", "备注");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "ToChargeBackRecordSub", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

+ 420 - 0
Areas/Admin/Controllers/MainServer/ToChargeByStageController.cs

@@ -0,0 +1,420 @@
+/*
+ * 分期扣款信息
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class ToChargeByStageController : BaseController
+    {
+        public ToChargeByStageController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 分期扣款信息列表
+
+        /// <summary>
+        /// 根据条件查询分期扣款信息列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(ToChargeByStage data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询分期扣款信息列表
+
+        /// <summary>
+        /// 分期扣款信息列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(ToChargeByStage data, string MakerCode, string StatusSelect, string CreateDateData, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            Fields.Add("SeoTitle", "1"); //创客姓名
+
+            string condition = " and Status>-1";
+
+            //创客编号
+            if (!string.IsNullOrEmpty(MakerCode))
+            {
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
+                condition += " and UserId=" + userForMakerCode.UserId;
+            }
+
+            //状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                if (StatusSelect == "0")//待扣款
+                {
+                    condition += " and QueryCount<TimeNumber and QueryCount=0 and Status=0";
+                }
+                if (StatusSelect == "1")//已扣款
+                {
+                    condition += " and QueryCount=TimeNumber and Status=1";
+                }
+                if (StatusSelect == "2")//扣款中
+                {
+                    condition += " and QueryCount<TimeNumber and QueryCount>0 and Status=0";
+                }
+            }
+
+            //创建时间
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeByStage", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["MakerCode"] = userid_Users.MakerCode;
+                dic["MakerName"] = userid_Users.RealName;
+                dic["MakerMobile"] = userid_Users.Mobile;
+
+                //扣款状态
+                int TimeNumber = int.Parse(function.CheckInt(dic["TimeNumber"].ToString()));
+                int QueryCount = int.Parse(function.CheckInt(dic["QueryCount"].ToString()));
+                int Status = int.Parse(function.CheckInt(dic["Status"].ToString()));
+                if (QueryCount < TimeNumber && QueryCount == 0 && Status == 0)
+                {
+                    dic["Status"] = "待扣款";
+                }
+                if (QueryCount == TimeNumber && Status == 1)
+                {
+                    dic["Status"] = "已扣款";
+                }
+                if (QueryCount < TimeNumber && QueryCount > 0 && Status == 0)
+                {
+                    dic["Status"] = "扣款中";
+                }
+
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(ToChargeByStage data, string MakerCode, string MakerName, string StartDates, string ChargeAmounts)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            string[] StartDatelist = StartDates.TrimEnd(',').Split(',');
+            string[] ChargeAmountslist = ChargeAmounts.TrimEnd(',').Split(',');
+            UserForMakerCode user = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+            if (user == null)
+            {
+                return "创客编号不存在";
+            }
+            var userInfo = db.Users.FirstOrDefault(m => m.Id == user.UserId && m.RealName == MakerName) ?? new Users();
+            if (userInfo.Id == 0)
+            {
+                return "创客编号不存在或创客编号和姓名不匹配";
+            }
+            var StartTime = DateTime.Parse(DateTime.Parse(data.StartDate.ToString()).ToString("yyyy-MM-20 00:00:00"));
+            Fields.Add("UserId", user.UserId); //创客Id
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", StartTime); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+            Fields.Add("TotalAmount", data.TotalAmount); //扣款总金额
+            Fields.Add("SeoTitle", SysUserName + "_" + SysRealName);//操作人
+            Fields.Add("SeoKeyword", "FQ" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8));//分期单号
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("ToChargeByStage", Fields, 0);
+            for (int i = 0; i < StartDatelist.Length; i++)
+            {
+                var StartDate = StartDatelist[i];
+                var ChargeAmount = ChargeAmountslist[i];
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.Add(new ToChargeBackRecordSub()
+                {
+                    CreateDate = DateTime.Now,
+                    SeoTitle = SysUserName + "_" + SysRealName,
+                    StartDate = DateTime.Parse(StartDate),
+                    TimeNumber = data.TimeNumber,
+                    ChargeAmount = decimal.Parse(ChargeAmount),
+                    ParentId = Id,
+                    Remark = data.Remark,
+                }).Entity;
+            }
+            AddSysLog(data.Id.ToString(), "ToChargeByStage", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            ToChargeByStage editData = db.ToChargeByStage.FirstOrDefault(m => m.Id == Id) ?? new ToChargeByStage();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(ToChargeByStage data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+            Fields.Add("TotalAmount", data.TotalAmount); //扣款总金额
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "ToChargeByStage", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除分期扣款信息信息
+
+        /// <summary>
+        /// 删除分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.Where(m => m.ParentId == id).ToList();
+                foreach (var item in toChargeBackRecordSub)
+                {
+                    var info = toChargeBackRecordSub.FirstOrDefault(m => m.Id == item.Id);
+                    info.Status = -1;
+                    info.UpdateDate = DateTime.Now;
+                    info.SeoTitle = SysUserName + "_" + SysRealName;
+                }
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                Fields.Add("SeoTitle", SysUserName + "_" + SysRealName);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("ToChargeByStage", Sort, Id);
+
+            AddSysLog(Id.ToString(), "ToChargeByStage", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                int UserId = int.Parse(dr["创客"].ToString());
+                decimal ChargeAmount = decimal.Parse(dr["待扣金额"].ToString());
+                string Remark = dr["备注"].ToString();
+                DateTime StartDate = DateTime.Parse(dr["扣款开始时间"].ToString());
+                int TimeNumber = int.Parse(dr["期数"].ToString());
+                decimal TotalAmount = decimal.Parse(dr["扣款总金额"].ToString());
+
+                db.ToChargeByStage.Add(new ToChargeByStage()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = UserId,   //创客
+                    ChargeAmount = ChargeAmount,   //待扣金额
+                    Remark = Remark,   //备注
+                    StartDate = StartDate,   //扣款开始时间
+                    TimeNumber = TimeNumber,   //期数
+                    TotalAmount = TotalAmount,   //扣款总金额
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "ToChargeByStage", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(ToChargeByStage data, int? sUserId, int? eUserId)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("sUserId", "31"); //创客上限
+            Fields.Add("eUserId", "32"); //创客下限
+            Fields.Add("CreateDate", "3"); //时间
+
+
+            string condition = " and Status>-1";
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeByStage", Fields, "Id desc", "0", 1, 20000, condition, "", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "ToChargeByStage", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

+ 11 - 6
Areas/Admin/Controllers/MainServer/UserAccountRecordController.cs

@@ -170,9 +170,8 @@ namespace MySystem.Areas.Admin.Controllers
             }
             Dictionary<string, object> other = new Dictionary<string, object>();
 
-            string ChangeTypeAmount0 = "0.00", ChangeTypeAmount1 = "0.00", ChangeTypeAmount2 = "0.00", ChangeTypeAmount3 = "0.00", ChangeTypeAmount4 = "0.00", ChangeTypeAmount5 = "0.00", ChangeTypeAmount6 = "0.00", ChangeTypeAmount61 = "0.00", ChangeTypeAmount62 = "0.00", ChangeTypeAmount63 = "0.00", ChangeTypeAmount64 = "0.00", ChangeTypeAmount50 = "0.00", ChangeTypeAmount111 = "0.00", ChangeTypeAmount112 = "0.00", ChangeTypeAmount60 = "0.00", ChangeTypeAmount31 = "0.00";
-            DataTable dt = OtherMySqlConn.dtable("select sum(if(ChangeType=0, ChangeAmount, 0)),sum(if(ChangeType=1, ChangeAmount, 0)),sum(if(ChangeType=2, ChangeAmount, 0)),sum(if(ChangeType=6, ChangeAmount, 0)),sum(if(ChangeType=61, ChangeAmount, 0)),sum(if(ChangeType=62, ChangeAmount, 0)),sum(if(ChangeType=63, ChangeAmount, 0)),sum(if(ChangeType=64, ChangeAmount, 0)),sum(if(ChangeType=50, ChangeAmount, 0)),sum(if(ChangeType=111, ChangeAmount, 0)),sum(if(ChangeType=112, ChangeAmount, 0)),sum(if(ChangeType=60, ChangeAmount, 0)),sum(if(ChangeType=31, ChangeAmount, 0)),sum(if(ChangeType=3, ChangeAmount, 0)),sum(if(ChangeType=4, ChangeAmount, 0)),sum(if(ChangeType=5, ChangeAmount, 0)) from UserAccountRecord where 1=1" + condition);
-            DataTable dts = OtherMySqlConn.dtable("select SUM(FluxProfitAmt) from FluxProfitDetail where ");
+            string ChangeTypeAmount0 = "0.00", ChangeTypeAmount1 = "0.00", ChangeTypeAmount2 = "0.00", ChangeTypeAmount3 = "0.00", ChangeTypeAmount4 = "0.00", ChangeTypeAmount5 = "0.00", ChangeTypeAmount6 = "0.00", ChangeTypeAmount61 = "0.00", ChangeTypeAmount62 = "0.00", ChangeTypeAmount63 = "0.00", ChangeTypeAmount64 = "0.00", ChangeTypeAmount50 = "0.00", ChangeTypeAmount111 = "0.00", ChangeTypeAmount112 = "0.00", ChangeTypeAmount60 = "0.00", ChangeTypeAmount31 = "0.00",  ChangeTypeAmount31s = "0.00", ChangeTypeAmount124 = "0.00", ChangeTypeAmount125 = "0.00";
+            DataTable dt = OtherMySqlConn.dtable("select sum(if(ChangeType=0, ChangeAmount, 0)),sum(if(ChangeType=1, ChangeAmount, 0)) + sum(if(ChangeType=112 and ProductType=101, ChangeAmount, 0)),sum(if(ChangeType=2, ChangeAmount, 0)),sum(if(ChangeType=6, ChangeAmount, 0)),sum(if(ChangeType=61, ChangeAmount, 0)),sum(if(ChangeType=62, ChangeAmount, 0)),sum(if(ChangeType=63, ChangeAmount, 0)),sum(if(ChangeType=64, ChangeAmount, 0)),sum(if(ChangeType=50, ChangeAmount, 0)),sum(if(ChangeType=111, ChangeAmount, 0)),sum(if(ChangeType=112, ChangeAmount, 0)),sum(if(ChangeType=60, ChangeAmount, 0)),sum(if(ChangeType=31 and Remark='开机抢红包活动', ChangeAmount, 0)),sum(if(ChangeType=3, ChangeAmount, 0)),sum(if(ChangeType=4, ChangeAmount, 0)),sum(if(ChangeType=5, ChangeAmount, 0)),sum(if(ChangeType=124, ChangeAmount, 0)),sum(if(ChangeType=125, ChangeAmount, 0)),sum(if(ChangeType=31 and (Remark!='开机抢红包活动' or Remark IS NULL), ChangeAmount, 0)) from UserAccountRecord where 1=1" + condition);
             if (dt.Rows.Count > 0)
             {
                 ChangeTypeAmount0 = dt.Rows[0][0].ToString();
@@ -191,13 +190,16 @@ namespace MySystem.Areas.Admin.Controllers
                 ChangeTypeAmount112 = dt.Rows[0][10].ToString();
                 ChangeTypeAmount60 = dt.Rows[0][11].ToString();
                 ChangeTypeAmount31 = dt.Rows[0][12].ToString();
+                ChangeTypeAmount124 = dt.Rows[0][16].ToString();
+                ChangeTypeAmount125 = dt.Rows[0][17].ToString();
+                ChangeTypeAmount31s = dt.Rows[0][18].ToString();
             }
             other.Add("ChangeTypeAmount0", ChangeTypeAmount0); //激活奖励
             other.Add("ChangeTypeAmount1", ChangeTypeAmount1); //交易分润
             other.Add("ChangeTypeAmount2", ChangeTypeAmount2); //提现申请
-            other.Add("ChangeTypeAmount3", ChangeTypeAmount3); //提现税点扣除
-            other.Add("ChangeTypeAmount4", ChangeTypeAmount4); //提现税点扣除
-            other.Add("ChangeTypeAmount5", ChangeTypeAmount5); //提现税点扣
+            other.Add("ChangeTypeAmount3", ChangeTypeAmount3); //提现代付
+            other.Add("ChangeTypeAmount4", ChangeTypeAmount4); //提现手续费
+            other.Add("ChangeTypeAmount5", ChangeTypeAmount5); //提现税点扣
             other.Add("ChangeTypeAmount6", ChangeTypeAmount6); //提现失败,解冻
             other.Add("ChangeTypeAmount61", ChangeTypeAmount61); //人工冻结
             other.Add("ChangeTypeAmount62", ChangeTypeAmount62); //人工解冻
@@ -208,6 +210,9 @@ namespace MySystem.Areas.Admin.Controllers
             other.Add("ChangeTypeAmount112", ChangeTypeAmount112); //推荐奖励
             other.Add("ChangeTypeAmount60", ChangeTypeAmount60); //流量卡分佣
             other.Add("ChangeTypeAmount31", ChangeTypeAmount31); //红包奖励
+            other.Add("ChangeTypeAmount31s", ChangeTypeAmount31s); //红包奖励
+            other.Add("ChangeTypeAmount124", ChangeTypeAmount124); //机具过期
+            other.Add("ChangeTypeAmount125", ChangeTypeAmount125); //软件服务费
             obj.Add("other", other);
             return Json(obj);
         }

+ 41 - 5
Areas/Admin/Controllers/MainServer/UserCashRecordController.cs

@@ -170,7 +170,7 @@ namespace MySystem.Areas.Admin.Controllers
             string FailAmount = "0.00";//提现失败总金额
             string WaitTaxAmount = "0.00";//待处理总金额(税后)
             string SuccessTaxAmount = "0.00";//提现成功总金额(税后)
-            string FailTaxAmount= "0.00";//提现失败总金额(税后)
+            string FailTaxAmount = "0.00";//提现失败总金额(税后)
             DataTable dt = OtherMySqlConn.dtable("SELECT SUM(if(Status=0,TradeAmount,0)),SUM(if(Status=1,TradeAmount,0)),SUM(if(Status=2,TradeAmount,0)),SUM(if(Status=0,ActualTradeAmount,0)),SUM(if(Status=1,ActualTradeAmount,0)),SUM(if(Status=2,ActualTradeAmount,0)) FROM UserCashRecord where 1=1 " + condition);
             if (dt.Rows.Count > 0)
             {
@@ -1066,16 +1066,22 @@ namespace MySystem.Areas.Admin.Controllers
             string[] idlist = Id.Split(new char[] { ',' });
             AddSysLog(Id, "UserCashRecord", "cash");
             db.SaveChanges();
+            CustomTagSet set = db.CustomTagSet.FirstOrDefault(m => m.Tags == "CashWithoutUser") ?? new CustomTagSet();
+            string MakerCodeString = "," + set.Contents + ",";
             foreach (string subid in idlist)
             {
                 int id = int.Parse(subid);
                 UserCashRecord edit = db.UserCashRecord.FirstOrDefault(m => m.Id == id && m.QueryCount == 0);
                 if (edit != null)
                 {
-                    edit.QueryCount = 1;
-                    edit.UpdateDate = DateTime.Now;
-                    db.SaveChanges();
-                    RedisDbconn.Instance.AddList("CashPayApplyQueue", Newtonsoft.Json.JsonConvert.SerializeObject(edit));
+                    Users user = db.Users.FirstOrDefault(m => m.Id == edit.UserId) ?? new Users();
+                    if (!MakerCodeString.Contains("," + user.MakerCode + ","))
+                    {
+                        edit.QueryCount = 1;
+                        edit.UpdateDate = DateTime.Now;
+                        db.SaveChanges();
+                        RedisDbconn.Instance.AddList("CashPayApplyQueue", Newtonsoft.Json.JsonConvert.SerializeObject(edit));
+                    }
                 }
             }
             return "success";
@@ -1239,5 +1245,35 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+
+        #region 退汇
+
+        /// <summary>
+        /// 退汇
+        /// </summary>
+        /// <returns></returns>
+        public string Refund(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "退汇", "Refund");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                var userCashRecord = db.UserCashRecord.FirstOrDefault(m => m.Id == id) ?? new UserCashRecord();
+                DataTable dt = OtherMySqlConn.dtable("DELETE FROM UserAccountRecord WHERE Version=" + userCashRecord.Id + "");
+                userCashRecord.Status = 0;
+                userCashRecord.QueryCount = 0;
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == userCashRecord.UserId) ?? new UserAccount();
+                userAccount.WithdrawAmount -= userCashRecord.TradeAmount;
+                userAccount.FreezeAmount += userCashRecord.TradeAmount;
+                db.SaveChanges();
+            }
+
+            return "success";
+        }
+
+        #endregion
+
     }
 }

+ 2 - 2
Areas/Admin/Controllers/MainServer/UserMallLargeSnController.cs

@@ -106,8 +106,8 @@ namespace MySystem.Areas.Admin.Controllers
                 
                 //SN类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
             }
             return Json(obj);
         }

+ 8 - 8
Areas/Admin/Controllers/MainServer/UserSnActInfoController.cs

@@ -101,8 +101,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(dic["BrandId"].ToString()));
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //SN仓库
                 int SnStoreId = int.Parse(function.CheckInt(dic["SnStoreId"].ToString()));
                 StoreHouse snstoreid_StoreHouse = db.StoreHouse.FirstOrDefault(m => m.Id == SnStoreId) ?? new StoreHouse();
@@ -118,8 +118,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (ActiveStatus == 2) dic["ActiveStatus"] = "SN已返现";
                 //源SN机具类型
                 int SourceSnType = int.Parse(dic["SourceSnType"].ToString());
-                if (SourceSnType == 0) dic["SourceSnType"] = "购买机具";
-                if (SourceSnType == 1) dic["SourceSnType"] = "赠送机具";
+                if (SourceSnType == 0) dic["SourceSnType"] = "兑换机具";
+                if (SourceSnType == 1) dic["SourceSnType"] = "循环机具";
                 //源SN发货你仓库
                 dic["SourceStoreId"] = RelationClass.GetStoreHouseInfo(int.Parse(dic["SourceStoreId"].ToString()));
 
@@ -378,8 +378,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["BrandId"] = RelationClass.GetKqProductBrandInfo(int.Parse(dic["BrandId"].ToString()));
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //SN仓库
                 int SnStoreId = int.Parse(function.CheckInt(dic["SnStoreId"].ToString()));
                 StoreHouse snstoreid_StoreHouse = db.StoreHouse.FirstOrDefault(m => m.Id == SnStoreId) ?? new StoreHouse();
@@ -395,8 +395,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (ActiveStatus == 2) dic["ActiveStatus"] = "SN已返现";
                 //源SN机具类型
                 int SourceSnType = int.Parse(dic["SourceSnType"].ToString());
-                if (SourceSnType == 0) dic["SourceSnType"] = "购买机具";
-                if (SourceSnType == 1) dic["SourceSnType"] = "赠送机具";
+                if (SourceSnType == 0) dic["SourceSnType"] = "兑换机具";
+                if (SourceSnType == 1) dic["SourceSnType"] = "循环机具";
                 //源SN发货你仓库
                 dic["SourceStoreId"] = RelationClass.GetStoreHouseInfo(int.Parse(dic["SourceStoreId"].ToString()));
 

+ 4 - 4
Areas/Admin/Controllers/MainServer/UserSnDelayChangeController.cs

@@ -115,13 +115,13 @@ namespace MySystem.Areas.Admin.Controllers
 
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
 
                 //源SN类型
                 int SourceSnType = int.Parse(dic["SourceSnType"].ToString());
-                if(SourceSnType == 0) dic["SourceSnType"] = "购买机具";
-                if(SourceSnType == 1) dic["SourceSnTypeSelect"] = "赠送机具";
+                if(SourceSnType == 0) dic["SourceSnType"] = "兑换机具";
+                if(SourceSnType == 1) dic["SourceSnTypeSelect"] = "循环机具";
             }
             return Json(obj);
         }

+ 4 - 4
Areas/Admin/Controllers/MainServer/UserStoreChangeController.cs

@@ -144,8 +144,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (TransType == 0) dic["TransType"] = "";
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //库存操作方向
                 int StockOpDirect = int.Parse(dic["StockOpDirect"].ToString());
                 if (StockOpDirect == 0) dic["StockOpDirect"] = "入库";
@@ -521,8 +521,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (TransType == 0) dic["TransType"] = "";
                 //SN机具类型
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if (SnType == 0) dic["SnType"] = "购买机具";
-                if (SnType == 1) dic["SnType"] = "赠送机具";
+                if (SnType == 0) dic["SnType"] = "兑换机具";
+                if (SnType == 1) dic["SnType"] = "循环机具";
                 //库存操作方向
                 int StockOpDirect = int.Parse(dic["StockOpDirect"].ToString());
                 if (StockOpDirect == 0) dic["StockOpDirect"] = "入库";

+ 4 - 4
Areas/Admin/Controllers/MainServer/UserSwapDetailController.cs

@@ -114,8 +114,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["TopMakerCode"] = tuser.MakerCode;
                 dic["TopRealName"] = tuser.RealName;
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
                 int RiskResult = int.Parse(dic["RiskResult"].ToString());
                 if(RiskResult == 0) dic["RiskResult"] = "降档";
                 if(RiskResult == 1) dic["RiskResult"] = "不降档";
@@ -385,8 +385,8 @@ namespace MySystem.Areas.Admin.Controllers
                 dic["TopMakerCode"] = tuser.MakerCode;
                 dic["TopRealName"] = tuser.RealName;
                 int SnType = int.Parse(dic["SnType"].ToString());
-                if(SnType == 0) dic["SnType"] = "购买机具";
-                if(SnType == 1) dic["SnType"] = "赠送机具";
+                if(SnType == 0) dic["SnType"] = "兑换机具";
+                if(SnType == 1) dic["SnType"] = "循环机具";
                 int RiskResult = int.Parse(dic["RiskResult"].ToString());
                 if(RiskResult == 0) dic["RiskResult"] = "降档";
                 if(RiskResult == 1) dic["RiskResult"] = "不降档";

+ 162 - 0
Areas/Admin/Controllers/MainServer/UsersController.cs

@@ -2156,5 +2156,167 @@ namespace MySystem.Areas.Admin.Controllers
         }
 
         #endregion
+
+
+        #region 伞下创客列表
+
+        /// <summary>
+        /// 根据条件查询伞下创客列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult SanIndex(Users data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            List<Users> TopUsers = db.Users.Where(m => m.ParentUserId == 0).ToList();
+            ViewBag.TopUsers = TopUsers;
+            List<UserLevelSet> Levels = db.UserLevelSet.OrderBy(m => m.Id).ToList();
+            ViewBag.Levels = Levels;
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询伞下创客列表
+
+        /// <summary>
+        /// 伞下创客列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult SanIndexData(Users data, string MakerCode, string IsLeader, string IsOp, string CreateDateData, string UserYsLevel, string UserLevel, int ShowFlag = 0, int page = 1, int limit = 30)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            if (ShowFlag == 0)
+            {
+                Dictionary<string, object> objs = new Dictionary<string, object>();
+                return Json(objs);
+            }
+            string condition = " and Status>-1";
+            //创客编号
+            if (!string.IsNullOrEmpty(MakerCode))
+            {
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
+                if (userForMakerCode.UserId == 0)
+                {
+                    return Json(new AppResultJson() { Status = "-1", Info = "未找到创客" + MakerCode + "关联数据", Data = "" });
+                }
+                var user = db.Users.FirstOrDefault(m => m.Id == userForMakerCode.UserId) ?? new Users();
+                if (user.Id == 0)
+                {
+                    return Json(new AppResultJson() { Status = "-1", Info = "创客" + MakerCode + "不存在", Data = "" });
+                }
+                condition += " and ParentNav like '%," + user.Id + ",%'";
+            }
+            if (!string.IsNullOrEmpty(IsLeader))
+            {
+                condition += " and LeaderLevel=" + IsLeader;
+            }
+            if (!string.IsNullOrEmpty(UserYsLevel))
+            {
+                var UserIds = "";
+                var Rank = int.Parse(UserYsLevel);
+                var list = db.UserRankWhite.Where(m => m.Status > -1 && m.Rank == Rank).ToList();
+                foreach (var item in list)
+                {
+                    UserIds += item.UserId + ",";
+                }
+                UserIds = UserIds.TrimEnd(',');
+                condition += " and Id IN(" + UserIds + ")";
+            }
+            if (!string.IsNullOrEmpty(UserLevel))
+            {
+                condition += " and UserLevel=" + UserLevel;
+            }
+            if (!string.IsNullOrEmpty(IsOp))
+            {
+                var UserIds = "";
+                DataTable dt = CustomerSqlConn.dtable("SELECT UserId FROM SysAdmin WHERE Status>-1 and Sort>0 and QueryCount>0 and AdminName!='admin'", OpConn);
+                foreach (DataRow item in dt.Rows)
+                {
+                    UserIds += item["UserId"].ToString() + ",";
+                }
+                UserIds = UserIds.TrimEnd(',');
+                if (IsOp == "1")
+                {
+                    condition += " and Id IN(" + UserIds + ")";
+                }
+                if (IsOp == "2")
+                {
+                    condition += " and Id NOT IN(" + UserIds + ")";
+                }
+            }
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("Users", Fields, "Id desc", "True", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                dic["AuthFlagName"] = dic["AuthFlag"].ToString() == "1" ? "已实名" : "未实名";
+                dic["RiskFlagName"] = dic["RiskFlag"].ToString() == "1" ? "已风控" : "未风控";
+                dic["UserLevel"] = RelationClass.GetUserLevelSetInfo(int.Parse(dic["UserLevel"].ToString()));
+                int UserId = int.Parse(dic["Id"].ToString());
+                int ParentUserId = int.Parse(dic["ParentUserId"].ToString());
+                Users puser = db.Users.FirstOrDefault(m => m.Id == ParentUserId) ?? new Users();
+                dic["ParentMakerCode"] = puser.MakerCode;
+                dic["ParentRealName"] = puser.RealName;
+                var userRankWhite = db.UserRankWhite.FirstOrDefault(m => m.UserId == UserId) ?? new UserRankWhite();
+                dic["UserYsLevel"] = RelationClass.GetUserLevelSetInfo(userRankWhite.Rank);
+                int LeaderLevel = int.Parse(dic["LeaderLevel"].ToString());
+                if (LeaderLevel == 1)
+                {
+                    dic["IsLeader"] = "小盟主";
+                }
+                else if (LeaderLevel == 2)
+                {
+                    dic["IsLeader"] = "大盟主";
+                }
+                else
+                {
+                    dic["IsLeader"] = "";
+                }
+                var sysAdmin = opdb.SysAdmin.FirstOrDefault(m => m.Status > -1 && m.Sort > 0 && m.QueryCount > 0 && m.AdminName != "admin" && m.UserId == UserId) ?? new OpModels.SysAdmin();
+                if (sysAdmin.Id > 0)
+                {
+                    dic["IsOp"] = sysAdmin.OpCode;
+                }
+                else
+                {
+                    dic["IsOp"] = "";
+                }
+                dic["MerchantType"] = RelationClassForConst.GetMerchantTypeInfo(int.Parse(dic["MerchantType"].ToString()));
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+
+
+        #region 重置小分仓额度
+
+        /// <summary>
+        /// 重置小分仓额度
+        /// </summary>
+        /// <returns></returns>
+        public string SycnAmountData(int Id = 0)
+        {
+            if (Id > 0)
+            {
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == Id) ?? new UserAccount();
+                RedisDbconn.Instance.AddList("ResetSmallStoreByUserIdQueue", userAccount.Id);
+            }
+            AddSysLog(Id, "UserAccount", "SycnAmountData");
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
     }
 }

+ 44 - 53
Areas/Admin/Controllers/OperateServer/StoreHouseOperateController.cs

@@ -65,7 +65,7 @@ namespace MySystem.Areas.Admin.Controllers
             }
 
             string condition = " and Status>-1 and Sort>0";
-            
+
             if (!string.IsNullOrEmpty(CreateDateData))
             {
                 string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
@@ -113,7 +113,7 @@ namespace MySystem.Areas.Admin.Controllers
                 int Id = int.Parse(function.CheckInt(dic["Id"].ToString()));
                 int PreCount = db.PreSendStockDetail.Count(m => m.FromStoreId == Id && m.ApplyFlag == 0 && m.Status >= 0 && m.Status <= 1);
                 dic["PreNum"] = PreCount.ToString();
-                
+
                 // //分仓额度
                 // var amount = db.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
                 // var ValidAmount = amount.ValidAmount;
@@ -173,15 +173,21 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     Dictionary<string, object> Fields = new Dictionary<string, object>();
                     Fields.Add("CreateMan", SysUserName); //创建人
-                    Fields.Add("StoreName", data.StoreName); //仓库名称
                     UserForMakerCode user = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
                     if (user == null)
                     {
                         return "您输入的仓库归属创客编号不存在,请重新输入正确的仓库归属创客编号";
                     }
+                    var userInfo = db.Users.FirstOrDefault(m => m.Id == user.UserId) ?? new Users();
+                    var sysAdmin = opdb.SysAdmin.FirstOrDefault(m => m.Status > -1 && m.Sort > 0 && m.QueryCount > 0 && m.UserId == user.UserId) ?? new OpModels.SysAdmin();
+                    if (sysAdmin.Id == 0)
+                    {
+                        return "您输入的仓库归属创客编号不满足创建条件,不存在运营中心";
+                    }
                     Fields.Add("UserId", user.UserId); //仓库归属人
                     Fields.Add("Areas", data.Areas); //所属地区
                     Fields.Add("Address", data.Address); //仓库地址
+                    Fields.Add("OpId", user.UserId);
                     UserForMakerCode manage = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == ManageMakerCode);
                     if (manage == null)
                     {
@@ -192,72 +198,39 @@ namespace MySystem.Areas.Admin.Controllers
                     Fields.Add("ManageMobile", data.ManageMobile);
                     Fields.Add("Remark", data.Remark); //备注
                     Fields.Add("LimitTopUserId", data.LimitTopUserId); //限制创客特殊仓库
-                    Fields.Add("StoreKind", data.StoreKind); //仓库归属类型
                     int bid = int.Parse(BrandId);
                     KqProducts pro = db.KqProducts.FirstOrDefault(m => m.Id == bid) ?? new KqProducts();
+                    string Nos = "YC000" + bid + sysAdmin.Id;
                     Fields.Add("BrandId", BrandId);
                     Fields.Add("ProductName", pro.Name);
                     Fields.Add("StoreStatus", 1);
                     Fields.Add("Status", 1);
+                    Fields.Add("StoreKind", 2);
+                    Fields.Add("Sort", sysAdmin.Id);
+                    Fields.Add("StoreNo", Nos);
+                    Fields.Add("StoreName", pro.Name + "运营分仓");
 
-                    var name = db.StoreHouse.FirstOrDefault(m => m.UserId == user.UserId && m.BrandId == BrandId && m.StoreName == data.StoreName);
+                    var name = db.StoreHouse.FirstOrDefault(m => m.Sort > 0 && m.UserId == user.UserId && m.BrandId == BrandId && m.StoreName == data.StoreName && m.OpId == user.UserId);
                     if (name != null)
                     {
                         return "您的仓库名重复,请重新填写";
                     }
 
                     int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("StoreHouse", Fields, 0);
-                    StoreHouse edit = db.StoreHouse.FirstOrDefault(m => m.Id == Id);
-                    if (edit != null)
-                    {
-                        string No = Id.ToString();
-                        for (int i = 0; i < 7 - Id.ToString().Length; i++)
-                        {
-                            No = "0" + No;
-                        }
-                        No = "S" + No;
-                        edit.StoreNo = No;
-                        db.StoreForCode.Add(new StoreForCode()
-                        {
-                            Code = No,
-                            StoreId = Id,
-                        });
-                        RedisDbconn.Instance.Set("StoreForCode:" + No, Id);
-                    }
-                    StoreForName storeForName = db.StoreForName.FirstOrDefault(m => m.Name == data.StoreName);
-                    if (storeForName == null)
-                    {
-                        db.StoreForName.Add(new StoreForName()
-                        {
-                            Name = data.StoreName,
-                            StoreId = Id,
-                        });
-                    }
-                    else
-                    {
-                        storeForName.StoreId = Id;
-                    }
-                    UserAccount account = db.UserAccount.FirstOrDefault(m => m.Id == user.UserId);
-                    if (account == null)
-                    {
-                        account = db.UserAccount.Add(new UserAccount()
-                        {
-                            Id = user.UserId,
-                            UserId = user.UserId,
-                        }).Entity;
-                        db.SaveChanges();
-                    }
-                    if (account.FixedAmount == 0 && account.ValidAmount == 0)
-                    {
-                        account.FixedAmount = 20000;
-                        account.ValidAmount = 20000;
-                    }
 
-                    RedisDbconn.Instance.Set("StoreForName:" + data.StoreName, Id);
+                    var querys = opdb.StoreForOperate.Add(new OpModels.StoreForOperate()
+                    {
+                        CreateDate = DateTime.Now, //创建时间
+                        CreateMan = SysUserName + "_" + SysRealName,
+                        Sort = user.UserId,
+                        OpId = user.UserId,
+                        StoreId = Id,
+                        SeoKeyword = Nos,
+                        SeoDescription = pro.Name + "运营分仓",
+                    }).Entity;
+                    opdb.SaveChanges();
                     AddSysLog(data.Id.ToString(), "StoreHouse", "add");
                     db.SaveChanges();
-
-                    SetRedis(Id, user.UserId);
                 }
             }
             return "success";
@@ -644,6 +617,7 @@ namespace MySystem.Areas.Admin.Controllers
                 string error = "";
                 decimal amount = 0;
                 List<string> PosSnList = new List<string>();
+                List<string> opData = new List<string>();
                 for (int i = 1; i < list.Count; i++)
                 {
                     JsonData dr = list[i];
@@ -770,6 +744,11 @@ namespace MySystem.Areas.Admin.Controllers
                                 }).Entity;
                                 db.SaveChanges();
 
+                                if (!opData.Contains(posInfo.BuyUserId + ":" + posInfo.BrandId))
+                                {
+                                    opData.Add(posInfo.BuyUserId + ":" + posInfo.BrandId);
+                                }
+
                                 posInfo.StoreId = toStore.Id;
                                 posInfo.BuyUserId = 0;
                                 posInfo.UserId = 0;
@@ -798,6 +777,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 toStore.LaveNum += 1;
                                 fromStore.TotalNum -= 1;
                                 fromStore.LaveNum -= 1;
+                                PublicFunction.ClearPosHistory(db, posInfo.PosSn); //清除机具历史记录
                                 db.SaveChanges();
                             }
                             else
@@ -857,6 +837,11 @@ namespace MySystem.Areas.Admin.Controllers
                                 }).Entity;
                                 db.SaveChanges();
 
+                                if (!opData.Contains(posInfo.BuyUserId + ":" + posInfo.BrandId))
+                                {
+                                    opData.Add(posInfo.BuyUserId + ":" + posInfo.BrandId);
+                                }
+
                                 posInfo.StoreId = toStore.Id;
                                 posInfo.BuyUserId = 0;
                                 posInfo.UserId = 0;
@@ -883,6 +868,7 @@ namespace MySystem.Areas.Admin.Controllers
                                 fuserMachineData.UnBindCount -= 1;
                                 toStore.LaveNum += 1;
                                 toStore.TotalNum += 1;
+                                PublicFunction.ClearPosHistory(db, posInfo.PosSn); //清除机具历史记录
                                 db.SaveChanges();
                             }
                             db.SaveChanges();
@@ -895,6 +881,11 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     return "Warning|" + error;
                 }
+                foreach (string sub in opData)
+                {
+                    string[] datalist = sub.Split(":");
+                    PublicFunction.SycnMachineCount(int.Parse(datalist[0]), int.Parse(datalist[1]));
+                }
             }
             AddSysLog("0", "MachinesRejectStore", "Import");
             return "success";

+ 12 - 0
Areas/Admin/Controllers/OperateServer/StoreMachineApplyOperateController.cs

@@ -642,6 +642,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandId);
                 if (items == null)
                 {
@@ -670,6 +672,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandIds == 7) FromStoreId = 1047;
                 if (BrandIds == 8) FromStoreId = 4831;
                 if (BrandIds == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 var brandInfo = db.KqProducts.FirstOrDefault(m => m.Id == BrandIds);
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandIds) ?? new CheckSendInfo();
                 if (items.Num > num)
@@ -699,8 +703,14 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 Models.MachineForSnNo posInfo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new Models.MachineForSnNo();
                 var pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posInfo.SnId && m.StoreId == FromStoreId && m.UserId == 0 && m.BuyUserId == 0 && m.PreUserId == 0) ?? new Models.PosMachinesTwo();
+                if (pos.BindingState == 1 || pos.ActivationState == 1)
+                {
+                    error += "以下操作失败" + SnNo + ',' + "该机具已绑定或已激活" + '\n';
+                }
                 if (posInfo.SnId > 0)
                 {
                     if (pos.Id > 0)
@@ -760,6 +770,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 tostore = db.StoreHouse.FirstOrDefault(m => m.Sort > 0 && m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status == 1);
                 SendInfo item = sendInfos.FirstOrDefault(m => m.FromStoreId == FromStoreId && m.ToStoreId == tostore.Id && m.BrandId == BrandId);
                 if (item == null)

+ 12 - 0
Areas/Admin/Controllers/OperateServer/StoreMachineApplysOperateController.cs

@@ -537,6 +537,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandId);
                 if (items == null)
                 {
@@ -565,6 +567,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandIds == 7) FromStoreId = 1047;
                 if (BrandIds == 8) FromStoreId = 4831;
                 if (BrandIds == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 var brandInfo = db.KqProducts.FirstOrDefault(m => m.Id == BrandIds);
                 CheckSendInfo items = checksendInfos.FirstOrDefault(m => m.BrandId == BrandIds) ?? new CheckSendInfo();
                 if (items.Num > num)
@@ -594,8 +598,14 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 MachineForSnNo posInfo = db.MachineForSnNo.FirstOrDefault(m => m.SnNo == SnNo) ?? new MachineForSnNo();
                 var pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == posInfo.SnId && m.StoreId == FromStoreId && m.UserId == 0 && m.BuyUserId == 0 && m.PreUserId == 0) ?? new PosMachinesTwo();
+                if (pos.BindingState == 1 || pos.ActivationState == 1)
+                {
+                    error += "以下操作失败" + SnNo + ',' + "该机具已绑定或已激活" + '\n';
+                }
                 if (posInfo.SnId > 0)
                 {
                     if (pos.Id > 0)
@@ -642,6 +652,8 @@ namespace MySystem.Areas.Admin.Controllers
                 if (BrandId == 7) FromStoreId = 1047;
                 if (BrandId == 8) FromStoreId = 4831;
                 if (BrandId == 9) FromStoreId = 4832;
+                if (BrandId == 10) FromStoreId = 5512;
+                if (BrandId == 11) FromStoreId = 5513;
                 tostore = db.StoreHouse.FirstOrDefault(m => m.Sort > 0 && m.UserId == apply.UserId && m.BrandId == BrandId.ToString() && m.Status == 1);
                 SendInfo item = sendInfos.FirstOrDefault(m => m.FromStoreId == FromStoreId && m.ToStoreId == tostore.Id && m.BrandId == BrandId);
                 if (item == null)

+ 0 - 1
Areas/Admin/Controllers/OperateServer/UserAccountRecordOperateController.cs

@@ -156,7 +156,6 @@ namespace MySystem.Areas.Admin.Controllers
 
             string ChangeTypeAmount0 = "0.00", ChangeTypeAmount1 = "0.00", ChangeTypeAmount2 = "0.00", ChangeTypeAmount3 = "0.00", ChangeTypeAmount4 = "0.00", ChangeTypeAmount5 = "0.00", ChangeTypeAmount6 = "0.00", ChangeTypeAmount61 = "0.00", ChangeTypeAmount62 = "0.00", ChangeTypeAmount63 = "0.00", ChangeTypeAmount64 = "0.00", ChangeTypeAmount50 = "0.00", ChangeTypeAmount111 = "0.00", ChangeTypeAmount112 = "0.00", ChangeTypeAmount60 = "0.00", ChangeTypeAmount31 = "0.00";
             DataTable dt = OtherMySqlConn.dtable("select sum(if(ChangeType=0, ChangeAmount, 0)),sum(if(ChangeType=1, ChangeAmount, 0)),sum(if(ChangeType=2, ChangeAmount, 0)),sum(if(ChangeType=6, ChangeAmount, 0)),sum(if(ChangeType=61, ChangeAmount, 0)),sum(if(ChangeType=62, ChangeAmount, 0)),sum(if(ChangeType=63, ChangeAmount, 0)),sum(if(ChangeType=64, ChangeAmount, 0)),sum(if(ChangeType=50, ChangeAmount, 0)),sum(if(ChangeType=111, ChangeAmount, 0)),sum(if(ChangeType=112, ChangeAmount, 0)),sum(if(ChangeType=60, ChangeAmount, 0)),sum(if(ChangeType=31, ChangeAmount, 0)),sum(if(ChangeType=3, ChangeAmount, 0)),sum(if(ChangeType=4, ChangeAmount, 0)),sum(if(ChangeType=5, ChangeAmount, 0)) from UserAccountRecord where 1=1" + condition);
-            DataTable dts = OtherMySqlConn.dtable("select SUM(FluxProfitAmt) from FluxProfitDetail where ");
             if (dt.Rows.Count > 0)
             {
                 ChangeTypeAmount0 = dt.Rows[0][0].ToString();

+ 2 - 0
Areas/Admin/Controllers/OperateServer/UserCashRecordOperateController.cs

@@ -26,6 +26,7 @@ namespace MySystem.Areas.Admin.Controllers
     {
         public UserCashRecordOperateController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
         {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["OpSqlConnStr"].ToString();
         }
 
         #region 提现记录列表
@@ -344,6 +345,7 @@ namespace MySystem.Areas.Admin.Controllers
                 int id = int.Parse(subid);
                 Dictionary<string, object> Fields = new Dictionary<string, object>();
                 Fields.Add("Status", 1);//设置提现记录为成功
+                Fields.Add("SeoTitle", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                 new AdminContentByConn(_accessor.HttpContext, PublicFunction.OpTables, OpConn).Edit("UserCashRecord", Fields, id);                
             }
             opdb.SaveChanges();

+ 1 - 0
Areas/Admin/Controllers/SpServer/SpTradeRecordController.cs

@@ -57,6 +57,7 @@ namespace MySystem.Areas.Admin.Controllers
             Dictionary<string, string> Fields = new Dictionary<string, string>();
 
             Fields.Add("MerNo", "1"); //商户编号
+            Fields.Add("MerSnNo", "1"); //机具号
             Fields.Add("ChannelSerial", "1"); //渠道流水号
 
 

+ 1 - 0
Areas/Admin/Controllers/SpServer/TradeFluxRecordController.cs

@@ -57,6 +57,7 @@ namespace MySystem.Areas.Admin.Controllers
             Dictionary<string, string> Fields = new Dictionary<string, string>();
 
             Fields.Add("MerNo", "1"); //商户编号
+            Fields.Add("TradeSnNo", "1"); //终端机身号
             Fields.Add("KqTradeSeq", "1"); //快钱交易流水号
 
 

BIN
Areas/Admin/Views/.DS_Store


BIN
Areas/Admin/Views/BsServer/.DS_Store


+ 8 - 2
Areas/Admin/Views/BsServer/Advertisment/Add.cshtml

@@ -75,9 +75,15 @@
                             <input class="layui-input" type="text" id="Url" name="Url" maxlength="max" lay-verify="" autocomplete="off" placeholder="请输入链接地址">
                         </div>
                     </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">参数</label>
+                        <div class="layui-input-block">
+                            <input class="layui-input" type="text" id="SeoTitle" name="SeoTitle" maxlength="max" lay-verify="" autocomplete="off" placeholder="请输入参数">
+                        </div>
+                    </div>
 
                 </div>
-                <div class="layui-tab-item">
+                @* <div class="layui-tab-item">
                     <div class="layui-form-item">
                         <label class="layui-form-label">网页标题</label>
                         <div class="layui-input-block">
@@ -97,7 +103,7 @@
                         </div>
                     </div>
 
-                </div>
+                </div> *@
 
             </div>
         </div>

+ 8 - 2
Areas/Admin/Views/BsServer/Advertisment/Edit.cshtml

@@ -83,9 +83,15 @@
                             <input class="layui-input" type="text" id="Url" name="Url" value="@editData.Url" maxlength="max" lay-verify="" autocomplete="off" placeholder="请输入链接地址">
                         </div>
                     </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">参数</label>
+                        <div class="layui-input-block">
+                            <input class="layui-input" type="text" id="SeoTitle" name="SeoTitle" value="@editData.SeoTitle" maxlength="max" lay-verify="" autocomplete="off" placeholder="请输入参数">
+                        </div>
+                    </div>
 
                 </div>
-                <div class="layui-tab-item">
+                @* <div class="layui-tab-item">
                     <div class="layui-form-item">
                         <label class="layui-form-label">网页标题</label>
                         <div class="layui-input-block">
@@ -105,7 +111,7 @@
                         </div>
                     </div>
 
-                </div>
+                </div> *@
 
             </div>
         </div>

+ 2 - 2
Areas/Admin/Views/BsServer/Col/Add.cshtml

@@ -76,7 +76,7 @@
                                     <label class="layui-form-label">图片</label>
                                     <div class="layui-input-block">
                                         <div class="layui-upload">
-                                            <input type="hidden" id="ColPicPath" name="ColPicPath" value="" lay-verify="required|">
+                                            <input type="hidden" id="ColPicPath" name="ColPicPath" value="">
                                             <button class="layui-btn" type="button" id="ColPicPathBtn">选择图片</button>
                                             <div class="layui-inline layui-word-aux">大小限制为100K</div>
                                         </div>
@@ -94,7 +94,7 @@
                                 <div class="layui-form-item">
                                     <label class="layui-form-label">是否开放</label>
                                     <div class="layui-input-block">
-                                        <input type="checkbox" id="Recommend" name="Recommend" value="True"
+                                        <input type="checkbox" id="Recommend" name="Recommend"  value="1"
                                         lay-skin="switch" lay-filter="switchTest" title="开关">
                                     </div>
                                 </div>

+ 1 - 1
Areas/Admin/Views/BsServer/Col/Edit.cshtml

@@ -84,7 +84,7 @@
                                 <div class="layui-form-item layui-form-text">
                                     <label class="layui-form-label">简介</label>
                                     <div class="layui-input-block">
-                                        <textarea class="layui-textarea" id="ColDetail" name="ColDetail" lay-verify=""
+                                        <textarea class="layui-textarea" id="ColDetail" name="ColDetail" lay-verify="required|"
                                         placeholder="请输入简介">@editData.ColDetail</textarea>
                                     </div>
                                 </div>

+ 1 - 2
Areas/Admin/Views/BsServer/MsgPersonal/Add.cshtml

@@ -41,8 +41,7 @@
                                 <div class="layui-upload">
                                     <input type="hidden" id="BgPic" name="BgPic" value="">
                                     <button class="layui-btn" type="button" id="BgPicBtn">选择图片</button>
-                                    <div class="layui-inline layui-word-aux">@(new
-                                        MySystem.PublicFunction().GetUploadHint("MsgPersonalBgPic"))</div>
+                                    <div class="layui-inline layui-word-aux">@(new MySystem.PublicFunction().GetUploadHint("MsgPersonalBgPic"))</div>
                                 </div>
                                 <div style="margin-top:10px;" id="BgPicImage">
                                 </div>

+ 138 - 130
Areas/Admin/Views/BsServer/MsgPlacard/Add.cshtml

@@ -1,163 +1,170 @@
 @{
     string RightInfo = ViewBag.RightInfo as string;
     string right = ViewBag.right as string;
-    
+
 }
 <!DOCTYPE html>
 <html>
+
 <head>
     <meta charset="utf-8">
     <title>公告消息(增加)</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
     <script src="/admin/js/jquery-1.10.1.min.js"></script>
     <script src="/admin/js/LAreaData2.js"></script>
     <style>
-        .layui-form-label{
+        .layui-form-label {
             width: 115px !important;
         }
-        .layui-form-item .layui-input-inline{
+
+        .layui-form-item .layui-input-inline {
             width: 250px !important;
         }
-        .layui-form-item .layui-input-block{
+
+        .layui-form-item .layui-input-block {
             margin-left: 145px !important;
         }
     </style>
 </head>
+
 <body>
 
     <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
-        
+
         <div class="layui-card">
-          <div class="layui-card-body">
-            <div class="layui-tab" lay-filter="mytabbar">
-                <div class="layui-tab-content mt20">
-                    <div class="layui-tab-item layui-show">
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">展示类型</label>
-                            <div class="layui-input-inline">
-                                <select id="ShowType" name="ShowType" lay-search="">
-                                    <option value="">请选择</option>
-                                    <option value="0">系统消息</option>
-                                    <option value="1">首页弹层提示</option>
-                                </select>
-                            </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">消息类型</label>
-                            <div class="layui-input-inline">
-                                <select id="MsgType" name="MsgType" lay-search="" lay-filter="MsgType">
-                                    <option value="0">html页面</option>
-                                    <option value="1">指定url</option>
-                                    <option value="2">简单中文描述</option>
-                                </select>
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">展示类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="ShowType" name="ShowType" lay-search="">
+                                        <option value="">请选择</option>
+                                        <option value="0">系统消息</option>
+                                        <option value="1">首页弹层提示</option>
+                                    </select>
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">标题</label>
-                            <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="Title" name="Title" maxlength="50"
-                                    lay-verify="required," autocomplete="off" placeholder="请输入标题">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">消息类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="MsgType" name="MsgType" lay-search="" lay-filter="MsgType">
+                                        <option value="0">html页面</option>
+                                        <option value="1">指定url</option>
+                                        <option value="2">简单中文描述</option>
+                                    </select>
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item layui-form-text">
-                            <label class="layui-form-label">推送内容</label>
-                            <div class="layui-input-inline">
-                                <textarea class="layui-textarea" id="Summary" name="Summary" maxlength="500"
-                                    lay-verify="" placeholder="请输入推送内容"></textarea>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">标题</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="Title" name="Title" maxlength="50"
+                                        lay-verify="required," autocomplete="off" placeholder="请输入标题">
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">有效开始时间</label>
-                            <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="EffectStartDate" name="EffectStartDate"
-                                    lay-verify="" autocomplete="off" placeholder="请输入有效开始时间">
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">简介</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Summary" name="Summary" maxlength="500"
+                                        lay-verify="" placeholder="请输入简介"></textarea>
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">有效结束时间</label>
-                            <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="EffectEndDate" name="EffectEndDate"
-                                    lay-verify="" autocomplete="off" placeholder="请输入有效结束时间">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">有效开始时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="EffectStartDate" name="EffectStartDate"
+                                        lay-verify="" autocomplete="off" placeholder="请输入有效开始时间">
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">背景图片</label>
-                            <div class="layui-input-block">
-                                <div class="layui-upload">
-                                    <input type="hidden" id="BgPic" name="BgPic" value="">
-                                    <button class="layui-btn" type="button" id="BgPicBtn">选择图片</button>
-                                    <div class="layui-inline layui-word-aux">@(new MySystem.PublicFunction().GetUploadHint("MsgPlacardBgPic"))</div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">有效结束时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="EffectEndDate" name="EffectEndDate"
+                                        lay-verify="" autocomplete="off" placeholder="请输入有效结束时间">
                                 </div>
-                                <div style="margin-top:10px;" id="BgPicImage">
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">背景图片</label>
+                                <div class="layui-input-block">
+                                    <div class="layui-upload">
+                                        <input type="hidden" id="BgPic" name="BgPic" value="">
+                                        <button class="layui-btn" type="button" id="BgPicBtn">选择图片</button>
+                                        <div class="layui-inline layui-word-aux">@(new MySystem.PublicFunction().GetUploadHint("MsgPlacardBgPic"))</div>
+                                    </div>
+                                    <div style="margin-top:10px;" id="BgPicImage">
+                                    </div>
                                 </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item">
-                            <label class="layui-form-label">推送类型</label>
-                            <div class="layui-input-inline">
-                                <select id="PushType" name="PushType" lay-search="" lay-filter="PushType">
-                                    <option value="0">不推送</option>
-                                    <option value="1">立即推送</option>
-                                    <option value="2">定时推送</option>
-                                </select>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">推送类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="PushType" name="PushType" lay-search="" lay-filter="PushType">
+                                        <option value="0">不推送</option>
+                                        <option value="1">立即推送</option>
+                                        <option value="2">定时推送</option>
+                                    </select>
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item" id="PushParamDiv" style="display: none;">
-                            <label class="layui-form-label">推送参数</label>
-                            <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="PushParam" name="PushParam" maxlength="255"
-                                    lay-verify="" autocomplete="off" placeholder="请输入推送参数">
+                            <div class="layui-form-item" id="PushParamDiv" style="display: none;">
+                                <label class="layui-form-label">推送参数</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="PushParam" name="PushParam"
+                                        maxlength="255" lay-verify="" autocomplete="off" placeholder="请输入推送参数">
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item" id="PushTimeDiv" style="display: none;">
-                            <label class="layui-form-label">推送时间</label>
-                            <div class="layui-input-inline">
-                                <input class="layui-input" type="text" id="PushTime" name="PushTime" lay-verify=""
-                                    autocomplete="off" placeholder="请输入推送时间">
+                            <div class="layui-form-item" id="PushTimeDiv" style="display: none;">
+                                <label class="layui-form-label">推送时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="PushTime" name="PushTime" lay-verify=""
+                                        autocomplete="off" placeholder="请输入推送时间">
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item" id="UrlDiv" style="display: none;">
-                            <label class="layui-form-label">跳转Url</label>
-                            <div class="layui-input-block">
-                                <input class="layui-input" type="text" id="Url" name="Url" maxlength="500" lay-verify=""
-                                    autocomplete="off" placeholder="请输入跳转Url">
+                            <div class="layui-form-item" id="UrlDiv" style="display: none;">
+                                <label class="layui-form-label">跳转Url</label>
+                                <div class="layui-input-block">
+                                    <input class="layui-input" type="text" id="Url" name="Url" maxlength="500"
+                                        lay-verify="" autocomplete="off" placeholder="请输入跳转Url">
+                                </div>
                             </div>
-                        </div>
-                        <div class="layui-form-item layui-form-text" id="ContentDiv">
-                            <label class="layui-form-label">内容</label>
-                            <div class="layui-input-block">
-                                <textarea class="layui-textarea" id="Content" name="Content" placeholder="请输入内容"
-                                    style="width:100%;height:500px;"></textarea>
+                            <div class="layui-form-item layui-form-text" id="ContentDiv">
+                                <label class="layui-form-label">内容</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Content" name="Content" placeholder="请输入内容"
+                                        style="width:100%;height:500px;"></textarea>
+                                </div>
                             </div>
+
                         </div>
 
                     </div>
-
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
                 </div>
             </div>
-            <div class="layui-form-item layui-hide">
-                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
-            </div>
-          </div>
         </div>
     </div>
 
     <script src="/layuiadmin/layui/layui.js"></script>
-    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script
+        src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
     <script src="/other/mybjq/kindeditor-min.js"></script>
     <script src="/other/mybjq/lang/zh_CN.js"></script>
     <script>
         //内容
- @(Html.Raw(Library.Control.kindeditorVar("Content")))
+        @(Html.Raw(Library.Control.kindeditorVar("Content")))
+
 
-                    
-        //编辑器
-        KindEditor.ready(function (K) {
-            //内容
- @(Html.Raw(Library.Control.kindeditor("Content", 1)))
+            //编辑器
+            KindEditor.ready(function (K) {
+                //内容
+                @(Html.Raw(Library.Control.kindeditor("Content", 1)))
 
         });
 
@@ -264,7 +271,7 @@
             });
         }
 
-        
+
         var tree;
         var element;
         var upload;
@@ -284,7 +291,7 @@
             tree = layui.tree;
             element = layui.element;
             upload = layui.upload;
-        
+
             //Hash地址的定位
             var layid = location.hash.replace(/^#test=/, '');
             element.tabChange('test', layid);
@@ -293,69 +300,70 @@
             });
 
             form.on('select(MsgType)', function (data) {
-                if(data.value == '0') {
+                if (data.value == '0') {
                     $('#UrlDiv').hide();
                     $('#ContentDiv').show();
-                } else if(data.value == '1') {
+                } else if (data.value == '1') {
                     $('#UrlDiv').show();
                     $('#ContentDiv').hide();
-                } else if(data.value == '2') {
+                } else if (data.value == '2') {
                     $('#UrlDiv').hide();
                     $('#ContentDiv').hide();
                 }
                 form.render();
             });
             form.on('select(PushType)', function (data) {
-                if(data.value == '0') {
+                if (data.value == '0') {
                     $('#PushParamDiv').hide();
                     $('#PushTimeDiv').hide();
-                } else if(data.value == '1') {
+                } else if (data.value == '1') {
                     $('#PushParamDiv').show();
                     $('#PushTimeDiv').hide();
-                } else if(data.value == '2') {
+                } else if (data.value == '2') {
                     $('#PushParamDiv').show();
                     $('#PushTimeDiv').show();
                 }
                 form.render();
             });
 
-            
-    
+
+
             //日期
             laydate.render({
-            elem: '#EffectStartDate',
-            type: 'datetime',
-            trigger: 'click'
+                elem: '#EffectStartDate',
+                type: 'datetime',
+                trigger: 'click'
             });
             laydate.render({
-            elem: '#EffectEndDate',
-            type: 'datetime',
-            trigger: 'click'
+                elem: '#EffectEndDate',
+                type: 'datetime',
+                trigger: 'click'
             });
             laydate.render({
-            elem: '#PushTime',
-            type: 'datetime',
-            trigger: 'click'
+                elem: '#PushTime',
+                type: 'datetime',
+                trigger: 'click'
             });
 
 
             //上传文件
             WebUploadJs('BgPicBtn', '@(Library.ConfigurationManager.AppSettings["Database"].ToString())/upload/v2', @(Html.Raw(new MySystem.PublicFunction().GetUploadParam("MsgPlacardBgPic"))), function (filename) {
-            $('#BgPicImage').html('<img src="' + osshost + filename + '" class="layui-upload-img" style="max-width:85px; max-height:85px;" onclick="showBigPic(\'' + osshost + filename + '\')">')
-            $('#BgPic').val(filename);
+                $('#BgPicImage').html('<img src="' + osshost + filename + '" class="layui-upload-img" style="max-width:85px; max-height:85px;" onclick="showBigPic(\'' + osshost + filename + '\')">')
+                $('#BgPic').val(filename);
             });
 
 
             //穿梭框
-            
+
 
             //TreeView,比如权限管理
-            
+
 
             //省市区
-            
+
         })
 
     </script>
 </body>
+
 </html>

BIN
Areas/Admin/Views/CashServer/.DS_Store


BIN
Areas/Admin/Views/MainServer/.DS_Store


+ 2 - 2
Areas/Admin/Views/MainServer/ActiveReward/Index.cshtml

@@ -144,8 +144,8 @@
                         <div class="layui-input-inline">
                             <select id="SnTypeSelect" name="SnTypeSelect" lay-search="">
                                 <option value="">全部...</option>
-                                <option value="0">购买机具</option>
-                                <option value="1">赠送机具</option>
+                                <option value="0">兑换机具</option>
+                                <option value="1">循环机具</option>
                             </select>
                         </div>
                     </div>

+ 2 - 2
Areas/Admin/Views/MainServer/KqProductRuleSet/Add.cshtml

@@ -216,9 +216,9 @@
 </div>
 <div class="layui-tab-item">
 <div class="layui-form-item">
-<label class="layui-form-label">购买机起始价</label>
+<label class="layui-form-label">兑换机起始价</label>
 <div class="layui-input-inline">
-<input class="layui-input" type="text" id="BigTotalAmount" name="BigTotalAmount" maxlength="20" lay-verify="required,number," autocomplete="off" placeholder="请输入购买机起始价">
+<input class="layui-input" type="text" id="BigTotalAmount" name="BigTotalAmount" maxlength="20" lay-verify="required,number," autocomplete="off" placeholder="请输入兑换机起始价">
 </div>
 </div>
 <div class="layui-form-item">

+ 2 - 2
Areas/Admin/Views/MainServer/KqProductRuleSet/Edit.cshtml

@@ -219,9 +219,9 @@
 </div>
 <div class="layui-tab-item">
 <div class="layui-form-item">
-<label class="layui-form-label">购买机起始价</label>
+<label class="layui-form-label">兑换机起始价</label>
 <div class="layui-input-inline">
-<input class="layui-input" type="text" id="BigTotalAmount" name="BigTotalAmount" value="@editData.BigTotalAmount" maxlength="20" lay-verify="required,number," autocomplete="off" placeholder="请输入购买机起始价">
+<input class="layui-input" type="text" id="BigTotalAmount" name="BigTotalAmount" value="@editData.BigTotalAmount" maxlength="20" lay-verify="required,number," autocomplete="off" placeholder="请输入兑换机起始价">
 </div>
 </div>
 <div class="layui-form-item">

+ 2 - 2
Areas/Admin/Views/MainServer/Leaders/ChangeLeaderAmount.cshtml

@@ -54,8 +54,8 @@
                             <div class="layui-input-inline">
                                 <select id="Kind" name="Kind" lay-verify="required|">
                                     <option value="">请选择</option>
-                                    <option value="1">冻结</option>
-                                    <option value="2">解冻</option>
+                                    @* <option value="1">冻结</option> *@
+                                    @* <option value="2">解冻</option> *@
                                     <option value="3">扣减</option>
                                     <option value="4">增加</option>
                                 </select>

+ 4 - 4
Areas/Admin/Views/MainServer/MachineRenew/Add.cshtml

@@ -76,8 +76,8 @@
                             <div class="layui-input-inline">
                                 <select id="DamagedSnType" name="DamagedSnType" lay-verify="required|" lay-search="">
                                     <option value="">请选择</option>
-                                    <option value="0">购买机具</option>
-                                    <option value="1">赠送机具</option>
+                                    <option value="0">兑换机具</option>
+                                    <option value="1">循环机具</option>
                                 </select>
                             </div>
                         </div>
@@ -105,8 +105,8 @@
                             <div class="layui-input-inline">
                                 <select id="ReplaceSnType" name="ReplaceSnType" lay-verify="required|" lay-search="">
                                     <option value="">请选择</option>
-                                    <option value="0">购买机具</option>
-                                    <option value="1">赠送机具</option>
+                                    <option value="0">兑换机具</option>
+                                    <option value="1">循环机具</option>
                                 </select>
                             </div>
                         </div>

+ 2 - 2
Areas/Admin/Views/MainServer/MachineRenew/Index.cshtml

@@ -81,8 +81,8 @@
                         <div class="layui-input-inline">
                             <select id="DamagedSnTypeSelect" name="DamagedSnTypeSelect" lay-search="">
                                 <option value="">全部...</option>
-                                <option value="0">购买机具</option>
-                                <option value="1">赠送机具</option>
+                                <option value="0">兑换机具</option>
+                                <option value="1">循环机具</option>
                             </select>
                         </div>
                     </div>

+ 26 - 6
Areas/Admin/Views/MainServer/MerchantDepositReturns/Index.cshtml

@@ -51,10 +51,17 @@
                                 placeholder="" autocomplete="off">
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">发放时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="UpdateDateData" id="UpdateDate"
+                                placeholder="" autocomplete="off">
+                        </div>
+                    </div>
                     <div class="layui-inline">
                         <label class="layui-form-label">退押订单号</label>
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="OrderNo" placeholder="" autocomplete="off">
+                            <input class="layui-input" type="text" name="SeoKeyword" placeholder="" autocomplete="off">
                         </div>
                     </div>
                     <div class="layui-inline">
@@ -72,11 +79,24 @@
                                 <option value="0" selected="selected">待处理</option>
                                 <option value="2">失败</option>
                                 <option value="1">成功</option>
-                                <option value="4">通过</option>
-                                <option value="5">未通过</option>
+                                @* <option value="4">通过</option> *@
+                                @* <option value="5">未通过</option> *@
                             </select>
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">商户姓名</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MerchantName" placeholder="请输入商户姓名"
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">机具号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="PosSn" placeholder="请输入机具号" autocomplete="off">
+                        </div>
+                    </div>
 
                     <div class="layui-inline ml50">
                         <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
@@ -119,11 +139,11 @@
                         <button class="layui-btn" data-type="ImportData"><i
                             class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>退押结果导入</button>
                     }
-                    @if (RightInfo.Contains("," + right + "_cash,"))
+                    @* @if (RightInfo.Contains("," + right + "_cash,"))
                     {
                         <button class="layui-btn" data-type="Cash"><i
-                            class="layui-icon layui-icon-up layuiadmin-button-btn"></i>提交到代付平台</button>
-                    }
+                            class="layui-icon layui-icon-up layuiadmin-button-btn"></i>提交到支付宝平台</button>
+                    } *@
                 </div>
                 <blockquote class="layui-elem-quote layui-text">
                     退押总金额:<span style="color: #f00;" id="ReturnAmount">0.00</span> | 实际总金额:<span style="color: #f00;" id="fReturnAmount">0.00</span>

+ 31 - 10
Areas/Admin/Views/MainServer/MerchantDepositReturns/Indexs.cshtml

@@ -51,10 +51,17 @@
                                 placeholder="" autocomplete="off">
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">发放时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="UpdateDateData" id="UpdateDate"
+                                placeholder="" autocomplete="off">
+                        </div>
+                    </div>
                     <div class="layui-inline">
                         <label class="layui-form-label">退押订单号</label>
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="OrderNo" placeholder="" autocomplete="off">
+                            <input class="layui-input" type="text" name="SeoKeyword" placeholder="" autocomplete="off">
                         </div>
                     </div>
                     <div class="layui-inline">
@@ -72,11 +79,24 @@
                                 <option value="0" selected="selected">待处理</option>
                                 <option value="2">失败</option>
                                 <option value="1">成功</option>
-                                <option value="4">通过</option>
-                                <option value="5">未通过</option>
+                                @* <option value="4">通过</option> *@
+                                @* <option value="5">未通过</option> *@
                             </select>
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">商户姓名</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MerchantName" placeholder="请输入商户姓名"
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">机具号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="PosSn" placeholder="请输入机具号" autocomplete="off">
+                        </div>
+                    </div>
 
                     <div class="layui-inline ml50">
                         <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
@@ -119,24 +139,25 @@
                         <button class="layui-btn" data-type="ImportData"><i
                             class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>退押结果导入</button>
                     }
-                    @if (RightInfo.Contains("," + right + "_cash,"))
-                    {
+                    @* @if (RightInfo.Contains("," + right + "_cash,"))
+                        {
                         <button class="layui-btn" data-type="Cash"><i
-                            class="layui-icon layui-icon-up layuiadmin-button-btn"></i>提交到代付平台</button>
-                    }
+                        class="layui-icon layui-icon-up layuiadmin-button-btn"></i>提交到支付宝平台</button>
+                        } *@
                 </div>
                 <blockquote class="layui-elem-quote layui-text">
-                    退押总金额:<span style="color: #f00;" id="ReturnAmount">0.00</span> | 实际总金额:<span style="color: #f00;" id="fReturnAmount">0.00</span>
+                    退押总金额:<span style="color: #f00;" id="ReturnAmount">0.00</span> | 实际总金额:<span style="color: #f00;"
+                        id="fReturnAmount">0.00</span>
                 </blockquote>
                 <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
                 <script type="text/html" id="table-list-tools">
                     @if (RightInfo.Contains("," + right + "_edit,"))
                     {
-                                            <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
+                                                <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
                     }
                     @if (RightInfo.Contains("," + right + "_delete,"))
                     {
-                                            <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
+                                                <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
                     }
                     @if (RightInfo.Contains("," + right + "_edit,"))
                     {

+ 24 - 9
Areas/Admin/Views/MainServer/MsgAlert/Add.cshtml

@@ -82,8 +82,7 @@
                                     <div class="layui-upload">
                                         <input type="hidden" id="BgPic" name="BgPic" value="">
                                         <button class="layui-btn" type="button" id="BgPicBtn">选择图片</button>
-                                        <div class="layui-inline layui-word-aux">@(new
-                                            MySystem.PublicFunction().GetUploadHint("MsgAlertBgPic"))</div>
+                                        <div class="layui-inline layui-word-aux">@(new MySystem.PublicFunction().GetUploadHint("MsgAlertBgPic"))</div>
                                     </div>
                                     <div style="margin-top:10px;" id="BgPicImage">
                                     </div>
@@ -160,13 +159,6 @@
                                         maxlength="20" lay-verify="" autocomplete="off" placeholder="请输入每日次数">
                                 </div>
                             </div>
-                            @* <div class="layui-form-item">
-                                <label class="layui-form-label">弹窗标识</label>
-                                <div class="layui-input-inline">
-                                <input type="checkbox" id="AlertFlag" name="AlertFlag" value="1" lay-skin="switch"
-                                lay-filter="switchTest" title="开关">
-                                </div>
-                                </div> *@
                             <div class="layui-form-item">
                                 <label class="layui-form-label">是否周末</label>
                                 <div class="layui-input-inline">
@@ -174,6 +166,19 @@
                                         lay-filter="switchTest" title="开关">
                                 </div>
                             </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">指定推送</label>
+                                <div class="layui-input-inline">
+                                    <input type="checkbox" id="AlertFlag" name="AlertFlag" value="1" lay-skin="switch"
+                                        lay-filter="AlertFlag" title="开关">
+                                </div>
+                            </div>
+                            <div class="layui-form-item" id="MakerCode" style="display: none;">
+                                <label class="layui-form-label">创客编号</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" lay-verify="" name="MakerCodes" id="MakerCodes" placeholder="请输入创客编号,多个创客编号用回车隔开"></textarea>
+                                </div>
+                            </div>
 
                         </div>
 
@@ -352,6 +357,16 @@
                 form.render();
             });
 
+            form.on('switch(AlertFlag)', function (data) {
+                console.log(data);
+                if (this.checked) {
+                    $('#MakerCode').css('display', 'block');
+                } else {
+                    $('#MakerCode').css('display', 'none');
+                }
+                form.render();
+            });
+
             //日期
             laydate.render({
                 elem: '#EffectStartDate',

+ 26 - 11
Areas/Admin/Views/MainServer/MsgAlert/Edit.cshtml

@@ -91,8 +91,7 @@
                                     <div class="layui-upload">
                                         <input type="hidden" id="BgPic" name="BgPic" value="@editData.BgPic">
                                         <button class="layui-btn" type="button" id="BgPicBtn">选择图片</button>
-                                        <div class="layui-inline layui-word-aux">@(new
-                                            MySystem.PublicFunction().GetUploadHint("MsgAlertBgPic"))</div>
+                                        <div class="layui-inline layui-word-aux">@(new MySystem.PublicFunction().GetUploadHint("MsgAlertBgPic"))</div>
                                     </div>
                                     <div style="margin-top:10px;" id="BgPicImage">
                                         @if (!string.IsNullOrEmpty(editData.BgPic))
@@ -183,14 +182,6 @@
                                         placeholder="请输入每日次数">
                                 </div>
                             </div>
-                            @* <div class="layui-form-item">
-                                <label class="layui-form-label">弹窗标识</label>
-                                <div class="layui-input-inline">
-                                <input type="checkbox" id="AlertFlag" name="AlertFlag" value="1"
-                                @(editData.AlertFlag == 1 ? "checked=checked" : "") lay-skin="switch"
-                                lay-filter="switchTest" title="开关">
-                                </div>
-                                </div> *@
                             <div class="layui-form-item">
                                 <label class="layui-form-label">是否周末</label>
                                 <div class="layui-input-inline">
@@ -199,6 +190,20 @@
                                         lay-filter="switchTest" title="开关">
                                 </div>
                             </div>
+                            <div class="layui-form-item" id="MakerCode" style="display: none;">
+                                <label class="layui-form-label">指定推送</label>
+                                <div class="layui-input-inline">
+                                    <input type="checkbox" id="AlertFlag" name="AlertFlag" value="1"
+                                        @(editData.AlertFlag == 1 ? "checked=checked" : "") lay-skin="switch"
+                                        lay-filter="AlertFlag" title="开关">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客编号</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" lay-verify="" name="MakerCodes" id="MakerCodes" placeholder="请输入创客编号,多个创客编号用回车隔开"></textarea>
+                                </div>
+                            </div>
 
                         </div>
 
@@ -367,7 +372,7 @@
                     $('#Titles').hide();
                     $('#BgPics').show();
                     $('#Button').hide();
-                }else if (data.value == '3') {
+                } else if (data.value == '3') {
                     $('#Titles').hide();
                     $('#BgPics').show();
                     $('#Button').hide();
@@ -389,6 +394,16 @@
                 $('#Button').hide();
             }
 
+            form.on('switch(AlertFlag)', function (data) {
+                console.log(data);
+                if (this.checked) {
+                    $('#MakerCode').css('display', 'block');
+                } else {
+                    $('#MakerCode').css('display', 'none');
+                }
+                form.render();
+            });
+
             //日期
             laydate.render({
                 elem: '#EffectStartDate',

+ 1 - 1
Areas/Admin/Views/MainServer/OpenSnSnapshot/Index.cshtml

@@ -131,7 +131,7 @@
 
             <div class="layui-card-body">
                 <blockquote class="layui-elem-quote layui-text">
-                    奖励金额(元):<span style="color: #f00;" id="PrizeAmt">0.00</span> | 购买机数量(元):<span style="color: #f00;" id="BuyPosCount">0.00</span> | 标准购买机数量(元):<span style="color: #f00;" id="StadardBuyPosCount">0.00</span>
+                    奖励金额(元):<span style="color: #f00;" id="PrizeAmt">0.00</span> | 兑换机数量(元):<span style="color: #f00;" id="BuyPosCount">0.00</span> | 标准兑换机数量(元):<span style="color: #f00;" id="StadardBuyPosCount">0.00</span>
                 </blockquote>
                 <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
                 <script type="text/html" id="table-list-tools">

+ 2 - 2
Areas/Admin/Views/MainServer/PosMachinesTwo/Edit.cshtml

@@ -35,8 +35,8 @@
                             <div class="layui-input-inline">
                                 <select id="PosSnType" name="PosSnType" lay-search="">
                                     <option value=""></option>
-                                    <option value="0">购买机</option>
-                                    <option value="1">赠送机</option>
+                                    <option value="0">兑换机</option>
+                                    <option value="1">循环机</option>
                                 </select>
                                 <script>$("#PosSnType").val("@editData.PosSnType");</script>
                             </div>

+ 140 - 0
Areas/Admin/Views/MainServer/PosMachinesTwo/Indexs.cshtml

@@ -0,0 +1,140 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>过期机具扣费列表</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="/layuiadmin/style/admin.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <style>
+        .layui-input-inline {
+            width: 175px !important;
+        }
+
+        .layui-form-label {
+            width: 85px !important;
+        }
+
+        .layui-inline {
+            margin-right: 0px !important;
+        }
+
+        .w100 {
+            width: 100px !important;
+        }
+
+        .ml50 {
+            margin-left: 50px !important;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+                <input class="layui-input" type="hidden" name="ShowFlag" autocomplete="off">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label">SN编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="PosSn" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创客编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="UserIdMakerCode" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">仓库所属人编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="StoreMakerCode" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">循环过期时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="RecycEndDateData"
+                                id="ActivationTime" placeholder="循环过期时间" autocomplete="off">
+                        </div>
+                    </div>
+                    @{
+                        Dictionary<string, string> ProfitObjectsActivesDic = new MySystem.DictionaryClass().getKqProductBrandDic();
+                    }
+                    <div class="layui-inline">
+                        <label class="layui-form-label">品牌</label>
+                        <div class="layui-input-inline">
+                            <select id="BrandId" name="BrandId" lay-search="">
+                                <option value="">全部...</option>
+                                @foreach (string key in ProfitObjectsActivesDic.Keys)
+                                {
+                                    <option value="@key">@ProfitObjectsActivesDic[key]</option>
+                                }
+                            </select>
+                        </div>
+                    </div>
+                    @* <div class="layui-inline">
+                        <label class="layui-form-label">应扣金额</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="AmountYk" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">已扣金额</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="Amountk" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">待扣金额</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="AmountDk" autocomplete="off">
+                        </div>
+                    </div> *@
+                    <div class="layui-inline ml50">
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询
+                        </button>
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-searchall">
+                            <i class="layui-icon layui-icon-list layuiadmin-button-btn"></i>全部
+                        </button>
+                        @if (RightInfo.Contains("," + right + "_export,"))
+                        {
+                            <button class="layui-btn" data-type="ExportExcel"><i
+                                class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出</button>
+                        }
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-card-body">
+                <blockquote class="layui-elem-quote layui-text">
+                    总机具(台):<span style="color: #f00;" id="TotalCount">0</span> | 已扣金额(元):<span style="color: #f00;" id="AmountYks">0.00</span> | 待扣金额(元):<span style="color: #f00;" id="AmountDks">0.00</span>
+                </blockquote>
+                <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
+                <script type="text/html" id="table-list-tools">
+                </script>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/layuiadmin/modules_main/PosMachinesTwoTimeOut_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script>
+
+    </script>
+</body>
+
+</html>

+ 2 - 2
Areas/Admin/Views/MainServer/PosMachinesTwoChange/Edit.cshtml

@@ -35,8 +35,8 @@
                             <div class="layui-input-inline">
                                 <select id="PosSnType" name="PosSnType" lay-search="">
                                     <option value=""></option>
-                                    <option value="0">购买机</option>
-                                    <option value="1">赠送机</option>
+                                    <option value="0">兑换机</option>
+                                    <option value="1">循环机</option>
                                 </select>
                                 <script>$("#PosSnType").val("@editData.PosSnType");</script>
                             </div>

+ 7 - 0
Areas/Admin/Views/MainServer/PosMerchantInfoList/Index.cshtml

@@ -58,6 +58,13 @@
                                 placeholder="请输入手机号" autocomplete="off">
                         </div>
                     </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">机具号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="PosSn" 
+                                placeholder="请输入机具号" autocomplete="off">
+                        </div>
+                    </div>
                     <div class="layui-inline ml50">
                         <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
                             <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询

+ 105 - 0
Areas/Admin/Views/MainServer/PosMerchantInfoList/Indexrg.cshtml

@@ -0,0 +1,105 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>人工已退商户列表</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="/layuiadmin/style/admin.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <style>
+        .layui-input-inline {
+            width: 175px !important;
+        }
+
+        .layui-form-label {
+            width: 85px !important;
+        }
+
+        .layui-inline {
+            margin-right: 0px !important;
+        }
+
+        .w100 {
+            width: 100px !important;
+        }
+
+        .ml50 {
+            margin-left: 50px !important;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+                <input class="layui-input" type="hidden" name="ShowFlag" autocomplete="off">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label">身份证号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MerIdcardNo" placeholder="请输入身份证号"
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">商户姓名</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MerchantName" placeholder="请输入商户姓名"
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">手机号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MerchantMobile" placeholder="请输入手机号"
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">机具号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="PosSn" placeholder="请输入机具号" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline ml50">
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询
+                        </button>
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-searchall">
+                            <i class="layui-icon layui-icon-list layuiadmin-button-btn"></i>全部
+                        </button>
+                        @if (RightInfo.Contains("," + right + "_export,"))
+                        {
+                            <button class="layui-btn" data-type="ExportExcel">
+                                <i class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出
+                            </button>
+                        }
+                    </div>
+                    <blockquote class="layui-elem-quote layui-text">
+                        退押总金额:<span style="color: #f00;" id="ReturnAmount">0.00</span> | 实际总金额:<span style="color: #f00;" id="ReturnAmounts">0.00</span>
+                    </blockquote>
+                </div>
+            </div>
+
+            <div class="layui-card-body">
+                <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script
+        src="/layuiadmin/modules_main/PosMerchantInforgList_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+</body>
+
+</html>

+ 251 - 0
Areas/Admin/Views/MainServer/RecycMachineOrder/Add.cshtml

@@ -0,0 +1,251 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    
+}
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>机具回收申请(增加)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        
+        <div class="layui-card">
+          <div class="layui-card-body">
+            <div class="layui-tab" lay-filter="mytabbar">
+                <ul class="layui-tab-title">
+                    <li class="layui-this" lay-id="1">基本信息</li>
+                </ul>
+                <div class="layui-tab-content mt20">
+                    <div class="layui-tab-item layui-show">
+@{Dictionary<string, string> UsersDic = new MySystem.DictionaryClass().getUsersDic();}
+<div class="layui-form-item">
+<label class="layui-form-label">创客</label>
+<div class="layui-input-inline">
+<select id="UserId" name="UserId" lay-search="">
+<option value="">请选择</option>
+@foreach (string key in UsersDic.Keys)
+{
+<option value="@key">@UsersDic[key]</option>
+}
+</select>
+</div>
+</div>
+@{Dictionary<string, string> StoreHouseDic = new MySystem.DictionaryClass().getStoreHouseDic();}
+<div class="layui-form-item">
+<label class="layui-form-label">退回仓库</label>
+<div class="layui-input-inline">
+<select id="RecycStoreId" name="RecycStoreId" lay-search="">
+<option value="">请选择</option>
+@foreach (string key in StoreHouseDic.Keys)
+{
+<option value="@key">@StoreHouseDic[key]</option>
+}
+</select>
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">寄回方式</label>
+<div class="layui-input-inline">
+<select id="PostType" name="PostType" lay-search="">
+<option value="">请选择</option>
+<option value="1">邮寄</option>
+<option value="2">送货上门</option>
+</select>
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">快递名称</label>
+<div class="layui-input-inline">
+<input class="layui-input" type="text" id="ErpName" name="ErpName" maxlength="50" lay-verify="" autocomplete="off" placeholder="请输入快递名称">
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">快递单号</label>
+<div class="layui-input-inline">
+<input class="layui-input" type="text" id="ErpCode" name="ErpCode" maxlength="50" lay-verify="" autocomplete="off" placeholder="请输入快递单号">
+</div>
+</div>
+
+</div>
+
+                </div>
+            </div>
+            <div class="layui-form-item layui-hide">
+                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
+            </div>
+          </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+        
+                    
+        //编辑器
+        KindEditor.ready(function (K) {
+            
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+        
+        var tree;
+        var element;
+        var upload;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+        
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+    
+            //日期
+            
+
+            //上传文件
+            
+
+            //穿梭框
+            
+
+            //TreeView,比如权限管理
+            
+
+            //省市区
+            
+        })
+
+    </script>
+</body>
+</html>

+ 256 - 0
Areas/Admin/Views/MainServer/RecycMachineOrder/Edit.cshtml

@@ -0,0 +1,256 @@
+@using MySystem.Models;
+@{RecycMachineOrder editData = ViewBag.data as RecycMachineOrder;}
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    
+}
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>机具回收申请(修改)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        <input type="hidden" name="Id" value="@editData.Id" />
+        
+        <div class="layui-card">
+          <div class="layui-card-body">
+            <div class="layui-tab" lay-filter="mytabbar">
+                <ul class="layui-tab-title">
+                    <li class="layui-this" lay-id="1">基本信息</li>
+                </ul>
+                <div class="layui-tab-content mt20">
+                    <div class="layui-tab-item layui-show">
+@{Dictionary<string, string> UsersDic = new MySystem.DictionaryClass().getUsersDic();}
+<div class="layui-form-item">
+<label class="layui-form-label">创客</label>
+<div class="layui-input-inline">
+<select id="UserId" name="UserId" lay-search="">
+<option value="">请选择</option>
+@foreach (string key in UsersDic.Keys)
+{
+<option value="@key">@UsersDic[key]</option>
+}
+</select>
+<script>$("#UserId").val("@editData.UserId");</script>
+</div>
+</div>
+@{Dictionary<string, string> StoreHouseDic = new MySystem.DictionaryClass().getStoreHouseDic();}
+<div class="layui-form-item">
+<label class="layui-form-label">退回仓库</label>
+<div class="layui-input-inline">
+<select id="RecycStoreId" name="RecycStoreId" lay-search="">
+<option value="">请选择</option>
+@foreach (string key in StoreHouseDic.Keys)
+{
+<option value="@key">@StoreHouseDic[key]</option>
+}
+</select>
+<script>$("#RecycStoreId").val("@editData.RecycStoreId");</script>
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">寄回方式</label>
+<div class="layui-input-inline">
+<select id="PostType" name="PostType" lay-search="">
+<option value="">请选择</option>
+<option value="1">邮寄</option>
+<option value="2">送货上门</option>
+</select>
+<script>$("#PostType").val("@editData.PostType");</script>
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">快递名称</label>
+<div class="layui-input-inline">
+<input class="layui-input" type="text" id="ErpName" name="ErpName" value="@editData.ErpName" maxlength="50" lay-verify="" autocomplete="off" placeholder="请输入快递名称">
+</div>
+</div>
+<div class="layui-form-item">
+<label class="layui-form-label">快递单号</label>
+<div class="layui-input-inline">
+<input class="layui-input" type="text" id="ErpCode" name="ErpCode" value="@editData.ErpCode" maxlength="50" lay-verify="" autocomplete="off" placeholder="请输入快递单号">
+</div>
+</div>
+
+</div>
+
+                </div>
+            </div>
+            <div class="layui-form-item layui-hide">
+                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
+            </div>
+          </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+        
+        
+        //编辑器
+        KindEditor.ready(function (K) {
+            
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+        var tree;
+        var element;
+        var upload;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+        
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+    
+            //日期
+            
+
+            //上传文件
+            
+
+            //穿梭框
+            
+
+            //TreeView,比如权限管理
+            
+
+            //省市区
+            
+        })
+
+    </script>
+</body>
+</html>

+ 193 - 0
Areas/Admin/Views/MainServer/RecycMachineOrder/Index.cshtml

@@ -0,0 +1,193 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>机具回收申请</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="/layuiadmin/style/admin.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <style>
+        .layui-input-inline {
+            width: 175px !important;
+        }
+
+        .layui-form-label {
+            width: 85px !important;
+        }
+
+        .layui-inline {
+            margin-right: 0px !important;
+        }
+
+        .w100 {
+            width: 100px !important;
+        }
+
+        .ml50 {
+            margin-left: 50px !important;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创客编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="UserIdMakerCode" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创建时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="CreateDateData" id="CreateDate"
+                                placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">退回仓库编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="RecycStoreIdStoreNo" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">寄回方式</label>
+                        <div class="layui-input-inline">
+                            <select id="PostTypeSelect" name="PostTypeSelect" lay-search="">
+                                <option value="">全部...</option>
+                                <option value="1">邮寄</option>
+                                <option value="2">送货上门</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">快递名称</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="ErpName" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">快递单号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="ErpCode" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">申请单号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="RecycOrderNo" placeholder=""
+                                autocomplete="off">
+                        </div>
+                    </div>
+                    @{
+                        Dictionary<string, string> ProfitObjectsActivesDic = new MySystem.DictionaryClass().getKqProductBrandDic();
+                    }
+                    <div class="layui-inline">
+                        <label class="layui-form-label">品牌</label>
+                        <div class="layui-input-inline">
+                            <select id="BrandIdSelect" name="BrandIdSelect" lay-search="">
+                                <option value="">全部...</option>
+                                @foreach (string key in ProfitObjectsActivesDic.Keys)
+                                {
+                                    <option value="@key">@ProfitObjectsActivesDic[key]</option>
+                                }
+                            </select>
+                        </div>
+                    </div>
+
+                    <div class="layui-inline ml50">
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询
+                        </button>
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-searchall">
+                            <i class="layui-icon layui-icon-list layuiadmin-button-btn"></i>全部
+                        </button>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-card-body">
+                <div style="padding-bottom: 10px;">
+                    @if (RightInfo.Contains("," + right + "_add,"))
+                    {
+                        <button class="layui-btn" data-type="add"><i
+                            class="layui-icon layui-icon-add-1 layuiadmin-button-btn"></i>添加</button>
+                    }
+                    @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        <button class="layui-btn" data-type="batchdel"><i
+                            class="layui-icon layui-icon-delete layuiadmin-button-btn"></i>删除</button>
+                    }
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <button class="layui-btn" data-type="ExportExcel"><i
+                            class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出</button>
+
+                    }
+                </div>
+
+                <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
+                <script type="text/html" id="table-list-tools">
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
+                    }
+                    @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
+                    }
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-href="/Admin/RecycMachineOrderPos/Index?right=@right&OrderId=@("{{d.Id}}")">机具回收明细</a>
+
+                    }
+                </script>
+            </div>
+        </div>
+    </div>
+    <div id="excelForm" style="display:none; padding:20px;">
+        <div class="layui-tab-item layui-show">
+            <div class="layui-form-item">
+                <label class="layui-form-label">模板下载</label>
+                <div class="layui-form-mid layui-word-aux" id="excelTemp">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">excel文件</label>
+                <div class="layui-form-mid layui-word-aux">
+                    <div class="layui-upload">
+                        <input type="file" id="ExcelFile" name="ExcelFile" value="">
+                    </div>
+                    <div class="mt10" id="ExcelFileList">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item ml10">
+            <div class="layui-input-block">
+                <button type="button" class="layui-btn" onclick="ConfirmImport()">立即导入</button>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/layuiadmin/modules_main/RecycMachineOrder_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script>
+
+    </script>
+</body>
+
+</html>

Некоторые файлы не были показаны из-за большого количества измененных файлов