diff --git a/ZR.Admin.WebApi/Controllers/Customer/CustomerController.cs b/ZR.Admin.WebApi/Controllers/Customer/CustomerController.cs new file mode 100644 index 0000000000000000000000000000000000000000..89e60c17e09ebb21ebdc95e9b2983bade3f2faea --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/Customer/CustomerController.cs @@ -0,0 +1,92 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ZR.Model.System.Dto; +using ZR.Model; +using ZR.ServiceCore.Model.Dto; +using ZR.Service.System.IService; +using ZR.ServiceCore.Services.IService; +using System.Collections.Generic; +using ZR.Admin.WebApi.Filters; +using ZR.Model.System; + +namespace ZR.Admin.WebApi.Controllers +{ + /// + /// 客户模块 + /// + [Verify] + [Route("api/[controller]")] + public class CustomerController : BaseController + { + private readonly ICustomerService _customerService; + + private readonly ISysUserService _sysUserService; + + + public CustomerController(ICustomerService customerService, ISysUserService sysUserService) + { + _customerService = customerService; + _sysUserService = sysUserService; + } + + + /// + /// 客户 + /// + /// + /// + /// + [HttpGet("list")] + public IActionResult List([FromQuery] CustomerQueryDto customerDto, PagerInfo pager) + { + var customerList = _customerService.SelectCustomerList(customerDto, pager); + return SUCCESS(customerList); + } + + + + /// + /// 客户管理-编辑- 查询客户详细信息 + /// + /// 客户ID + /// + [HttpGet("{id}")] + public IActionResult GetInfo(int id) + { + Dictionary dic = new(); + var customer = _customerService.SelectCustomerById(id); + dic.Add("customer", customer); + dic.Add("users", _sysUserService.SelectUserAll()); + return SUCCESS(dic); + } + + + /// + /// 编辑客户信息 + /// + /// + /// + [HttpPut] + public IActionResult Put([FromBody] CustomerDto customer) + { + if (customer == null || customer.Id <= 0) { return ToResponse(ApiResult.Error(101, "请求参数错误")); } + int upResult = _customerService.UpdateCustomer(customer); + return ToResponse(upResult); + + } + + + /// + /// 查询业务员 + /// + /// + /// + [HttpGet("salesmans")] + public IActionResult Get(int userid) + { + return SUCCESS(_sysUserService.SelectUserAll()); + } + + + } +} diff --git a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs index bcc6647a0a8d861076143bf9805e59199e4e145d..fc9169d3dc01c8348c25402ce898fee9168effe8 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysUserController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysUserController.cs @@ -92,7 +92,9 @@ namespace ZR.Admin.WebApi.Controllers.System return ToResponse(ApiResult.Error($"新增用户 '{user.UserName}'失败,登录账号已存在")); } - user.Password = NETCore.Encrypt.EncryptProvider.Md5(user.Password); + user.Create_by = HttpContext.GetName(); + user.Create_time = DateTime.Now; + user.Password = NETCore.Encrypt.EncryptProvider.Md5(user.Password).ToLower(); return SUCCESS(UserService.InsertUser(user)); } @@ -158,7 +160,7 @@ namespace ZR.Admin.WebApi.Controllers.System public IActionResult ResetPwd([FromBody] SysUserDto sysUser) { //密码md5 - sysUser.Password = NETCore.Encrypt.EncryptProvider.Md5(sysUser.Password); + sysUser.Password = NETCore.Encrypt.EncryptProvider.Md5(sysUser.Password).ToLower(); int result = UserService.ResetPwd(sysUser.UserId, sysUser.Password); return ToResponse(result); diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index d9f6253a728efbbd6acbb4e955fdda0280f454d3..4cd092e0abc9d498d3c0621362346639eba152b5 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -8,8 +8,8 @@ }, "dbConfigs": [ { - "Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog=ZrAdmin;", - "DbType": 1, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 + "Conn": "Server=42.193.239.183;port=3306;ConnectionTimeout=10;DefaultCommandTimeout=300;Database=beego_fenxiao;UserId=root;Password=ydh123456;CharacterSet=utf8;ConvertZeroDateTime=True;AllowUserVariables=True;SslMode=None;Pooling=True;MinimumPoolSize=4;MaximumPoolSize=100;", + "DbType": 0, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 "ConfigId": "0", //多租户唯一标识 "IsAutoCloseConnection": true } diff --git a/ZR.ServiceCore/Model/CusCustomer.cs b/ZR.ServiceCore/Model/CusCustomer.cs new file mode 100644 index 0000000000000000000000000000000000000000..4aa425946ee5f7932298ff116f0183170ec774b5 --- /dev/null +++ b/ZR.ServiceCore/Model/CusCustomer.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZR.ServiceCore.Model +{ + /// + /// + /// + [SugarTable("cus_customer")] + public class CusCustomer + { + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + /// + /// 电子邮箱 + /// + [SugarColumn(ColumnName = "email")] + public string Email { get; set; } + /// + /// 密码 + /// + [SugarColumn(ColumnName = "Password")] + public string Password { get; set; } + /// + /// 注册时间 + /// + [SugarColumn(ColumnName = "Regist_time")] + public DateTime RegistTime { get; set; } + /// + /// 邀请码 + /// + [SugarColumn(ColumnName = "invitation_code")] + public string InvitationCode { get; set; } + /// + /// 分享链接点击次数 + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "Invitelink_click")] + public int InvitelinkClick { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "Update_time")] + public DateTime UpdateTime { get; set; } + /// + /// 电话 + /// + [SugarColumn(ColumnName = "Phone")] + public string Phone { get; set; } + /// + /// 用户昵称 + /// + [SugarColumn(ColumnName = "UserName")] + public string UserName { get; set; } + /// + /// 价格倍数,用于设置在添加产品时,产品价格是成本价的几倍 + /// 默认值: 2.00 + /// + [SugarColumn(ColumnName = "Price_multiples")] + public decimal PriceMultiples { get; set; } + /// + /// 价格开关,打开后价格倍数才有效,不打开则按照系统默认倍数(0打开,1,关闭) + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "Price_switch")] + public string PriceSwitch { get; set; } + /// + /// 赊账余额是否申请,0未申请,1申请 + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "credit_apply")] + public string CreditApply { get; set; } + /// + /// 赊账申请时间 + /// + [SugarColumn(ColumnName = "apply_time")] + public DateTime? ApplyTime { get; set; } + /// + /// 业务Id + /// + [SugarColumn(ColumnName = "BusinessId")] + public string BusinessId { get; set; } + /// + /// 注册来源(Marketing:营销活动注册) + /// + [SugarColumn(ColumnName = "create_cource")] + public string CreateCource { get; set; } + /// + /// 最后登录时间 + /// + [SugarColumn(ColumnName = "last_login_time")] + public DateTime? LastLoginTime { get; set; } + /// + /// 最后一次发送联系问候邮件的时间(超10天未登录则发送问候服务) + /// + [SugarColumn(ColumnName = "last_email_time")] + public DateTime? LastEmailTime { get; set; } + + + /// + /// 业务员 id + /// + [SugarColumn(ColumnName = "salesman_id")] + public long SalesmanId { get; set; } + + /// + /// A 不启用自动支付 B 草稿 C 启用自动支付 + /// 默认值: A + /// + [SugarColumn(ColumnName = "payment_state")] + public string PaymentState { get; set; } + } +} diff --git a/ZR.ServiceCore/Model/Dto/CustomerDto.cs b/ZR.ServiceCore/Model/Dto/CustomerDto.cs new file mode 100644 index 0000000000000000000000000000000000000000..0276db2618d0a3f2ed05517f6c93ba7bdbac99d9 --- /dev/null +++ b/ZR.ServiceCore/Model/Dto/CustomerDto.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZR.ServiceCore.Model.Dto +{ + public class CustomerQueryDto + { + public string Email { get; set; } + + public string SalesmanId { get; set; } + } + + public class CustomerDto + { + + [SugarColumn(ColumnName = "id")] + public int Id { get; set; } + /// + /// 电子邮箱 + /// + [SugarColumn(ColumnName = "email")] + public string Email { get; set; } + + + + ///// + ///// 密码 + ///// + //[SugarColumn(ColumnName = "Password")] + //public string Password { get; set; } + + + /// + /// 注册时间 + /// + [SugarColumn(ColumnName = "Regist_time")] + public DateTime RegistTime { get; set; } + + + /// + /// 邀请码 + /// + [SugarColumn(ColumnName = "invitation_code")] + public string InvitationCode { get; set; } + /// + /// 分享链接点击次数 + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "Invitelink_click")] + public int InvitelinkClick { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "Update_time")] + public DateTime UpdateTime { get; set; } + /// + /// 电话 + /// + [SugarColumn(ColumnName = "Phone")] + public string Phone { get; set; } + /// + /// 用户昵称 + /// + [SugarColumn(ColumnName = "UserName")] + public string UserName { get; set; } + /// + /// 价格倍数,用于设置在添加产品时,产品价格是成本价的几倍 + /// 默认值: 2.00 + /// + [SugarColumn(ColumnName = "Price_multiples")] + public decimal PriceMultiples { get; set; } + /// + /// 价格开关,打开后价格倍数才有效,不打开则按照系统默认倍数(0打开,1,关闭) + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "Price_switch")] + public string PriceSwitch { get; set; } + /// + /// 赊账余额是否申请,0未申请,1申请 + /// 默认值: 0 + /// + [SugarColumn(ColumnName = "credit_apply")] + public string CreditApply { get; set; } + /// + /// 赊账申请时间 + /// + [SugarColumn(ColumnName = "apply_time")] + public DateTime? ApplyTime { get; set; } + /// + /// 业务Id + /// + [SugarColumn(ColumnName = "BusinessId")] + public string BusinessId { get; set; } + /// + /// 注册来源(Marketing:营销活动注册) + /// + [SugarColumn(ColumnName = "create_cource")] + public string CreateCource { get; set; } + /// + /// 最后登录时间 + /// + [SugarColumn(ColumnName = "last_login_time")] + public DateTime? LastLoginTime { get; set; } + /// + /// 最后一次发送联系问候邮件的时间(超10天未登录则发送问候服务) + /// + [SugarColumn(ColumnName = "last_email_time")] + public DateTime? LastEmailTime { get; set; } + + /// + /// 业务员 + /// + [SugarColumn(ColumnName = "salesman_id")] + public long SalesmanId { get; set; } + + /// + /// A 不启用自动支付 B 草稿 C 启用自动支付 + /// 默认值: A + /// + [SugarColumn(ColumnName = "payment_state")] + public string PaymentState { get; set; } + + + + public string SalesmanName { get; set; } + + + } + +} diff --git a/ZR.ServiceCore/Model/Dto/SysUserDto.cs b/ZR.ServiceCore/Model/Dto/SysUserDto.cs index 0dd2422ef0c0115b853abd3e2371b546c6c9f84f..691dfabd24aaae7fea90a38d3c9a8fe137f04cd5 100644 --- a/ZR.ServiceCore/Model/Dto/SysUserDto.cs +++ b/ZR.ServiceCore/Model/Dto/SysUserDto.cs @@ -55,4 +55,22 @@ public int Status { get; set; } public long DeptId { get; set; } } + + public class SysSalesman + { + [SugarColumn(ColumnName = "userId")] + public long? UserId { get; set; } + + [SugarColumn(ColumnName = "userName")] + public string UserName { get; set; } + + + [SugarColumn(ColumnName = "status")] + public string Status { get; set; } + + public string NickName { get; set; } + + + } + } diff --git a/ZR.ServiceCore/Services/CustomerService.cs b/ZR.ServiceCore/Services/CustomerService.cs new file mode 100644 index 0000000000000000000000000000000000000000..ba5568413592bcbd84e9901243cf618041f20383 --- /dev/null +++ b/ZR.ServiceCore/Services/CustomerService.cs @@ -0,0 +1,82 @@ +using Infrastructure.Attribute; +using Mapster; +using Microsoft.Extensions.DependencyInjection; +using SqlSugar; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.System; +using ZR.Model.System.Dto; +using ZR.Repository; +using ZR.Service; +using ZR.Service.System.IService; +using ZR.ServiceCore.Model; +using ZR.ServiceCore.Model.Dto; +using ZR.ServiceCore.Services.IService; + +namespace ZR.ServiceCore.Services +{ + + [AppService(ServiceType = typeof(ICustomerService), ServiceLifetime = LifeTime.Transient)] + public class CustomerService : BaseService, ICustomerService + { + public PagedInfo SelectCustomerList(CustomerQueryDto customer, PagerInfo pager) + { + + + + + var exp = Expressionable.Create(); + + + + exp.AndIF(!string.IsNullOrEmpty(customer.Email), u => u.Email.Contains(customer.Email)); + exp.AndIF(!string.IsNullOrEmpty(customer.SalesmanId), u => u.SalesmanId == customer.SalesmanId.ParseToInt()); + + + var query = Queryable().LeftJoin((u, user) => u.SalesmanId == user.UserId) + .Where(exp.ToExpression()).Select((u, user) => new CustomerDto { Id = u.Id.SelectAll(), SalesmanName = user.NickName }); + + + + + + + return query.ToPage(pager); + + //query.ToPage(pager); + + + + // var query = Queryable() + //.LeftJoin((u, dept) => u.DeptId == dept.DeptId) + //.Where(exp.ToExpression()) + //.Select((u, dept) => new SysUser + //{ + // UserId = u.UserId.SelectAll(), + // DeptName = dept.DeptName, + //}); + + + + } + + + public CustomerDto SelectCustomerById(int customerId) + { + var customer = Queryable().LeftJoin((o, j) => o.SalesmanId == j.UserId).Where(o => o.Id == customerId).Select((o, j) => new CustomerDto { Id = o.Id, Phone = o.Phone, SalesmanName = j.UserName, SalesmanId = o.SalesmanId }).First(); + return customer; + } + + public int UpdateCustomer(CustomerDto customerDto) + { + var result = Update(new CusCustomer() { Id = customerDto.Id, Phone = customerDto.Phone, SalesmanId = customerDto.SalesmanId }, it => new { it.Phone, it.SalesmanId }); + return result; + } + + } +} diff --git a/ZR.ServiceCore/Services/IService/ICustomerService.cs b/ZR.ServiceCore/Services/IService/ICustomerService.cs new file mode 100644 index 0000000000000000000000000000000000000000..7c1069b707cf49eb552903999b920327f3df8f1a --- /dev/null +++ b/ZR.ServiceCore/Services/IService/ICustomerService.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZR.Model; +using ZR.Model.System; +using ZR.Model.System.Dto; +using ZR.Service; +using ZR.ServiceCore.Model; +using ZR.ServiceCore.Model.Dto; + +namespace ZR.ServiceCore.Services.IService +{ + public interface ICustomerService : IBaseService + { + + public PagedInfo SelectCustomerList(CustomerQueryDto customer, PagerInfo pager); + + + public CustomerDto SelectCustomerById(int customerId); + + public int UpdateCustomer(CustomerDto customer); + + } + +} diff --git a/ZR.ServiceCore/Services/IService/ISysUserService.cs b/ZR.ServiceCore/Services/IService/ISysUserService.cs index 411983b0880aaf8c447ecdb1f80605087872aaaf..931d8e585e676d5008507e95c55c3d23e9a2aa85 100644 --- a/ZR.ServiceCore/Services/IService/ISysUserService.cs +++ b/ZR.ServiceCore/Services/IService/ISysUserService.cs @@ -15,6 +15,10 @@ namespace ZR.ServiceCore.Services /// public SysUser SelectUserById(long userId); + + + public List SelectUserAll(); + /// /// 校验用户名称是否唯一 /// diff --git a/ZR.ServiceCore/Services/SysUserService.cs b/ZR.ServiceCore/Services/SysUserService.cs index 4dd270e32573596667391a03a142b30922eddf4f..be53eb87918b8732d6ffab2090b46fd698ccb4fa 100644 --- a/ZR.ServiceCore/Services/SysUserService.cs +++ b/ZR.ServiceCore/Services/SysUserService.cs @@ -1,6 +1,7 @@ using Infrastructure; using Infrastructure.Attribute; using IPTools.Core; +using Mapster; using System.Collections; using ZR.Common; using ZR.Model; @@ -80,6 +81,24 @@ namespace ZR.ServiceCore.Services return user; } + + + /// + /// 查询所有用户 客户管理-编辑/新增-选择业务员 + /// + /// + public List SelectUserAll() + { + var users = Queryable() + .Where(user => user.DelFlag == 0).Select(i => new { i.UserId, i.UserName,i.Status ,i.NickName}) + .ToList(); + return users.Adapt>(); + + } + + + + /// /// 校验用户名称是否唯一 /// @@ -226,7 +245,7 @@ namespace ZR.ServiceCore.Services throw new CustomException("用户名不符合要求"); } //密码md5 - string password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password); + string password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password).ToLower(); var ip_info = IpTool.Search(dto.UserIP); SysUser user = new() { @@ -342,5 +361,11 @@ namespace ZR.ServiceCore.Services { Update(new SysUser() { LoginIP = userIP, LoginDate = DateTime.Now, UserId = userId }, it => new { it.LoginIP, it.LoginDate }); } + + + + + + } }