Prechádzať zdrojové kódy

增加预发机预扣款队列
过期预发机,提醒和扣款队列分开

lcl 1 rok pred
rodič
commit
4558bde9d9

+ 3 - 1
AppStart/Helper/PrePosRingService.cs

@@ -40,13 +40,14 @@ namespace MySystem
                     }
                 }
                 catch (Exception ex)
-                {                        
+                {
                     function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "预发机提醒异常");
                 }
                 Thread.Sleep(300000);
             }
         }
 
+        //已确认状态的预发机25天至29天未完成申请时每天一次弹窗提醒预发创客
         private void PrePosRing()
         {
             WebCMSEntities db = new WebCMSEntities();
@@ -67,6 +68,7 @@ namespace MySystem
             db.Dispose();
         }
 
+        //20日前对预发机超30天未完成申请的创客每天新增一次弹窗
         private void PrePosRingForExpired()
         {
             if(DateTime.Now.Day >= 15 && DateTime.Now.Day < 20)

+ 145 - 0
AppStart/Helper/PrePosWithholdService.cs

@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using Library;
+using LitJson;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class PrePosWithholdService
+    {
+        public readonly static PrePosWithholdService Instance = new PrePosWithholdService();
+        private PrePosWithholdService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(dosomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void dosomething()
+        {
+            while (true)
+            {
+                try
+                {
+                    if(DateTime.Now.Hour > 3 && DateTime.Now.Hour < 19)
+                    {
+                        string chk = function.ReadInstance("/PrePosWithhold/" + DateTime.Now.ToString("yyyyMMdd") + ".txt");
+                        if(string.IsNullOrEmpty(chk))
+                        {
+                            function.WritePage("/PrePosWithhold/", "" + DateTime.Now.ToString("yyyyMMdd") + ".txt", DateTime.Now.ToString());
+                            PrePosWithhold();
+                        }
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "预发机提醒异常");
+                }
+                Thread.Sleep(300000);
+            }
+        }
+
+        //预发机30天未完成申请时向预发创客增加一条预扣款
+        private void PrePosWithhold()
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            DateTime end = DateTime.Parse(DateTime.Now.AddDays(-29).ToString("yyyy-MM-dd") + " 00:00:00");
+            bool op = true;
+            while(op)
+            {
+                var PrePosList = db.PreSendStockDetail.Where(m => m.ApplyFlag == 0 && m.CreateDate < end && m.Status >= 0 && m.Status <= 1 && m.WithholdFlag == 0).OrderBy(m => m.Id).Take(20).ToList();
+                if(PrePosList.Count > 0)
+                {
+                    foreach(var Pos in PrePosList)
+                    {
+                        KqProducts brand = db.KqProducts.FirstOrDefault(m => m.Id == Pos.BrandId) ?? new KqProducts();
+                        decimal ChargeAmount = brand.Kind == 2 ? 300 : 200;
+                        db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                        {
+                            CreateDate = DateTime.Now,
+                            SeoTitle = "系统",
+                            SeoDescription = "预发机超时未申请扣款",
+                            Remark = "预发机超时未申请扣款",
+                            ChargeType = 1,
+                            ChargeAmount = ChargeAmount,
+                            UserId = Pos.ToUserId,
+                            Field1 = Pos.SnNo,
+                        });
+                        PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.Id == Pos.SnId);
+                        if(pos != null)
+                        {
+                            pos.WithholdFlag = 1;
+                        }
+                        PreSendStockDetail pre = db.PreSendStockDetail.FirstOrDefault(m => m.Id == Pos.Id);
+                        if(pre != null)
+                        {
+                            pre.WithholdFlag = 1;
+                        }
+                    }
+                    db.SaveChanges();
+                }
+                else
+                {
+                    op = false;
+                }
+            }
+            db.Dispose();
+        }
+
+
+
+
+
+
+        // 含有【预】字标签的机具完成申请时
+        // ·若预扣款已扣,则返还创客余额
+        // ·若预扣款未扣,则删除该条预扣款
+        public void StartPre()
+        {
+            Thread th = new Thread(StartPreDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartPreDo()
+        {
+            while (true)
+            {
+                try
+                {
+                    string content = RedisDbconn.Instance.RPop<string>("PreWithholdQueue");
+                    if(!string.IsNullOrEmpty(content))
+                    {
+                        JsonData jsonObj = JsonMapper.ToObject(content);
+                        int UserId = int.Parse(function.CheckInt(jsonObj["UserId"].ToString()));
+                        string SnNo = jsonObj["SnNo"].ToString();
+                        WebCMSEntities db = new WebCMSEntities();
+                        ToChargeBackRecord back = db.ToChargeBackRecord.FirstOrDefault(m => m.UserId == UserId && m.Field1 == SnNo && m.Remark == "预发机超时未申请扣款");
+                        if(back != null)
+                        {
+                            if(back.Status == 1)
+                            {
+                                Utils.Instance.OpAccount(back.UserId, back.ChargeAmount, 134);
+                            }
+                            db.ToChargeBackRecord.Remove(back);
+                            db.SaveChanges();
+                        }
+                        db.Dispose();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "预发扣款机具申请异常");
+                }
+                Thread.Sleep(300000);
+            }
+        }
+    }
+}

