using Appointment.Entity;
using Appointment.IRepository;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Repository
{
public class UserRepo : DbContext, IUserRepo
{
static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(UserRepo));
IApptLogRepo _ApptLog;
IApptRepo _ApptRepo;
public UserRepo(IApptLogRepo apptLog, IApptRepo apptRepo)
{
_ApptLog = apptLog;
_ApptRepo = apptRepo;
}
///
/// 账号与密码登录
///
/// 账号
/// 密码
/// 公众号Code
/// 酒店Id
///
public ApiResult UserNameLogin(string userName, string userPwd, string code, string hotelid)
{
var user = Db.Queryable()
.Where(t => t.OpId == userName && t.Password == userPwd).First();
if (user == null) return ApiResult.Failed("登录失败,用户不存在!");
user = user.Replace();
if (user.Locked == "T") return ApiResult.Failed("登录失败,账号锁定!");
if (!string.IsNullOrWhiteSpace(code))
{
ApiResult resultOpen = new WechatHelper().Code2Session(code);
if (!resultOpen.IsSuccess) return ApiResult.Failed(resultOpen.Msg);
if (user.WxOpenId != resultOpen.Info.Openid)
{
user.WxOpenId = resultOpen.Info.Openid;
var update = Db.Updateable(user)
.UpdateColumns(t => new { t.WxOpenId, t.OpId, t.Password })
.WhereColumns(t => new { t.OpId, t.Password }).ExecuteCommand();
}
}
var role = Db.Queryable().Where(t => t.OpGroup == user.OpGroup && t.ApptTypeId == 2).Any();
int bindStatus = string.IsNullOrWhiteSpace(user.WxServiceId) ? 0 : 1;
string sJson = JsonConvert.SerializeObject(new LoginUserRes()
{
UserAccount = user.OpId,
UserName = user.OpName,
UserGroup = user.OpGroup,
Hotelid = hotelid
});
var userToken = CryptoHelper.DES_Encode(sJson);
var wxmpAppid = BaseConfig.App(new string[] { "WeChatService", "AppId" });
return ApiResult.Success(string.Empty, new UserInfoRes()
{
BindStatus = bindStatus,
UserAccount = user.OpId,
Token = wxmpAppid,
Role = role ? 1 : 0,
AccountDES = userToken
});
}
public ApiResult WxLogin(string code, string hotelid)
{
if (string.IsNullOrWhiteSpace(code)) return ApiResult.Failed("未获取有效的微信信息");
ApiResult resultOpen = new WechatHelper().Code2Session(code);
if (!resultOpen.IsSuccess) return ApiResult.Failed(resultOpen.Msg);
var user = Db.Queryable()
.Where(t => t.WxOpenId == resultOpen.Info.Openid).First();
if (user == null) return ApiResult.Failed("登录失败,该微信未绑定,可以通过工号登录实现绑定!");
user = user.Replace();
if (user.Locked == "T") return ApiResult.Failed("登录失败,账号锁定!");
var role = Db.Queryable().Where(t => t.OpGroup == user.OpGroup && t.ApptTypeId == 2).Any();
int bindStatus = string.IsNullOrWhiteSpace(user.WxServiceId) ? 0 : 1;
string sJson = JsonConvert.SerializeObject(new LoginUserRes()
{
UserAccount = user.OpId,
UserName = user.OpName,
UserGroup = user.OpGroup,
Hotelid = hotelid
});
var userToken = CryptoHelper.DES_Encode(sJson);
var wxmpAppid = BaseConfig.App(new string[] { "WeChatService", "AppId" });
return ApiResult.Success(string.Empty, new UserInfoRes()
{
BindStatus = bindStatus,
UserAccount = user.OpId,
Token = wxmpAppid,
Role = role ? 1 : 0,
AccountDES = userToken
});
}
public ApiResult WxServiceSet(WxServiceSetRes req)
{
if (string.IsNullOrWhiteSpace(req.UserAccount)) return ApiResult.Failed("添加失败,未获取到当前用户账号!");
var user = Db.Queryable().Where(t => t.OpId == req.UserAccount && t.Locked == "F").First();
if (user == null) return ApiResult.Failed("操作失败,用户不存在或被冻结!");
user = user.Replace();
string oldData = JsonConvert.SerializeObject(user);
if (string.IsNullOrWhiteSpace(user.WxServiceId))
{
string accessTokenMode = BaseConfig.App(new string[] { "AccessTokenMode" });
if (string.IsNullOrWhiteSpace(accessTokenMode))
{
log.Error("配置文件中未获取有效的AccessTokenMode");
return ApiResult.Failed("配置文件中未获取有效的AccessTokenMode");
}
var openResult = AizhuhotelHelper.GetWxSericeOpenId(req.Code);
if (!openResult.IsSuccess) return ApiResult.Failed(openResult.Msg);
string serviceOpen = openResult.Info;
var anyM = Db.Queryable().Where(t => t.OpId != req.UserAccount && t.WxServiceId == serviceOpen).First();
if (anyM != null)
{
return ApiResult.Failed($"当前微信已绑定了账号{anyM.OpId}");
}
user.WxServiceId = openResult.Info;
Update(user);
string newData = JsonConvert.SerializeObject(user);
return ApiResult.Success();
}
return ApiResult.Success();
}
public ApiResult> GetSendUserList(BindUserReq req)
{
ApiResult loginUserRes = null;
if (req != null && !string.IsNullOrEmpty(req.AccountDES))
{
loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg);
}
var ls = Db.Queryable()
.Where(t => t.Apptsend == "T" && t.Locked == "F")
.WhereIF(loginUserRes != null, t => t.OpId != loginUserRes.Info.UserAccount)
.Select(t => new LoginUserRes { UserAccount = t.OpId, UserName = t.OpName, UserGroup = t.OpGroup }).ToList().Replace();
return ApiResult>.Success(string.Empty, ls);
}
///
/// 当前用户角色是否具有转审权限
///
///
///
public ApiResult> GetTransferAuditUserList(BindUserReq req)
{
List loginUseList = new List();
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg);
loginUseList = Db.Queryable()
.Where(t => t.Appttrans == "T" && !SqlFunc.IsNullOrEmpty(t.WxOpenId) && !SqlFunc.IsNullOrEmpty(t.WxServiceId) && t.Locked == "F" && t.OpId != loginUserRes.Info.UserAccount)
.Select(t => new LoginUserRes()
{
UserAccount = t.OpId,
UserName = t.OpName
}).ToList();
loginUseList = loginUseList.Replace();
return ApiResult>.Success(string.Empty, loginUseList);
}
}
}