Bläddra i källkod

预扣款加锁,避免同时执行

lcl 1 år sedan
förälder
incheckning
715b5d7562

+ 4 - 1
AppStart/Helper/PrePosWithholdService.cs

@@ -128,9 +128,11 @@ namespace MySystem
                         WebCMSEntities db = new WebCMSEntities();
                         decimal ChargeAmount = 0;
                         bool doBack = true; //是否减少账户预扣总额
-                        ToChargeBackRecord back = db.ToChargeBackRecord.FirstOrDefault(m => m.UserId == UserId && m.Field1 == SnNo && m.Remark == "预发机超时未申请扣款");
+                        ToChargeBackRecord back = db.ToChargeBackRecord.FirstOrDefault(m => m.UserId == UserId && m.Field1 == SnNo && m.Remark == "预发机超时未申请扣款" && m.LockFlag == 0);
                         if(back != null)
                         {
+                            back.LockFlag = 1;
+                            db.SaveChanges();
                             function.WriteLog("预扣款数据:" + Newtonsoft.Json.JsonConvert.SerializeObject(back), "预发扣款机具申请");
                             ChargeAmount = back.ChargeAmount;
                             function.WriteLog("预扣款是否已扣:" + back.Status, "预发扣款机具申请");
@@ -140,6 +142,7 @@ namespace MySystem
                                 doBack = false;
                             }
                             db.ToChargeBackRecord.Remove(back);
+                            back.LockFlag = 0;
                             db.SaveChanges();
                         }
                         db.Dispose();

+ 5 - 2
AppStart/Helper/TimeOutPosChargeService.cs

@@ -141,7 +141,7 @@ namespace MySystem
         public void DoChargeAmount(WebCMSEntities db, int UserId = 0)
         {
             MySystem.OpModels.WebCMSEntities opdb = new MySystem.OpModels.WebCMSEntities();
-            IQueryable<ToChargeBackRecord> list = db.ToChargeBackRecord.Where(m => m.Status == 0);//过期机具扣费记录
+            IQueryable<ToChargeBackRecord> list = db.ToChargeBackRecord.Where(m => m.Status == 0 && m.LockFlag == 0);//过期机具扣费记录
             if (UserId > 0)
             {
                 list = list.Where(m => m.UserId == UserId);
@@ -151,6 +151,8 @@ namespace MySystem
             {
                 var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount();
                 var record = info.FirstOrDefault(m => m.Id == items.Id);
+                record.LockFlag = 1;
+                db.SaveChanges();
                 var check = false; //扣款成功标记
 
                 var ChangeType = 0;
@@ -309,8 +311,9 @@ namespace MySystem
                         }
                     }
                 }
+                record.LockFlag = 0;
+                db.SaveChanges();
             }
-            db.SaveChanges();
             opdb.SaveChanges();
         }
     }

+ 1 - 0
PxcModels/LeaderReserveRecord.cs

@@ -25,5 +25,6 @@ namespace MySystem.PxcModels
         public string TradeMonth { get; set; }
         public int UserId { get; set; }
         public int AccountRecordId { get; set; }
+        public decimal UsedReserve { get; set; }
     }
 }

+ 20 - 0
PxcModels/PosChannelSet.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class PosChannelSet
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public int SnCount { get; set; }
+        public int BrandId { get; set; }
+        public string ChannelNo { get; set; }
+        public int UserId { get; set; }
+        public int Kind { get; set; }
+    }
+}

+ 1 - 0
PxcModels/PosChannelSetRecord.cs

@@ -15,5 +15,6 @@ namespace MySystem.PxcModels
         public string MerNo { get; set; }
         public string PosSn { get; set; }
         public int BrandId { get; set; }
+        public int RecordId { get; set; }
     }
 }

+ 1 - 0
PxcModels/ToChargeBackRecord.cs

@@ -23,5 +23,6 @@ namespace MySystem.PxcModels
         public int TimeNumber { get; set; }
         public DateTime? StartDate { get; set; }
         public int Kind { get; set; }
+        public ulong LockFlag { get; set; }
     }
 }

+ 12 - 0
PxcModels/UpUserRelation.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class UpUserRelation
+    {
+        public int UserId { get; set; }
+        public int Floor { get; set; }
+        public int UpUserId { get; set; }
+    }
+}

+ 86 - 4
PxcModels/WebCMSEntities.cs

@@ -141,6 +141,7 @@ namespace MySystem.PxcModels
         public virtual DbSet<Orders> Orders { get; set; }
         public virtual DbSet<PageInfo> PageInfo { get; set; }
         public virtual DbSet<PageUpdateInfo> PageUpdateInfo { get; set; }
+        public virtual DbSet<PosChannelSet> PosChannelSet { get; set; }
         public virtual DbSet<PosChannelSetRecord> PosChannelSetRecord { get; set; }
         public virtual DbSet<PosCouponForUser> PosCouponForUser { get; set; }
         public virtual DbSet<PosCouponOrders> PosCouponOrders { get; set; }