+ 24 - 0
PxcModels/CustomQuery.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.PxcModels
+{
+    public partial class CustomQuery
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string AdminNames { get; set; }
+        public string Title { get; set; }
+        public string SqlContent { get; set; }
+    }
+}

+ 1 - 0
PxcModels/PosMachinesTwo.cs

@@ -60,5 +60,6 @@ namespace MySystem.PxcModels
         public string SourcePosSn { get; set; }
         public int RecycStatus { get; set; }
         public string OutBatchNo { get; set; }
+        public int WithholdFlag { get; set; }
     }
 }

+ 0 - 2
PxcModels/PosMerchantInfoBak.cs

@@ -43,7 +43,5 @@ namespace MySystem.PxcModels
         public string MerchantMobile { get; set; }
         public string MerchantName { get; set; }
         public string MerchantNo { get; set; }
-        public int StandardMonths { get; set; }
-        public int StandardStatus { get; set; }
     }
 }

+ 1 - 0
PxcModels/PreSendStockDetail.cs

@@ -29,5 +29,6 @@ namespace MySystem.PxcModels
         public int BrandId { get; set; }
         public int StoreId { get; set; }
         public ulong AuthFlag { get; set; }
+        public int WithholdFlag { get; set; }
     }
 }

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 276 - 11
PxcModels/WebCMSEntities.cs


+ 59 - 51
Startup.cs

@@ -179,62 +179,70 @@ namespace MySystem
             });
 
             //必须打开的
