忽略dll文件git

This commit is contained in:
“wanyongkang”
2023-07-29 10:19:42 +08:00
parent 7f97317bcc
commit b562aba2b1
3868 changed files with 63608 additions and 385427 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,104 +1,104 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Vpn.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.EntitiesExtension;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/chargeorder/[action]")]
public class ChargeOrderController : HncoreControllerBase
{
private UserService _userService;
private WxAppUserService m_WxAppUserService;
private IConfiguration _Configuration;
private UserScoreService m_UserScoreService;
private UserChargeOrderService m_ChargeOrderService;
public ChargeOrderController(UserService userService
, UserScoreService _UserScoreService
, UserChargeOrderService _ChargeOrderService
, IConfiguration configuration)
{
_userService = userService;
_Configuration = configuration;
m_ChargeOrderService = _ChargeOrderService;
m_UserScoreService = _UserScoreService;
}
public async Task<ApiResult> Page([FromQuery]QueryChargeOrdertRequest request)
{
Expression<Func<UserChargeOrderEntity, bool>> expr = m => m.OrderState == UOrderStatus.PayOk || m.OrderState == UOrderStatus.Complete;
if (request.KeyWord.Has())
{
expr = expr.And(m =>
m.UserName.Contains(request.KeyWord)
|| m.OrderNo.Contains(request.KeyWord)
|| m.TradeNo.Contains(request.KeyWord));
}
if (request.BTime.HasValue && request.ETime.HasValue)
{
expr = expr.And(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
var ret = await m_ChargeOrderService.PageDesc(request.PageIndex, request.PageSize, expr, true, m => m.Id);
// ret.List.ForEach(
// m => {m.UserName = m.UserName.Substring(0,3) + "***";
// });
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<IActionResult> ExportOrder([FromQuery]QueryChargeOrdertRequest request)
{
Expression<Func<UserChargeOrderEntity, bool>> expr = m => m.OrderState == UOrderStatus.PayOk || m.OrderState == UOrderStatus.Complete;
if (request.KeyWord.Has())
{
expr = expr.And(m =>
m.UserName.Contains(request.KeyWord)
|| m.OrderNo.Contains(request.KeyWord)
|| m.TradeNo.Contains(request.KeyWord));
}
if (request.BTime.HasValue && request.ETime.HasValue)
{
expr = expr.And(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
var ret = await m_ChargeOrderService.PageDesc(1, 10000, expr, true, m => m.Id);
var data = new ExcelData<UserChargeOrderEntity>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = ret.List
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "CreateTime", Title = "创建日期",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "OrderNo", Title = "订单号" },
new ExcelTitle { Property = "TradeNo", Title = "交易号" },
new ExcelTitle { Property = "UserName", Title = "用户" },
new ExcelTitle { Property = "OrderAmount", Title = "充值金额" },
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}充值明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Vpn.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.EntitiesExtension;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/chargeorder/[action]")]
public class ChargeOrderController : HncoreControllerBase
{
private UserService _userService;
private WxAppUserService m_WxAppUserService;
private IConfiguration _Configuration;
private UserScoreService m_UserScoreService;
private UserChargeOrderService m_ChargeOrderService;
public ChargeOrderController(UserService userService
, UserScoreService _UserScoreService
, UserChargeOrderService _ChargeOrderService
, IConfiguration configuration)
{
_userService = userService;
_Configuration = configuration;
m_ChargeOrderService = _ChargeOrderService;
m_UserScoreService = _UserScoreService;
}
public async Task<ApiResult> Page([FromQuery]QueryChargeOrdertRequest request)
{
Expression<Func<UserChargeOrderEntity, bool>> expr = m => m.OrderState == UOrderStatus.PayOk || m.OrderState == UOrderStatus.Complete;
if (request.KeyWord.Has())
{
expr = expr.And(m =>
m.UserName.Contains(request.KeyWord)
|| m.OrderNo.Contains(request.KeyWord)
|| m.TradeNo.Contains(request.KeyWord));
}
if (request.BTime.HasValue && request.ETime.HasValue)
{
expr = expr.And(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
var ret = await m_ChargeOrderService.PageDesc(request.PageIndex, request.PageSize, expr, true, m => m.Id);
// ret.List.ForEach(
// m => {m.UserName = m.UserName.Substring(0,3) + "***";
// });
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<IActionResult> ExportOrder([FromQuery]QueryChargeOrdertRequest request)
{
Expression<Func<UserChargeOrderEntity, bool>> expr = m => m.OrderState == UOrderStatus.PayOk || m.OrderState == UOrderStatus.Complete;
if (request.KeyWord.Has())
{
expr = expr.And(m =>
m.UserName.Contains(request.KeyWord)
|| m.OrderNo.Contains(request.KeyWord)
|| m.TradeNo.Contains(request.KeyWord));
}
if (request.BTime.HasValue && request.ETime.HasValue)
{
expr = expr.And(m => m.CreateTime >= request.BTime && m.CreateTime <= request.ETime);
}
var ret = await m_ChargeOrderService.PageDesc(1, 10000, expr, true, m => m.Id);
var data = new ExcelData<UserChargeOrderEntity>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = ret.List
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "CreateTime", Title = "创建日期",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "OrderNo", Title = "订单号" },
new ExcelTitle { Property = "TradeNo", Title = "交易号" },
new ExcelTitle { Property = "UserName", Title = "用户" },
new ExcelTitle { Property = "OrderAmount", Title = "充值金额" },
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}充值明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
}
}

View File

@@ -1,103 +1,103 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.Manager;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Threading.Tasks;
using System.Web;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/Manager/[action]")]
public class ManagerController : HncoreControllerBase
{
private ManageService _manageService;
private IConfiguration _Configuration;
public ManagerController(ManageService manageService, IConfiguration configuration)
{
_manageService = manageService;
_Configuration = configuration;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LogIn([FromBody] LoginRequest request)
{
return Success(await _manageService.Login(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LogInTemp([FromBody] LoginRequest request)
{
return Success(await _manageService.LoginTemp(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LoginAndroidTemp([FromBody] LoginRequest request)
{
return Success(await _manageService.LoginAndroidTemp(request));
}
/// <summary>
/// 图片验证码
/// </summary>
/// <returns></returns>
[AllowAnonymous]
public async Task<ApiResult> GetValidateCode()
{
var code = "1234";// vCode.MakeCode(4);
var key = "validate:" + DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + Guid.NewGuid().ToString("N");
if (!EnvironmentVariableHelper.IsAspNetCoreProduction)
{
LogHelper.Debug("登录验证码", $"code:{code},key:{key}");
}
var expireSeconds = 600;
// await RedisHelper.SetAsync(key, code, expireSeconds);
var img = ValidateCodeHelper.GenerateCodeImg(code);
var data = new
{
key = key,
img = img,
expireSeconds = expireSeconds,
};
return Success(data);
}
/// <summary>
/// 刷新token
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<ApiResult> AgainGetToken(RequestBase<AgainTokenDTO> request)
{
request.TenantId = Request.GetManageUserInfo().TenantId;
request.OperaterId = Request.GetManageUserInfo().OperaterId;
return Success(await _manageService.AgainGetToken(request),"");
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.Manager;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Threading.Tasks;
using System.Web;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/Manager/[action]")]
public class ManagerController : HncoreControllerBase
{
private ManageService _manageService;
private IConfiguration _Configuration;
public ManagerController(ManageService manageService, IConfiguration configuration)
{
_manageService = manageService;
_Configuration = configuration;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LogIn([FromBody] LoginRequest request)
{
return Success(await _manageService.Login(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LogInTemp([FromBody] LoginRequest request)
{
return Success(await _manageService.LoginTemp(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> LoginAndroidTemp([FromBody] LoginRequest request)
{
return Success(await _manageService.LoginAndroidTemp(request));
}
/// <summary>
/// 图片验证码
/// </summary>
/// <returns></returns>
[AllowAnonymous]
public async Task<ApiResult> GetValidateCode()
{
var code = "1234";// vCode.MakeCode(4);
var key = "validate:" + DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + Guid.NewGuid().ToString("N");
if (!EnvironmentVariableHelper.IsAspNetCoreProduction)
{
LogHelper.Debug("登录验证码", $"code:{code},key:{key}");
}
var expireSeconds = 600;
// await RedisHelper.SetAsync(key, code, expireSeconds);
var img = ValidateCodeHelper.GenerateCodeImg(code);
var data = new
{
key = key,
img = img,
expireSeconds = expireSeconds,
};
return Success(data);
}
/// <summary>
/// 刷新token
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<ApiResult> AgainGetToken(RequestBase<AgainTokenDTO> request)
{
request.TenantId = Request.GetManageUserInfo().TenantId;
request.OperaterId = Request.GetManageUserInfo().OperaterId;
return Success(await _manageService.AgainGetToken(request),"");
}
}
}

View File

@@ -1,334 +1,334 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/user/[action]")]
public class UserController : HncoreControllerBase
{
private UserService _userService;
private WxAppUserService m_WxAppUserService;
private IConfiguration _Configuration;
private UserScoreService m_UserScoreService;
public UserController(UserService userService, UserScoreService _UserScoreService, WxAppUserService _WxAppUserService, IConfiguration configuration)
{
_userService = userService;
_Configuration = configuration;
m_WxAppUserService = _WxAppUserService;
m_UserScoreService = _UserScoreService;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> WxLogin([FromBody] WxLoginRequest request)
{
return Success(await _userService.LoginAndBindWx(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> WebLogin([FromBody] LoginRequest request)
{
return Success(await _userService.Login(request));
}
/// <summary>
/// 添加
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Post([FromBody]PostUserRequest request)
{
var entity = request.MapTo<User>();
entity.CreateType = UserCreateType.ManagerAdd;
return await _userService.Regist(entity);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Put([FromBody]PostUserRequest request)
{
var userEntity = await _userService.GetById(request.Id);
userEntity.Phone = request.Phone;
userEntity.QQ = request.QQ;
userEntity.Wx = request.Wx;
userEntity.TaoBao = request.TaoBao;
userEntity.Email = request.Email;
if (request.Password.Has()) {
userEntity.Password =UserService.HashPassword(request.Password);
}
var ret= await _userService.Update(userEntity);
if (ret)
{
return Success("设置成功");
}
else
{
return Error("设置失败");
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Delete([FromQuery]int id)
{
var flag = await _userService.DeleteById(id);
if (flag)
return Success();
else
return Error("删除失败");
}
/// <summary>
/// 查询
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> Page([FromQuery]PageRequestBase request)
{
var ret = await _userService.PageDesc(request.PageIndex, request.PageSize,
m=> request.KeyWord.NotHas()
||m.LoginCode.Contains(request.KeyWord)
|| m.Phone.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord),true,m=>m.Id);
ret.List.ForEach(
m => {m.Password = "";
// m.LoginCode = m.LoginCode.Substring(0,3) + "***";
if(m.id_code.Length > 3){
m.id_code = m.id_code.Substring(0,6) + "***";
if(m.is_verify == 1){
m.Remark = "认证成功";
} else {
m.Remark = "认证失败";
}
} else {
m.Remark = "未认证";
}
});
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<ApiResult> Search([FromQuery]QueryUserRequest request)
{
Expression<Func<User, bool>> exp = (m) => 1 == 1;
if (request.All.HasValue && request.All == 0)
{
exp = exp.And(m => m.ManagerId == 0);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Phone.Contains(request.KeyWord));
}
var ret = await _userService.PageDesc(request.PageIndex, request.PageSize, exp, true, m => m.Id);
ret.List.ForEach(m => m.Password = "");
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<ApiResult> SearchInfo([FromQuery]PageRequestBase request)
{
if (request.KeyWord.Has())
{
var ret = await _userService.PageDesc(request.PageIndex, 50,
m => m.LoginCode== request.KeyWord
|| m.Phone== request.KeyWord, true, m => m.Id);
ret.List.ForEach(
m => {m.Password = "";
if(m.id_code.Length > 3){
m.id_code = m.id_code.Substring(0,6) + "***";
if(m.is_verify == 1){
m.Remark = "认证成功";
} else {
m.Remark = "认证失败";
}
} else {
m.Remark = "未认证";
}
});
var data = ret.ToApiResult();
return data;
}
return Error("请输入关键字");
}
public async Task<ApiResult> UpdateAmount([FromBody] UpdateAmountRequest request)
{
request.OperateUserName = this.Request.GetManageUserInfo().LoginName;
return await _userService.UpdateAmount(request);
}
public async Task<ApiResult> UpdateTestCount([FromBody] UpdateTestCountRequest request)
{
var userEntity = await _userService.GetById(request.UserId);
userEntity.TestCountLimit = request.Limit;
await _userService.Update(userEntity);
return Success();
}
//public async Task<ApiResult> ChargeByTaoBao([FromBody] UpdateAmountRequest request)
//{
// return await _userService.UpdateAmount(request);
//}
[HttpGet]
public async Task<ApiResult> AmountDetail([FromQuery] int userId)
{
var model = await m_UserScoreService.Details(userId);
return Success(model);
}
[HttpGet]
public async Task<ApiResult> AmountDetails([FromQuery] QueryAmountRequest request)
{
var model = await m_UserScoreService.Details(request);
// model.List.ForEach(
// m => {m.UserName = m.UserName.Substring(0,3) + "***";
// });
return model.ToApiResult();
}
[HttpGet]
public async Task<IActionResult> ExportAmount([FromQuery]QueryAmountRequest request)
{
var model = await m_UserScoreService.DetailsAll(request);
var data = new ExcelData<UserScore>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = model
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "CreateTime", Title = "创建日期",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "UserName", Title = "用户" },
new ExcelTitle { Property = "OperateUserName", Title = "操作人员" },
new ExcelTitle { Property = "ScoreTypeName", Title = "资金项目" },
new ExcelTitle { Property = "ScoreValue", Title = "金额" },
new ExcelTitle { Property = "Remark", Title = "备注" },
new ExcelTitle { Property = "RestAmount1", Title = "操作前金额" },
new ExcelTitle { Property = "RestAmount2", Title = "操作后金额" }
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}资金明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
[HttpGet]
public async Task<IActionResult> Export()
{
var ret = await _userService.GetAll(true);
var data = new ExcelData<User>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = ret
};
var title = new List<ExcelTitle>(){
// new ExcelTitle { Property = "LoginCode", Title = "手机号" },
new ExcelTitle { Property = "CreateTime", Title = "注册时间",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "CreateType", Title = "注册方式", Format=(val)=>((UserCreateType)val).GetEnumDisplayName() },
new ExcelTitle { Property = "RestAmount", Title = "余额"},
new ExcelTitle { Property = "TestCountLimit", Title = "测试限额",Format=(val)=>((int)val)==0?3:(int)val },
new ExcelTitle { Property = "UseTestCount", Title = "领用数",Format=(val)=>((int)val)==0?3:(int)val },
// new ExcelTitle { Property = "Wx", Title = "微信"},
// new ExcelTitle { Property = "QQ", Title = "QQ"},
// new ExcelTitle { Property = "Email", Title = "Email"},
// new ExcelTitle { Property = "TaoBao", Title = "淘宝"},
// new ExcelTitle { Property = "WangWang", Title = "旺旺"},
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}用户明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
[HttpPost]
public async Task<ApiResult> SetManager([FromBody] SetManagerRequest request)
{
if (request.ManagerId == 0 || request.ManagerName.NotHas())
{
return Error("请选择客户经理");
}
if (request.UserIds == null || request.UserIds.Count() == 0)
{
return Error("请选择用户");
}
var users = await _userService.Query(m => request.UserIds.Contains(m.Id)).ToListAsync();
if (users != null)
{
users.ForEach(m =>
{
m.ManagerId = request.ManagerId;
m.ManagerName = request.ManagerName;
});
await _userService.Update(users);
}
return Success();
}
[HttpPost]
public async Task<ApiResult> UpdateProfile([FromBody] UpdateProfileRequest request)
{
var userInfo = await _userService.GetById(request.UserId);
userInfo.Profile = request.Profile;
await _userService.Update(userInfo);
return Success();
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Controllers
{
[ApiVersion("1.0")]
[Route("api/baseinfo/v{version:apiVersion}/user/[action]")]
public class UserController : HncoreControllerBase
{
private UserService _userService;
private WxAppUserService m_WxAppUserService;
private IConfiguration _Configuration;
private UserScoreService m_UserScoreService;
public UserController(UserService userService, UserScoreService _UserScoreService, WxAppUserService _WxAppUserService, IConfiguration configuration)
{
_userService = userService;
_Configuration = configuration;
m_WxAppUserService = _WxAppUserService;
m_UserScoreService = _UserScoreService;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> WxLogin([FromBody] WxLoginRequest request)
{
return Success(await _userService.LoginAndBindWx(request));
}
/// <summary>
/// 登录
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost, AllowAnonymous]
public async Task<ApiResult> WebLogin([FromBody] LoginRequest request)
{
return Success(await _userService.Login(request));
}
/// <summary>
/// 添加
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Post([FromBody]PostUserRequest request)
{
var entity = request.MapTo<User>();
entity.CreateType = UserCreateType.ManagerAdd;
return await _userService.Regist(entity);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Put([FromBody]PostUserRequest request)
{
var userEntity = await _userService.GetById(request.Id);
userEntity.Phone = request.Phone;
userEntity.QQ = request.QQ;
userEntity.Wx = request.Wx;
userEntity.TaoBao = request.TaoBao;
userEntity.Email = request.Email;
if (request.Password.Has()) {
userEntity.Password =UserService.HashPassword(request.Password);
}
var ret= await _userService.Update(userEntity);
if (ret)
{
return Success("设置成功");
}
else
{
return Error("设置失败");
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Delete([FromQuery]int id)
{
var flag = await _userService.DeleteById(id);
if (flag)
return Success();
else
return Error("删除失败");
}
/// <summary>
/// 查询
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> Page([FromQuery]PageRequestBase request)
{
var ret = await _userService.PageDesc(request.PageIndex, request.PageSize,
m=> request.KeyWord.NotHas()
||m.LoginCode.Contains(request.KeyWord)
|| m.Phone.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord),true,m=>m.Id);
ret.List.ForEach(
m => {m.Password = "";
// m.LoginCode = m.LoginCode.Substring(0,3) + "***";
if(m.id_code.Length > 3){
m.id_code = m.id_code.Substring(0,6) + "***";
if(m.is_verify == 1){
m.Remark = "认证成功";
} else {
m.Remark = "认证失败";
}
} else {
m.Remark = "未认证";
}
});
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<ApiResult> Search([FromQuery]QueryUserRequest request)
{
Expression<Func<User, bool>> exp = (m) => 1 == 1;
if (request.All.HasValue && request.All == 0)
{
exp = exp.And(m => m.ManagerId == 0);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Phone.Contains(request.KeyWord));
}
var ret = await _userService.PageDesc(request.PageIndex, request.PageSize, exp, true, m => m.Id);
ret.List.ForEach(m => m.Password = "");
var data = ret.ToApiResult();
return data;
}
[HttpGet]
public async Task<ApiResult> SearchInfo([FromQuery]PageRequestBase request)
{
if (request.KeyWord.Has())
{
var ret = await _userService.PageDesc(request.PageIndex, 50,
m => m.LoginCode== request.KeyWord
|| m.Phone== request.KeyWord, true, m => m.Id);
ret.List.ForEach(
m => {m.Password = "";
if(m.id_code.Length > 3){
m.id_code = m.id_code.Substring(0,6) + "***";
if(m.is_verify == 1){
m.Remark = "认证成功";
} else {
m.Remark = "认证失败";
}
} else {
m.Remark = "未认证";
}
});
var data = ret.ToApiResult();
return data;
}
return Error("请输入关键字");
}
public async Task<ApiResult> UpdateAmount([FromBody] UpdateAmountRequest request)
{
request.OperateUserName = this.Request.GetManageUserInfo().LoginName;
return await _userService.UpdateAmount(request);
}
public async Task<ApiResult> UpdateTestCount([FromBody] UpdateTestCountRequest request)
{
var userEntity = await _userService.GetById(request.UserId);
userEntity.TestCountLimit = request.Limit;
await _userService.Update(userEntity);
return Success();
}
//public async Task<ApiResult> ChargeByTaoBao([FromBody] UpdateAmountRequest request)
//{
// return await _userService.UpdateAmount(request);
//}
[HttpGet]
public async Task<ApiResult> AmountDetail([FromQuery] int userId)
{
var model = await m_UserScoreService.Details(userId);
return Success(model);
}
[HttpGet]
public async Task<ApiResult> AmountDetails([FromQuery] QueryAmountRequest request)
{
var model = await m_UserScoreService.Details(request);
// model.List.ForEach(
// m => {m.UserName = m.UserName.Substring(0,3) + "***";
// });
return model.ToApiResult();
}
[HttpGet]
public async Task<IActionResult> ExportAmount([FromQuery]QueryAmountRequest request)
{
var model = await m_UserScoreService.DetailsAll(request);
var data = new ExcelData<UserScore>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = model
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "CreateTime", Title = "创建日期",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "UserName", Title = "用户" },
new ExcelTitle { Property = "OperateUserName", Title = "操作人员" },
new ExcelTitle { Property = "ScoreTypeName", Title = "资金项目" },
new ExcelTitle { Property = "ScoreValue", Title = "金额" },
new ExcelTitle { Property = "Remark", Title = "备注" },
new ExcelTitle { Property = "RestAmount1", Title = "操作前金额" },
new ExcelTitle { Property = "RestAmount2", Title = "操作后金额" }
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}资金明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
[HttpGet]
public async Task<IActionResult> Export()
{
var ret = await _userService.GetAll(true);
var data = new ExcelData<User>
{
SheetName = DateTime.Now.ToString("yyyy-MM-dd"),
Data = ret
};
var title = new List<ExcelTitle>(){
// new ExcelTitle { Property = "LoginCode", Title = "手机号" },
new ExcelTitle { Property = "CreateTime", Title = "注册时间",Format=(val)=>((DateTime) val).ToString("yyyy-MM-dd hh:mm:ss") },
new ExcelTitle { Property = "CreateType", Title = "注册方式", Format=(val)=>((UserCreateType)val).GetEnumDisplayName() },
new ExcelTitle { Property = "RestAmount", Title = "余额"},
new ExcelTitle { Property = "TestCountLimit", Title = "测试限额",Format=(val)=>((int)val)==0?3:(int)val },
new ExcelTitle { Property = "UseTestCount", Title = "领用数",Format=(val)=>((int)val)==0?3:(int)val },
// new ExcelTitle { Property = "Wx", Title = "微信"},
// new ExcelTitle { Property = "QQ", Title = "QQ"},
// new ExcelTitle { Property = "Email", Title = "Email"},
// new ExcelTitle { Property = "TaoBao", Title = "淘宝"},
// new ExcelTitle { Property = "WangWang", Title = "旺旺"},
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"{DateTime.Now.ToString("yyyyMMdd")}用户明细.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
[HttpPost]
public async Task<ApiResult> SetManager([FromBody] SetManagerRequest request)
{
if (request.ManagerId == 0 || request.ManagerName.NotHas())
{
return Error("请选择客户经理");
}
if (request.UserIds == null || request.UserIds.Count() == 0)
{
return Error("请选择用户");
}
var users = await _userService.Query(m => request.UserIds.Contains(m.Id)).ToListAsync();
if (users != null)
{
users.ForEach(m =>
{
m.ManagerId = request.ManagerId;
m.ManagerName = request.ManagerName;
});
await _userService.Update(users);
}
return Success();
}
[HttpPost]
public async Task<ApiResult> UpdateProfile([FromBody] UpdateProfileRequest request)
{
var userInfo = await _userService.GetById(request.UserId);
userInfo.Profile = request.Profile;
await _userService.Update(userInfo);
return Success();
}
}
}

View File

@@ -1,148 +1,148 @@
using System.ComponentModel.DataAnnotations;
namespace Hncore.Pass.BaseInfo.Models
{
#region
public enum ManagerState
{
/// <summary>
/// 禁用
/// </summary>
[Display(Name = "未启用")]
Disabled = 0,
/// <summary>
/// 启用
/// </summary>
[Display(Name = "启用")]
Enabled = 1
}
public enum AgainTokenType
{
/// <summary>
/// 刷新过期时间
/// </summary>
[Display(Name = "刷新token过期时间")]
Expire = 0,
/// <summary>
/// 刷新管理项目
/// </summary>
[Display(Name = "刷新管理项目")]
Project = 1
}
#endregion
/// <summary>
/// 用户注册来源
/// </summary>
public enum UserCreateType
{
[Display(Name = "管理员添加")]
ManagerAdd = 1,
[Display(Name = "用户注册")]
UserRegist = 2,
[Display(Name = "淘宝注册")]
TaoBaoRegist = 3,
}
public enum ScoreType
{
[Display(Name = "管理员充值")]
ManagerAdd = 1,
[Display(Name = "管理员扣除")]
ManagerDeduct = 2,
[Display(Name = "淘宝充值")]
TaoBaoAdd = 3,
[Display(Name = "淘宝退款")]
TaoBaoRefund = 4,
[Display(Name = "账号退款")]
AccountRefund = 5,
[Display(Name = "账号付款")]
Pay = 6,
[Display(Name = "用户充值")]
UserCharge = 7,
[Display(Name = "用户提现扣除")]
UserCashOut = 8,
[Display(Name = "提现被拒退还")]
ReturnMoney = 9,
}
public enum UPayChannel
{
/// <summary>
/// 微信H5
/// </summary>
[Display(Name = "微信H5")]
WxH5 = 10,
/// <summary>
/// 微信公众号
/// </summary>
[Display(Name = "微信公众号")]
WxMp = 20,
/// <summary>
/// 微信公众号
/// </summary>
[Display(Name = "微信Pc")]
WxPc = 30,
/// <summary>
/// 支付宝H5
/// </summary>
[Display(Name = "支付宝H5")]
AliH5 = 40,
/// <summary>
/// 支付宝
/// </summary>
[Display(Name = "支付宝Pc")]
AliPc = 50,
}
public enum UOrderStatus
{
[Display(Name = "默认")]
None = 0,
/// <summary>
/// 待支付
/// </summary>
[Display(Name = "待付款")]
NoPay = 10,
/// <summary>
/// 已支付
/// </summary>
[Display(Name = "已付款")]
PayOk = 20,
/// <summary>
/// 申请退款
/// </summary>
[Display(Name = "申请退款")]
RequestRefund = 30,
/// <summary>
/// 人工退款
/// </summary>
[Display(Name = "人工退款")]
UserRefundOver = 40,
/// <summary>
/// 自送退款
/// </summary>
[Display(Name = "自动退款")]
AutoRefundOver = 50,
/// <summary>
/// 订单超时关闭
/// </summary>
[Display(Name = "超时关闭")]
TimeOutClose = 80,
/// <summary>
/// 订单完成
/// </summary>
[Display(Name = "订单完成")]
Complete = 90,
}
using System.ComponentModel.DataAnnotations;
namespace Hncore.Pass.BaseInfo.Models
{
#region
public enum ManagerState
{
/// <summary>
/// 禁用
/// </summary>
[Display(Name = "未启用")]
Disabled = 0,
/// <summary>
/// 启用
/// </summary>
[Display(Name = "启用")]
Enabled = 1
}
public enum AgainTokenType
{
/// <summary>
/// 刷新过期时间
/// </summary>
[Display(Name = "刷新token过期时间")]
Expire = 0,
/// <summary>
/// 刷新管理项目
/// </summary>
[Display(Name = "刷新管理项目")]
Project = 1
}
#endregion
/// <summary>
/// 用户注册来源
/// </summary>
public enum UserCreateType
{
[Display(Name = "管理员添加")]
ManagerAdd = 1,
[Display(Name = "用户注册")]
UserRegist = 2,
[Display(Name = "淘宝注册")]
TaoBaoRegist = 3,
}
public enum ScoreType
{
[Display(Name = "管理员充值")]
ManagerAdd = 1,
[Display(Name = "管理员扣除")]
ManagerDeduct = 2,
[Display(Name = "淘宝充值")]
TaoBaoAdd = 3,
[Display(Name = "淘宝退款")]
TaoBaoRefund = 4,
[Display(Name = "账号退款")]
AccountRefund = 5,
[Display(Name = "账号付款")]
Pay = 6,
[Display(Name = "用户充值")]
UserCharge = 7,
[Display(Name = "用户提现扣除")]
UserCashOut = 8,
[Display(Name = "提现被拒退还")]
ReturnMoney = 9,
}
public enum UPayChannel
{
/// <summary>
/// 微信H5
/// </summary>
[Display(Name = "微信H5")]
WxH5 = 10,
/// <summary>
/// 微信公众号
/// </summary>
[Display(Name = "微信公众号")]
WxMp = 20,
/// <summary>
/// 微信公众号
/// </summary>
[Display(Name = "微信Pc")]
WxPc = 30,
/// <summary>
/// 支付宝H5
/// </summary>
[Display(Name = "支付宝H5")]
AliH5 = 40,
/// <summary>
/// 支付宝
/// </summary>
[Display(Name = "支付宝Pc")]
AliPc = 50,
}
public enum UOrderStatus
{
[Display(Name = "默认")]
None = 0,
/// <summary>
/// 待支付
/// </summary>
[Display(Name = "待付款")]
NoPay = 10,
/// <summary>
/// 已支付
/// </summary>
[Display(Name = "已付款")]
PayOk = 20,
/// <summary>
/// 申请退款
/// </summary>
[Display(Name = "申请退款")]
RequestRefund = 30,
/// <summary>
/// 人工退款
/// </summary>
[Display(Name = "人工退款")]
UserRefundOver = 40,
/// <summary>
/// 自送退款
/// </summary>
[Display(Name = "自动退款")]
AutoRefundOver = 50,
/// <summary>
/// 订单超时关闭
/// </summary>
[Display(Name = "超时关闭")]
TimeOutClose = 80,
/// <summary>
/// 订单完成
/// </summary>
[Display(Name = "订单完成")]
Complete = 90,
}
}

View File

@@ -1,99 +1,99 @@
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class Manager : EntityWithTime<int>, ITenant
{
/// <summary>
/// 所属物业ID
/// <summary>
public int TenantId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int RoleId { get; set; }
/// <summary>
/// 状态
/// </summary>
public int State { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string WxOpenid { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string WxNickName { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string WxImage { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Source { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 账号code
/// </summary>
public string ManagerCode { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public int IsRoot { get; set; }
public int SystemId { get; set; }
public string Tags { get; set; }
}
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class Manager : EntityWithTime<int>, ITenant
{
/// <summary>
/// 所属物业ID
/// <summary>
public int TenantId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int RoleId { get; set; }
/// <summary>
/// 状态
/// </summary>
public int State { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string WxOpenid { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string WxNickName { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string WxImage { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Source { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 账号code
/// </summary>
public string ManagerCode { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public int IsRoot { get; set; }
public int SystemId { get; set; }
public string Tags { get; set; }
}
}

View File

@@ -1,88 +1,88 @@
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class User : EntityWithTime<int>, ITenant
{
/// <summary>
/// ID
/// <summary>
public string apikey { get; set; }
public int TenantId { get; set; }
public int agent_id { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public string Profile { get; set; }
/// <summary>
/// 状态
/// </summary>
public int Enabled { get; set; } = 1;
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public DateTime? LastLoginDate { get; set; } = DateTime.Now;
public int Sex { get; set; }
//1:管理员添加 2自己注册 3来自淘宝
public UserCreateType CreateType { get; set; }= UserCreateType.ManagerAdd;
public int ProductAccountCount { get; set; } = 0;
public int ExpiredProductAccountCount { get; set; } = 0;
public decimal RestAmount { get; set; } = 0;
public decimal ConsumeAmount { get; set; } = 0;
public string Remark { get; set; }
public string Wx { get; set; }
public string QQ { get; set; }
public string Email { get; set; }
public string TaoBao { get; set; }
public string WangWang { get; set; }
public int? TestCountLimit { get; set; } = 0;
public int? UseTestCount { get; set; } = 0;
public int? ManagerId { get; set; } = 0;
public string ManagerName { get; set; }
public string id_code { get; set; }
public int is_verify { get; set; }
public int is_agent { get; set; }
public int parent_id { get; set; }
}
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class User : EntityWithTime<int>, ITenant
{
/// <summary>
/// ID
/// <summary>
public string apikey { get; set; }
public int TenantId { get; set; }
public int agent_id { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public string Profile { get; set; }
/// <summary>
/// 状态
/// </summary>
public int Enabled { get; set; } = 1;
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public DateTime? LastLoginDate { get; set; } = DateTime.Now;
public int Sex { get; set; }
//1:管理员添加 2自己注册 3来自淘宝
public UserCreateType CreateType { get; set; }= UserCreateType.ManagerAdd;
public int ProductAccountCount { get; set; } = 0;
public int ExpiredProductAccountCount { get; set; } = 0;
public decimal RestAmount { get; set; } = 0;
public decimal ConsumeAmount { get; set; } = 0;
public string Remark { get; set; }
public string Wx { get; set; }
public string QQ { get; set; }
public string Email { get; set; }
public string TaoBao { get; set; }
public string WangWang { get; set; }
public int? TestCountLimit { get; set; } = 0;
public int? UseTestCount { get; set; } = 0;
public int? ManagerId { get; set; } = 0;
public string ManagerName { get; set; }
public string id_code { get; set; }
public int is_verify { get; set; }
public int is_agent { get; set; }
public int parent_id { get; set; }
}
}

View File

@@ -1,24 +1,24 @@
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class UserChargeOrderEntity : EntityWithTime<int>
{
public int TenantId { get; set; }
public int UserId { get; set; }
public string UserName { get; set; }
public string OrderName { get; set; }
public string OrderNo { get; set; }
public string TradeNo { get; set; }
public UOrderStatus OrderState { get; set; }
public UPayChannel PayChannel { get; set; } = UPayChannel.WxPc;
public int PayState { get; set; } = 0;
public decimal OrderAmount { get; set; }
public decimal PaymentAmount { get; set; }
public int ChannelType { get; set; }
public string Channel { get; set; }
public string Remark { get; set; }
}
}
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class UserChargeOrderEntity : EntityWithTime<int>
{
public int TenantId { get; set; }
public int UserId { get; set; }
public string UserName { get; set; }
public string OrderName { get; set; }
public string OrderNo { get; set; }
public string TradeNo { get; set; }
public UOrderStatus OrderState { get; set; }
public UPayChannel PayChannel { get; set; } = UPayChannel.WxPc;
public int PayState { get; set; } = 0;
public decimal OrderAmount { get; set; }
public decimal PaymentAmount { get; set; }
public int ChannelType { get; set; }
public string Channel { get; set; }
public string Remark { get; set; }
}
}

View File

@@ -1,72 +1,72 @@
using Hncore.Infrastructure.EF;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class UserDbContext : DbContextBase
{
public UserDbContext(DbContextOptions<UserDbContext> options, IHttpContextAccessor httpContextAccessor) :
base(options, httpContextAccessor)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Manager>(entity =>
{
entity.ToTable("manager");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<User>(entity =>
{
entity.ToTable("user");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
//modelBuilder.Entity<etor_authority_role>(entity =>
//{
// entity.ToTable("Wx_App");
// entity.HasKey(t => t.Id);
// entity.Property(t => t.Id).ValueGeneratedOnAdd();
//});
//modelBuilder.Entity<etor_authority_managerdatadomain>(entity =>
//{
// entity.ToTable("Wx_App");
// entity.HasKey(t => t.Id);
// entity.Property(t => t.Id).ValueGeneratedOnAdd();
//});
modelBuilder.Entity<WxAppEntity>(entity =>
{
entity.ToTable("Wx_App");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<WxAppUserEntity>(entity =>
{
entity.ToTable("wx_app_user");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<UserScore>(entity =>
{
entity.ToTable("user_score");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<UserChargeOrderEntity>(entity =>
{
entity.ToTable("user_charge_order");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
base.OnModelCreating(modelBuilder);
}
}
using Hncore.Infrastructure.EF;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class UserDbContext : DbContextBase
{
public UserDbContext(DbContextOptions<UserDbContext> options, IHttpContextAccessor httpContextAccessor) :
base(options, httpContextAccessor)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Manager>(entity =>
{
entity.ToTable("manager");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<User>(entity =>
{
entity.ToTable("user");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
//modelBuilder.Entity<etor_authority_role>(entity =>
//{
// entity.ToTable("Wx_App");
// entity.HasKey(t => t.Id);
// entity.Property(t => t.Id).ValueGeneratedOnAdd();
//});
//modelBuilder.Entity<etor_authority_managerdatadomain>(entity =>
//{
// entity.ToTable("Wx_App");
// entity.HasKey(t => t.Id);
// entity.Property(t => t.Id).ValueGeneratedOnAdd();
//});
modelBuilder.Entity<WxAppEntity>(entity =>
{
entity.ToTable("Wx_App");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<WxAppUserEntity>(entity =>
{
entity.ToTable("wx_app_user");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<UserScore>(entity =>
{
entity.ToTable("user_score");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
modelBuilder.Entity<UserChargeOrderEntity>(entity =>
{
entity.ToTable("user_charge_order");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id).ValueGeneratedOnAdd();
});
base.OnModelCreating(modelBuilder);
}
}
}

View File

@@ -1,36 +1,36 @@
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class UserScore : EntityWithTime<int>, ITenant
{
public int TenantId { get; set; } = 0;
public int UserId { get; set; }
public string UserName { get; set; }
public string OperateUserName { get; set; }
public ScoreType ScoreType { get; set; }
public string ScoreTypeName { get; set; }
public decimal ScoreValue { get; set; } = 0;
public string ScoreTarget { get; set; }
public string Remark { get; set; }
/// <summary>
/// Ïû·ÑǰÓà¶î
/// </summary>
public decimal? RestAmount1 { get; set; } = 0;
/// <summary>
/// Ïû·ÑºóÓà¶î
/// </summary>
public decimal? RestAmount2 { get; set; } = 0;
}
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class UserScore : EntityWithTime<int>, ITenant
{
public int TenantId { get; set; } = 0;
public int UserId { get; set; }
public string UserName { get; set; }
public string OperateUserName { get; set; }
public ScoreType ScoreType { get; set; }
public string ScoreTypeName { get; set; }
public decimal ScoreValue { get; set; } = 0;
public string ScoreTarget { get; set; }
public string Remark { get; set; }
/// <summary>
/// Ïû·ÑǰÓà¶î
/// </summary>
public decimal? RestAmount1 { get; set; } = 0;
/// <summary>
/// Ïû·ÑºóÓà¶î
/// </summary>
public decimal? RestAmount2 { get; set; } = 0;
}
}

View File

@@ -1,28 +1,28 @@
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class WxAppEntity : EntityWithDelete<int>, ITenant
{
public int TenantId { get; set; }
public int StoreId { get; set; }
public string OpenAppId { get; set; }
public string Appid { get; set; }
public int AppType { get; set; }
public string HeadImg { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string PrincipalName { get; set; }
public string Bussinessinfo { get; set; }
public string Createtime { get; set; }
public int AuthorizerState { get; set; }
public string RefreshToken { get; set; }
public int ExpiresIn { get; set; }
public DateTime UpdateTime { get; set; } = DateTime.Now;
}
}
using Hncore.Infrastructure.DDD;
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class WxAppEntity : EntityWithDelete<int>, ITenant
{
public int TenantId { get; set; }
public int StoreId { get; set; }
public string OpenAppId { get; set; }
public string Appid { get; set; }
public int AppType { get; set; }
public string HeadImg { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string PrincipalName { get; set; }
public string Bussinessinfo { get; set; }
public string Createtime { get; set; }
public int AuthorizerState { get; set; }
public string RefreshToken { get; set; }
public int ExpiresIn { get; set; }
public DateTime UpdateTime { get; set; } = DateTime.Now;
}
}

View File

@@ -1,31 +1,31 @@
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class WxAppUserEntity : EntityWithDelete<int>, ITenant
{
public int TenantId { get; set; } = 0;
public int StoreId { get; set; } = 0;
public string Appid { get; set; }
public int AppType { get; set; } = 0;
public int UserId { get; set; }
public string Unionid { get; set; }
public string Openid { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string HeadImgUrl { get; set; }
public int Sex { get; set; }
public string City { get; set; }
public string Country { get; set; }
public int IsSubscribe { get; set; }
public int InvateUserId { get; set; }
public DateTime CreateTime { get; set; } = DateTime.Now;
public DateTime UpdateTime{ get; set; } = DateTime.Now;
}
}
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Models
{
public partial class WxAppUserEntity : EntityWithDelete<int>, ITenant
{
public int TenantId { get; set; } = 0;
public int StoreId { get; set; } = 0;
public string Appid { get; set; }
public int AppType { get; set; } = 0;
public int UserId { get; set; }
public string Unionid { get; set; }
public string Openid { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string HeadImgUrl { get; set; }
public int Sex { get; set; }
public string City { get; set; }
public string Country { get; set; }
public int IsSubscribe { get; set; }
public int InvateUserId { get; set; }
public DateTime CreateTime { get; set; } = DateTime.Now;
public DateTime UpdateTime{ get; set; } = DateTime.Now;
}
}

View File

@@ -1,53 +1,53 @@
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class etor_authority_managerdatadomain
{
/// <summary>
/// 流水id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 管理员id
/// </summary>
public int managerid { get; set; }
/// <summary>
/// 小区/写字楼编码
/// </summary>
public int projectcode { get; set; }
}
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class etor_authority_managerdatadomain
{
/// <summary>
/// 流水id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 管理员id
/// </summary>
public int managerid { get; set; }
/// <summary>
/// 小区/写字楼编码
/// </summary>
public int projectcode { get; set; }
}
}

View File

@@ -1,61 +1,61 @@
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class etor_authority_role
{
/// <summary>
/// 角色id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 角色名称[16]
/// </summary>
public string rolename { get; set; }
/// <summary>
/// 状态
/// </summary>
public byte state { get; set; }
/// <summary>
/// 是否物业的根角色(超级管理员角色)
/// </summary>
public bool isroot { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
}
using System;
namespace Hncore.Pass.BaseInfo.Models
{
public class etor_authority_role
{
/// <summary>
/// 角色id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 角色名称[16]
/// </summary>
public string rolename { get; set; }
/// <summary>
/// 状态
/// </summary>
public byte state { get; set; }
/// <summary>
/// 是否物业的根角色(超级管理员角色)
/// </summary>
public bool isroot { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
}
}

View File

@@ -1,98 +1,98 @@
namespace Etor.PSIP.BaseInfo.Models
{
using System;
/// <summary>
/// 缴费项目关联表
/// </summary>
public partial class etor_property_feeitem_relation
{
/// <summary>
/// 流水id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 收费项目id
/// </summary>
public int feeitemid { get; set; }
/// <summary>
/// 收费标准id
/// </summary>
public int feestandardid { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime begintime { get; set; }
/// <summary>
/// 是否有结束时间
/// </summary>
public bool islong { get; set; }
/// <summary>
/// 金额计算方式为每户单独输入
/// </summary>
public decimal amount { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? endtime { get; set; }
/// <summary>
/// 缴费类型 房屋
/// </summary>
public int sourcetype { get; set; }
/// <summary>
/// 缴费 房屋
/// </summary>
public string sourcecode { get; set; }
/// <summary>
/// 备注[100]
/// </summary>
public string bak { get; set; }
/// <summary>
/// 账单生成时间
/// </summary>
public DateTime billtime { get; set; }
}
namespace Etor.PSIP.BaseInfo.Models
{
using System;
/// <summary>
/// 缴费项目关联表
/// </summary>
public partial class etor_property_feeitem_relation
{
/// <summary>
/// 流水id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int updatorid { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int creatorid { get; set; }
/// <summary>
/// 收费项目id
/// </summary>
public int feeitemid { get; set; }
/// <summary>
/// 收费标准id
/// </summary>
public int feestandardid { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime begintime { get; set; }
/// <summary>
/// 是否有结束时间
/// </summary>
public bool islong { get; set; }
/// <summary>
/// 金额计算方式为每户单独输入
/// </summary>
public decimal amount { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? endtime { get; set; }
/// <summary>
/// 缴费类型 房屋
/// </summary>
public int sourcetype { get; set; }
/// <summary>
/// 缴费 房屋
/// </summary>
public string sourcecode { get; set; }
/// <summary>
/// 备注[100]
/// </summary>
public string bak { get; set; }
/// <summary>
/// 账单生成时间
/// </summary>
public DateTime billtime { get; set; }
}
}

View File

@@ -1,53 +1,53 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>1701;1702;1998</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Response\Room\**" />
<Content Remove="Response\Room\**" />
<EmbeddedResource Remove="Response\Room\**" />
<None Remove="Response\Room\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Domain\etor_property_feeitem_relation.cs" />
<Compile Remove="Request\QueryPropertyFeeitemRequest.cs" />
<Compile Remove="Response\QueryPropertyFeeitemResponse.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App">
<PrivateAssets Condition="'%(PackageReference.Version)' == ''">all</PrivateAssets>
<Publish Condition="'%(PackageReference.Version)' == ''">true</Publish>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="NPinyin.Core" Version="2.1.3" />
<PackageReference Include="PinYinConverterCore" Version="1.0.2" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
<PackageReference Include="ThoughtWorks.QRCode.Core" Version="1.0.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Infrastructure\Hncore.Infrastructure\Hncore.Infrastructure.csproj" />
<ProjectReference Include="..\Hncore.Pass.Sells\Hncore.Pass.Sells.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="AppData\enums.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>1701;1702;1998</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Response\Room\**" />
<Content Remove="Response\Room\**" />
<EmbeddedResource Remove="Response\Room\**" />
<None Remove="Response\Room\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Domain\etor_property_feeitem_relation.cs" />
<Compile Remove="Request\QueryPropertyFeeitemRequest.cs" />
<Compile Remove="Response\QueryPropertyFeeitemResponse.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App">
<PrivateAssets Condition="'%(PackageReference.Version)' == ''">all</PrivateAssets>
<Publish Condition="'%(PackageReference.Version)' == ''">true</Publish>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="NPinyin.Core" Version="2.1.3" />
<PackageReference Include="PinYinConverterCore" Version="1.0.2" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />
<PackageReference Include="ThoughtWorks.QRCode.Core" Version="1.0.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Infrastructure\Hncore.Infrastructure\Hncore.Infrastructure.csproj" />
<ProjectReference Include="..\Hncore.Pass.Sells\Hncore.Pass.Sells.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="AppData\enums.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

View File

@@ -1,17 +1,17 @@
using Hncore.Infrastructure.Extension;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
namespace Hncore.Pass.BaseInfo.Map
{
public class MapConfig
{
public static void Config()
{
TinyMapperExtension.Binds<WxLoginRequest, WxAppUserEntity>();
TinyMapperExtension.Binds<PostUserRequest, User>();
}
}
}
using Hncore.Infrastructure.Extension;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
namespace Hncore.Pass.BaseInfo.Map
{
public class MapConfig
{
public static void Config()
{
TinyMapperExtension.Binds<WxLoginRequest, WxAppUserEntity>();
TinyMapperExtension.Binds<PostUserRequest, User>();
}
}
}

View File

@@ -1,32 +1,32 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Hncore.Pass.BaseInfo
{
public class Program
{
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
LogHelper.Fatal("未捕获的异常", e.ExceptionObject.ToString());
};
TaskScheduler.UnobservedTaskException += (_, ev) => { LogHelper.Fatal("未捕获的异常", ev.Exception); };
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Hncore.Pass.BaseInfo
{
public class Program
{
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
LogHelper.Fatal("未捕获的异常", e.ExceptionObject.ToString());
};
TaskScheduler.UnobservedTaskException += (_, ev) => { LogHelper.Fatal("未捕获的异常", ev.Exception); };
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}

View File

@@ -1,27 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:16867",
"sslPort": 44324
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Hncore.Pass.BaseInfo": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5008"
}
}
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:16867",
"sslPort": 44324
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Hncore.Pass.BaseInfo": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5008"
}
}
}

View File

@@ -1,17 +1,17 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.Manager
{
public class AgainTokenDTO
{
public string Token { get; set; }
/// <summary>
/// 0刷新过期时间1刷新管理项目
/// </summary>
public AgainTokenType Type { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.Manager
{
public class AgainTokenDTO
{
public string Token { get; set; }
/// <summary>
/// 0刷新过期时间1刷新管理项目
/// </summary>
public AgainTokenType Type { get; set; }
}
}

View File

@@ -1,24 +1,24 @@
namespace Hncore.Pass.BaseInfo.Request
{
public class LoginRequest
{
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 密码
/// </summary>
public System.String Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 验证码key
/// </summary>
public string CodeKey { get; set; }
}
namespace Hncore.Pass.BaseInfo.Request
{
public class LoginRequest
{
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 密码
/// </summary>
public System.String Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 验证码key
/// </summary>
public string CodeKey { get; set; }
}
}

View File

@@ -1,21 +1,21 @@
using Etor.Infrastructure.WebApi;
using Etor.PSIP.BaseInfo.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Etor.PSIP.BaseInfo.Request
{
public class QueryPropertyFeeitemRequest: PageRequestBase
{
[FromQuery(Name = "data.SceneType")] public SceneType SceneType { get; set; }
public BillSourceType? BillSourceType { get; set; }
}
//Request URL: https://psiptestapi.wx.weiyu.etor.vip/api/v1/PropertyFeeitem/
//GetByScene?PageIndex=&PageSize=&OwnerID=1157&OperaterID=282&ProjectCode=&uuid=+&Data=&data.SceneType=2
}
using Etor.Infrastructure.WebApi;
using Etor.PSIP.BaseInfo.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Etor.PSIP.BaseInfo.Request
{
public class QueryPropertyFeeitemRequest: PageRequestBase
{
[FromQuery(Name = "data.SceneType")] public SceneType SceneType { get; set; }
public BillSourceType? BillSourceType { get; set; }
}
//Request URL: https://psiptestapi.wx.weiyu.etor.vip/api/v1/PropertyFeeitem/
//GetByScene?PageIndex=&PageSize=&OwnerID=1157&OperaterID=282&ProjectCode=&uuid=+&Data=&data.SceneType=2
}

View File

@@ -1,19 +1,19 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class AmountDetailRequest
{
public int UserId { get; set; }
public ScoreType OpAmountType { get; set; }
public decimal Amount { get; set; }
public string AttchInfo { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class AmountDetailRequest
{
public int UserId { get; set; }
public ScoreType OpAmountType { get; set; }
public decimal Amount { get; set; }
public string AttchInfo { get; set; }
}
}

View File

@@ -1,12 +1,12 @@
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Request
{
public class CreateOrderRequest {
public decimal ChargeAmount { get; set; }
public UPayChannel PayChannel { get; set; }
public string Channel { get; set; }
public string Remark { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Request
{
public class CreateOrderRequest {
public decimal ChargeAmount { get; set; }
public UPayChannel PayChannel { get; set; }
public string Channel { get; set; }
public string Remark { get; set; }
}
}

View File

@@ -1,50 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class PostUserRequest
{
public int Id { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Profile { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Remark { get; set; }
public string QQ { get; set; }
public string Wx { get; set; }
public string TaoBao { get; set; }
public string Email { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class PostUserRequest
{
public int Id { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Profile { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Remark { get; set; }
public string QQ { get; set; }
public string Wx { get; set; }
public string TaoBao { get; set; }
public string Email { get; set; }
}
}

View File

@@ -1,16 +1,16 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryAmountRequest: PageRequestBase
{
public string UserName { get; set; }
public int? Type { get; set; } = 0;
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryAmountRequest: PageRequestBase
{
public string UserName { get; set; }
public int? Type { get; set; } = 0;
}
}

View File

@@ -1,15 +1,15 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryChargeOrdertRequest : PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryChargeOrdertRequest : PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
}
}

View File

@@ -1,14 +1,14 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryUserRequest : PageRequestBase
{
public int? All { get; set; } = 1;
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class QueryUserRequest : PageRequestBase
{
public int? All { get; set; } = 1;
}
}

View File

@@ -1,16 +1,16 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class SetManagerRequest
{
public int ManagerId { get; set; }
public string ManagerName { get; set; }
public List<int> UserIds { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class SetManagerRequest
{
public int ManagerId { get; set; }
public string ManagerName { get; set; }
public List<int> UserIds { get; set; }
}
}

View File

@@ -1,21 +1,21 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateAmountRequest
{
public int UserId { get; set; }
public string OperateUserName { get; set; }
public ScoreType OpAmountType { get; set; }
public decimal Amount { get; set; }
public string AttchInfo { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateAmountRequest
{
public int UserId { get; set; }
public string OperateUserName { get; set; }
public ScoreType OpAmountType { get; set; }
public decimal Amount { get; set; }
public string AttchInfo { get; set; }
}
}

View File

@@ -1,15 +1,15 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateProfileRequest
{
public int UserId { get; set; }
public string Profile { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateProfileRequest
{
public int UserId { get; set; }
public string Profile { get; set; }
}
}

View File

@@ -1,14 +1,14 @@
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateTestCountRequest
{
public int UserId { get; set; }
public int Limit { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class UpdateTestCountRequest
{
public int UserId { get; set; }
public int Limit { get; set; }
}
}

View File

@@ -1,44 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class WxAuthUserInfo
{
//
// 摘要:
// 用户的唯一标识
public string openid { get; set; }
//
// 摘要:
// 用户昵称
public string nickname { get; set; }
//
// 摘要:
// 用户的性别值为1时是男性值为2时是女性值为0时是未知
public int sex { get; set; }
//
// 摘要:
// 用户个人资料填写的省份
public string province { get; set; }
//
// 摘要:
// 普通用户个人资料填写的城市
public string city { get; set; }
//
// 摘要:
// 国家如中国为CN
public string country { get; set; }
//
// 摘要:
// 用户头像最后一个数值代表正方形头像大小有0、46、64、96、132数值可选0代表640*640正方形头像用户没有头像时该项为空
public string headimgurl { get; set; }
//
// 摘要:
// 用户特权信息json 数组如微信沃卡用户为chinaunicom 作者注其实这个格式称不上JSON只是个单纯数组。
public string[] privilege { get; set; }
public string unionid { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Request.User
{
public class WxAuthUserInfo
{
//
// 摘要:
// 用户的唯一标识
public string openid { get; set; }
//
// 摘要:
// 用户昵称
public string nickname { get; set; }
//
// 摘要:
// 用户的性别值为1时是男性值为2时是女性值为0时是未知
public int sex { get; set; }
//
// 摘要:
// 用户个人资料填写的省份
public string province { get; set; }
//
// 摘要:
// 普通用户个人资料填写的城市
public string city { get; set; }
//
// 摘要:
// 国家如中国为CN
public string country { get; set; }
//
// 摘要:
// 用户头像最后一个数值代表正方形头像大小有0、46、64、96、132数值可选0代表640*640正方形头像用户没有头像时该项为空
public string headimgurl { get; set; }
//
// 摘要:
// 用户特权信息json 数组如微信沃卡用户为chinaunicom 作者注其实这个格式称不上JSON只是个单纯数组。
public string[] privilege { get; set; }
public string unionid { get; set; }
}
}

View File

@@ -1,16 +1,16 @@
namespace Hncore.Pass.BaseInfo.Request
{
public class WxLoginRequest
{
public string AppId { get; set; }
public int AppType { get; set; } = 1;
public string Unionid { get; set; }
public string Openid { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string HeadImgUrl { get; set; }
public int Sex { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
namespace Hncore.Pass.BaseInfo.Request
{
public class WxLoginRequest
{
public string AppId { get; set; }
public int AppType { get; set; } = 1;
public string Unionid { get; set; }
public string Openid { get; set; }
public string NickName { get; set; }
public string UserName { get; set; }
public string HeadImgUrl { get; set; }
public int Sex { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
}

View File

@@ -1,214 +1,214 @@
using System;
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Response
{
public class LoginResponse
{
public string Token { get; set; }
public LoginManagerResponse Manager { get; set; }
}
public class LoginManagerResponse
{
public System.Int32 ID { get; set; }
public System.DateTime CreateTime { get; set; }
public System.DateTime UpdateTime { get; set; }
public System.Int32 DeleteTag { get; set; }
public System.Int32 TenantId { get; set; }
public System.Int32 Updatorid { get; set; }
public System.Int32 Creatorid { get; set; }
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 密码
/// </summary>
///public System.String Password { get; set; }
/// <summary>
/// 员工id
/// </summary>
public System.Int32 Workerid { get; set; }
/// <summary>
/// 角色id
/// </summary>
public System.Int32 Roleid { get; set; }
/// <summary>
/// 状态 (枚举: ManagerState
/// </summary>
//public System.Int32 State { get; set; }
/// <summary>
/// 头像路径
/// </summary>
public System.String Photourl { get; set; }
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
/// <summary>
/// 员工姓名
/// </summary>
public string WorkerName { get; set; }
/// <summary>
/// 员工方式
/// </summary>
public string WorkerMobile { get; set; }
/// <summary>
/// 关联的楼宇数量
/// </summary>
public int BuildingCount { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string Wxopenid { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DepartmentName { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Wxnickname { get; set; }
public System.String PropertyCompanyName { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 应用编码(有值为单一应用,无值为混合应用)
/// </summary>
public string AppCode { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 系统有效期
/// </summary>
public int ValidDays { get; set; }
/// <summary>
/// 是否是超级管理员
/// </summary>
public bool IsRootUser { get; set; }
/// <summary>
/// 性别
/// </summary>
public int? Sex { get; set; }
public LoginManagerResponse FromEntity(Manager manager)
{
ID = manager.Id;
CreateTime = manager.CreateTime;
UpdateTime = manager.UpdateTime;
DeleteTag = manager.DeleteTag;
TenantId = manager.TenantId;
Updatorid = manager.UpdatorId;
Creatorid = manager.CreatorId;
Logincode = manager.LoginCode;
Workerid =0;
Roleid = manager.RoleId;
Photourl = manager.PhotoUrl;
Wxopenid = manager.WxOpenid;
Wxnickname = manager.WxNickName;
RealName = manager.RealName;
Email = manager.Email;
Phone = manager.Phone;
IsRootUser = manager.IsRoot==1;
return this;
}
}
/// <summary>
/// 安卓登陆的返回
/// </summary>
public class LoginAndroidManagerResponse
{
public System.Int32 ID { get; set; }
public System.Int32 OwnerId { get; set; }
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 头像路径
/// </summary>
public System.String Photourl { get; set; }
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
public System.String PropertyCompanyName { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 性别
/// </summary>
public int? Sex { get; set; }
public string Logo { get; set; }
public LoginAndroidManagerResponse FromEntity(Manager manager)
{
ID = manager.Id;
OwnerId = manager.TenantId;
Logincode = manager.LoginCode;
Photourl = manager.PhotoUrl;
RealName = manager.RealName;
Email = manager.Email;
Phone = manager.Phone;
return this;
}
}
using System;
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Response
{
public class LoginResponse
{
public string Token { get; set; }
public LoginManagerResponse Manager { get; set; }
}
public class LoginManagerResponse
{
public System.Int32 ID { get; set; }
public System.DateTime CreateTime { get; set; }
public System.DateTime UpdateTime { get; set; }
public System.Int32 DeleteTag { get; set; }
public System.Int32 TenantId { get; set; }
public System.Int32 Updatorid { get; set; }
public System.Int32 Creatorid { get; set; }
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 密码
/// </summary>
///public System.String Password { get; set; }
/// <summary>
/// 员工id
/// </summary>
public System.Int32 Workerid { get; set; }
/// <summary>
/// 角色id
/// </summary>
public System.Int32 Roleid { get; set; }
/// <summary>
/// 状态 (枚举: ManagerState
/// </summary>
//public System.Int32 State { get; set; }
/// <summary>
/// 头像路径
/// </summary>
public System.String Photourl { get; set; }
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
/// <summary>
/// 员工姓名
/// </summary>
public string WorkerName { get; set; }
/// <summary>
/// 员工方式
/// </summary>
public string WorkerMobile { get; set; }
/// <summary>
/// 关联的楼宇数量
/// </summary>
public int BuildingCount { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string Wxopenid { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DepartmentName { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Wxnickname { get; set; }
public System.String PropertyCompanyName { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 应用编码(有值为单一应用,无值为混合应用)
/// </summary>
public string AppCode { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 系统有效期
/// </summary>
public int ValidDays { get; set; }
/// <summary>
/// 是否是超级管理员
/// </summary>
public bool IsRootUser { get; set; }
/// <summary>
/// 性别
/// </summary>
public int? Sex { get; set; }
public LoginManagerResponse FromEntity(Manager manager)
{
ID = manager.Id;
CreateTime = manager.CreateTime;
UpdateTime = manager.UpdateTime;
DeleteTag = manager.DeleteTag;
TenantId = manager.TenantId;
Updatorid = manager.UpdatorId;
Creatorid = manager.CreatorId;
Logincode = manager.LoginCode;
Workerid =0;
Roleid = manager.RoleId;
Photourl = manager.PhotoUrl;
Wxopenid = manager.WxOpenid;
Wxnickname = manager.WxNickName;
RealName = manager.RealName;
Email = manager.Email;
Phone = manager.Phone;
IsRootUser = manager.IsRoot==1;
return this;
}
}
/// <summary>
/// 安卓登陆的返回
/// </summary>
public class LoginAndroidManagerResponse
{
public System.Int32 ID { get; set; }
public System.Int32 OwnerId { get; set; }
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 头像路径
/// </summary>
public System.String Photourl { get; set; }
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
public System.String PropertyCompanyName { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 性别
/// </summary>
public int? Sex { get; set; }
public string Logo { get; set; }
public LoginAndroidManagerResponse FromEntity(Manager manager)
{
ID = manager.Id;
OwnerId = manager.TenantId;
Logincode = manager.LoginCode;
Photourl = manager.PhotoUrl;
RealName = manager.RealName;
Email = manager.Email;
Phone = manager.Phone;
return this;
}
}
}

View File

@@ -1,17 +1,17 @@
using Etor.Infrastructure.WebApi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Etor.PSIP.BaseInfo.Response
{
/// <summary>
/// 收费输出
/// </summary>
public class QueryPropertyFeeitemResponse
{
}
using Etor.Infrastructure.WebApi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Etor.PSIP.BaseInfo.Response
{
/// <summary>
/// 收费输出
/// </summary>
public class QueryPropertyFeeitemResponse
{
}
}

View File

@@ -1,39 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Response
{
/// <summary>
/// 用户统计
/// </summary>
/// mzh 2018/1/6 add
public class PropertyUserStatisticsDTO
{
/// <summary>
/// 总用户数
/// </summary>
public int AllUserCount { get; set; }
/// <summary>
/// 已迁入用户数
/// </summary>
public int InRoomUserCount { get; set; }
/// <summary>
/// 未审核用户数
/// </summary>
public int NotCheckUserCount { get; set; }
/// <summary>
/// 未通过用户数
/// </summary>
public int NotPassUserCount { get; set; }
/// <summary>
/// 已迁出用户数
/// </summary>
public int OutRoomUserCount { get; set; }
/// <summary>
/// 黑名单用户数
/// </summary>
public int BlackUserCount { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Response
{
/// <summary>
/// 用户统计
/// </summary>
/// mzh 2018/1/6 add
public class PropertyUserStatisticsDTO
{
/// <summary>
/// 总用户数
/// </summary>
public int AllUserCount { get; set; }
/// <summary>
/// 已迁入用户数
/// </summary>
public int InRoomUserCount { get; set; }
/// <summary>
/// 未审核用户数
/// </summary>
public int NotCheckUserCount { get; set; }
/// <summary>
/// 未通过用户数
/// </summary>
public int NotPassUserCount { get; set; }
/// <summary>
/// 已迁出用户数
/// </summary>
public int OutRoomUserCount { get; set; }
/// <summary>
/// 黑名单用户数
/// </summary>
public int BlackUserCount { get; set; }
}
}

View File

@@ -1,71 +1,71 @@
using System;
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Response
{
public class UserLoginResponse
{
public string Token { get; set; }
public WxMpUserModel MpUser{get;set;}
public UserLoginModel User { get; set; }
}
public class UserLoginModel
{
public int Id { get; set; }
public int TenantId { get; set; }
public string LoginCode { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public string Profile { get; set; }
/// <summary>
/// 状态
/// </summary>
public int Enabled { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public DateTime? LastLoginDate { get; set; }
public int Sex { get; set; }
public string OpenId { get; set; }
public UserLoginModel FromEntity(User manager)
{
Id = manager.Id;
LastLoginDate = manager.LastLoginDate;
TenantId = manager.TenantId;
LoginCode = manager.LoginCode;
Phone = manager.Phone;
LoginCode = manager.LoginCode;
Profile = manager.Profile;
Enabled = manager.Enabled;
PhotoUrl = manager.PhotoUrl;
return this;
}
}
public class WxMpUserModel
{
public string AppId { get; set; }
public string OpenId { get; set; }
}
using System;
using Hncore.Pass.BaseInfo.Models;
namespace Hncore.Pass.BaseInfo.Response
{
public class UserLoginResponse
{
public string Token { get; set; }
public WxMpUserModel MpUser{get;set;}
public UserLoginModel User { get; set; }
}
public class UserLoginModel
{
public int Id { get; set; }
public int TenantId { get; set; }
public string LoginCode { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public string Profile { get; set; }
/// <summary>
/// 状态
/// </summary>
public int Enabled { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public DateTime? LastLoginDate { get; set; }
public int Sex { get; set; }
public string OpenId { get; set; }
public UserLoginModel FromEntity(User manager)
{
Id = manager.Id;
LastLoginDate = manager.LastLoginDate;
TenantId = manager.TenantId;
LoginCode = manager.LoginCode;
Phone = manager.Phone;
LoginCode = manager.LoginCode;
Profile = manager.Profile;
Enabled = manager.Enabled;
PhotoUrl = manager.PhotoUrl;
return this;
}
}
public class WxMpUserModel
{
public string AppId { get; set; }
public string OpenId { get; set; }
}
}

View File

@@ -1,342 +1,344 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Serializer;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.Manager;
using Hncore.Pass.BaseInfo.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public class ManageService
{
private static string _secret = "etor_yh_lzh_20f_2020_YES";
private UserDbContext _dbContext;
public ManageService(UserDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<LoginResponse> Login(LoginRequest request)
{
if (request == null
// || !request.Code.Has()
|| !request.CodeKey.Has()
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
//string valCode = await RedisHelper.GetAsync(request.CodeKey);
//if (!valCode.Has() || valCode.ToLower() != request.Code.ToLower())
//{
// BusinessException.Throw("验证码错误");
//}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
return await LoginInternal(manage);
}
public async Task<LoginResponse> LoginTemp(LoginRequest request)
{
if (request == null
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
return await LoginInternal(manage);
}
public async Task<LoginAndroidManagerResponse> LoginAndroidTemp(LoginRequest request)
{
if (request == null
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
return await LoginAndroidInternal(manage);
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<LoginResponse> LoginOpenid(string openId)
{
if (string.IsNullOrWhiteSpace(openId))
{
BusinessException.Throw("登陆信息异常");
}
openId = openId.Trim();
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.WxOpenid == openId
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled));
if (manage == null)
{
BusinessException.Throw("没有绑定微信登录");
}
return await LoginInternal(manage);
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<string> GenerateTokenByOpenid(string openId)
{
if (string.IsNullOrWhiteSpace(openId))
{
BusinessException.Throw("登陆信息异常");
}
openId = openId.Trim();
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.WxOpenid == openId
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled));
if (manage == null)
{
BusinessException.Throw("没有绑定微信登录");
}
var tokenDic = new Dictionary<string, object>()
{
{"OpenId",openId},
{"LoginName", manage.LoginCode},
{"RoleName", ""},
{"OperaterID", manage.Id},
{"TenantId", manage.TenantId}
};
var token = GenerateToken(tokenDic);
return token;
}
private async Task<LoginResponse> LoginInternal(Manager manage)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{"RoleName", ""},
{"OperaterID", manage.Id},
{"TenantId", manage.TenantId}
};
if (manage.IsRoot != 1)
{
//int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
// .Where(p => p.owner_id == manage.TenantId && p.DeleteTag == 0 && p.managerid == manage.Id)
// .Select(t => t.projectcode)
// .ToArrayAsync();
//tokenDic.Add("DataDomain", domains);
}
var token = GenerateToken(tokenDic);
var response = new LoginManagerResponse().FromEntity(manage);
return new LoginResponse()
{
Token = token,
Manager = response
};
}
/// <summary>
/// 重新获取token
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
internal async Task<string> AgainGetToken(RequestBase<AgainTokenDTO> request)
{
if (null == request|| request.Data==null) BusinessException.Throw("参数错误");
var token = request.Data.Token;
var ManageUserInfo = new ManageUserInfo();
if (CheckToken(request.Data.Token, out ManageUserInfo))
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", ManageUserInfo.LoginName},
{"RoleName", ManageUserInfo.RoleName},
{"OperaterID", ManageUserInfo.OperaterId},
{"OwnerID", ManageUserInfo.TenantId}
};
switch (request.Data.Type)
{
case AgainTokenType.Expire:
break;
//case AgainTokenType.Project:
// var manager = await _dbContext.Set<Manager>()
// .FirstOrDefaultAsync(s=>s.Id == request.OperaterId);
// if (manager.IsRoot != 1)
// {
// int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
// .Where(p => p.owner_id == manager.TenantId && p.DeleteTag == 0 && p.managerid == manager.Id)
// .Select(t => t.projectcode)
// .ToArrayAsync();
// tokenDic.Add("DataDomain", domains);
// }
// break;
default:
break;
}
token = GenerateToken(tokenDic);
}
else
{
BusinessException.Throw("参数错误");
}
return token;
}
private async Task<LoginAndroidManagerResponse> LoginAndroidInternal(Manager manage)
{
var response = new LoginAndroidManagerResponse().FromEntity(manage);
return response;
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 180)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
long now = DateTimeHelper.ToUnixTimestamp(DateTime.Now);
param["iat"] = now; //签发时间
param["exp"] = now + Math.Max(0, timeoutMinutes) * 60; //过期时间
var token = encoder.Encode(param, _secret);
return token;
}
public bool CheckToken(string token, out ManageUserInfo userInfo)
{
userInfo = null;
try
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
var payload = decoder.Decode(token, _secret, verify: true);
userInfo = payload.FromJsonTo<ManageUserInfo>();
if (userInfo == null || userInfo.TenantId == 0)
{
return false;
}
if (userInfo.IssueTimestamp == 0
|| DateTimeHelper.UnixTimeStampToDateTime(userInfo.IssueTimestamp) <
DateTime.Now.AddHours(-4))
{
return false;
}
return true;
}
catch (TokenExpiredException ex)
{
LogHelper.Error("oken has expired", ex.Message);
return false;
}
catch (Exception ex)
{
LogHelper.Error("CheckToken失败", ex.Message);
return false;
}
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
public async Task<Manager> GetById(int id)
{
var manage = await _dbContext.Set<Manager>().FindAsync(id);
return manage;
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Serializer;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.Manager;
using Hncore.Pass.BaseInfo.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public class ManageService
{
private static string _secret = "etor_yh_lzh_20f_2020_YES";
private UserDbContext _dbContext;
public ManageService(UserDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<LoginResponse> Login(LoginRequest request)
{
if (request == null
// || !request.Code.Has()
|| !request.CodeKey.Has()
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
//string valCode = await RedisHelper.GetAsync(request.CodeKey);
//if (!valCode.Has() || valCode.ToLower() != request.Code.ToLower())
//{
// BusinessException.Throw("验证码错误");
//}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
manage.TenantId = 1;
_dbContext.Set<Manager>().Update(manage);
return await LoginInternal(manage);
}
public async Task<LoginResponse> LoginTemp(LoginRequest request)
{
if (request == null
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
return await LoginInternal(manage);
}
public async Task<LoginAndroidManagerResponse> LoginAndroidTemp(LoginRequest request)
{
if (request == null
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.LoginCode == request.Logincode || m.Phone == request.Logincode)
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.Password.ToUpper())
{
BusinessException.Throw("密码错误");
}
return await LoginAndroidInternal(manage);
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<LoginResponse> LoginOpenid(string openId)
{
if (string.IsNullOrWhiteSpace(openId))
{
BusinessException.Throw("登陆信息异常");
}
openId = openId.Trim();
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.WxOpenid == openId
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled));
if (manage == null)
{
BusinessException.Throw("没有绑定微信登录");
}
return await LoginInternal(manage);
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<string> GenerateTokenByOpenid(string openId)
{
if (string.IsNullOrWhiteSpace(openId))
{
BusinessException.Throw("登陆信息异常");
}
openId = openId.Trim();
var manage = await _dbContext.Set<Manager>()
.FirstOrDefaultAsync(m => (m.WxOpenid == openId
&& m.DeleteTag == 0
&& m.State == (int)ManagerState.Enabled));
if (manage == null)
{
BusinessException.Throw("没有绑定微信登录");
}
var tokenDic = new Dictionary<string, object>()
{
{"OpenId",openId},
{"LoginName", manage.LoginCode},
{"RoleName", ""},
{"OperaterID", manage.Id},
{"TenantId", manage.TenantId}
};
var token = GenerateToken(tokenDic);
return token;
}
private async Task<LoginResponse> LoginInternal(Manager manage)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{"RoleName", ""},
{"OperaterID", manage.Id},
{"TenantId", manage.TenantId}
};
if (manage.IsRoot != 1)
{
//int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
// .Where(p => p.owner_id == manage.TenantId && p.DeleteTag == 0 && p.managerid == manage.Id)
// .Select(t => t.projectcode)
// .ToArrayAsync();
//tokenDic.Add("DataDomain", domains);
}
var token = GenerateToken(tokenDic);
var response = new LoginManagerResponse().FromEntity(manage);
return new LoginResponse()
{
Token = token,
Manager = response
};
}
/// <summary>
/// 重新获取token
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
internal async Task<string> AgainGetToken(RequestBase<AgainTokenDTO> request)
{
if (null == request|| request.Data==null) BusinessException.Throw("参数错误");
var token = request.Data.Token;
var ManageUserInfo = new ManageUserInfo();
if (CheckToken(request.Data.Token, out ManageUserInfo))
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", ManageUserInfo.LoginName},
{"RoleName", ManageUserInfo.RoleName},
{"OperaterID", ManageUserInfo.OperaterId},
{"OwnerID", ManageUserInfo.TenantId}
};
switch (request.Data.Type)
{
case AgainTokenType.Expire:
break;
//case AgainTokenType.Project:
// var manager = await _dbContext.Set<Manager>()
// .FirstOrDefaultAsync(s=>s.Id == request.OperaterId);
// if (manager.IsRoot != 1)
// {
// int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
// .Where(p => p.owner_id == manager.TenantId && p.DeleteTag == 0 && p.managerid == manager.Id)
// .Select(t => t.projectcode)
// .ToArrayAsync();
// tokenDic.Add("DataDomain", domains);
// }
// break;
default:
break;
}
token = GenerateToken(tokenDic);
}
else
{
BusinessException.Throw("参数错误");
}
return token;
}
private async Task<LoginAndroidManagerResponse> LoginAndroidInternal(Manager manage)
{
var response = new LoginAndroidManagerResponse().FromEntity(manage);
return response;
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 180)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
long now = DateTimeHelper.ToUnixTimestamp(DateTime.Now);
param["iat"] = now; //签发时间
param["exp"] = now + Math.Max(0, timeoutMinutes) * 60; //过期时间
var token = encoder.Encode(param, _secret);
return token;
}
public bool CheckToken(string token, out ManageUserInfo userInfo)
{
userInfo = null;
try
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
var payload = decoder.Decode(token, _secret, verify: true);
userInfo = payload.FromJsonTo<ManageUserInfo>();
if (userInfo == null || userInfo.TenantId == 0)
{
return false;
}
if (userInfo.IssueTimestamp == 0
|| DateTimeHelper.UnixTimeStampToDateTime(userInfo.IssueTimestamp) <
DateTime.Now.AddHours(-4))
{
return false;
}
return true;
}
catch (TokenExpiredException ex)
{
LogHelper.Error("oken has expired", ex.Message);
return false;
}
catch (Exception ex)
{
LogHelper.Error("CheckToken失败", ex.Message);
return false;
}
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
public async Task<Manager> GetById(int id)
{
var manage = await _dbContext.Set<Manager>().FindAsync(id);
return manage;
}
}
}

View File

@@ -1,115 +1,115 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Vpn.Service
{
public partial class UserChargeOrderService : ServiceBase<UserChargeOrderEntity>, IFindService
{
UserDbContext m_DbContext;
UserService m_UserService;
public UserChargeOrderService(UserDbContext dbContext
, UserService _UserService
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
m_UserService = _UserService;
}
public async Task<ApiResult<UserChargeOrderEntity>> CreateOrder(CreateOrderRequest request, int userId)
{
if (request.ChargeAmount <= 0)
{
BusinessException.Throw("充值金额不正确");
}
var userEntity = await m_UserService.GetById(userId);
if (userEntity == null)
{
BusinessException.Throw("用户不存在");
}
var order = new UserChargeOrderEntity()
{
OrderName = $"充值{request.ChargeAmount}",
OrderNo = GeneratOrderNO(userId),
OrderState = UOrderStatus.NoPay,
UserId = userId,
UserName = userEntity.LoginCode,
PayChannel = request.PayChannel,
Channel = request.Channel,
OrderAmount = request.ChargeAmount,
PaymentAmount = request.ChargeAmount,
};
await this.Add(order);
return new ApiResult<UserChargeOrderEntity>(order);
}
private string GeneratOrderNO(int userId)
{
var code = ValidateCodeHelper.MakeNumCode(6);
var userStr = userId.ToString().PadRight(6, '0');
var str = $"{DateTime.Now.ToString("yyyyMMdd")}{userStr}{code}";
var pre = "cz";
return pre + str;
}
public async Task<UserChargeOrderEntity> GetOrderByNo(string no, UOrderStatus status = 0)
{
var order = await this.Query(m => m.OrderNo == no && (status == 0 || m.OrderState == status)).FirstOrDefaultAsync();
return order;
}
public async Task<List<UserChargeOrderEntity>> GetOrders(UOrderStatus status = 0, int top = 100)
{
var orders = await this.Query(m => m.OrderState == status).OrderByDescending(m => m.Id).Take(top).ToListAsync();
return orders;
}
/// <summary>
/// 处理成功的订单
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
public async Task<bool> ProcessOrderAccount(UserChargeOrderEntity order)
{
if (order.OrderState != UOrderStatus.PayOk) return false;
var request = new UpdateAmountRequest()
{
Amount = order.OrderAmount,
AttchInfo = order.OrderNo,
OpAmountType = ScoreType.UserCharge,
OperateUserName = order.UserName,
UserId = order.UserId
};
try
{
var ret = await m_UserService.UpdateAmount(request);
if (ret.Code == ResultCode.C_SUCCESS)
{
order.OrderState = UOrderStatus.Complete;
await this.Update(order);
}
return true;
}
catch (Exception ex)
{
LogHelper.Error("处理充值订单", ex);
return false;
}
}
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Vpn.Service
{
public partial class UserChargeOrderService : ServiceBase<UserChargeOrderEntity>, IFindService
{
UserDbContext m_DbContext;
UserService m_UserService;
public UserChargeOrderService(UserDbContext dbContext
, UserService _UserService
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
m_UserService = _UserService;
}
public async Task<ApiResult<UserChargeOrderEntity>> CreateOrder(CreateOrderRequest request, int userId)
{
if (request.ChargeAmount <= 0)
{
BusinessException.Throw("充值金额不正确");
}
var userEntity = await m_UserService.GetById(userId);
if (userEntity == null)
{
BusinessException.Throw("用户不存在");
}
var order = new UserChargeOrderEntity()
{
OrderName = $"充值{request.ChargeAmount}",
OrderNo = GeneratOrderNO(userId),
OrderState = UOrderStatus.NoPay,
UserId = userId,
UserName = userEntity.LoginCode,
PayChannel = request.PayChannel,
Channel = request.Channel,
OrderAmount = request.ChargeAmount,
PaymentAmount = request.ChargeAmount,
};
await this.Add(order);
return new ApiResult<UserChargeOrderEntity>(order);
}
private string GeneratOrderNO(int userId)
{
var code = ValidateCodeHelper.MakeNumCode(6);
var userStr = userId.ToString().PadRight(6, '0');
var str = $"{DateTime.Now.ToString("yyyyMMdd")}{userStr}{code}";
var pre = "cz";
return pre + str;
}
public async Task<UserChargeOrderEntity> GetOrderByNo(string no, UOrderStatus status = 0)
{
var order = await this.Query(m => m.OrderNo == no && (status == 0 || m.OrderState == status)).FirstOrDefaultAsync();
return order;
}
public async Task<List<UserChargeOrderEntity>> GetOrders(UOrderStatus status = 0, int top = 100)
{
var orders = await this.Query(m => m.OrderState == status).OrderByDescending(m => m.Id).Take(top).ToListAsync();
return orders;
}
/// <summary>
/// 处理成功的订单
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
public async Task<bool> ProcessOrderAccount(UserChargeOrderEntity order)
{
if (order.OrderState != UOrderStatus.PayOk) return false;
var request = new UpdateAmountRequest()
{
Amount = order.OrderAmount,
AttchInfo = order.OrderNo,
OpAmountType = ScoreType.UserCharge,
OperateUserName = order.UserName,
UserId = order.UserId
};
try
{
var ret = await m_UserService.UpdateAmount(request);
if (ret.Code == ResultCode.C_SUCCESS)
{
order.OrderState = UOrderStatus.Complete;
await this.Update(order);
}
return true;
}
catch (Exception ex)
{
LogHelper.Error("处理充值订单", ex);
return false;
}
}
}
}

View File

@@ -1,70 +1,70 @@
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request.User;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Data;
using System.Linq;
namespace Hncore.Pass.BaseInfo.Service
{
public class UserScoreService : ServiceBase<UserScore>, IFindService
{
private UserDbContext m_DbContext;
public UserScoreService(UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
}
public bool ExistTaoBaoScore(string orderNo)
{
return this.Exist(m => m.ScoreType == ScoreType.TaoBaoAdd && m.Remark == orderNo);
}
public async Task<List<UserScore>> Details(int userId)
{
return await this.Query(m => m.UserId == userId).OrderByDescending(m => m.Id).ToListAsync();
}
public async Task<PageData<UserScore>> Details(QueryAmountRequest request)
{
Expression<Func<UserScore, bool>> exp = m => true;
if (request.KeyWord.Has())
{
exp = exp.And(m => m.UserName.Contains(request.KeyWord) || m.OperateUserName.Contains(request.KeyWord) || m.ScoreTypeName.Contains(request.KeyWord) || m.Remark.Contains(request.KeyWord));
}
if (request.Type.HasValue&&request.Type>0)
{
exp = exp.And(m => m.ScoreType == (ScoreType)request.Type);
}
return await this.Query(exp).OrderByDescending(m=>m.Id).ListPagerAsync(request.PageSize, request.PageIndex,true);
}
public async Task<List<UserScore>> DetailsAll(QueryAmountRequest request)
{
Expression<Func<UserScore, bool>> exp = m => true;
if (request.KeyWord.Has())
{
exp = exp.And(m => m.UserName.Contains(request.KeyWord) || m.OperateUserName.Contains(request.KeyWord));
}
if (request.Type.HasValue && request.Type > 0)
{
exp = exp.And(m => m.ScoreType == (ScoreType)request.Type);
}
return await this.Query(exp).OrderByDescending(m => m.Id).ToListAsync();
}
}
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request.User;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Data;
using System.Linq;
namespace Hncore.Pass.BaseInfo.Service
{
public class UserScoreService : ServiceBase<UserScore>, IFindService
{
private UserDbContext m_DbContext;
public UserScoreService(UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_DbContext = dbContext;
}
public bool ExistTaoBaoScore(string orderNo)
{
return this.Exist(m => m.ScoreType == ScoreType.TaoBaoAdd && m.Remark == orderNo);
}
public async Task<List<UserScore>> Details(int userId)
{
return await this.Query(m => m.UserId == userId).OrderByDescending(m => m.Id).ToListAsync();
}
public async Task<PageData<UserScore>> Details(QueryAmountRequest request)
{
Expression<Func<UserScore, bool>> exp = m => true;
if (request.KeyWord.Has())
{
exp = exp.And(m => m.UserName.Contains(request.KeyWord) || m.OperateUserName.Contains(request.KeyWord) || m.ScoreTypeName.Contains(request.KeyWord) || m.Remark.Contains(request.KeyWord));
}
if (request.Type.HasValue&&request.Type>0)
{
exp = exp.And(m => m.ScoreType == (ScoreType)request.Type);
}
return await this.Query(exp).OrderByDescending(m=>m.Id).ListPagerAsync(request.PageSize, request.PageIndex,true);
}
public async Task<List<UserScore>> DetailsAll(QueryAmountRequest request)
{
Expression<Func<UserScore, bool>> exp = m => true;
if (request.KeyWord.Has())
{
exp = exp.And(m => m.UserName.Contains(request.KeyWord) || m.OperateUserName.Contains(request.KeyWord));
}
if (request.Type.HasValue && request.Type > 0)
{
exp = exp.And(m => m.ScoreType == (ScoreType)request.Type);
}
return await this.Query(exp).OrderByDescending(m => m.Id).ToListAsync();
}
}
}

View File

@@ -1,361 +1,361 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Internal;
using Hncore.Infrastructure.SMS;
namespace Hncore.Pass.BaseInfo.Service
{
public class UserService : ServiceBase<User>, IFindService
{
private static readonly AsyncLock _mutex1 = new AsyncLock();
private static string _secret = "hncore_yh_lzh_20f_2020_READY";
private UserDbContext _dbContext;
private WxAppService m_WxAppService;
private WxAppUserService m_WxAppUserService;
private UserScoreService m_UserScoreService;
private ManageService m_ManageService;
private static ConcurrentDictionary<int, int> manangeDic = new ConcurrentDictionary<int, int>();
public UserService(UserDbContext dbContext
, WxAppService _WxAppService
, WxAppUserService _WxAppUserService
,UserScoreService _UserScoreService
, ManageService _ManageService
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
_dbContext = dbContext;
m_WxAppUserService = _WxAppUserService;
m_WxAppService = _WxAppService;
m_UserScoreService = _UserScoreService;
m_ManageService = _ManageService;
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<UserLoginResponse> LoginAndBindWx(WxLoginRequest request)
{
if (request == null || request.Openid.NotHas() || request.AppId.NotHas())
{
BusinessException.Throw("登陆信息异常");
}
var existWxUserInfo = await m_WxAppUserService.GetWxAppUserInfo(request.AppId, request.Openid);
if (existWxUserInfo == null || existWxUserInfo.UserId == 0)
{
var wxApp = await m_WxAppService.GetApp(request.AppId);
if (wxApp == null)
BusinessException.Throw("没有关联公众号");
var userEntity = new User()
{
Name = request.UserName,
PhotoUrl = request.HeadImgUrl,
Sex = request.Sex,
TenantId = wxApp.TenantId,
Password = RandomHelper.GetRandomString(6)
};
await this.Add(userEntity);
var wxUserInfo = request.MapTo<WxAppUserEntity>();
wxUserInfo.UserId = userEntity.Id;
wxUserInfo.TenantId = wxApp.TenantId;
wxUserInfo.StoreId = wxApp.StoreId;
existWxUserInfo = await m_WxAppUserService.Bind(wxUserInfo);
}
var user = new User()
{
TenantId = existWxUserInfo.TenantId,
Id = existWxUserInfo.UserId
};
var ret = LoginInternal(user, existWxUserInfo);
ret.MpUser = new WxMpUserModel()
{
AppId = request.AppId,
OpenId = existWxUserInfo.Openid,
};
return ret;
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<UserLoginResponse> Login(LoginRequest request)
{
if (request == null || request.Logincode.NotHas() || request.Password.NotHas())
{
BusinessException.Throw("用户名或者密码为空");
}
var userInfo = await this.Query(m => (m.Phone == request.Logincode && m.Password == HashPassword(request.Password))||(m.LoginCode == request.Logincode && m.Password == HashPassword(request.Password))||(m.TaoBao == request.Logincode && m.Password == HashPassword(request.Password))).FirstOrDefaultAsync();
if (userInfo == null)
{
BusinessException.Throw("用户名或者密码不正确");
}
var ret = LoginInternal(userInfo);
return ret;
}
public UserLoginResponse LoginInternal(User manage, WxAppUserEntity wxUser)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{ "Name", wxUser.NickName},
{"UserId", manage.Id},
{"TenantId", manage.TenantId},
{"OpenId", wxUser.Openid},
{"AppType", wxUser.AppType},
{"AppId", wxUser.Appid},
{"StoreId", wxUser.StoreId},
};
var token = GenerateToken(tokenDic);
var response = new UserLoginModel().FromEntity(manage);
return new UserLoginResponse()
{
Token = token,
User = response
};
}
private UserLoginResponse LoginInternal(User manage)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{ "Name", manage.Name},
{"UserId", manage.Id},
{"TenantId", manage.TenantId},
{"OpenId", ""},
{"AppType", ""},
{"AppId", ""},
{"StoreId", "0"},
};
var token = GenerateToken(tokenDic);
var response = new UserLoginModel().FromEntity(manage);
return new UserLoginResponse()
{
Token = token,
User = response
};
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 180)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
long now = DateTimeHelper.ToUnixTimestamp(DateTime.Now);
param["iat"] = now; //签发时间
param["exp"] = DateTimeHelper.ToUnixTimestamp(DateTime.Now.AddDays(10)); //now + Math.Max(0, timeoutMinutes) * 60; //过期时间
var token = encoder.Encode(param, _secret);
return token;
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
public async Task<ApiResult> Regist(User entity)
{
if (entity.LoginCode.NotHas() || entity.Phone.NotHas())
{
return new ApiResult(ResultCode.C_LONGIN_NAME_ERROR, "账号或者手机号为空");
}
if (this.Exist(m => m.LoginCode == entity.LoginCode || m.Phone == entity.Phone || m.TaoBao == entity.Phone))
{
return new ApiResult(ResultCode.C_ALREADY_EXISTS_ERROR, "该账号或者手机号被注册了");
}
entity.Password = HashPassword(entity.Password);
entity.id_code="";
entity = await this.Add(entity);
await RandomAssignManager(entity.Id);
return new ApiResult(entity);
}
public async Task<User> GetByPhone(string phone)
{
var entity = await this.Query(m => m.Phone == phone).FirstOrDefaultAsync();
return entity;
}
public async Task<ApiResult> UpdatePwd(int userId, string oldPwd, string newPwd)
{
var entity = await this.GetById(userId);
if (newPwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "新密码不能为空");
}
if (entity.Password != HashPassword(oldPwd))
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "密码不正确");
}
entity.Password = HashPassword(newPwd);
await this.Update(entity);
return new ApiResult(entity);
}
public async Task<ApiResult> UpdatePwd(User entity, string newPwd)
{
if (newPwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "新密码不能为空");
}
entity.Password = HashPassword(newPwd);
await this.Update(entity);
return new ApiResult(ResultCode.C_SUCCESS,"重置成功");
}
public async Task<ApiResult> UpdateAmount(UpdateAmountRequest request,String product="",String package="",String account="")
{
using (await _mutex1.LockAsync())
{
var entity = await this.GetById(request.UserId);
if (entity == null)
return new ApiResult(ResultCode.C_NOT_EXISTS_ERROR, "用户不存在");
if (request.Amount <= 0)
return new ApiResult(ResultCode.C_INVALID_ERROR, "金额必须大于0");
var remark = request.AttchInfo;
if (product != "") {
remark = product+"-"+package+"-"+account;
}
var userScore = new UserScore()
{
UserId = request.UserId,
UserName = entity.LoginCode,
ScoreType = request.OpAmountType,
ScoreValue = request.Amount,
ScoreTypeName = request.OpAmountType.GetEnumDisplayName(),
Remark = remark,
OperateUserName = request.OperateUserName
};
if (request.OpAmountType == ScoreType.ManagerDeduct || request.OpAmountType == ScoreType.Pay)
{
if (entity.RestAmount < request.Amount)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "余额不足");
}
userScore.RestAmount1 = entity.RestAmount;
entity.RestAmount -= request.Amount;
userScore.RestAmount2 = entity.RestAmount;
}
else
{
userScore.RestAmount1 = entity.RestAmount;
entity.RestAmount += request.Amount;
userScore.RestAmount2 = entity.RestAmount;
}
using (var tran = await m_DbContextBase.Database.BeginTransactionAsync())
{
try
{
await m_UserScoreService.Add(userScore);
await this.Update(entity);
tran.Commit();
return new ApiResult(ResultCode.C_SUCCESS);
}
catch (Exception ex)
{
tran.Rollback();
LogHelper.Error("UpdateAmount", ex.Message);
return new ApiResult(ResultCode.C_INVALID_ERROR);
}
}
}
}
public async Task<bool> RandomAssignManager(int userId)
{
var userEntity = await this.GetById(userId);
var manage = await _dbContext.Set<Manager>()
.Where(m => m.RoleId == 100).ToListAsync();
if (manage == null || manage.Count == 0)
return false;
manage.ForEach(m =>
{
if (!manangeDic.ContainsKey(m.Id))
manangeDic[m.Id] = 1;
});
var removeIds = manangeDic.Where(m => !manage.Select(p => p.Id).Contains(m.Key));
foreach (var kv in removeIds)
{
manangeDic.TryRemove(kv.Key, out int data);
}
var minKv = manangeDic.OrderBy(m => m.Value).FirstOrDefault();
//获取管理员信息
var manger_info = manage.FirstOrDefault(m => m.Id == minKv.Key);
userEntity.ManagerId = minKv.Key;
userEntity.ManagerName = manger_info.RealName;
await this.Update(userEntity);
manangeDic[minKv.Key] = manangeDic[minKv.Key] + 1;
if (manger_info.RoleId == 100) {
AliSmsService.Send("SMS_462001365", new { name = manger_info.RealName,phone=userEntity.Phone }, "聚IP", manger_info.Phone);
}
return true;
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Request;
using Hncore.Pass.BaseInfo.Request.User;
using Hncore.Pass.BaseInfo.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Internal;
using Hncore.Infrastructure.SMS;
namespace Hncore.Pass.BaseInfo.Service
{
public class UserService : ServiceBase<User>, IFindService
{
private static readonly AsyncLock _mutex1 = new AsyncLock();
private static string _secret = "hncore_yh_lzh_20f_2020_READY";
private UserDbContext _dbContext;
private WxAppService m_WxAppService;
private WxAppUserService m_WxAppUserService;
private UserScoreService m_UserScoreService;
private ManageService m_ManageService;
private static ConcurrentDictionary<int, int> manangeDic = new ConcurrentDictionary<int, int>();
public UserService(UserDbContext dbContext
, WxAppService _WxAppService
, WxAppUserService _WxAppUserService
,UserScoreService _UserScoreService
, ManageService _ManageService
, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
_dbContext = dbContext;
m_WxAppUserService = _WxAppUserService;
m_WxAppService = _WxAppService;
m_UserScoreService = _UserScoreService;
m_ManageService = _ManageService;
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<UserLoginResponse> LoginAndBindWx(WxLoginRequest request)
{
if (request == null || request.Openid.NotHas() || request.AppId.NotHas())
{
BusinessException.Throw("登陆信息异常");
}
var existWxUserInfo = await m_WxAppUserService.GetWxAppUserInfo(request.AppId, request.Openid);
if (existWxUserInfo == null || existWxUserInfo.UserId == 0)
{
var wxApp = await m_WxAppService.GetApp(request.AppId);
if (wxApp == null)
BusinessException.Throw("没有关联公众号");
var userEntity = new User()
{
Name = request.UserName,
PhotoUrl = request.HeadImgUrl,
Sex = request.Sex,
TenantId = wxApp.TenantId,
Password = RandomHelper.GetRandomString(6)
};
await this.Add(userEntity);
var wxUserInfo = request.MapTo<WxAppUserEntity>();
wxUserInfo.UserId = userEntity.Id;
wxUserInfo.TenantId = wxApp.TenantId;
wxUserInfo.StoreId = wxApp.StoreId;
existWxUserInfo = await m_WxAppUserService.Bind(wxUserInfo);
}
var user = new User()
{
TenantId = existWxUserInfo.TenantId,
Id = existWxUserInfo.UserId
};
var ret = LoginInternal(user, existWxUserInfo);
ret.MpUser = new WxMpUserModel()
{
AppId = request.AppId,
OpenId = existWxUserInfo.Openid,
};
return ret;
}
/// <summary>
/// 通过微信的opid登录
/// </summary>
/// <param name="openId"></param>
/// <returns></returns>
public async Task<UserLoginResponse> Login(LoginRequest request)
{
if (request == null || request.Logincode.NotHas() || request.Password.NotHas())
{
BusinessException.Throw("用户名或者密码为空");
}
var userInfo = await this.Query(m => (m.Phone == request.Logincode && m.Password == HashPassword(request.Password))||(m.LoginCode == request.Logincode && m.Password == HashPassword(request.Password))||(m.TaoBao == request.Logincode && m.Password == HashPassword(request.Password))).FirstOrDefaultAsync();
if (userInfo == null)
{
BusinessException.Throw("用户名或者密码不正确");
}
var ret = LoginInternal(userInfo);
return ret;
}
public UserLoginResponse LoginInternal(User manage, WxAppUserEntity wxUser)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{ "Name", wxUser.NickName},
{"UserId", manage.Id},
{"TenantId", manage.TenantId},
{"OpenId", wxUser.Openid},
{"AppType", wxUser.AppType},
{"AppId", wxUser.Appid},
{"StoreId", wxUser.StoreId},
};
var token = GenerateToken(tokenDic);
var response = new UserLoginModel().FromEntity(manage);
return new UserLoginResponse()
{
Token = token,
User = response
};
}
private UserLoginResponse LoginInternal(User manage)
{
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.LoginCode},
{ "Name", manage.Name},
{"UserId", manage.Id},
{"TenantId", manage.TenantId},
{"OpenId", ""},
{"AppType", ""},
{"AppId", ""},
{"StoreId", "0"},
};
var token = GenerateToken(tokenDic);
var response = new UserLoginModel().FromEntity(manage);
return new UserLoginResponse()
{
Token = token,
User = response
};
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 180)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
long now = DateTimeHelper.ToUnixTimestamp(DateTime.Now);
param["iat"] = now; //签发时间
param["exp"] = DateTimeHelper.ToUnixTimestamp(DateTime.Now.AddDays(10)); //now + Math.Max(0, timeoutMinutes) * 60; //过期时间
var token = encoder.Encode(param, _secret);
return token;
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
public async Task<ApiResult> Regist(User entity)
{
if (entity.LoginCode.NotHas() || entity.Phone.NotHas())
{
return new ApiResult(ResultCode.C_LONGIN_NAME_ERROR, "账号或者手机号为空");
}
if (this.Exist(m => m.LoginCode == entity.LoginCode || m.Phone == entity.Phone || m.TaoBao == entity.Phone))
{
return new ApiResult(ResultCode.C_ALREADY_EXISTS_ERROR, "该账号或者手机号被注册了");
}
entity.Password = HashPassword(entity.Password);
entity.id_code="";
entity = await this.Add(entity);
await RandomAssignManager(entity.Id);
return new ApiResult(entity);
}
public async Task<User> GetByPhone(string phone)
{
var entity = await this.Query(m => m.Phone == phone).FirstOrDefaultAsync();
return entity;
}
public async Task<ApiResult> UpdatePwd(int userId, string oldPwd, string newPwd)
{
var entity = await this.GetById(userId);
if (newPwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "新密码不能为空");
}
if (entity.Password != HashPassword(oldPwd))
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "密码不正确");
}
entity.Password = HashPassword(newPwd);
await this.Update(entity);
return new ApiResult(entity);
}
public async Task<ApiResult> UpdatePwd(User entity, string newPwd)
{
if (newPwd.NotHas())
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "新密码不能为空");
}
entity.Password = HashPassword(newPwd);
await this.Update(entity);
return new ApiResult(ResultCode.C_SUCCESS,"重置成功");
}
public async Task<ApiResult> UpdateAmount(UpdateAmountRequest request,String product="",String package="",String account="")
{
using (await _mutex1.LockAsync())
{
var entity = await this.GetById(request.UserId);
if (entity == null)
return new ApiResult(ResultCode.C_NOT_EXISTS_ERROR, "用户不存在");
if (request.Amount <= 0)
return new ApiResult(ResultCode.C_INVALID_ERROR, "金额必须大于0");
var remark = request.AttchInfo;
if (product != "") {
remark = product+"-"+package+"-"+account;
}
var userScore = new UserScore()
{
UserId = request.UserId,
UserName = entity.LoginCode,
ScoreType = request.OpAmountType,
ScoreValue = request.Amount,
ScoreTypeName = request.OpAmountType.GetEnumDisplayName(),
Remark = remark,
OperateUserName = request.OperateUserName
};
if (request.OpAmountType == ScoreType.ManagerDeduct || request.OpAmountType == ScoreType.Pay)
{
if (entity.RestAmount < request.Amount)
{
return new ApiResult(ResultCode.C_INVALID_ERROR, "余额不足");
}
userScore.RestAmount1 = entity.RestAmount;
entity.RestAmount -= request.Amount;
userScore.RestAmount2 = entity.RestAmount;
}
else
{
userScore.RestAmount1 = entity.RestAmount;
entity.RestAmount += request.Amount;
userScore.RestAmount2 = entity.RestAmount;
}
using (var tran = await m_DbContextBase.Database.BeginTransactionAsync())
{
try
{
await m_UserScoreService.Add(userScore);
await this.Update(entity);
tran.Commit();
return new ApiResult(ResultCode.C_SUCCESS);
}
catch (Exception ex)
{
tran.Rollback();
LogHelper.Error("UpdateAmount", ex.Message);
return new ApiResult(ResultCode.C_INVALID_ERROR);
}
}
}
}
public async Task<bool> RandomAssignManager(int userId)
{
var userEntity = await this.GetById(userId);
var manage = await _dbContext.Set<Manager>()
.Where(m => m.RoleId == 100).ToListAsync();
if (manage == null || manage.Count == 0)
return false;
manage.ForEach(m =>
{
if (!manangeDic.ContainsKey(m.Id))
manangeDic[m.Id] = 1;
});
var removeIds = manangeDic.Where(m => !manage.Select(p => p.Id).Contains(m.Key));
foreach (var kv in removeIds)
{
manangeDic.TryRemove(kv.Key, out int data);
}
var minKv = manangeDic.OrderBy(m => m.Value).FirstOrDefault();
//获取管理员信息
var manger_info = manage.FirstOrDefault(m => m.Id == minKv.Key);
userEntity.ManagerId = minKv.Key;
userEntity.ManagerName = manger_info.RealName;
await this.Update(userEntity);
manangeDic[minKv.Key] = manangeDic[minKv.Key] + 1;
if (manger_info.RoleId == 100 && manger_info.TenantId == 1 && DateTime.Now.Hour<23) {
AliSmsService.Send("SMS_462001365", new { name = manger_info.RealName,phone=userEntity.Phone }, "聚IP", manger_info.Phone);
}
return true;
}
}
}

View File

@@ -1,22 +1,22 @@
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public partial class WxAppService : ServiceBase<WxAppEntity>, IFindService
{
public WxAppService(UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
}
public async Task<WxAppEntity> GetApp(string appId,int appType=1)
{
return await this.Query(m => m.AppType == appType && m.Appid == appId).FirstOrDefaultAsync();
}
}
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public partial class WxAppService : ServiceBase<WxAppEntity>, IFindService
{
public WxAppService(UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
}
public async Task<WxAppEntity> GetApp(string appId,int appType=1)
{
return await this.Query(m => m.AppType == appType && m.Appid == appId).FirstOrDefaultAsync();
}
}
}

View File

@@ -1,63 +1,63 @@
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Sells.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public partial class WxAppUserService : ServiceBase<WxAppUserEntity>, IFindService
{
WxAppService m_WxAppService;
CouponService couponService;
public WxAppUserService(WxAppService _WxAppService, CouponService _couponService, UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_WxAppService = _WxAppService;
couponService = _couponService;
}
public async Task<WxAppUserEntity> GetWxAppUserInfo(string appId,string openId, int appType=1)
{
var wxappInfo = await this.Query(false).FirstOrDefaultAsync(m => m.Appid == appId&&m.AppType==appType&&m.Openid==openId);
return wxappInfo;
}
public async Task<WxAppUserEntity> Bind(WxAppUserEntity userInfo)
{
var wxUserInfo = await GetWxUser(userInfo.Appid, userInfo.Openid);
if (wxUserInfo == null)
{
wxUserInfo = await this.Add(userInfo);
}
else //if (!string.IsNullOrEmpty(userInfo.Openid))
{
if (wxUserInfo.UserId == 0 && wxUserInfo.IsSubscribe == 1)
{
await couponService.Give(5, "", userInfo.UserId, 1, Hncore.Pass.Sells.Domain.Enums.CouponOriginType.MP, "¹Ø×¢¹«ÖÚºÅÔùËÍ");
}
wxUserInfo.UserId = userInfo.UserId;
await this.Update(wxUserInfo);
}
return wxUserInfo;
}
public async Task<WxAppUserEntity> GetWxUser(string appId, int userId)
{
return await this.Query(m => m.Appid == appId && m.UserId == userId).FirstOrDefaultAsync();
}
public async Task<WxAppUserEntity> GetWxUser(string appId, string openId)
{
return await this.Query(m => m.Appid == appId && m.Openid == openId).FirstOrDefaultAsync();
}
public WxAppUserEntity GetByOpenId(string openId)
{
return this.Query(m => m.Openid == openId).FirstOrDefault();
}
}
using Hncore.Infrastructure.Service;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Sells.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Service
{
public partial class WxAppUserService : ServiceBase<WxAppUserEntity>, IFindService
{
WxAppService m_WxAppService;
CouponService couponService;
public WxAppUserService(WxAppService _WxAppService, CouponService _couponService, UserDbContext dbContext, IHttpContextAccessor httpContextAccessor) : base(dbContext, httpContextAccessor)
{
m_WxAppService = _WxAppService;
couponService = _couponService;
}
public async Task<WxAppUserEntity> GetWxAppUserInfo(string appId,string openId, int appType=1)
{
var wxappInfo = await this.Query(false).FirstOrDefaultAsync(m => m.Appid == appId&&m.AppType==appType&&m.Openid==openId);
return wxappInfo;
}
public async Task<WxAppUserEntity> Bind(WxAppUserEntity userInfo)
{
var wxUserInfo = await GetWxUser(userInfo.Appid, userInfo.Openid);
if (wxUserInfo == null)
{
wxUserInfo = await this.Add(userInfo);
}
else //if (!string.IsNullOrEmpty(userInfo.Openid))
{
if (wxUserInfo.UserId == 0 && wxUserInfo.IsSubscribe == 1)
{
await couponService.Give(5, "", userInfo.UserId, 1, Hncore.Pass.Sells.Domain.Enums.CouponOriginType.MP, "¹Ø×¢¹«ÖÚºÅÔùËÍ");
}
wxUserInfo.UserId = userInfo.UserId;
await this.Update(wxUserInfo);
}
return wxUserInfo;
}
public async Task<WxAppUserEntity> GetWxUser(string appId, int userId)
{
return await this.Query(m => m.Appid == appId && m.UserId == userId).FirstOrDefaultAsync();
}
public async Task<WxAppUserEntity> GetWxUser(string appId, string openId)
{
return await this.Query(m => m.Appid == appId && m.Openid == openId).FirstOrDefaultAsync();
}
public WxAppUserEntity GetByOpenId(string openId)
{
return this.Query(m => m.Openid == openId).FirstOrDefault();
}
}
}

View File

@@ -1,52 +1,52 @@
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Map;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
namespace Hncore.Pass.BaseInfo
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IHostingEnvironment env)
{
Configuration = env.UseAppsettings();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddDbContext<UserDbContext>(opt => { opt.UseMySql(Configuration["MySql"]); });
RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration["Redis"]));
services.AddHttpClient();
services.AddScoped<ManageService>();
services.AddScoped<UserService>();
services.AutoAddService();
return services.Init(Configuration, CompatibilityVersion.Version_2_2, new ServiceOption
{
UseGlobalManageAuthFilter = true,
IgnoreJsonNullValue=true
});
}
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime,
ILoggerFactory loggerFactory)
{
app.Init(loggerFactory, applicationLifetime);
MapConfig.Config();
}
}
using Hncore.Infrastructure.Service;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Map;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.BaseInfo.Service;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
namespace Hncore.Pass.BaseInfo
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IHostingEnvironment env)
{
Configuration = env.UseAppsettings();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddDbContext<UserDbContext>(opt => { opt.UseMySql(Configuration["MySql"]); });
RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration["Redis"]));
services.AddHttpClient();
services.AddScoped<ManageService>();
services.AddScoped<UserService>();
services.AutoAddService();
return services.Init(Configuration, CompatibilityVersion.Version_2_2, new ServiceOption
{
UseGlobalManageAuthFilter = true,
IgnoreJsonNullValue=true
});
}
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime,
ILoggerFactory loggerFactory)
{
app.Init(loggerFactory, applicationLifetime);
MapConfig.Config();
}
}
}

View File

@@ -1,100 +1,100 @@
using Microsoft.International.Converters.PinYinConverter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Common
{
public class PinYinHelper
{
/*
两种方法共用://优先使用NPinyin,转换失败则用 Pinyinconverter
NPinyin 错误集:洺(不识别)
Pinyinconverter 多音字错误集广a区o强j。都是多音字
*/
/// <summary>
/// 汉字转全拼
/// </summary>
/// <param name="strChinese"></param>
/// <returns></returns>
public static string ConvertToAllSpell(string strChinese)
{
try
{
if (strChinese.Length != 0)
{
StringBuilder fullSpell = new StringBuilder();
for (int i = 0; i < strChinese.Length; i++)
{
var chr = strChinese[i];
fullSpell.Append(GetSpell(chr));
}
return fullSpell.ToString().ToUpper();
}
}
catch
{
return string.Empty;
}
return string.Empty;
}
/// <summary>
/// 汉字转首字母
/// </summary>
/// <param name="strChinese"></param>
/// <returns></returns>
public static string GetFirstSpell(string strChinese)
{
//NPinyin.Pinyin.GetInitials(strChinese) 有Bug 洺无法识别
//return NPinyin.Pinyin.GetInitials(strChinese);
try
{
if (strChinese.Length != 0)
{
StringBuilder fullSpell = new StringBuilder();
for (int i = 0; i < strChinese.Length; i++)
{
var chr = strChinese[i];
fullSpell.Append(GetSpell(chr)[0]);
}
return fullSpell.ToString().ToUpper();
}
}
catch (Exception e)
{
return string.Empty;
}
return string.Empty;
}
/// <summary>
/// 汉字转拼音
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private static string GetSpell(char chr)
{
var coverchr = NPinyin.Pinyin.GetPinyin(chr);
//优先使用NPinyin,转换失败则用 Pinyinconverter
bool isChineses = ChineseChar.IsValidChar(coverchr[0]);
if (isChineses)
{
ChineseChar chineseChar = new ChineseChar(coverchr[0]);
foreach (string value in chineseChar.Pinyins)
{
if (!string.IsNullOrEmpty(value))
{
return value.Remove(value.Length - 1, 1);
}
}
}
return coverchr;
}
}
}
using Microsoft.International.Converters.PinYinConverter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Common
{
public class PinYinHelper
{
/*
两种方法共用://优先使用NPinyin,转换失败则用 Pinyinconverter
NPinyin 错误集:洺(不识别)
Pinyinconverter 多音字错误集广a区o强j。都是多音字
*/
/// <summary>
/// 汉字转全拼
/// </summary>
/// <param name="strChinese"></param>
/// <returns></returns>
public static string ConvertToAllSpell(string strChinese)
{
try
{
if (strChinese.Length != 0)
{
StringBuilder fullSpell = new StringBuilder();
for (int i = 0; i < strChinese.Length; i++)
{
var chr = strChinese[i];
fullSpell.Append(GetSpell(chr));
}
return fullSpell.ToString().ToUpper();
}
}
catch
{
return string.Empty;
}
return string.Empty;
}
/// <summary>
/// 汉字转首字母
/// </summary>
/// <param name="strChinese"></param>
/// <returns></returns>
public static string GetFirstSpell(string strChinese)
{
//NPinyin.Pinyin.GetInitials(strChinese) 有Bug 洺无法识别
//return NPinyin.Pinyin.GetInitials(strChinese);
try
{
if (strChinese.Length != 0)
{
StringBuilder fullSpell = new StringBuilder();
for (int i = 0; i < strChinese.Length; i++)
{
var chr = strChinese[i];
fullSpell.Append(GetSpell(chr)[0]);
}
return fullSpell.ToString().ToUpper();
}
}
catch (Exception e)
{
return string.Empty;
}
return string.Empty;
}
/// <summary>
/// 汉字转拼音
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private static string GetSpell(char chr)
{
var coverchr = NPinyin.Pinyin.GetPinyin(chr);
//优先使用NPinyin,转换失败则用 Pinyinconverter
bool isChineses = ChineseChar.IsValidChar(coverchr[0]);
if (isChineses)
{
ChineseChar chineseChar = new ChineseChar(coverchr[0]);
foreach (string value in chineseChar.Pinyins)
{
if (!string.IsNullOrEmpty(value))
{
return value.Remove(value.Length - 1, 1);
}
}
}
return coverchr;
}
}
}

View File

@@ -1,18 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Hncore.Infrastructure.Common
{
public class RedisConfig
{
public static string EstateKey = "PROPERTY:ESTATE_{0}";
public static string RoomKey = "PROPERTY:ESTATE_ROOM_{0}";
public static string VISITORKey = "PROPERTY:VISITOR:UNIONID_{0}";
public static string WxKey = "Wechat:{0}";
public static string Payment = "Payment:{0}";
public static string WxOauth = "WxOauth:{0}";
public static string FaceVisitor = "FaceVisitor:{0}";
public static string Order = "Order:{0}";
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Hncore.Infrastructure.Common
{
public class RedisConfig
{
public static string EstateKey = "PROPERTY:ESTATE_{0}";
public static string RoomKey = "PROPERTY:ESTATE_ROOM_{0}";
public static string VISITORKey = "PROPERTY:VISITOR:UNIONID_{0}";
public static string WxKey = "Wechat:{0}";
public static string Payment = "Payment:{0}";
public static string WxOauth = "WxOauth:{0}";
public static string FaceVisitor = "FaceVisitor:{0}";
public static string Order = "Order:{0}";
}
}

View File

@@ -1,27 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Common
{
///// <summary>
///// 自然数0,1,2...
///// </summary>
//[AttributeUsage(AttributeTargets.Property)]
//public class ValidNaturalNumberAttribute : Attribute
//{
//}
public sealed class RequiredAttribute : Attribute
{
public bool Validate(object value)
{
if (value == null) return true;
if (string.IsNullOrEmpty(value.ToString())) return true;
if (string.IsNullOrWhiteSpace(value.ToString())) return true;
return false;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
namespace Hncore.Pass.BaseInfo.Common
{
///// <summary>
///// 自然数0,1,2...
///// </summary>
//[AttributeUsage(AttributeTargets.Property)]
//public class ValidNaturalNumberAttribute : Attribute
//{
//}
public sealed class RequiredAttribute : Attribute
{
public bool Validate(object value)
{
if (value == null) return true;
if (string.IsNullOrEmpty(value.ToString())) return true;
if (string.IsNullOrWhiteSpace(value.ToString())) return true;
return false;
}
}
}

View File

@@ -1,10 +1,10 @@
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.244.89:8088,password=123456,defaultDatabase=7,poolsize=1"
}
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.244.89:8088,password=123456,defaultDatabase=7,poolsize=1"
}

View File

@@ -1,10 +1,10 @@
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=10,poolsize=1"
}
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=10,poolsize=1"
}

View File

@@ -1,10 +1,10 @@
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.244.89:8088,password=123456,defaultDatabase=7,poolsize=1"
}
//{
// "MySql": "Server=rm-bp12e1533udh1827azo.mysql.rds.aliyuncs.com;Database=etor_property_test;User=etor_test;Password=etor_test!QAZ2wsx;Convert Zero Datetime=True;TreatTinyAsBoolean=false;",
// "Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7,poolsize=1"
//}
{
"Host_BaseUrl": "http://ipistest.etor.top11",
"Wx_Mp_Appid": "wxd6b150a17c252fec",
"MySql": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000;",
"Redis": "47.92.244.89:8088,password=123456,defaultDatabase=7,poolsize=1"
}

View File

@@ -1,8 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -1,10 +0,0 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Administrator\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
]
}
}

View File

@@ -1,13 +0,0 @@
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Concurrent": true,
"System.GC.Server": false
}
}
}

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="Info"
internalLogToTrace="true">
<targets>
<target xsi:type="Null" name="blackhole" />
<target name="LOG_FILE"
xsi:type="File"
layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}}${newline}${message}${newline}"
encoding="utf-8"
fileName="Logs/${date:format=yyyyMMdd}/${filesystem-normalize:inner=${level}}.log" />
</targets>
<rules>
<logger name="UserLog" minlevel="Trace" writeTo="LOG_FILE" />
</rules>
</nlog>

View File

@@ -1,10 +0,0 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Administrator\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
]
}
}

View File

@@ -1,13 +0,0 @@
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Concurrent": true,
"System.GC.Server": false
}
}
}

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwConfigExceptions="true"
internalLogLevel="Info"
internalLogToTrace="true">
<targets>
<target xsi:type="Null" name="blackhole" />
<target name="LOG_FILE"
xsi:type="File"
layout="[${longdate}] ${pad:padding=-5:inner=${level:uppercase=true}}${newline}${message}${newline}"
encoding="utf-8"
fileName="Logs/${date:format=yyyyMMdd}/${filesystem-normalize:inner=${level}}.log" />
</targets>
<rules>
<logger name="UserLog" minlevel="Trace" writeTo="LOG_FILE" />
</rules>
</nlog>

View File

@@ -1,4 +0,0 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v2.2", FrameworkDisplayName = "")]

View File

@@ -1,16 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 由 MSBuild WriteCodeFragment 类生成。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyTitleAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +0,0 @@
5208bd75e6d82595767ae255a8df9c25872eabb0

View File

@@ -1 +0,0 @@
94b14447996a84bcc3ac326943c1339f31d06a82

View File

@@ -1,13 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 由 MSBuild WriteCodeFragment 类生成。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute("Hncore.Pass.BaseInfo.Views")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorLanguageVersionAttribute("2.1")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorConfigurationNameAttribute("MVC-2.1")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorExtensionAssemblyNameAttribute("MVC-2.1", "Microsoft.AspNetCore.Mvc.Razor.Extensions")]

View File

@@ -1 +0,0 @@
51302c54ec912cc0b00de595073632bd213cf324

View File

@@ -1 +0,0 @@
6e0838cfb994a0ea48f7b5545dfbfff4790ff90a

View File

@@ -1,42 +0,0 @@
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\nlog.config
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\AppData\enums.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.deps.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.dev.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Infrastructure.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.Sells.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Infrastructure.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.Sells.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csprojAssemblyReference.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CoreCompileInputs.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cs
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfoInputs.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfo.cs
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorTargetAssemblyInfo.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CopyComplete
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\nlog.config
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\AppData\enums.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.deps.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.dev.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Infrastructure.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.Sells.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Infrastructure.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Debug\netcoreapp2.2\Hncore.Pass.Sells.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CoreCompileInputs.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cs
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfoInputs.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfo.cs
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorTargetAssemblyInfo.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CopyComplete
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Debug\netcoreapp2.2\Hncore.Pass.BaseInfo.csprojAssemblyReference.cache

View File

@@ -1,5 +0,0 @@
{
"version": 1,
"dgSpecHash": "zgf0ytVjn5gqN0aGB5vyfKHXedspVffy9EZ27f7l6iox+Gd/igyrK9jHldo64gWTqjORFZLcx4p64zq05O940g==",
"success": true
}

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Administrator\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.9.0</NuGetToolVersion>
</PropertyGroup>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.fileproviders.embedded\2.2.0\build\netstandard2.0\Microsoft.Extensions.FileProviders.Embedded.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.fileproviders.embedded\2.2.0\build\netstandard2.0\Microsoft.Extensions.FileProviders.Embedded.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.2.0\build\netcoreapp2.2\Microsoft.NETCore.App.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.2.0\build\netcoreapp2.2\Microsoft.NETCore.App.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.configuration.usersecrets\2.2.0\build\netstandard2.0\Microsoft.Extensions.Configuration.UserSecrets.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.configuration.usersecrets\2.2.0\build\netstandard2.0\Microsoft.Extensions.Configuration.UserSecrets.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.design\2.2.0\build\netcoreapp2.0\Microsoft.EntityFrameworkCore.Design.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.design\2.2.0\build\netcoreapp2.0\Microsoft.EntityFrameworkCore.Design.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.extensions\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.extensions\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.razor.design\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Razor.Design.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.razor.design\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Razor.Design.props')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.2.0\build\netcoreapp2.2\Microsoft.AspNetCore.App.props" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.2.0\build\netcoreapp2.2\Microsoft.AspNetCore.App.props')" />
</ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Pkgxunit_analyzers Condition=" '$(Pkgxunit_analyzers)' == '' ">C:\Users\Administrator\.nuget\packages\xunit.analyzers\0.10.0</Pkgxunit_analyzers>
<PkgMicrosoft_CodeAnalysis_Analyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_Analyzers)' == '' ">C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.codeanalysis.analyzers\1.1.0</PkgMicrosoft_CodeAnalysis_Analyzers>
<PkgMicrosoft_EntityFrameworkCore_Tools Condition=" '$(PkgMicrosoft_EntityFrameworkCore_Tools)' == '' ">C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.tools\2.2.0</PkgMicrosoft_EntityFrameworkCore_Tools>
<PkgMicrosoft_AspNetCore_Razor_Design Condition=" '$(PkgMicrosoft_AspNetCore_Razor_Design)' == '' ">C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.razor.design\2.2.0</PkgMicrosoft_AspNetCore_Razor_Design>
</PropertyGroup>
</Project>

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.fileproviders.embedded\2.2.0\build\netstandard2.0\Microsoft.Extensions.FileProviders.Embedded.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.fileproviders.embedded\2.2.0\build\netstandard2.0\Microsoft.Extensions.FileProviders.Embedded.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.2.0\build\netcoreapp2.2\Microsoft.NETCore.App.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.2.0\build\netcoreapp2.2\Microsoft.NETCore.App.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.configuration.usersecrets\2.2.0\build\netstandard2.0\Microsoft.Extensions.Configuration.UserSecrets.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.extensions.configuration.usersecrets\2.2.0\build\netstandard2.0\Microsoft.Extensions.Configuration.UserSecrets.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.extensions\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.extensions\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.server.iisintegration\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Server.IISIntegration.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.server.iisintegration\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Server.IISIntegration.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.server.iis\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Server.IIS.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.server.iis\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Server.IIS.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.viewcompilation\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.viewcompilation\2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.targets')" />
<Import Project="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.2.0\build\netcoreapp2.2\Microsoft.AspNetCore.App.targets" Condition="Exists('C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.2.0\build\netcoreapp2.2\Microsoft.AspNetCore.App.targets')" />
</ImportGroup>
</Project>

View File

@@ -1,16 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 由 MSBuild WriteCodeFragment 类生成。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyTitleAttribute("Hncore.Pass.BaseInfo")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +0,0 @@
3b61a383572003e0eee9968d9530e56ad58acbf0

View File

@@ -1 +0,0 @@
94b14447996a84bcc3ac326943c1339f31d06a82

View File

@@ -1,13 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 由 MSBuild WriteCodeFragment 类生成。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.RelatedAssemblyAttribute("Hncore.Pass.BaseInfo.Views")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorLanguageVersionAttribute("2.1")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorConfigurationNameAttribute("MVC-2.1")]
[assembly: Microsoft.AspNetCore.Razor.Hosting.RazorExtensionAssemblyNameAttribute("MVC-2.1", "Microsoft.AspNetCore.Mvc.Razor.Extensions")]

View File

@@ -1,42 +0,0 @@
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\nlog.config
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\AppData\enums.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.deps.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.dev.json
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Infrastructure.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.Sells.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Infrastructure.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.Sells.pdb
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csprojAssemblyReference.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CoreCompileInputs.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cs
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfoInputs.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfo.cs
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorTargetAssemblyInfo.cache
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CopyComplete
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\test\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\nlog.config
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\AppData\enums.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.deps.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.runtimeconfig.dev.json
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Infrastructure.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.Sells.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Infrastructure.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\bin\Release\netcoreapp2.2\Hncore.Pass.Sells.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CoreCompileInputs.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorAssemblyInfo.cs
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfoInputs.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.AssemblyInfo.cs
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.RazorTargetAssemblyInfo.cache
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csproj.CopyComplete
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.dll
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.pdb
D:\www\juipnet\Services\Hncore.Pass.BaseInfo\obj\Release\netcoreapp2.2\Hncore.Pass.BaseInfo.csprojAssemblyReference.cache

Some files were not shown because too many files have changed in this diff Show More