| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 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.Hour < 20)
- {
- try
- {
- string check = function.ReadInstance("/InstallmentDeduction/check" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
- if (string.IsNullOrEmpty(check))
- {
- function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-dd") + ".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 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 userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
- {
- CreateDate = DateTime.Now,
- UserId = items.UserId,
- BeforeBalanceAmount = userAccount.BalanceAmount,
- AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
- ChangeAmount = record.ChargeAmount,
- ChangeType = 201,//分期扣款(201 分期扣款 202 普通预扣款)
- Remark = "分期扣款",
- }).Entity;
- var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == record.Sort) ?? new ToChargeBackRecordSub();
- var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId && record.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)
- {
- var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == record.Sort) ?? new ToChargeBackRecordSub();
- var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId && record.TimeNumber > m.QueryCount) ?? new ToChargeByStage();
- if (toChargeByStage.Id > 0)
- {
- var toChargeBackRecordSubs = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == toChargeByStage.Id) ?? new ToChargeBackRecordSub();
- if (toChargeBackRecordSubs.Id > 0)
- {
- userAccount.ToChargeAmount += toChargeBackRecordSubs.ChargeAmount;//增加预扣款
- var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
- {
- CreateDate = DateTime.Now,
- UserId = toChargeByStage.UserId,
- ChargeAmount = toChargeBackRecordSubs.ChargeAmount,
- ChargeType = 2,//分期扣款
- Remark = "分期扣款",
- }).Entity;
- }
- }
- }
- }
- db.SaveChanges();
- }
- }
- catch (Exception ex)
- {
- function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "执行分期扣费异常");
- }
- }
- Thread.Sleep(1000);
- }
- }
- }
- }
|