ZhiYeJianKang_PeiXun/Song.ServiceImpls/AccountsCom.cs
2025-02-20 15:41:53 +08:00

1846 lines
83 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using WeiSha.Common;
using Song.Entities;
using WeiSha.Data;
using Song.ServiceInterfaces;
using System.Data.Common;
using System.Text.RegularExpressions;
using NPOI.HSSF.UserModel;
using System.Xml;
using NPOI.SS.UserModel;
using System.IO;
namespace Song.ServiceImpls
{
public class AccountsCom : IAccounts
{
#region
public event EventHandler Save;
public event EventHandler Add;
public event EventHandler Delete;
public void OnSave(object sender, EventArgs e)
{
if (!(sender is Accounts)) return;
Accounts acc = (Accounts)sender;
if (acc == null) return;
int currid = Extend.LoginState.Accounts.UserID;
if (currid != acc.Ac_ID) return;
Extend.LoginState.Accounts.Refresh(currid);
if (Save != null) Save(sender, e);
}
public void OnAdd(object sender, EventArgs e)
{
if (Add != null) Add(sender, e);
}
public void OnDelete(object sender, EventArgs e)
{
if (Delete != null) Delete(sender, e);
}
#endregion
/// <summary>
/// 注册协议
/// </summary>
/// <returns></returns>
public string RegAgreement()
{
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
//注册协议
string agreement = Business.Do<ISystemPara>().GetValue("Agreement_accounts");
if (string.IsNullOrWhiteSpace(agreement)) return agreement;
agreement = Regex.Replace(agreement, "{platform}", org.Org_PlatformName, RegexOptions.IgnoreCase);
agreement = Regex.Replace(agreement, "{org}", org.Org_AbbrName, RegexOptions.IgnoreCase);
agreement = Regex.Replace(agreement, "{domain}", WeiSha.Common.Server.MainName, RegexOptions.IgnoreCase);
return agreement;
}
#region
/// <summary>
/// 添加账户
/// </summary>
/// <param name="entity">业务实体</param>
/// <returns>如果已经存在该账户,则返回-1</returns>
public int AccountsAdd(Accounts entity)
{
if(!string.IsNullOrWhiteSpace(entity.Ac_IDCardNumber))
entity.Ac_IDCardNumber = entity.Ac_IDCardNumber.Trim();
//如果账号为空
if (string.IsNullOrWhiteSpace(entity.Ac_AccName))
throw new Exception("账号不得为空!");
else
entity.Ac_AccName = entity.Ac_AccName.Trim();
entity.Ac_RegTime = entity.Ac_LastTime = DateTime.Now;
entity.Ac_IsUse = true;
if (entity.Org_ID < 1)
{
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
}
//如果身份证不为空,则解析生日
if (!string.IsNullOrWhiteSpace(entity.Ac_IDCardNumber))
{
try
{
IDCardNumber card = IDCardNumber.Get(entity.Ac_IDCardNumber);
entity.Ac_Age = card.Birthday.Year;
entity.Ac_Sex = card.Sex;
entity.Ac_Birthday = card.Birthday;
entity.Ac_Native = card.Province + "," + card.Area + "," + card.City;
}
catch
{
}
}
else
{
//如果用户自己设置了年龄,则记录出生年份
if (entity.Ac_Age > 0) entity.Ac_Age = DateTime.Now.Year - entity.Ac_Age;
//计算年龄,如果设置了生日,则自动计算出生年月
if (entity.Ac_Birthday > DateTime.Now.AddYears(-100))
entity.Ac_Age = entity.Ac_Birthday.Year;
}
//如果密码为空
if (string.IsNullOrWhiteSpace(entity.Ac_Pw))
entity.Ac_Pw = WeiSha.Common.Login.Get["Accounts"].DefaultPw.MD5;
Gateway.Default.Save<Accounts>(entity);
//初次注册时的积分
int regPoint = Business.Do<ISystemPara>()["RegFirst"].Int32 ?? 0;
PointAccount pa = new PointAccount(); //开始增加积分
pa.Pa_Value = regPoint;
pa.Ac_ID = entity.Ac_ID;
pa.Pa_From = 0; //分享注册
pa.Pa_Info = "初次注册";
this.PointAdd(pa);
return entity.Ac_ID;
}
/// <summary>
/// 修改账户
/// </summary>
/// <param name="entity">业务实体</param>
public void AccountsSave(Accounts entity)
{
//如果密码不为空
//if (!string.IsNullOrWhiteSpace(entity.Ac_Pw))
// entity.Ac_Pw = new WeiSha.Common.Param.Method.ConvertToAnyValue(entity.Ac_Pw).MD5;
//如果身份证不为空,则解析生日
if (!string.IsNullOrWhiteSpace(entity.Ac_IDCardNumber))
{
try
{
IDCardNumber card = IDCardNumber.Get(entity.Ac_IDCardNumber);
entity.Ac_Age = card.Birthday.Year;
entity.Ac_Sex = card.Sex;
entity.Ac_Birthday = card.Birthday;
entity.Ac_Native = card.Province + "," + card.Area + "," + card.City;
}
catch
{
}
}
else
{
//如果用户自己设置了年龄,则记录出生年份
if (entity.Ac_Age > 0) entity.Ac_Age = DateTime.Now.Year - entity.Ac_Age;
//计算年龄,如果设置了生日,则自动计算出生年月
if (entity.Ac_Birthday > DateTime.Now.AddYears(-100))
entity.Ac_Age = entity.Ac_Birthday.Year;
}
//获取原有数据
//Accounts old = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
//if (old != null && old.Sts_ID != entity.Sts_ID)
//{
//同步考试成绩中的学员组
tran.Update<ExamResults>(new Field[] { ExamResults._.Sts_ID, ExamResults._.Ac_Sex, ExamResults._.Ac_Name, ExamResults._.Ac_IDCardNumber },
new object[] { entity.Sts_ID, entity.Ac_Sex, entity.Ac_Name, entity.Ac_IDCardNumber }, ExamResults._.Ac_ID == entity.Ac_ID);
//同步教师信息
tran.Update<Teacher>(new Field[] { Teacher._.Th_Sex, Teacher._.Th_Birthday, Teacher._.Th_IDCardNumber, Teacher._.Th_Nation, Teacher._.Th_Native },
new object[] { entity.Ac_Sex, entity.Ac_Birthday, entity.Ac_IDCardNumber, entity.Ac_Nation, entity.Ac_Native }, Teacher._.Ac_ID == entity.Ac_ID);
//}
tran.Save<Accounts>(entity);
tran.Commit();
this.OnSave(entity, EventArgs.Empty);
}
catch
{
tran.Rollback();
throw;
}
finally
{
tran.Close();
}
}
}
#region
/// <summary>
/// 账号初始化
/// </summary>
/// <param name="ac"></param>
/// <returns></returns>
private Accounts _acc_init(Accounts ac)
{
if (ac != null)
{
if (ac.Ac_Birthday > DateTime.Now.AddYears(-100))
{
ac.Ac_Age = (int)((DateTime.Now - ac.Ac_Birthday).TotalDays / (365 * 3 + 366) * 4);
ac.Ac_Age = ac.Ac_Age > 150 ? 0 : ac.Ac_Age;
}
else
{
if (ac.Ac_Age > 0) ac.Ac_Age = DateTime.Now.Year - ac.Ac_Age;
}
}
return ac;
}
#endregion
/// <summary>
/// 修改账户,按条件修改
/// </summary>
/// <param name="entity"></param>
/// <param name="fiels"></param>
/// <param name="objs"></param>
public void AccountsUpdate(Accounts entity, Field[] fiels, object[] objs)
{
Gateway.Default.Update<Accounts>(fiels, objs, Accounts._.Ac_ID == entity.Ac_ID);
this.OnSave(entity, EventArgs.Empty);
}
/// <summary>
/// 删除按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
public void AccountsDelete(int identify)
{
Song.Entities.Accounts ac = this.AccountsSingle(identify);
if (ac == null) return;
this.AccountsDelete(ac);
}
/// <summary>
/// 删除账户
/// </summary>
/// <param name="entity"></param>
public void AccountsDelete(Song.Entities.Accounts entity)
{
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
tran.Delete<Accounts>(Accounts._.Ac_ID == entity.Ac_ID);
if (!string.IsNullOrWhiteSpace(entity.Ac_Photo))
WeiSha.WebControl.FileUpload.Delete("Accounts", entity.Ac_Photo);
//删除相关数据
tran.Delete<Student_Ques>(Student_Ques._.Ac_ID == entity.Ac_ID);
tran.Delete<Student_Notes>(Student_Notes._.Ac_ID == entity.Ac_ID);
tran.Delete<Student_Course>(Student_Course._.Ac_ID == entity.Ac_ID);
tran.Delete<TestResults>(TestResults._.Ac_ID == entity.Ac_ID);
tran.Delete<MoneyAccount>(MoneyAccount._.Ac_ID == entity.Ac_ID);
tran.Delete<PointAccount>(PointAccount._.Ac_ID == entity.Ac_ID);
//下级学员全部提升一级
tran.Update<Accounts>(new Field[] { Accounts._.Ac_PID }, new object[] { entity.Ac_PID }, Accounts._.Ac_PID == entity.Ac_ID);
tran.Commit();
//删除教师
Song.Entities.Teacher th = this.GetTeacher(entity.Ac_ID, null);
if (th != null) Business.Do<ITeacher>().TeacherDelete(th, tran);
//从缓存中清除
Extend.LoginState.Accounts.CleanOut(entity);
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 获取单一实体对象按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
/// <returns></returns>
public Accounts AccountsSingle(int identify)
{
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == identify).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 获取单一实体对象按ygid
/// </summary>
/// <param name="identify">实体的主键</param>
/// <returns></returns>
public Accounts AccountsYgId(string identify)
{
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ygid == identify).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 通过账号名获取
/// </summary>
/// <param name="accname"></param>
/// <param name="orgid"></param>
/// <returns></returns>
public Accounts AccountsSingle(string accname, int orgid)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
wc.And(Accounts._.Ac_AccName == accname);
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(wc).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 通过手机号获取账户
/// </summary>
/// <param name="phone">手机号</param>
/// <param name="isPass">是否通过审核</param>
/// <param name="isUse">是否启用</param>
/// <returns></returns>
public Accounts AccountsSingle(string phone, bool? isPass, bool? isUse)
{
if (string.IsNullOrWhiteSpace(phone)) return null;
WhereClip wc = new WhereClip();
if (isPass != null) wc.And(Accounts._.Ac_IsPass == (bool)isPass);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == (bool)isUse);
WhereClip w2 = new WhereClip();
w2 |= Accounts._.Ac_MobiTel1 == phone;
w2 |= Accounts._.Ac_MobiTel2 == phone;
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(wc && w2).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 获取单一实体对象,按网站账户名称
/// </summary>
/// <param name="accname">帐号名称</param>
/// <param name="pw">密码</param>
/// <returns></returns>
public Accounts AccountsSingle(string accname, string pw, int orgid)
{
pw = new WeiSha.Common.Param.Method.ConvertToAnyValue(pw).MD5;
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
wc.And(Accounts._.Ac_AccName == accname);
wc.And(Accounts._.Ac_Pw == pw);
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(wc).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 获取单一实体通过id与验证码
/// </summary>
/// <param name="id">账户Id</param>
/// <param name="uid">账户登录时产生随机字符,用于判断同一账号不同人登录的问题</param>
/// <returns></returns>
public Accounts AccountsSingle(int id, string uid)
{
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == id && Accounts._.Ac_CheckUID == uid).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 通过姓名获取账号
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Accounts[] Account4Name(string name)
{
WhereClip wc = new WhereClip();
if (string.IsNullOrWhiteSpace(name)) return null;
wc.And(Accounts._.Ac_Name.Like("%" + name + "%"));
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 通过QQ的openid获取账户
/// </summary>
/// <param name="qqopenid"></param>
/// <returns></returns>
public Accounts Account4QQ(string qqopenid)
{
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_QqOpenID == qqopenid || Accounts._.Ac_AccName == qqopenid).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 通过微信的openid获取账户
/// </summary>
/// <param name="openid"></param>
/// <returns></returns>
public Accounts Account4Weixin(string openid)
{
Song.Entities.Accounts ac = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_WeixinOpenID == openid || Accounts._.Ac_AccName == openid).ToFirst<Accounts>();
return _acc_init(ac);
}
/// <summary>
/// 通过基础账号的id获取教师账户
/// </summary>
/// <param name="acid"></param>
/// <returns></returns>
public Teacher GetTeacher(int acid, bool? isPass)
{
WhereClip wc = Teacher._.Ac_ID == acid;
if (isPass != null) wc.And(Teacher._.Th_IsPass == (bool)isPass);
return Gateway.Default.From<Teacher>().Where(Teacher._.Ac_ID == acid).ToFirst<Teacher>();
}
/// <summary>
/// 登录验证
/// </summary>
/// <param name="acc">账号,或身份证,或手机</param>
/// <param name="pw">密码明文未经md5加密</param>
/// <param name="isPass">是否审核通过</param>
/// <returns></returns>
public Accounts AccountsLogin(string acc, string pw, bool? isPass)
{
WhereClip wc = Accounts._.Ac_IsUse == true;
if (isPass != null) wc.And(Accounts._.Ac_IsPass == (bool)isPass);
//密码
wc.And(Accounts._.Ac_Pw == new WeiSha.Common.Param.Method.ConvertToAnyValue(pw).MD5);
//账号、手机号、身份证,均可验证
WhereClip w2 = new WhereClip();
w2 |= Accounts._.Ac_AccName == acc;
w2 |= Accounts._.Ac_MobiTel1 == acc;
w2 |= Accounts._.Ac_MobiTel2 == acc;
w2 |= Accounts._.Ac_IDCardNumber == acc;
Song.Entities.Accounts entity = Gateway.Default.From<Accounts>().Where(wc && w2).ToFirst<Accounts>();
return _acc_init(entity);
}
/// <summary>
/// 登录判断
/// </summary>
/// <param name="accid">账户id</param>
/// <param name="pw">密码md5加密后的</param>
/// <param name="isPass">是否审核通过</param>
/// <returns></returns>
public Accounts AccountsLogin(int accid, string pw, bool? isPass)
{
WhereClip wc = Accounts._.Ac_IsUse == true;
if (isPass != null) wc.And(Accounts._.Ac_IsPass == (bool)isPass);
wc.And(Accounts._.Ac_ID == accid && Accounts._.Ac_Pw == pw);
Song.Entities.Accounts entity = Gateway.Default.From<Accounts>().Where(wc).ToFirst<Accounts>();
return _acc_init(entity);
}
/// <summary>
/// 判断账号是否存在
/// </summary>
/// <param name="accname"></param>
/// <returns></returns>
public Accounts IsAccountsExist(string accname)
{
return IsAccountsExist(0, accname);
}
/// <summary>
/// 判断账号是否存在
/// </summary>
/// <param name="accname"></param>
/// <returns></returns>
public Accounts IsAccountsExist(int orgid, string accname)
{
return IsAccountsExist(orgid, accname, 0);
}
/// <summary>
/// 当前用帐号是否重名
/// </summary>
/// <param name="accname">账户帐号</param>
/// <param name="type">判断类型默认为账号1为手机号,2为邮箱,-1为所有</param>
/// <returns></returns>
public Accounts IsAccountsExist(int orgid, string accname, int type)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= Accounts._.Org_ID == orgid;
switch (type)
{
case 1:
wc |= Accounts._.Ac_MobiTel1 == accname;
wc |= Accounts._.Ac_MobiTel2 == accname;
break;
case 2:
wc |= Accounts._.Ac_Email == accname;
break;
case -1:
wc |= Accounts._.Ac_MobiTel1 == accname;
wc |= Accounts._.Ac_MobiTel2 == accname;
wc |= Accounts._.Ac_Email == accname;
wc &= Accounts._.Ac_AccName == accname;
break;
default:
wc &= Accounts._.Ac_AccName == accname;
break;
}
Accounts mm = Gateway.Default.From<Accounts>()
.Where(wc).ToFirst<Accounts>();
return _acc_init(mm);
}
/// <summary>
/// 判断账户是否已经在存,将判断账号与手机号
/// </summary>
/// <param name="orgid"></param>
/// <param name="enity"></param>
/// <returns></returns>
public Accounts IsAccountsExist(int orgid, Accounts enity)
{
WhereClip wc = Accounts._.Ac_ID != enity.Ac_ID;
if (orgid > 0) wc &= Accounts._.Org_ID == orgid;
WhereClip orWc = new WhereClip();
orWc |= Accounts._.Ac_AccName == enity.Ac_AccName;
if(!string.IsNullOrWhiteSpace(enity.Ac_IDCardNumber))
orWc |= Accounts._.Ac_IDCardNumber == enity.Ac_IDCardNumber;
if (!string.IsNullOrWhiteSpace(enity.Ac_MobiTel1))
orWc |= Accounts._.Ac_MobiTel1 == enity.Ac_MobiTel1;
Accounts mm = Gateway.Default.From<Accounts>()
.Where(wc && orWc).ToFirst<Accounts>();
return _acc_init(mm);
}
/// <summary>
/// 当前用帐号是否重名
/// </summary>
/// <param name="orgid"></param>
/// <param name="accname"></param>
/// <param name="answer">安全问题答案</param>
/// <returns></returns>
public Accounts IsAccountsExist(int orgid, string accname, string answer)
{
if (string.IsNullOrWhiteSpace(accname)) return null;
if (string.IsNullOrWhiteSpace(answer)) return null;
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
Accounts mm = Gateway.Default.From<Accounts>()
.Where(wc && Accounts._.Ac_AccName == accname && Accounts._.Ac_Ans == answer).ToFirst<Accounts>();
return _acc_init(mm);
}
/// <summary>
/// 获取账户
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="isUse"></param>
/// <param name="count"></param>
/// <returns></returns>
public Accounts[] AccountsCount(int orgid, bool? isUse, int count)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
count = count > 0 ? count : int.MaxValue;
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>(count);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 获取账户信息
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="isUse">是否启用</param>
/// <param name="sts">班组的id多个id用逗号分隔</param>
/// <param name="count">取多少条小于1为所有</param>
/// <returns></returns>
public List<Accounts> AccountsCount(int orgid, bool? isUse, string sts, int count)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
if (!string.IsNullOrWhiteSpace(sts))
{
string[] ids = sts.Split(',');
WhereClip wcsts = new WhereClip();
foreach (string s in ids)
{
if (string.IsNullOrWhiteSpace(s)) continue;
int stsid = 0;
int.TryParse(s, out stsid);
if (stsid == 0) continue;
wcsts.Or(Accounts._.Sts_ID == stsid);
}
wc.And(wcsts);
}
count = count > 0 ? count : int.MaxValue;
List<Accounts> accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToList<Accounts>(count);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 计算有多少账户
/// </summary>
/// <param name="orgid"></param>
/// <param name="isUse"></param>
/// <returns></returns>
public int AccountsOfCount(int orgid, bool? isUse)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
return Gateway.Default.Count<Accounts>(wc);
}
/// <summary>
/// 分页获取所有的网站账户帐号;
/// </summary>
/// <param name="size">每页显示几条记录</param>
/// <param name="index">当前第几页</param>
/// <param name="countSum">记录总数</param>
/// <returns></returns>
public Accounts[] AccountsPager(int orgid, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
countSum = Gateway.Default.Count<Accounts>(wc);
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>(size, (index - 1) * size);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 分页获取某账户组,所有的网站账户帐号;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="sortid">账户分类id</param>
/// <param name="isUse"></param>
/// <param name="name">账户名称</param>
/// <param name="phone">账户账号</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public Accounts[] AccountsPager(int orgid, int sortid, bool? isUse, string acc, string name, string phone, int size, int index, out int countSum)
{
return AccountsPager(orgid, sortid, -1, isUse, acc, name, phone, size, index, out countSum);
}
/// <summary>
/// 分页获取某账户组,所有的网站账户帐号;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="pid">推荐人id</param>
/// <param name="isUse"></param>
/// <param name="name"></param>
/// <param name="phone"></param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public Accounts[] AccountsPager(int orgid, int sortid, int pid, bool? isUse, string acc, string name, string phone, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
if (sortid > 0) wc.And(Accounts._.Sts_ID == sortid);
if (pid > 0) wc.And(Accounts._.Ac_PID == pid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
if (!string.IsNullOrWhiteSpace(acc) && acc.Trim() != "") wc.And(Accounts._.Ac_AccName.Like("%" + acc.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(name) && name.Trim() != "") wc.And(Accounts._.Ac_Name.Like("%" + name.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(phone) && phone.Trim() != "")
{
WhereClip wc2 = new WhereClip();
wc2.Or(Accounts._.Ac_MobiTel1.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_MobiTel2.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_AccName.Like("%" + phone.Trim() + "%"));
wc.And(wc2);
}
countSum = Gateway.Default.Count<Accounts>(wc);
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>(size, (index - 1) * size);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 分页获取某账户组,所有的网站账户帐号;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="pid">推荐人id</param>
/// <param name="isUse"></param>
/// <param name="name"></param>
/// <param name="phone"></param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public Accounts[] AccountsPager2(int orgid, int sortid, bool? isUse, string acc, string name, string phone, string qyName, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc.And(Accounts._.Org_ID == orgid);
if (sortid > 0) wc.And(Accounts._.Sts_ID == sortid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
if (!string.IsNullOrWhiteSpace(acc) && acc.Trim() != "") wc.And(Accounts._.Ac_AccName.Like("%" + acc.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(name) && name.Trim() != "") wc.And(Accounts._.Ac_Name.Like("%" + name.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(qyName) && qyName.Trim() != "") wc.And(Accounts._.Ac_QyName.Like("%" + qyName.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(phone) && phone.Trim() != "")
{
WhereClip wc2 = new WhereClip();
wc2.Or(Accounts._.Ac_MobiTel1.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_MobiTel2.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_AccName.Like("%" + phone.Trim() + "%"));
wc.And(wc2);
}
countSum = Gateway.Default.Count<Accounts>(wc);
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>(size, (index - 1) * size);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
/// <summary>
/// 学员账号信息导出
/// </summary>
/// <param name="path">导出文件的路径(服务器端)</param>
/// <param name="orgid">机构id</param>
/// <param name="sorts">学员分组id用逗号分隔</param>
/// <returns></returns>
public string AccountsExport4Excel(string path, int orgid, string sorts)
{
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//xml配置文件
XmlDocument xmldoc = new XmlDocument();
string confing = WeiSha.Common.App.Get["ExcelInputConfig"].VirtualPath + "学生信息.xml";
xmldoc.Load(WeiSha.Common.Server.MapPath(confing));
XmlNodeList nodes = xmldoc.GetElementsByTagName("item");
//
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= Accounts._.Org_ID == orgid;
Accounts[] accounts = null;
//如果没有分组信息,则取当前机构的所有
if (string.IsNullOrWhiteSpace(sorts))
{
accounts = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
_export4Excel_to_sheet(hssfworkbook, "学员信息", accounts, nodes);
}
else
{
//按学员组生成工作簿
foreach (string s in sorts.Split(','))
{
if (string.IsNullOrWhiteSpace(s)) continue;
int sortid=0;
int.TryParse(s,out sortid);
if(sortid==0)continue;
//
Song.Entities.StudentSort sts=Gateway.Default.From<StudentSort>().Where(StudentSort._.Sts_ID == sortid).ToFirst<StudentSort>();
if(sts==null)continue;
accounts = Gateway.Default.From<Accounts>().Where(Accounts._.Org_ID == orgid && Accounts._.Sts_ID == sts.Sts_ID).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
_export4Excel_to_sheet(hssfworkbook, sts.Sts_Name, accounts, nodes);
}
//其它学员(没有分组的学员)
WhereClip wcNosort = new WhereClip();
Song.Entities.StudentSort[] stss = Gateway.Default.From<StudentSort>().Where(StudentSort._.Org_ID == orgid).ToArray<StudentSort>();
foreach (StudentSort ss in stss) wcNosort.And(Accounts._.Sts_ID != ss.Sts_ID);
accounts = Gateway.Default.From<Accounts>().Where(Accounts._.Org_ID == orgid && wcNosort).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
_export4Excel_to_sheet(hssfworkbook, "未分组学员", accounts, nodes);
}
FileStream file = new FileStream(path, FileMode.Create);
hssfworkbook.Write(file);
file.Close();
return path;
}
/// <summary>
/// 学员账户号导出
/// </summary>
/// <param name="path">导出文件的路径(服务器端)</param>
/// <param name="orgs">机构id,用逗号分隔</param>
/// <returns></returns>
public string AccountsExport4Excel(string path, string orgs)
{
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
//xml配置文件
XmlDocument xmldoc = new XmlDocument();
string confing = WeiSha.Common.App.Get["ExcelInputConfig"].VirtualPath + "学生信息.xml";
xmldoc.Load(WeiSha.Common.Server.MapPath(confing));
XmlNodeList nodes = xmldoc.GetElementsByTagName("item");
//
Accounts[] accounts = null;
//如果没有分组信息,则取当前机构的所有
if (string.IsNullOrWhiteSpace(orgs))
{
accounts = Gateway.Default.From<Accounts>().OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
_export4Excel_to_sheet(hssfworkbook, "全部学员信息", accounts, nodes);
}
else
{
//按学员组生成工作簿
foreach (string s in orgs.Split(','))
{
if (string.IsNullOrWhiteSpace(s)) continue;
int orgid = 0;
int.TryParse(s, out orgid);
if (orgid == 0) continue;
//
Song.Entities.Organization org = Business.Do<IOrganization>().OrganSingle(orgid);
if (org == null) continue;
accounts = Gateway.Default.From<Accounts>().Where(Accounts._.Org_ID == orgid).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>();
_export4Excel_to_sheet(hssfworkbook, org.Org_Name, accounts, nodes);
}
}
FileStream file = new FileStream(path, FileMode.Create);
hssfworkbook.Write(file);
file.Close();
return path;
}
private void _export4Excel_to_sheet(HSSFWorkbook hssfworkbook, string sheetName, Accounts[] accounts, XmlNodeList nodes)
{
ISheet sheet = hssfworkbook.CreateSheet(sheetName); //创建工作簿对象
//创建数据行对象
IRow rowHead = sheet.CreateRow(0);
for (int i = 0; i < nodes.Count; i++)
{
string exExport = nodes[i].Attributes["export"] != null ? nodes[i].Attributes["export"].Value : ""; //是否导出
if (exExport.ToLower() == "false") continue;
rowHead.CreateCell(i).SetCellValue(nodes[i].Attributes["Column"].Value);
}
//生成数据行
ICellStyle style_size = hssfworkbook.CreateCellStyle();
style_size.WrapText = true;
for (int i = 0; i < accounts.Length; i++)
{
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < nodes.Count; j++)
{
Type type = accounts[i].GetType();
System.Reflection.PropertyInfo propertyInfo = type.GetProperty(nodes[j].Attributes["Field"].Value); //获取指定名称的属性
object obj = propertyInfo.GetValue(accounts[i], null);
if (obj != null)
{
string exExport = nodes[j].Attributes["export"] != null ? nodes[j].Attributes["export"].Value : ""; //是否导出
if (exExport.ToLower() == "false") continue;
string format = nodes[j].Attributes["Format"] != null ? nodes[j].Attributes["Format"].Value : "";
string datatype = nodes[j].Attributes["DataType"] != null ? nodes[j].Attributes["DataType"].Value : "";
string defvalue = nodes[j].Attributes["DefautValue"] != null ? nodes[j].Attributes["DefautValue"].Value : "";
string value = "";
switch (datatype)
{
case "date":
DateTime tm = Convert.ToDateTime(obj);
value = tm > DateTime.Now.AddYears(-100) ? tm.ToString(format) : "";
break;
default:
value = obj.ToString();
break;
}
if (defvalue.Trim() != "")
{
foreach (string s in defvalue.Split('|'))
{
string h = s.Substring(0, s.IndexOf("="));
string f = s.Substring(s.LastIndexOf("=") + 1);
if (value == h) value = f;
}
}
row.CreateCell(j).SetCellValue(value);
}
}
}
return;
}
#endregion
#region
/// <summary>
/// 下级会员数据
/// </summary>
/// <param name="acid">当前账号ID</param>
/// <param name="isAll">是否包括所有下级true是所有false只取直接下级</param>
/// <returns></returns>
public int SubordinatesCount(int acid, bool isAll)
{
int count = Gateway.Default.Count<Accounts>(Accounts._.Ac_PID == acid);
if (isAll && count > 0)
{
Accounts[] accs = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_PID == acid)
.Select(new Field[] { Accounts._.Ac_ID })
.ToArray<Accounts>();
foreach(Accounts ac in accs)
count += SubordinatesCount(ac.Ac_ID, isAll);
}
return count;
}
/// <summary>
/// 下级会员分页获取
/// </summary>
/// <param name="acid">当前账号id</param>
/// <param name="isUse">是否启用</param>
/// <param name="acc"></param>
/// <param name="name"></param>
/// <param name="phone"></param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public Accounts[] SubordinatesPager(int acid, bool? isUse, string acc, string name, string phone, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (acid > 0) wc.And(Accounts._.Ac_PID == acid);
if (isUse != null) wc.And(Accounts._.Ac_IsUse == isUse);
if (!string.IsNullOrWhiteSpace(acc) && acc.Trim() != "") wc.And(Accounts._.Ac_AccName.Like("%" + acc.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(name) && name.Trim() != "") wc.And(Accounts._.Ac_Name.Like("%" + name.Trim() + "%"));
if (!string.IsNullOrWhiteSpace(phone) && phone.Trim() != "")
{
WhereClip wc2 = new WhereClip();
wc2.Or(Accounts._.Ac_MobiTel1.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_MobiTel2.Like("%" + phone.Trim() + "%"));
wc2.Or(Accounts._.Ac_AccName.Like("%" + phone.Trim() + "%"));
wc.And(wc2);
}
countSum = Gateway.Default.Count<Accounts>(wc);
Accounts[] accs = Gateway.Default.From<Accounts>().Where(wc).OrderBy(Accounts._.Ac_RegTime.Desc).ToArray<Accounts>(size, (index - 1) * size);
foreach (Song.Entities.Accounts ac in accs)
_acc_init(ac);
return accs;
}
#endregion
#region
/// <summary>
/// 收入
/// </summary>
/// <param name="entity">业务实体</param>
public PointAccount PointAdd(PointAccount entity)
{
if (entity.Ac_ID < 1) return entity; //如果没有指定学员id则返回
if (entity.Pa_Value <= 0) return entity; //如果要增加的值小于等于零,则返回
entity.Pa_CrtTime = DateTime.Now;
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
entity.Pa_Type = 2;
//流水号
entity.Pa_Serial = Business.Do<ISystemPara>().Serial();
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
Song.Entities.Accounts student = tran.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
entity.Pa_Total = student.Ac_Point + entity.Pa_Value;
entity.Pa_TotalAmount = student.Ac_PointAmount + entity.Pa_Value;
tran.Save<PointAccount>(entity);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Point }, new object[] { entity.Pa_Total }, Accounts._.Ac_ID == entity.Ac_ID);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_PointAmount }, new object[] { entity.Pa_TotalAmount }, Accounts._.Ac_ID == entity.Ac_ID);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 增加登录积分
/// </summary>
/// <param name="acc">学员账户</param>
/// <returns></returns>
public int PointAdd4Login(Accounts acc)
{
return PointAdd4Login(acc, null, null, null);
}
public int PointAdd4Login(Accounts acc, string source, string info, string remark)
{
//每次登录增加的积分;
int loginPoint = Business.Do<ISystemPara>()["LoginPoint"].Int32 ?? 0;
if (loginPoint <= 0) return 0;
//每天最多的登录积分;
int maxPoint = Business.Do<ISystemPara>()["LoginPointMax"].Int32 ?? 0;
if (loginPoint > maxPoint) return 0;
//当前学员今天的登录积分;
int todaySum = PointClac(acc.Ac_ID, 1, DateTime.Now.Date, DateTime.Now.AddDays(1).Date);
int surplus = maxPoint - todaySum; //每天最多积分,减去已经得到的积分,获取剩余的加分空间
if (surplus <= 0) return 0;
//开始增加积分
PointAccount pa = new PointAccount();
pa.Pa_Value = surplus > loginPoint ? loginPoint : surplus; //当前登录要增加的积分数
pa.Ac_ID = acc.Ac_ID;
pa.Pa_From = 1; //登录积分
pa.Pa_Source = source;
pa.Pa_Info = info;
pa.Pa_Remark = remark;
this.PointAdd(pa);
return pa.Pa_Value;
}
/// <summary>
/// 增加分享链接的访问积分
/// </summary>
/// <param name="acc"></param>
/// <returns></returns>
public int PointAdd4Share(Accounts acc)
{
//每次访问增加的积分;
int loginPoint = Business.Do<ISystemPara>()["SharePoint"].Int32 ?? 0;
if (loginPoint <= 0) return 0;
//每天最多的登录积分;
int maxPoint = Business.Do<ISystemPara>()["SharePointMax"].Int32 ?? 0;
if (loginPoint > maxPoint) return 0;
//当前学员今天的访问积分;
int todaySum = PointClac(acc.Ac_ID, 2, DateTime.Now.Date, DateTime.Now.AddDays(1).Date);
int surplus = maxPoint - todaySum; //每天最多积分,减去已经得到的积分,获取剩余的加分空间
if (surplus <= 0) return 0;
//开始增加积分
PointAccount pa = new PointAccount();
pa.Pa_Value = surplus > loginPoint ? loginPoint : surplus; //当前登录要增加的积分数
pa.Ac_ID = acc.Ac_ID;
pa.Pa_From = 2; //分享积分
pa.Pa_Info = "分享链接";
this.PointAdd(pa);
return pa.Pa_Value;
}
/// <summary>
/// 增加分享链接的注册积分
/// </summary>
/// <param name="acc"></param>
/// <returns></returns>
public int PointAdd4Register(Accounts acc)
{
//每次分享注册增加的积分;
int loginPoint = Business.Do<ISystemPara>()["RegPoint"].Int32 ?? 0;
if (loginPoint <= 0) return 0;
//每天最多的登录积分;
int maxPoint = Business.Do<ISystemPara>()["RegPointMax"].Int32 ?? 0;
if (loginPoint > maxPoint) return 0;
//当前学员今天的分享注册积分;
int todaySum = PointClac(acc.Ac_ID, 3, DateTime.Now.Date, DateTime.Now.AddDays(1).Date);
int surplus = maxPoint - todaySum; //每天最多积分,减去已经得到的积分,获取剩余的加分空间
if (surplus <= 0) return 0;
//开始增加积分
PointAccount pa = new PointAccount();
pa.Pa_Value = surplus > loginPoint ? loginPoint : surplus; //当前登录要增加的积分数
pa.Ac_ID = acc.Ac_ID;
pa.Pa_From = 3; //分享注册
pa.Pa_Info = "新增下级会员";
this.PointAdd(pa);
return pa.Pa_Value;
}
/// <summary>
/// 支出
/// </summary>
/// <param name="entity">业务实体</param>
public PointAccount PointPay(PointAccount entity)
{
entity.Pa_CrtTime = DateTime.Now;
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
entity.Pa_Type = 1;
entity.Ac_ID = entity.Ac_ID;
//流水号
entity.Pa_Serial = Business.Do<ISystemPara>().Serial();
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
Song.Entities.Accounts student = tran.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
entity.Pa_Total = student.Ac_Point - entity.Pa_Value;
tran.Save<PointAccount>(entity);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Point }, new object[] { entity.Pa_Total }, Accounts._.Ac_ID == entity.Ac_ID);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 删除流水
/// </summary>
/// <param name="entity">业务实体</param>
public void PointDelete(PointAccount entity)
{
Gateway.Default.Delete<PointAccount>(PointAccount._.Pa_ID == entity.Pa_ID);
}
/// <summary>
/// 删除按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
public void PointDelete(int identify)
{
Gateway.Default.Delete<PointAccount>(PointAccount._.Pa_ID == identify);
}
/// <summary>
/// 获取单一实体对象按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
/// <returns></returns>
public PointAccount PointSingle(int identify)
{
return Gateway.Default.From<PointAccount>().Where(PointAccount._.Pa_ID == identify).ToFirst<PointAccount>();
}
/// <summary>
/// 获取单一实体对象,按流水号
/// </summary>
/// <param name="serial"></param>
/// <returns></returns>
public PointAccount PointSingle(string serial)
{
if (string.IsNullOrWhiteSpace(serial)) return null;
return Gateway.Default.From<PointAccount>().Where(PointAccount._.Pa_Serial == serial.Trim()).ToFirst<PointAccount>();
}
/// <summary>
/// 修改流水信息
/// </summary>
/// <param name="entity"></param>
public void PointSave(PointAccount entity)
{
Gateway.Default.Save<PointAccount>(entity);
}
/// <summary>
/// 获取指定个数的记录
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="count"></param>
/// <returns></returns>
public PointAccount[] PointCount(int orgid, int stid, int type, int count)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= PointAccount._.Org_ID == orgid;
if (stid > 0) wc &= PointAccount._.Ac_ID == stid;
if (type > 0) wc &= PointAccount._.Pa_Type == type;
return Gateway.Default.From<PointAccount>().Where(wc).OrderBy(PointAccount._.Pa_CrtTime.Desc).ToArray<PointAccount>(count);
}
/// <summary>
/// 计算某一个时间区间的积分
/// </summary>
/// <param name="acid">学员账户</param>
/// <param name="formType">来源分类1登录2分享访问3分享注册4兑换</param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public int PointClac(int acid, int formType, DateTime? start, DateTime? end)
{
WhereClip wc = new WhereClip();
if (acid > 0) wc &= PointAccount._.Ac_ID == acid;
if (formType > 0) wc &= PointAccount._.Pa_From == formType;
if (start != null) wc &= PointAccount._.Pa_CrtTime >= (DateTime)start;
if (end != null) wc &= PointAccount._.Pa_CrtTime < (DateTime)end;
object obj= Gateway.Default.Sum<PointAccount>(PointAccount._.Pa_Value, wc);
return Convert.ToInt32(obj);
}
/// <summary>
/// 分页获取所有的公告;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public PointAccount[] PointPager(int orgid, int stid, int type, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= PointAccount._.Org_ID == orgid;
if (stid > 0) wc &= PointAccount._.Ac_ID == stid;
if (type > 0) wc &= PointAccount._.Pa_Type == type;
countSum = Gateway.Default.Count<PointAccount>(wc);
return Gateway.Default.From<PointAccount>()
.Where(wc).OrderBy(PointAccount._.Pa_CrtTime.Desc).ToArray<PointAccount>(size, (index - 1) * size);
}
/// <summary>
/// 分页获取所有的公告;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="searTxt">按信息检索</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public PointAccount[] PointPager(int orgid, int stid, int type, string searTxt, DateTime? start, DateTime? end, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= PointAccount._.Org_ID == orgid;
if (stid > 0) wc &= PointAccount._.Ac_ID == stid;
if (type > 0) wc &= PointAccount._.Pa_Type == type;
if (start != null && ((DateTime)start) > DateTime.Now.AddYears(-100)) wc &= PointAccount._.Pa_CrtTime >= ((DateTime)start).Date;
if (end != null && ((DateTime)end) > DateTime.Now.AddYears(-100)) wc &= PointAccount._.Pa_CrtTime < ((DateTime)end).AddDays(1).Date;
if (!string.IsNullOrWhiteSpace(searTxt)) wc &= PointAccount._.Pa_Info.Like("%" + searTxt + "%");
countSum = Gateway.Default.Count<PointAccount>(wc);
return Gateway.Default.From<PointAccount>()
.Where(wc).OrderBy(PointAccount._.Pa_CrtTime.Desc).ToArray<PointAccount>(size, (index - 1) * size);
}
#endregion
#region
/// <summary>
/// 收入
/// </summary>
/// <param name="entity">业务实体</param>
public CouponAccount CouponAdd(CouponAccount entity)
{
entity.Ca_CrtTime = DateTime.Now;
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
entity.Ca_Type = 2;
entity.Ac_ID = entity.Ac_ID;
//流水号
entity.Ca_Serial = Business.Do<ISystemPara>().Serial();
//计算总数
Song.Entities.Accounts acc=Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID==entity.Ac_ID).ToFirst<Accounts>();
if (acc == null) throw new Exception("当前账户不存在");
entity.Ca_Total = acc.Ac_Coupon + entity.Ca_Value;
//最大券值
object amount = Gateway.Default.Max<CouponAccount>(CouponAccount._.Ca_TotalAmount, CouponAccount._.Ac_ID == entity.Ac_ID);
if (amount == null) amount = 0;
entity.Ca_TotalAmount = (int)amount + entity.Ca_Value;
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
tran.Save<CouponAccount>(entity);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Coupon }, new object[] { entity.Ca_Total }, Accounts._.Ac_ID == entity.Ac_ID);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 支出
/// </summary>
/// <param name="entity">业务实体</param>
public CouponAccount CouponPay(CouponAccount entity)
{
if (entity.Ca_Value == 0) return entity;
entity.Ca_CrtTime = DateTime.Now;
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
entity.Ca_Type = 1;
entity.Ac_ID = entity.Ac_ID;
//流水号
entity.Ca_Serial = Business.Do<ISystemPara>().Serial();
//计算总数
Song.Entities.Accounts acc = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
if (acc == null) throw new Exception("当前账户不存在");
if (acc.Ac_Coupon < entity.Ca_Value) throw new Exception("当前账户卡券不足");
entity.Ca_Total = acc.Ac_Coupon - entity.Ca_Value;
//最大券值
object amount = Gateway.Default.Max<CouponAccount>(CouponAccount._.Ca_TotalAmount, CouponAccount._.Ac_ID == entity.Ac_ID);
if (amount == null) amount = 0;
entity.Ca_TotalAmount = (int)amount;
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
tran.Save<CouponAccount>(entity);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Coupon }, new object[] { entity.Ca_Total }, Accounts._.Ac_ID == entity.Ac_ID);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 积分兑换卡券
/// </summary>
/// <param name="accid">学员id</param>
/// <param name="coupon">要兑换的卡券数量</param>
/// <returns></returns>
public void CouponExchange(int accid, int coupon)
{
Song.Entities.Accounts acc = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == accid).ToFirst<Accounts>();
CouponExchange(acc, coupon);
}
/// <summary>
/// 积分兑换卡券
/// </summary>
/// <param name="acc">学员</param>
/// <param name="coupon">要兑换的卡券数量</param>
public void CouponExchange(Accounts acc, int coupon)
{
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
int accid = acc.Ac_ID;
//计算是否满足兑换
int point = acc.Ac_Point;
int ratio = Business.Do<ISystemPara>()["PointConvert"].Int32 ?? 0;
if (ratio <= 0) throw new Exception("积分兑换比率不得小于等于零");
int result = point / ratio;
if (result < coupon) throw new Exception("可兑换数量不足");
//积分的扣除计算
PointAccount pa = new PointAccount();
pa.Pa_CrtTime = DateTime.Now;
pa.Ac_ID = accid;
if (org != null) pa.Org_ID = org.Org_ID;
pa.Pa_Type = 1;
pa.Pa_Serial = Business.Do<ISystemPara>().Serial(); //流水号
pa.Pa_Value = coupon * ratio; //要扣除的积分;
pa.Pa_Total = acc.Ac_Point = acc.Ac_Point - pa.Pa_Value;
pa.Pa_TotalAmount = acc.Ac_PointAmount;
pa.Pa_Info = "积分兑换";
pa.Pa_Remark = string.Format("用{0}积分兑换{1}卡券", pa.Pa_Value, coupon);
pa.Pa_Source = WeiSha.Common.Browser.IsMobile ? "手机端" : "电脑网页";
//卡券的增加计算
CouponAccount ca = new CouponAccount();
ca.Ca_CrtTime = DateTime.Now;
ca.Ac_ID = accid;
if (org != null) ca.Org_ID = org.Org_ID;
ca.Ca_Serial = Business.Do<ISystemPara>().Serial();
ca.Ca_Value = coupon;
ca.Ca_Total = acc.Ac_Coupon + ca.Ca_Value;
ca.Ca_Info = "积分兑换";
ca.Ca_Remark = string.Format("用{0}积分兑换{1}卡券", pa.Pa_Value, coupon);
ca.Ca_Source = WeiSha.Common.Browser.IsMobile ? "手机端" : "电脑网页";
//最大券值
object amount = Gateway.Default.Max<CouponAccount>(CouponAccount._.Ca_TotalAmount, CouponAccount._.Ac_ID == accid);
if (amount == null) amount = 0;
ca.Ca_TotalAmount = (int)amount + ca.Ca_Value;
//存入记录
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
//存储积分
tran.Save<PointAccount>(pa);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Point }, new object[] { pa.Pa_Total }, Accounts._.Ac_ID == accid);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_PointAmount }, new object[] { pa.Pa_TotalAmount }, Accounts._.Ac_ID == accid);
//存储卡券
tran.Save<CouponAccount>(ca);
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Coupon }, new object[] { ca.Ca_Total }, Accounts._.Ac_ID == accid);
tran.Commit();
Extend.LoginState.Accounts.Refresh(accid);
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 删除流水
/// </summary>
/// <param name="entity">业务实体</param>
public void CouponDelete(CouponAccount entity)
{
Gateway.Default.Delete<CouponAccount>(CouponAccount._.Ca_ID == entity.Ca_ID);
}
/// <summary>
/// 删除按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
public void CouponDelete(int identify)
{
Gateway.Default.Delete<CouponAccount>(CouponAccount._.Ca_ID == identify);
}
/// <summary>
/// 获取单一实体对象按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
/// <returns></returns>
public CouponAccount CouponSingle(int identify)
{
return Gateway.Default.From<CouponAccount>().Where(CouponAccount._.Ca_ID == identify).ToFirst<CouponAccount>();
}
/// <summary>
/// 获取单一实体对象,按流水号
/// </summary>
/// <param name="serial"></param>
/// <returns></returns>
public CouponAccount CouponSingle(string serial)
{
if (string.IsNullOrWhiteSpace(serial)) return null;
return Gateway.Default.From<CouponAccount>().Where(CouponAccount._.Ca_Serial == serial.Trim()).ToFirst<CouponAccount>();
}
/// <summary>
/// 修改流水信息
/// </summary>
/// <param name="entity"></param>
public void CouponSave(CouponAccount entity)
{
Gateway.Default.Save<CouponAccount>(entity);
}
/// <summary>
/// 获取指定个数的记录
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="count"></param>
/// <returns></returns>
public CouponAccount[] CouponCount(int orgid, int stid, int type, int count)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= CouponAccount._.Org_ID == orgid;
if (stid > 0) wc &= CouponAccount._.Ac_ID == stid;
if (type > 0) wc &= CouponAccount._.Ca_Type == type;
return Gateway.Default.From<CouponAccount>().Where(wc).OrderBy(CouponAccount._.Ca_CrtTime.Desc).ToArray<CouponAccount>(count);
}
public int CouponClac(int acid, int formType, DateTime? start, DateTime? end)
{
WhereClip wc = new WhereClip();
if (acid > 0) wc &= CouponAccount._.Ac_ID == acid;
if (formType > 0) wc &= CouponAccount._.Ca_From == formType;
if (start != null) wc &= CouponAccount._.Ca_CrtTime >= (DateTime)start;
if (end != null) wc &= CouponAccount._.Ca_CrtTime < (DateTime)end;
object obj = Gateway.Default.Sum<CouponAccount>(CouponAccount._.Ca_Value, wc);
return Convert.ToInt32(obj);
}
/// <summary>
/// 分页获取所有的公告;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public CouponAccount[] CouponPager(int orgid, int stid, int type, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= CouponAccount._.Org_ID == orgid;
if (stid > 0) wc &= CouponAccount._.Ac_ID == stid;
if (type > 0) wc &= CouponAccount._.Ca_Type == type;
countSum = Gateway.Default.Count<CouponAccount>(wc);
return Gateway.Default.From<CouponAccount>()
.Where(wc).OrderBy(CouponAccount._.Ca_CrtTime.Desc).ToArray<CouponAccount>(size, (index - 1) * size);
}
public CouponAccount[] CouponPager(int orgid, int stid, int type, DateTime? start, DateTime? end,int size, int index, out int countSum){
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= CouponAccount._.Org_ID == orgid;
if (stid > 0) wc &= CouponAccount._.Ac_ID == stid;
if (type > 0) wc &= CouponAccount._.Ca_Type == type;
if (start != null) wc &= CouponAccount._.Ca_CrtTime >= (DateTime)start;
if (end != null) wc &= CouponAccount._.Ca_CrtTime < (DateTime)end;
countSum = Gateway.Default.Count<CouponAccount>(wc);
return Gateway.Default.From<CouponAccount>()
.Where(wc).OrderBy(CouponAccount._.Ca_CrtTime.Desc).ToArray<CouponAccount>(size, (index - 1) * size);
}
/// <summary>
/// 分页获取所有的公告;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="searTxt">按信息检索</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public CouponAccount[] CouponPager(int orgid, int stid, int type, string searTxt, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= CouponAccount._.Org_ID == orgid;
if (stid > 0) wc &= CouponAccount._.Ac_ID == stid;
if (type > 0) wc &= CouponAccount._.Ca_Type == type;
if (!string.IsNullOrWhiteSpace(searTxt)) wc &= CouponAccount._.Ca_Info.Like("%" + searTxt + "%");
countSum = Gateway.Default.Count<CouponAccount>(wc);
return Gateway.Default.From<CouponAccount>()
.Where(wc).OrderBy(CouponAccount._.Ca_CrtTime.Desc).ToArray<CouponAccount>(size, (index - 1) * size);
}
#endregion
#region
/// <summary>
/// 收入
/// </summary>
/// <param name="entity">业务实体</param>
public MoneyAccount MoneyIncome(MoneyAccount entity)
{
entity.Ma_CrtTime = DateTime.Now;
if (entity.Org_ID < 1)
{
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
}
entity.Ma_Type = 2;
//流水号
entity.Ma_Serial = Business.Do<ISystemPara>().Serial();
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
_addition(entity, tran);
tran.Save<MoneyAccount>(entity);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 支出
/// </summary>
/// <param name="entity">业务实体</param>
public MoneyAccount MoneyPay(MoneyAccount entity)
{
entity.Ma_CrtTime = DateTime.Now;
Song.Entities.Organization org = Business.Do<IOrganization>().OrganCurrent();
if (org != null) entity.Org_ID = org.Org_ID;
entity.Ma_Type = 1;
//流水号
entity.Ma_Serial = Business.Do<ISystemPara>().Serial();
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
_subtraction(entity, tran);
tran.Save<MoneyAccount>(entity);
tran.Commit();
Extend.LoginState.Accounts.Refresh(entity.Ac_ID);
return entity;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
/// <summary>
/// 通过流水号进行资金支出或收入的确认操作
/// </summary>
/// <param name="serial">流水号</param>
/// <returns></returns>
public MoneyAccount MoneyConfirm(string serial)
{
Song.Entities.MoneyAccount ma = Gateway.Default.From<MoneyAccount>().Where(MoneyAccount._.Ma_Serial == serial).ToFirst<MoneyAccount>();
return MoneyConfirm(ma);
}
/// <summary>
/// 通过交易记录的对象,进行资金支出或收入的确认操作
/// </summary>
/// <param name="ma"></param>
/// <returns></returns>
public MoneyAccount MoneyConfirm(MoneyAccount ma)
{
if (ma == null) return null;
if (ma.Ma_IsSuccess) return ma;
using (DbTrans tran = Gateway.Default.BeginTrans())
{
try
{
ma.Ma_IsSuccess = true;
if (ma.Ma_Type == 1) _subtraction(ma, tran);
if (ma.Ma_Type == 2) _addition(ma, tran);
tran.Save<MoneyAccount>(ma);
tran.Commit();
Extend.LoginState.Accounts.Refresh(ma.Ac_ID);
return ma;
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
finally
{
tran.Close();
}
}
}
#region
/// <summary>
/// 资金增加
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private void _addition(MoneyAccount entity, DbTrans tran)
{
//原有的钱数
Decimal deposit = 0;
Song.Entities.Accounts student = tran.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
if (student == null) return;
deposit = student.Ac_Money;
if (entity.Ma_IsSuccess)
{
//当前总金额等于,之前的总金额加上当前收入
entity.Ma_Total = deposit + entity.Ma_Money;
}
else
{
entity.Ma_Total = deposit;
}
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Money }, new object[] { entity.Ma_Total }, Accounts._.Ac_ID == entity.Ac_ID);
}
/// <summary>
/// 资金减除
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private void _subtraction(MoneyAccount entity, DbTrans tran)
{
//最后一流水记录
Song.Entities.MoneyAccount first = tran.From<MoneyAccount>().Where(MoneyAccount._.Ac_ID == entity.Ac_ID).OrderBy(MoneyAccount._.Ma_ID.Desc).ToFirst<MoneyAccount>();
Decimal total = 0;
Song.Entities.Accounts student = tran.From<Accounts>().Where(Accounts._.Ac_ID == entity.Ac_ID).ToFirst<Accounts>();
total = student != null ? student.Ac_Money : first.Ma_Total;
if (total - entity.Ma_Money < 0) throw new Exception("余额不足,无法支出!");
if (entity.Ma_IsSuccess)
{
//当前总金额等于,之前的总金额减去当前支出
entity.Ma_Total = total - (Decimal)entity.Ma_Money;
}
else
{
entity.Ma_Total = total;
}
tran.Update<Accounts>(new Field[] { Accounts._.Ac_Money }, new object[] { entity.Ma_Total }, Accounts._.Ac_ID == entity.Ac_ID);
}
#endregion
/// <summary>
/// 删除流水
/// </summary>
/// <param name="entity">业务实体</param>
public void MoneyDelete(MoneyAccount entity)
{
Gateway.Default.Delete<MoneyAccount>(MoneyAccount._.Ma_ID == entity.Ma_ID);
}
/// <summary>
/// 删除按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
public void MoneyDelete(int identify)
{
Gateway.Default.Delete<MoneyAccount>(MoneyAccount._.Ma_ID == identify);
}
/// <summary>
/// 获取单一实体对象按主键ID
/// </summary>
/// <param name="identify">实体的主键</param>
/// <returns></returns>
public MoneyAccount MoneySingle(int identify)
{
return Gateway.Default.From<MoneyAccount>().Where(MoneyAccount._.Ma_ID == identify).ToFirst<MoneyAccount>();
}
/// <summary>
/// 获取单一实体对象,按流水号
/// </summary>
/// <param name="serial"></param>
/// <returns></returns>
public MoneyAccount MoneySingle(string serial)
{
if (string.IsNullOrWhiteSpace(serial)) return null;
return Gateway.Default.From<MoneyAccount>().Where(MoneyAccount._.Ma_Serial == serial.Trim()).ToFirst<MoneyAccount>();
}
/// <summary>
/// 计算资金收益
/// </summary>
/// <param name="accid">账号id</param>
/// <param name="type">1支出2收入包括充值、分润等</param>
/// <param name="from">类型来源1为管理员操作2为充值码充值3这在线支付4购买课程,5分润</param>
/// <returns></returns>
public decimal MoneySum(int accid, int type, int from)
{
WhereClip wc = MoneyAccount._.Ac_ID == accid;
wc &= MoneyAccount._.Ma_IsSuccess == true;
if (type > 0) wc &= MoneyAccount._.Ma_Type == type;
if (from > 0) wc &= MoneyAccount._.Ma_From == from;
object tm = Gateway.Default.Sum<MoneyAccount>(MoneyAccount._.Ma_Money, wc);
decimal sum = 0;
sum = tm is decimal ? (decimal)tm : 0;
return sum;
}
/// <summary>
/// 修改流水信息
/// </summary>
/// <param name="entity"></param>
public void MoneySave(MoneyAccount entity)
{
Gateway.Default.Save<MoneyAccount>(entity);
}
/// <summary>
/// 获取指定个数的记录
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="isSuccess">是否操作成功</param>
/// <param name="count"></param>
/// <returns></returns>
public MoneyAccount[] MoneyCount(int orgid, int stid, int type, bool? isSuccess, int count)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= MoneyAccount._.Org_ID == orgid;
if (stid > 0) wc &= MoneyAccount._.Ac_ID == stid;
if (type > 0) wc &= MoneyAccount._.Ma_Type == type;
if (isSuccess != null) wc &= MoneyAccount._.Ma_IsSuccess == (bool)isSuccess;
return Gateway.Default.From<MoneyAccount>().Where(wc).OrderBy(MoneyAccount._.Ma_CrtTime.Desc).ToArray<MoneyAccount>(count);
}
/// <summary>
/// 计算某一个时间区间的现金
/// </summary>
/// <param name="acid">学员账户</param>
/// <param name="formType">1为管理员操作2为充值码充值3在线支付4购买课程,5分润</param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public int MoneyClac(int acid, int formType, DateTime? start, DateTime? end)
{
WhereClip wc = new WhereClip();
if (acid > 0) wc &= MoneyAccount._.Ac_ID == acid;
if (formType > 0) wc &= MoneyAccount._.Ma_From == formType;
if (start != null) wc &= MoneyAccount._.Ma_CrtTime >= (DateTime)start;
if (end != null) wc &= MoneyAccount._.Ma_CrtTime < (DateTime)end;
object obj = Gateway.Default.Sum<MoneyAccount>(MoneyAccount._.Ma_Money, wc);
return Convert.ToInt32(obj);
}
/// <summary>
/// 分页获取所有资金流水;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public MoneyAccount[] MoneyPager(int orgid, int stid, int type, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= MoneyAccount._.Org_ID == orgid;
if (stid > 0) wc &= MoneyAccount._.Ac_ID == stid;
if (type > 0) wc &= MoneyAccount._.Ma_Type == type;
countSum = Gateway.Default.Count<MoneyAccount>(wc);
return Gateway.Default.From<MoneyAccount>()
.Where(wc).OrderBy(MoneyAccount._.Ma_CrtTime.Desc).ToArray<MoneyAccount>(size, (index - 1) * size);
}
/// <summary>
/// 分页获取所有资金流水;
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="searTxt">按信息检索</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public MoneyAccount[] MoneyPager(int orgid, int stid, int type, string searTxt, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= MoneyAccount._.Org_ID == orgid;
if (stid > 0) wc &= MoneyAccount._.Ac_ID == stid;
if (type > 0) wc &= MoneyAccount._.Ma_Type == type;
if (!string.IsNullOrWhiteSpace(searTxt)) wc &= MoneyAccount._.Ma_Info.Like("%" + searTxt + "%");
countSum = Gateway.Default.Count<MoneyAccount>(wc);
return Gateway.Default.From<MoneyAccount>()
.Where(wc).OrderBy(MoneyAccount._.Ma_CrtTime.Desc).ToArray<MoneyAccount>(size, (index - 1) * size);
}
/// <summary>
/// 分页获取所有资金流水;
/// </summary>
/// </summary>
/// <param name="orgid">机构id</param>
/// <param name="st">学员id</param>
/// <param name="type">类型支出为1转入2</param>
/// <param name="searTxt">按信息检索</param>
/// <param name="start">按时间检索区间,此为开始时间</param>
/// <param name="end">按时间检索区间,此为结束时间</param>
/// <param name="size"></param>
/// <param name="index"></param>
/// <param name="countSum"></param>
/// <returns></returns>
public MoneyAccount[] MoneyPager(int orgid, int stid, int type, int from, string searTxt, DateTime? start, DateTime? end, int size, int index, out int countSum)
{
WhereClip wc = new WhereClip();
if (orgid > 0) wc &= MoneyAccount._.Org_ID == orgid;
if (stid > -1) wc &= MoneyAccount._.Ac_ID == stid;
if (type > 0) wc &= MoneyAccount._.Ma_Type == type;
if (from > 0) wc &= MoneyAccount._.Ma_From == from;
if (!string.IsNullOrWhiteSpace(searTxt)) wc &= MoneyAccount._.Ma_Info.Like("%" + searTxt + "%");
if (start != null && ((DateTime)start) > DateTime.Now.AddYears(-100)) wc &= MoneyAccount._.Ma_CrtTime >= ((DateTime)start).Date;
if (end != null && ((DateTime)end) > DateTime.Now.AddYears(-100)) wc &= MoneyAccount._.Ma_CrtTime < ((DateTime)end).AddDays(1).Date;
countSum = Gateway.Default.Count<MoneyAccount>(wc);
return Gateway.Default.From<MoneyAccount>()
.Where(wc).OrderBy(MoneyAccount._.Ma_CrtTime.Desc).ToArray<MoneyAccount>(size, (index - 1) * size);
}
#endregion
/// <summary>
/// 当前账户的所有父级账户,依次向上
/// </summary>
/// <param name="accid">当前账户id</param>
/// <returns></returns>
public Accounts[] Parents(int accid)
{
Accounts acc = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == accid).ToFirst<Accounts>();
return Parents(acc);
}
public Accounts[] Parents(Accounts acc)
{
List<Accounts> list = new List<Accounts>();
if (acc == null) return list.ToArray();
//取父级
Accounts parent = null;
do
{
parent = Gateway.Default.From<Accounts>().Where(Accounts._.Ac_ID == acc.Ac_PID).ToFirst<Accounts>();
if (parent != null)
{
list.Add(parent);
acc = parent;
}
}
while (parent != null);
return list.ToArray();
}
}
}