@@ -253,6 +254,7 @@ namespace MySystem.PxcModels
         public virtual DbSet<TradeDaySummaryBefore> TradeDaySummaryBefore { get; set; }
         public virtual DbSet<TradeRecord> TradeRecord { get; set; }
         public virtual DbSet<TradeRecordTest> TradeRecordTest { get; set; }
+        public virtual DbSet<UpUserRelation> UpUserRelation { get; set; }
         public virtual DbSet<UploadParams> UploadParams { get; set; }
         public virtual DbSet<UserAccount> UserAccount { get; set; }
         public virtual DbSet<UserAccountRecord> UserAccountRecord { get; set; }
@@ -5383,6 +5385,10 @@ namespace MySystem.PxcModels
 
                 entity.Property(e => e.UpdateDate).HasColumnType("datetime");
 
+                entity.Property(e => e.UsedReserve)
+                    .HasColumnType("decimal(18,2)")
+                    .HasComment("已出款额度");
+
                 entity.Property(e => e.UserId).HasColumnType("int(11)");
             });
 
@@ -9814,12 +9820,65 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<PosChannelSet>(entity =>
+            {
+                entity.HasComment("机具通道修改记录");
+
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.BrandId)
+                    .HasColumnType("int(11)")
+                    .HasComment("品牌");
+
+                entity.Property(e => e.ChannelNo)
+                    .HasColumnType("varchar(50)")
+                    .HasComment("通道编号")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.CreateDate)
+                    .HasColumnType("datetime")
+                    .HasComment("创建时间");
+
+                entity.Property(e => e.Kind)
+                    .HasColumnType("int(11)")
+                    .HasComment("操作人类型");
+
+                entity.Property(e => e.SnCount)
+                    .HasColumnType("int(11)")
+                    .HasComment("机具数");
+
+                entity.Property(e => e.Sort)
+                    .HasColumnType("int(11)")
+                    .HasComment("排序序号");
+
+                entity.Property(e => e.Status)
+                    .HasColumnType("int(11)")
+                    .HasComment("状态");
+
+                entity.Property(e => e.UpdateDate)
+                    .HasColumnType("datetime")
+                    .HasComment("修改时间");
+
+                entity.Property(e => e.UserId)
+                    .HasColumnType("int(11)")
+                    .HasComment("创客Id");
+
+                entity.Property(e => e.Version)
+                    .HasColumnType("int(11)")
+                    .HasComment("版本号");
+            });
+
             modelBuilder.Entity<PosChannelSetRecord>(entity =>
             {
                 entity.HasComment("机具通道修改记录");
 
                 entity.Property(e => e.Id).HasColumnType("int(11)");
 
+                entity.Property(e => e.BrandId)
+                    .HasColumnType("int(11)")
+                    .HasComment("品牌");
+
                 entity.Property(e => e.ChannelNo)
                     .HasColumnType("varchar(50)")
                     .HasComment("通道编号")
@@ -9850,6 +9909,10 @@ namespace MySystem.PxcModels
                     .HasCharSet("utf8")
                     .HasCollation("utf8_general_ci");
 
+                entity.Property(e => e.RecordId)
+                    .HasColumnType("int(11)")
+                    .HasComment("记录Id");
+
                 entity.Property(e => e.Status)
                     .HasColumnType("int(11)")
                     .HasComment("状态");
@@ -9857,10 +9920,6 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.UpdateDate)
                     .HasColumnType("datetime")
                     .HasComment("修改时间");
-
-                entity.Property(e => e.BrandId)
-                    .HasColumnType("int(11)")
-                    .HasComment("品牌");
             });
 
             modelBuilder.Entity<PosCouponForUser>(entity =>
@@ -16789,6 +16848,11 @@ namespace MySystem.PxcModels
                     .HasColumnType("int(11)")
                     .HasComment("待扣类别");
 
+                entity.Property(e => e.LockFlag)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'")
+                    .HasComment("锁定状态");
+
                 entity.Property(e => e.QueryCount).HasColumnType("int(11)");
 
                 entity.Property(e => e.Remark)
@@ -18005,6 +18069,24 @@ namespace MySystem.PxcModels
                 entity.Property(e => e.Version).HasColumnType("int(11)");
             });
 
+            modelBuilder.Entity<UpUserRelation>(entity =>
+            {
+                entity.HasKey(e => new { e.UserId, e.UpUserId })
+                    .HasName("PRIMARY");
+
+                entity.HasComment("上级关联表");
+
+                entity.Property(e => e.UserId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpUserId)
+                    .HasColumnType("int(11)")
+                    .HasComment("上级ID");
+
+                entity.Property(e => e.Floor)
+                    .HasColumnType("int(11)")
+                    .HasComment("层级");
+            });
+
             modelBuilder.Entity<UploadParams>(entity =>
             {
                 entity.Property(e => e.Id).HasColumnType("int(11)");