-            SycnSpBindService.Instance.Start(); //同步SP绑定数据
-            SycnSpMerchantService.Instance.Start(); //同步SP商户数据
-            SycnSpActiveService.Instance.Start(); //同步SP激活数据
-            SycnSpTradeService.Instance.Start(); //同步SP交易数据
-            SycnSpChangeBindService.Instance.Start(); //同步SP换绑数据
-            SycnSpUnBindService.Instance.Start(); //同步SP解绑数据
-            SycnSpMerchantRecordService.Instance.Start(); //同步SP商户记录数据
+            if(Library.ConfigurationManager.EnvironmentFlag == 1)
+            {
+            }
+            if(Library.ConfigurationManager.EnvironmentFlag == 2)
+            {
+                SycnSpBindService.Instance.Start(); //同步SP绑定数据
+                SycnSpMerchantService.Instance.Start(); //同步SP商户数据
+                SycnSpActiveService.Instance.Start(); //同步SP激活数据
+                SycnSpTradeService.Instance.Start(); //同步SP交易数据
+                SycnSpChangeBindService.Instance.Start(); //同步SP换绑数据
+                SycnSpUnBindService.Instance.Start(); //同步SP解绑数据
+                SycnSpMerchantRecordService.Instance.Start(); //同步SP商户记录数据
 
-            StatService.Instance.StartActiveReward(); //实时处理激活奖励
-            StatService.Instance.StartActiveReward1(); //实时处理0押激活奖励
-            StatService.Instance.StartActiveReward2(); //实时处理盒易付0押激活奖励
-            StatService.Instance.StartOpenReward(); //实时获取开机奖励
-            StatService.Instance.ListenFluxRecord(); //实时获取流量费分佣
-            LeaderPrizeService.Instance.Start(); //大盟主奖励发奖
-            OperatePrizeService.Instance.Start(); //运营中心奖励发奖
-            StatService.Instance.StatUserLevel(); //升级
-            ProfitHelperV2.Instance.StatProfit(); //创客分润
-            RedPackageV2Helper.Instance.Start(); //每天生成红包
-            RedPackageV2Helper.Instance.StartStatTop10(); //红包活动统计排行
-            RedPackageV2Helper.Instance.StartSendPrize(); //红包活动发奖
-            ActRewardService.Instance.Start(); //发放激活奖励
-            HelpProfitPreMerchantHelper.Instance.Start(); //助利宝每天增加指定数量商机
-            AddActService.Instance.Start(); //划拨后检查机具激活状态,并自动补录
-            PrePosRingService.Instance.Start(); //预发未申请提醒
+                StatService.Instance.StartActiveReward(); //实时处理激活奖励
+                StatService.Instance.StartActiveReward1(); //实时处理0押激活奖励
+                StatService.Instance.StartActiveReward2(); //实时处理盒易付0押激活奖励
+                StatService.Instance.StartOpenReward(); //实时获取开机奖励
+                StatService.Instance.ListenFluxRecord(); //实时获取流量费分佣
+                LeaderPrizeService.Instance.Start(); //大盟主奖励发奖
+                OperatePrizeService.Instance.Start(); //运营中心奖励发奖
+                StatService.Instance.StatUserLevel(); //升级
+                ProfitHelperV2.Instance.StatProfit(); //创客分润
+                RedPackageV2Helper.Instance.Start(); //每天生成红包
+                RedPackageV2Helper.Instance.StartStatTop10(); //红包活动统计排行
+                RedPackageV2Helper.Instance.StartSendPrize(); //红包活动发奖
+                ActRewardService.Instance.Start(); //发放激活奖励
+                HelpProfitPreMerchantHelper.Instance.Start(); //助利宝每天增加指定数量商机
+                AddActService.Instance.Start(); //划拨后检查机具激活状态,并自动补录
+                PrePosRingService.Instance.Start(); //预发未申请提醒
+                PrePosWithholdService.Instance.Start(); //预发机过期未申请提交到预扣款
+                PrePosWithholdService.Instance.StartPre(); //预发机申请成功,处理预扣款
 
-            MessageCenterService.Instance.Start(); // 消息队列
-            SetFeeFlagService.Instance.Start(); //118天提前通知创客费率调升消息
-            LeaderTimeoutSendMessageService.Instance.Start(); //盟主过期消息提醒
-            SetDepositService.Instance.Start(); //调整费率(通知、标记)
+                MessageCenterService.Instance.Start(); // 消息队列
+                SetFeeFlagService.Instance.Start(); //118天提前通知创客费率调升消息
+                LeaderTimeoutSendMessageService.Instance.Start(); //盟主过期消息提醒
+                SetDepositService.Instance.Start(); //调整费率(通知、标记)
 
-            AlipayPayBack2Service.Instance.Start(); //支付宝回调处理
-            BalancePayBackService.Instance.Start(); //余额支付队列
-            ReservePayBackService.Instance.Start(); //储备金支付队列
-            OrderRefundService.Instance.Start(); //商城订单退款
+                AlipayPayBack2Service.Instance.Start(); //支付宝回调处理
+                BalancePayBackService.Instance.Start(); //余额支付队列
+                ReservePayBackService.Instance.Start(); //储备金支付队列
+                OrderRefundService.Instance.Start(); //商城订单退款
 
-            StatService.Instance.Start(); //每日重置交易额
-            StoreApplyHelper.Instance.Start(); // 每月1号重置仓库额度
-            DepositReturnStatService.Instance.Start(); //每月1号统计达标商户(退押需要的)
-            AutoOpOrderService.Instance.StartOrderCancel(); //自动取消超时订单(15分钟)
-            OperateStockService.Instance.Start(); //运营中心库存实时更新
-            ResetSmallStoreHelper.Instance.Start(); //每月重置小分仓额度
-            ResetSmallStoreHelper.Instance.Listen(); //监听每月1号重置小分仓额度
-            OperateService.Instance.Start(); //运营中心每天统计一次发货量、库存
-            TimeOutPosChargeService.Instance.StartDoChargeAmount(); //实时监听待扣款记录,并扣费
-            InstallmentDeductionService.Instance.Start(); //分期扣款(每月20号执行)
+                StatService.Instance.Start(); //每日重置交易额
+                StoreApplyHelper.Instance.Start(); // 每月1号重置仓库额度
+                DepositReturnStatService.Instance.Start(); //每月1号统计达标商户(退押需要的)
+                AutoOpOrderService.Instance.StartOrderCancel(); //自动取消超时订单(15分钟)
+                OperateStockService.Instance.Start(); //运营中心库存实时更新
+                ResetSmallStoreHelper.Instance.Start(); //每月重置小分仓额度
+                ResetSmallStoreHelper.Instance.Listen(); //监听每月1号重置小分仓额度
+                OperateService.Instance.Start(); //运营中心每天统计一次发货量、库存
+                TimeOutPosChargeService.Instance.StartDoChargeAmount(); //实时监听待扣款记录,并扣费
+                InstallmentDeductionService.Instance.Start(); //分期扣款(每月20号执行)
 
-            ChangePosTimer.Instance.Start(); //售后换新执行机具数据转移
-            RecommendActStatService.Instance.Start(); //推荐王奖励数据统计
-            StoreApplyHelper.Instance.StartEverTime(); //分仓临时额度变更
-            PreStoreApplyHelper.Instance.StartEverTime(); //小分仓临时额度变更
-            SetDepositPostService.Instance.Start(); //提交支付公司设置费率接口
-            SetDepositPostService.Instance.StartKdb(); //监控开店宝费率设置结果
-            OperateAmountService.Instance.Start(); //运营中心额度变更
-            LeaderApplyCouponsHelper.Instance.Start(); //盟主储蓄金申请机具券打标记
-            DepositReturnService.Instance.Start(); //退押金到支付宝余额
-            StoreApplyHelper.Instance.ResetStoreReserve(); //重置分仓额度
+                ChangePosTimer.Instance.Start(); //售后换新执行机具数据转移
+                RecommendActStatService.Instance.Start(); //推荐王奖励数据统计
+                StoreApplyHelper.Instance.StartEverTime(); //分仓临时额度变更
+                PreStoreApplyHelper.Instance.StartEverTime(); //小分仓临时额度变更
+                SetDepositPostService.Instance.Start(); //提交支付公司设置费率接口
+                SetDepositPostService.Instance.StartKdb(); //监控开店宝费率设置结果
+                OperateAmountService.Instance.Start(); //运营中心额度变更
+                LeaderApplyCouponsHelper.Instance.Start(); //盟主储蓄金申请机具券打标记
+                DepositReturnService.Instance.Start(); //退押金到支付宝余额
+                StoreApplyHelper.Instance.ResetStoreReserve(); //重置分仓额度
+            }
 
 
 

+ 60 - 0
Util/Utils.cs

@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MySystem.PxcModels;
+
+namespace MySystem
+{
+    public class Utils
+    {
+        public readonly static Utils Instance = new Utils();
+        private Utils()
+        { }
+
+        /// <summary>
+        /// 操作收支明细
+        /// </summary>
+        /// <param name="UserId"></param>
+        /// <param name="Money"></param>
+        /// <param name="ChangeType"></param>
+        public void OpAccount(int UserId, decimal Money, int ChangeType)
+        {
+            WebCMSEntities db = new WebCMSEntities();
+            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 += Money;
+            account.TotalAmount += Money;
+            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, //创客
+                ChangeType = ChangeType, //变动类型
+                ChangeAmount = Money, //变更金额
+                BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
+                AfterTotalAmount = AfterTotalAmount, //变更后总金额
+                BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
+                AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
+                BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
+                AfterBalanceAmount = AfterBalanceAmount, //变更后余额
+            }).Entity;
+            db.SaveChanges();
+            db.Dispose();
+        }
+
+    }
+}

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov