Explorar el Código

完成,待测试

DuGuYang hace 3 años
padre
commit
ebc467f6a1

+ 63 - 53
AppStart/Helper/InstallmentDeductionService.cs

@@ -28,8 +28,8 @@ namespace MySystem
         {
             while (true)
             {
-                if (DateTime.Now.Day == 20 && DateTime.Now.Hour < 12)
-                // if (DateTime.Now.Hour < 20)
+                // if (DateTime.Now.Day == 20 && DateTime.Now.Hour < 12)
+                if (DateTime.Now.Hour < 20)
                 {
                     try
                     {
@@ -38,65 +38,75 @@ namespace MySystem
                         {
                             function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
                             WebCMSEntities db = new WebCMSEntities();
-
-                            var info = db.ToChargeBackRecord.Where(m => m.Sort > 0 && m.Status == 0 && m.ChargeType == 2).ToList();//分期扣款记录
-                            foreach (var items in info)
+                            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 userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount();
-                                var record = info.FirstOrDefault(m => m.Id == items.Id);
-                                ToChargeBackRecordSub toChargeBackRecordSub = new ToChargeBackRecordSub();
-                                ToChargeByStage toChargeByStage = new ToChargeByStage();
-                                if (userAccount.BalanceAmount >= record.ChargeAmount)
+                                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 userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                                    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,
-                                        UserId = items.UserId,
-                                        BeforeBalanceAmount = userAccount.BalanceAmount,
-                                        AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
-                                        ChangeAmount = record.ChargeAmount,
-                                        ChangeType = 201,//分期扣款(201 分期扣款 202 普通预扣款)
-                                        Remark = "分期扣款",
+                                        Sort = toChargeBackRecordSub.Id,
+                                        UserId = item.UserId,
+                                        ChargeAmount = toChargeBackRecordSub.ChargeAmount,
+                                        ChargeType = 2,//分期预扣款
+                                        Remark = toChargeBackRecordSub.Remark,
 
                                     }).Entity;
-                                    toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == record.Sort) ?? new ToChargeBackRecordSub();
-                                    toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId && m.TimeNumber > m.QueryCount) ?? new ToChargeByStage();
-                                    record.Status = 1;
-                                    toChargeBackRecordSub.Status = 1;
-                                    toChargeByStage.QueryCount += 1;
-                                    if (toChargeByStage.TimeNumber == toChargeByStage.QueryCount)
-                                    {
-                                        toChargeByStage.Status = 1;
-                                    }
-                                    if (userAccount.ToChargeAmount >= record.ChargeAmount)
-                                    {
-                                        userAccount.ToChargeAmount -= record.ChargeAmount;//分期扣款
-                                    }
-                                    userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额
+                                }
 
-                                    if (record.Status == 1)
-                                    {
-                                        if (toChargeByStage.Id > 0 && toChargeByStage.TimeNumber > toChargeByStage.QueryCount)
-                                        {
-                                            var toChargeBackRecordSubs = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == toChargeByStage.Id) ?? new ToChargeBackRecordSub();
-                                            var time = DateTime.Now.ToString("yyyy-MM-20");
-                                            var date = DateTime.Parse(toChargeBackRecordSubs.StartDate.ToString()).ToString("yyyy-MM-dd");
-                                            if (toChargeBackRecordSubs.Id > 0 && time == date)
-                                            {
-                                                userAccount.ToChargeAmount += toChargeBackRecordSubs.ChargeAmount;//增加预扣款
-                                                var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
-                                                {
-                                                    CreateDate = DateTime.Now,
-                                                    UserId = toChargeByStage.UserId,
-                                                    ChargeAmount = toChargeBackRecordSubs.ChargeAmount,
-                                                    ChargeType = 2,//2 分期扣款 1 普通预扣
-                                                    Remark = "分期扣款",
+                                // //只能存在一笔分期扣款记录(先前有的但是余额不够未扣除的则不添加新的)
+                                // 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;
-                                            }
-                                        }
-                                    }
-                                }
+                                //             }).Entity;
+                                //         }
+                                //     }
+                                //     RedisDbconn.Instance.Set("InstallmentDeductionAddRecord:" + item.UserId, "wait");
+                                //     RedisDbconn.Instance.SetExpire("InstallmentDeductionAddRecord:" + item.UserId, 300);
+                                // }
                             }
                             db.SaveChanges();
 

+ 37 - 7
AppStart/Helper/TimeOutPosChargeService.cs

@@ -108,7 +108,7 @@ namespace MySystem
 
         public void StartDoChargeAmountReady()
         {
-            while(true)
+            while (true)
             {
                 WebCMSEntities db = new WebCMSEntities();
                 DoChargeAmount(db);
@@ -126,10 +126,10 @@ namespace MySystem
 
         public void ListenChargeAmountReady()
         {
-            while(true)
+            while (true)
             {
                 string content = RedisDbconn.Instance.RPop<string>("DoChargeAmountQueue");
-                if(!string.IsNullOrEmpty(content))
+                if (!string.IsNullOrEmpty(content))
                 {
                     WebCMSEntities db = new WebCMSEntities();
                     DoChargeAmount(db, int.Parse(function.CheckInt(content)));
@@ -141,7 +141,7 @@ namespace MySystem
         public void DoChargeAmount(WebCMSEntities db, int UserId = 0)
         {
             IQueryable<ToChargeBackRecord> list = db.ToChargeBackRecord.Where(m => m.Status == 0);//过期机具扣费记录
-            if(UserId > 0)
+            if (UserId > 0)
             {
                 list = list.Where(m => m.UserId == UserId);
             }
@@ -150,8 +150,26 @@ namespace MySystem
             {
                 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,
@@ -159,14 +177,26 @@ namespace MySystem
                         BeforeBalanceAmount = userAccount.BalanceAmount,
                         AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
                         ChangeAmount = record.ChargeAmount,
-                        ChangeType = 124,//过期机具货款扣费
-                        Remark = "扣机具货款",
+                        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.ToChargeAmount -= record.ChargeAmount;//分期扣款
                     }
                     userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额
                 }

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

@@ -378,6 +378,7 @@ namespace MySystem.Areas.Admin.Controllers
                     CreateDate = DateTime.Now,
                     SeoTitle = SysUserName + "_" + SysRealName,
                     SeoDescription = Remark,
+                    Remark = Remark,
                     ChargeType = 1,
                     ChargeAmount = decimal.Parse(Amount),
                     UserId =users.Id,

+ 5 - 8
Areas/Admin/Controllers/MainServer/ToChargeBackRecordSubController.cs

@@ -71,14 +71,7 @@ namespace MySystem.Areas.Admin.Controllers
             //状态
             if (!string.IsNullOrEmpty(StatusSelect))
             {
-                if (StatusSelect == "0")//待扣款
-                {
-                    condition += " and Status=0";
-                }
-                if (StatusSelect == "1")//已扣款
-                {
-                    condition += " and Status=1";
-                }
+                condition += " and Status=" + StatusSelect;
             }
 
             //创建时间
@@ -105,6 +98,10 @@ namespace MySystem.Areas.Admin.Controllers
                 {
                     dic["StatusName"] = "已扣款";
                 }
+                if (Status == 2)
+                {
+                    dic["StatusName"] = "扣款中";
+                }
 
                 //分期单号
                 int ParentId = int.Parse(function.CheckInt(dic["ParentId"].ToString()));

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

@@ -167,10 +167,10 @@ namespace MySystem.Areas.Admin.Controllers
             {
                 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", data.StartDate); //扣款开始时间
+            Fields.Add("StartDate", StartTime); //扣款开始时间
             Fields.Add("TimeNumber", data.TimeNumber); //期数
             Fields.Add("TotalAmount", data.TotalAmount); //扣款总金额
             Fields.Add("SeoTitle", SysUserName + "_" + SysRealName);//操作人

+ 78 - 68
Areas/Admin/Views/MainServer/ToChargeBackRecord/Add.cshtml

@@ -1,82 +1,91 @@
 @{
     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>
 </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>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣金额</label>
-<div class="layui-input-inline">
-<input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount" maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣类型</label>
-<div class="layui-input-inline">
-<select id="ChargeType" name="ChargeType" lay-search="">
-<option value="">请选择</option>
-<option value="1">过期机具扣款</option>
-<option value="2">人工预扣</option>
-</select>
-</div>
-</div>
-<div class="layui-form-item layui-form-text">
-<label class="layui-form-label">备注</label>
-<div class="layui-input-block">
-<textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500" lay-verify="" placeholder="请输入备注"></textarea>
-</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="Field1" name="Field1" maxlength="200" lay-verify="" autocomplete="off" placeholder="请输入备用字段">
-</div>
-</div>
-
-</div>
+            <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>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                        maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="ChargeType" name="ChargeType" lay-search="">
+                                        <option value="">请选择</option>
+                                        <option value="1">过期机具扣款</option>
+                                        <option value="2">人工预扣</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注"></textarea>
+                                </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="Field1" name="Field1" maxlength="200"
+                                        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 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>
 
@@ -85,11 +94,11 @@
     <script src="/other/mybjq/kindeditor-min.js"></script>
     <script src="/other/mybjq/lang/zh_CN.js"></script>
     <script>
-        
-                    
+
+
         //编辑器
         KindEditor.ready(function (K) {
-            
+
         });
 
         var ids = "";
@@ -195,7 +204,7 @@
             });
         }
 
-        
+
         var tree;
         var element;
         var upload;
@@ -215,30 +224,31 @@
             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>

+ 1 - 0
Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Index.cshtml

@@ -64,6 +64,7 @@
                             <select id="StatusSelect" name="StatusSelect" lay-search="">
                                 <option value="">全部...</option>
                                 <option value="0">待扣款</option>
+                                <option value="2">扣款中</option>
                                 <option value="1">已扣款</option>
                             </select>
                         </div>

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

@@ -140,7 +140,7 @@
                     '<div class="layui-input-inline">' +
                     '<input class="layui-input" type="text" id="ChargeAmounts' + num + '" name="ChargeAmounts" maxlength="50" lay-verify="" autocomplete="off" placeholder="" readonly>' +
                     '</div>' +
-                    '<label class="layui-form-label">请输入扣款开始时间</label>' +
+                    '<label class="layui-form-label">扣款开始时间</label>' +
                     '<div class="layui-input-inline"><input class="layui-input" type="text" id="StartDates' + num + '" name="StartDates"lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间"></div>' +
                     '</div >';
             }
@@ -195,7 +195,7 @@
                     '<div class="layui-input-inline">' +
                     '<input class="layui-input" type="text" id="ChargeAmounts' + num + '" name="ChargeAmounts" maxlength="50" lay-verify="" autocomplete="off" placeholder="" readonly>' +
                     '</div>' +
-                    '<label class="layui-form-label">请输入扣款开始时间</label>' +
+                    '<label class="layui-form-label">扣款开始时间</label>' +
                     '<div class="layui-input-inline"><input class="layui-input" type="text" id="StartDates' + num + '" name="StartDates"lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间"></div>' +
                     '</div >';
             }

+ 1 - 0
Config/MysqlConn.cs

@@ -8,6 +8,7 @@ namespace MySystem
     public class MysqlConn
     {
         public static string connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        public static string SqlConnStr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
 
     }
 }

+ 1 - 0
Startup.cs

@@ -141,6 +141,7 @@ namespace MySystem
             ExcelHelper.Instance.Start();
             OpExcelHelper.Instance.Start();
             SycnUserMachineCountHelper.Instance.Start(); //重置创客机具数量
+            InstallmentDeductionService.Instance.Start();//每月20号执行分期扣费
         }