提交
|
|
@ -18,6 +18,10 @@ namespace Infrastructure.Attribute
|
|||
/// </summary>
|
||||
public bool IsSaveResponseData { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 内容
|
||||
/// </summary>
|
||||
public string MessageKey { get; set; }
|
||||
public LogAttribute() { }
|
||||
|
||||
public LogAttribute(string name)
|
||||
|
|
|
|||
47
Infrastructure/Helper/LogMessageRegistry.cs
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ZR.Infrastructure.Helper;
|
||||
|
||||
public static class LogMessageRegistry
|
||||
{
|
||||
public static readonly Dictionary<string, Func<ResultExecutedContext, string>> Templates
|
||||
= new Dictionary<string, Func<ResultExecutedContext, string>>
|
||||
{
|
||||
["giftclaim:status"] = ctx =>
|
||||
{
|
||||
if (ctx.HttpContext.Request.Query.TryGetValue("id", out var idStr) &&
|
||||
ctx.HttpContext.Request.Query.TryGetValue("status", out var statusStr))
|
||||
{
|
||||
var id = int.Parse(idStr);
|
||||
int status = int.Parse(statusStr);
|
||||
if (id > 0)
|
||||
{
|
||||
return $"礼品审核状态修改,礼品兑换ID:{id},修改时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},修改状态为:{(status == 1 ? "通过" : "未通过")}";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 获取日志消息模板
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="client"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetMessage(string key, ResultExecutedContext client)
|
||||
{
|
||||
if (!Templates.TryGetValue(key, out var func))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return func(client);
|
||||
}
|
||||
}
|
||||
|
|
@ -16,11 +16,11 @@ namespace Infrastructure
|
|||
Console.WriteLine(content);
|
||||
Console.ForegroundColor = ConsoleColor.Blue;
|
||||
//Console.WriteLine("🎉源码地址: https://gitee.com/izory/ZrAdminNetCore");
|
||||
Console.WriteLine("📖官方文档:http://www.izhaorui.cn");
|
||||
Console.WriteLine("💰打赏作者:http://www.izhaorui.cn/vip");
|
||||
Console.WriteLine("📱移动端体验:http://demo.izhaorui.cn/h5");
|
||||
Console.WriteLine($"Swagger地址:{url}/swagger/index.html");
|
||||
Console.WriteLine($"初始化种子数据地址:{url}/common/InitSeedData");
|
||||
//Console.WriteLine("📖官方文档:http://www.izhaorui.cn");
|
||||
//Console.WriteLine("💰打赏作者:http://www.izhaorui.cn/vip");
|
||||
//Console.WriteLine("📱移动端体验:http://demo.izhaorui.cn/h5");
|
||||
//Console.WriteLine($"Swagger地址:{url}/swagger/index.html");
|
||||
//Console.WriteLine($"初始化种子数据地址:{url}/common/InitSeedData");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
154
ZR.Admin.WebApi/Controllers/Business/GiftClaimController.cs
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
//创建时间:2025-07-30
|
||||
namespace ZR.Admin.WebApi.Controllers.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表
|
||||
/// </summary>
|
||||
[Route("business/GiftClaim")]
|
||||
public class GiftClaimController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表接口
|
||||
/// </summary>
|
||||
private readonly IGiftClaimService _GiftClaimService;
|
||||
|
||||
public GiftClaimController(IGiftClaimService GiftClaimService)
|
||||
{
|
||||
_GiftClaimService = GiftClaimService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询礼品申领表列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:list")]
|
||||
public IActionResult QueryGiftClaim([FromQuery] GiftClaimQueryDto parm)
|
||||
{
|
||||
var response = _GiftClaimService.GetList(parm);
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询礼品申领表列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("statistics")]
|
||||
public IActionResult getGiftClaimStatistics()
|
||||
{
|
||||
var nowDate = DateTime.Now.Date;
|
||||
var nowCount = _GiftClaimService.AsQueryable().Count();
|
||||
var shenheCount = _GiftClaimService.AsQueryable().Where(it => it.Status == 0).Count();
|
||||
var shenheCount1 = _GiftClaimService.AsQueryable().Where(it => it.Status == 1).Count();
|
||||
var shenheCount2 = _GiftClaimService.AsQueryable().Where(it => it.Status == 2).Count();
|
||||
return SUCCESS(new { nowCount, shenheCount, shenheCount1, shenheCount2 });
|
||||
}
|
||||
/// <summary>
|
||||
/// 查询礼品申领表详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{Id}")]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:query")]
|
||||
public IActionResult GetGiftClaim(int Id)
|
||||
{
|
||||
var response = _GiftClaimService.GetInfo(Id);
|
||||
|
||||
var info = response.Adapt<GiftClaimDto>();
|
||||
return SUCCESS(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加礼品申领表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:add")]
|
||||
[Log(Title = "礼品申领记录", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult AddGiftClaim([FromBody] GiftClaimDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<GiftClaim>().ToCreate(HttpContext);
|
||||
|
||||
var response = _GiftClaimService.AddGiftClaim(modal);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新礼品申领表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:edit")]
|
||||
[Log(Title = "礼品申领记录", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult UpdateGiftClaim([FromBody] GiftClaimDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<GiftClaim>().ToUpdate(HttpContext);
|
||||
var response = _GiftClaimService.UpdateGiftClaim(modal);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新礼品申领表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("editStatus")]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:editStatus")]
|
||||
[Log(Title = "礼品申领记录", BusinessType = BusinessType.UPDATE, MessageKey = "giftclaim:status")]
|
||||
public async Task<IActionResult> UpdateGiftClaimStatus([FromQuery] int id, [FromQuery] int status)
|
||||
{
|
||||
var model = await _GiftClaimService.AsQueryable().FirstAsync(it => it.Id == id);
|
||||
if (model == null)
|
||||
{
|
||||
return ToResponse(ResultCode.FAIL, "礼品申领数据不存在");
|
||||
}
|
||||
model.Status = status;
|
||||
model.ReviewAt = DateTime.Now;
|
||||
var response = await _GiftClaimService.UpdateAsync(model);
|
||||
return ToResponse(new ApiResult(response ? 200 : 500, ""));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除礼品申领表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("delete/{ids}")]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:delete")]
|
||||
[Log(Title = "礼品申领表", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult DeleteGiftClaim([FromRoute] string ids)
|
||||
{
|
||||
var idArr = Tools.SplitAndConvert<int>(ids);
|
||||
|
||||
return ToResponse(_GiftClaimService.Delete(idArr));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出礼品申领表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Log(Title = "礼品申领记录", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
|
||||
[HttpGet("export")]
|
||||
[ActionPermissionFilter(Permission = "giftclaim:export")]
|
||||
public IActionResult Export([FromQuery] GiftClaimQueryDto parm)
|
||||
{
|
||||
var list = _GiftClaimService.ExportList(parm).Result;
|
||||
if (list == null || list.Count <= 0)
|
||||
{
|
||||
return ToResponse(ResultCode.FAIL, "没有要导出的数据");
|
||||
}
|
||||
var result = ExportExcelMini(list, "礼品申领记录", "礼品申领记录");
|
||||
return ExportExcel(result.Item2, result.Item1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
116
ZR.Admin.WebApi/Controllers/Business/GiftConfigController.cs
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using ZR.Service.Business;
|
||||
|
||||
//创建时间:2025-07-30
|
||||
namespace ZR.Admin.WebApi.Controllers.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序
|
||||
/// </summary>
|
||||
[Route("business/GiftConfig")]
|
||||
public class GiftConfigController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序接口
|
||||
/// </summary>
|
||||
private readonly IGiftConfigService _GiftConfigService;
|
||||
|
||||
public GiftConfigController(IGiftConfigService GiftConfigService)
|
||||
{
|
||||
_GiftConfigService = GiftConfigService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询礼品小程序列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "giftconfig:list")]
|
||||
public IActionResult QueryGiftConfig([FromQuery] GiftConfigQueryDto parm)
|
||||
{
|
||||
var response = _GiftConfigService.GetList(parm);
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询礼品小程序详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{Id}")]
|
||||
[ActionPermissionFilter(Permission = "giftconfig:query")]
|
||||
public IActionResult GetGiftConfig(int? Id)
|
||||
{
|
||||
var t = _GiftConfigService.Count(it => true);
|
||||
GiftConfigDto info = new GiftConfigDto();
|
||||
if (t > 0)
|
||||
{
|
||||
var response = _GiftConfigService.GetFirst(it => true);
|
||||
info = response.Adapt<GiftConfigDto>();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var tt = _GiftConfigService.AddGiftConfig(new GiftConfig()
|
||||
{
|
||||
HomeImage = "",
|
||||
Extend = "",
|
||||
Extend1 = "",
|
||||
});
|
||||
info = tt.Adapt<GiftConfigDto>();
|
||||
}
|
||||
return SUCCESS(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加礼品小程序
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "giftconfig:add")]
|
||||
[Log(Title = "礼品小程序", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult AddGiftConfig([FromBody] GiftConfigDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<GiftConfig>().ToCreate(HttpContext);
|
||||
|
||||
var response = _GiftConfigService.AddGiftConfig(modal);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新礼品小程序
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[ActionPermissionFilter(Permission = "giftconfig:edit")]
|
||||
[Log(Title = "礼品小程序", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult UpdateGiftConfig([FromBody] GiftConfigDto parm)
|
||||
{
|
||||
var modal = parm.Adapt<GiftConfig>().ToUpdate(HttpContext);
|
||||
var response = _GiftConfigService.UpdateGiftConfig(modal);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除礼品小程序
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("delete/{ids}")]
|
||||
[ActionPermissionFilter(Permission = "giftconfig:delete")]
|
||||
[Log(Title = "礼品小程序", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult DeleteGiftConfig([FromRoute] string ids)
|
||||
{
|
||||
var idArr = Tools.SplitAndConvert<int>(ids);
|
||||
|
||||
return ToResponse(_GiftConfigService.Delete(idArr, "删除礼品小程序"));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
121
ZR.Admin.WebApi/Controllers/Business/GiftUserController.cs
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
||||
//创建时间:2025-07-30
|
||||
namespace ZR.Admin.WebApi.Controllers.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表
|
||||
/// </summary>
|
||||
[Route("business/GiftUser")]
|
||||
public class GiftUserController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表接口
|
||||
/// </summary>
|
||||
private readonly IGiftUserService _GiftUserService;
|
||||
|
||||
public GiftUserController(IGiftUserService GiftUserService)
|
||||
{
|
||||
_GiftUserService = GiftUserService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询微信用户表列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "giftuser:list")]
|
||||
public IActionResult QueryGiftUser([FromQuery] GiftUserQueryDto parm)
|
||||
{
|
||||
var response = _GiftUserService.GetList(parm);
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询微信用户表详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{Id}")]
|
||||
[ActionPermissionFilter(Permission = "giftuser:query")]
|
||||
public IActionResult GetGiftUser(int Id)
|
||||
{
|
||||
var response = _GiftUserService.GetInfo(Id);
|
||||
|
||||
var info = response.Adapt<GiftUserDto>();
|
||||
return SUCCESS(info);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加微信用户表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "giftuser:add")]
|
||||
[Log(Title = "微信用户表", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult AddGiftUser([FromBody] GiftUserDto parm)
|
||||
{
|
||||
parm.CreateTime= DateTime.Now;
|
||||
parm.UpdateTime= DateTime.Now;
|
||||
var modal = parm.Adapt<GiftUser>().ToCreate(HttpContext);
|
||||
|
||||
var response = _GiftUserService.AddGiftUser(modal);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新微信用户表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[ActionPermissionFilter(Permission = "giftuser:edit")]
|
||||
[Log(Title = "微信用户表", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult UpdateGiftUser([FromBody] GiftUserDto parm)
|
||||
{
|
||||
parm.UpdateTime = DateTime.Now;
|
||||
var modal = parm.Adapt<GiftUser>().ToUpdate(HttpContext);
|
||||
var response = _GiftUserService.UpdateGiftUser(modal);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除微信用户表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("delete/{ids}")]
|
||||
[ActionPermissionFilter(Permission = "giftuser:delete")]
|
||||
[Log(Title = "微信用户表", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult DeleteGiftUser([FromRoute]string ids)
|
||||
{
|
||||
var idArr = Tools.SplitAndConvert<int>(ids);
|
||||
|
||||
return ToResponse(_GiftUserService.Delete(idArr));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出微信用户表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Log(Title = "微信用户表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
|
||||
[HttpGet("export")]
|
||||
[ActionPermissionFilter(Permission = "giftuser:export")]
|
||||
public IActionResult Export([FromQuery] GiftUserQueryDto parm)
|
||||
{
|
||||
var list = _GiftUserService.ExportList(parm).Result;
|
||||
if (list == null || list.Count <= 0)
|
||||
{
|
||||
return ToResponse(ResultCode.FAIL, "没有要导出的数据");
|
||||
}
|
||||
var result = ExportExcelMini(list, "微信用户表", "微信用户表");
|
||||
return ExportExcel(result.Item2, result.Item1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
using MiniExcelLibs;
|
||||
|
||||
using ZR.Infrastructure.IPTools;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.System;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using ZR.ServiceCore.Resources;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
|
|
@ -22,7 +25,10 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
private IWebHostEnvironment WebHostEnvironment;
|
||||
private ISysFileService SysFileService;
|
||||
private readonly IStringLocalizer<SharedResource> _localizer;
|
||||
|
||||
/// <summary>
|
||||
/// 礼品小程序接口
|
||||
/// </summary>
|
||||
private readonly IGiftConfigService _GiftConfigService;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
|
@ -34,12 +40,14 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
IStringLocalizer<SharedResource> stringLocalizer,
|
||||
IOptions<OptionsSetting> options,
|
||||
IWebHostEnvironment webHostEnvironment,
|
||||
ISysFileService fileService)
|
||||
ISysFileService fileService,
|
||||
IGiftConfigService GiftConfigService)
|
||||
{
|
||||
WebHostEnvironment = webHostEnvironment;
|
||||
SysFileService = fileService;
|
||||
OptionsSetting = options.Value;
|
||||
_localizer = stringLocalizer;
|
||||
_GiftConfigService = GiftConfigService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -56,6 +64,19 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
"如果觉得项目有用,打赏作者喝杯咖啡作为奖励\n☛☛http://www.izhaorui.cn/vip\n");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// home
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Route("/config")]
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public async Task<object> GetConfig()
|
||||
{
|
||||
var response = _GiftConfigService.GetFirst(it => true);
|
||||
return new { home = (response?.HomeImage ?? "") };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询IP信息
|
||||
/// </summary>
|
||||
|
|
@ -98,7 +119,7 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "common")]
|
||||
public async Task<IActionResult> UploadFile([FromForm] UploadDto uploadDto, IFormFile file, StoreType storeType = StoreType.LOCAL)
|
||||
public async Task<IActionResult> UploadFile([FromForm] UploadDto uploadDto, IFormFile file, StoreType storeType = StoreType.ALIYUN)
|
||||
{
|
||||
if (file == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空");
|
||||
SysFile sysfile = new();
|
||||
|
|
|
|||
178
ZR.Admin.WebApi/Controllers/WebApiController.cs
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using SKIT.FlurlHttpClient.Wechat.Api.Models;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api;
|
||||
using System.Web;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using ZR.Model.Business.Dto;
|
||||
using Org.BouncyCastle.Utilities;
|
||||
using System.Net;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// webApi
|
||||
/// </summary>
|
||||
[Route("[controller]/[action]")]
|
||||
[AllowAnonymous]
|
||||
[ApiExplorerSettings(GroupName = "webapi")]
|
||||
public class WebApiController : BaseController
|
||||
{
|
||||
private readonly WechatApiClient _client;
|
||||
/// <summary>
|
||||
/// 礼品申领表接口
|
||||
/// </summary>
|
||||
private readonly IGiftClaimService _GiftClaimService;
|
||||
/// <summary>
|
||||
/// 微信用户表接口
|
||||
/// </summary>
|
||||
private readonly IGiftUserService _GiftUserService;
|
||||
public WebApiController(WechatApiClient client, IGiftUserService GiftUserService, IGiftClaimService giftClaimService)
|
||||
{
|
||||
_client = client;
|
||||
_GiftUserService = GiftUserService;
|
||||
_GiftClaimService = giftClaimService;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 1
|
||||
/// </summary>
|
||||
/// <param name="code"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
[HttpPost()]
|
||||
[Route("/userLogin")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> GetOpenId([FromQuery] string code)
|
||||
{
|
||||
var response = await _client.ExecuteSnsJsCode2SessionAsync(new SnsJsCode2SessionRequest
|
||||
{
|
||||
JsCode = code,
|
||||
GrantType = "authorization_code"
|
||||
});
|
||||
if (!response.IsSuccessful())
|
||||
{
|
||||
throw new Exception($"获取OpenId失败: {response.ErrorMessage}"); // 可以根据需要处理异常
|
||||
}
|
||||
var openId = response.OpenId;
|
||||
var user = await _GiftUserService.AsQueryable().Where(it => it.Openid == openId).FirstAsync();
|
||||
if (user == null)
|
||||
{
|
||||
user = new GiftUser()
|
||||
{
|
||||
AvatarUrl = "",
|
||||
CreateTime = DateTime.Now,
|
||||
Nickname = "微信用户",
|
||||
Openid = openId,
|
||||
UpdateTime = DateTime.Now,
|
||||
LastLoginTime = DateTime.Now,
|
||||
Phone = "",
|
||||
Status = "0",
|
||||
Unionid = ""
|
||||
};
|
||||
_GiftUserService.AddGiftUser(user);
|
||||
}
|
||||
return SUCCESS(new { user_id = user.Id });
|
||||
|
||||
}
|
||||
[HttpGet("/getRecord")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> GetRecord([FromQuery] int userId)
|
||||
{
|
||||
if (userId == 0)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var user = await _GiftUserService.AsQueryable().Where(it => it.Id == userId).FirstAsync();
|
||||
if (user == null)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var list = await _GiftClaimService.AsQueryable().Where(it => it.UserId == userId).OrderByDescending(it => it.Id).ToListAsync();
|
||||
List<object> list1 = new List<object>();
|
||||
list?.ForEach(it =>
|
||||
{
|
||||
list1.Add(new
|
||||
{
|
||||
it.Status,
|
||||
it.Name,
|
||||
it.Address,
|
||||
it.Phone,
|
||||
time = it.CreatedAt?.ToString("yyyy-MM-dd")
|
||||
});
|
||||
});
|
||||
return SUCCESS(list1);
|
||||
}
|
||||
public static string domainUrl = AppSettings.GetConfig("ALIYUN_OSS:domainUrl");
|
||||
[HttpPost()]
|
||||
[Route("/addRecord")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> AddRecord([FromBody] AddGiftClaimDto giftClaim)
|
||||
{
|
||||
if (giftClaim.UserId == 0)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var user = await _GiftUserService.AsQueryable().Where(it => it.Id == giftClaim.UserId).FirstAsync();
|
||||
if (user == null)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var images = ImageConverter.Base64ToImageBytes(giftClaim.ProductImage);
|
||||
if (images.Length == 0)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "图片上传失败");
|
||||
}
|
||||
var imageprx = ImageConverter.GetFileExtensionFromBase64(giftClaim.ProductImage);
|
||||
var imageName = ImageConverter.GenerateImageFileName(imageprx);
|
||||
var filePath = "gift/" + DateTime.Now.ToString("yyyy/MMdd/");
|
||||
//备份一下本地
|
||||
var finalPath = filePath + imageName;
|
||||
if (!string.IsNullOrEmpty(domainUrl))
|
||||
{
|
||||
var statusCode = AliyunOssHelper.PutObjectFromFile(new MemoryStream(images), finalPath, "");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var path = Path.GetFullPath(filePath);
|
||||
if (!Directory.Exists(path))
|
||||
{
|
||||
Directory.CreateDirectory(path);
|
||||
}
|
||||
using (var stream = new FileStream(finalPath, FileMode.Create))
|
||||
{
|
||||
await stream.WriteAsync(images, 0, images.Length);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
}
|
||||
if (!string.IsNullOrEmpty(domainUrl))
|
||||
{
|
||||
finalPath = domainUrl + "/" + finalPath;
|
||||
}
|
||||
GiftClaim giftClaim1 = new GiftClaim()
|
||||
{
|
||||
Address = giftClaim.Address,
|
||||
Name = giftClaim.Name,
|
||||
Phone = giftClaim.Phone,
|
||||
UserId = giftClaim.UserId,
|
||||
Status = 0,
|
||||
Company = giftClaim.Company,
|
||||
ProductModel = giftClaim.ProductModel,
|
||||
ProductDate = giftClaim.ProductDate,
|
||||
ProductSerialNumber = giftClaim.ProductSerialNumber,
|
||||
CreatedAt = DateTime.Now,
|
||||
ProductImage = finalPath,
|
||||
UserWxOpenId= user.Openid
|
||||
};
|
||||
_GiftClaimService.AddGiftClaim(giftClaim1);
|
||||
return SUCCESS(new { giftClaim1.Id });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,14 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using SKIT.FlurlHttpClient.Wechat.Api;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api.Models;
|
||||
|
||||
using System.Web;
|
||||
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -10,6 +18,23 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
[AllowAnonymous]
|
||||
public class WxOpenController : BaseController
|
||||
{
|
||||
private readonly WechatApiClient _client;
|
||||
/// <summary>
|
||||
/// 礼品申领表接口
|
||||
/// </summary>
|
||||
private readonly IGiftClaimService _GiftClaimService;
|
||||
/// <summary>
|
||||
/// 微信用户表接口
|
||||
/// </summary>
|
||||
private readonly IGiftUserService _GiftUserService;
|
||||
public WxOpenController(WechatApiClient client, IGiftUserService GiftUserService, IGiftClaimService giftClaimService)
|
||||
{
|
||||
_client = client;
|
||||
_GiftUserService = GiftUserService;
|
||||
_GiftClaimService = giftClaimService;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取签名
|
||||
/// </summary>
|
||||
|
|
@ -35,5 +60,69 @@ namespace ZR.Admin.WebApi.Controllers
|
|||
return SUCCESS(new { appId, signature, noncestr, timestamp, url });
|
||||
}
|
||||
|
||||
[HttpGet("login")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> GetOpenId([FromQuery] string code)
|
||||
{
|
||||
var response = await _client.ExecuteSnsJsCode2SessionAsync(new SnsJsCode2SessionRequest
|
||||
{
|
||||
JsCode = code,
|
||||
GrantType = "authorization_code"
|
||||
});
|
||||
if (!response.IsSuccessful())
|
||||
{
|
||||
throw new Exception($"获取OpenId失败: {response.ErrorMessage}"); // 可以根据需要处理异常
|
||||
}
|
||||
var openId = response.OpenId;
|
||||
var user = await _GiftUserService.AsQueryable().Where(it => it.Openid == openId).FirstAsync();
|
||||
if (user == null)
|
||||
{
|
||||
//response.
|
||||
user = new GiftUser()
|
||||
{
|
||||
AvatarUrl = "",
|
||||
CreateTime = DateTime.Now,
|
||||
Nickname = "微信用户",
|
||||
Openid = openId,
|
||||
UpdateTime = DateTime.Now,
|
||||
LastLoginTime = DateTime.Now,
|
||||
Phone = "",
|
||||
Status = "0",
|
||||
Unionid = ""
|
||||
};
|
||||
_GiftUserService.AddGiftUser(user);
|
||||
}
|
||||
return SUCCESS(new { user_id = user.Id });
|
||||
|
||||
}
|
||||
[HttpGet("getRecord")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> GetRecord([FromQuery] int user_id)
|
||||
{
|
||||
if (user_id == 0)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var user = await _GiftUserService.AsQueryable().Where(it => it.Id == user_id).FirstAsync();
|
||||
if (user == null)
|
||||
{
|
||||
return ToResponse(ResultCode.CUSTOM_ERROR, "用户不存在");
|
||||
}
|
||||
var list = await _GiftClaimService.AsQueryable().Where(it => it.UserId == user_id).ToListAsync();
|
||||
List<object> list1 = new List<object>();
|
||||
list?.ForEach(it =>
|
||||
{
|
||||
list1.Add(new
|
||||
{
|
||||
it.Status,
|
||||
it.Name,
|
||||
it.Address,
|
||||
it.Phone
|
||||
});
|
||||
});
|
||||
return SUCCESS(list1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ using ZR.Infrastructure.WebExtensions;
|
|||
using ZR.ServiceCore.Signalr;
|
||||
using ZR.ServiceCore.SqlSugar;
|
||||
using ZR.Mall;
|
||||
using SKIT.FlurlHttpClient.Wechat.Api;
|
||||
//using SQLitePCL;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
|
@ -50,6 +51,19 @@ builder.Services.AddJwt();
|
|||
builder.Services.AddSingleton(new AppSettings(builder.Configuration));
|
||||
//app服务注册
|
||||
builder.Services.AddAppService();
|
||||
var wxMp = builder.Configuration.GetSection("WxMp");
|
||||
var mp_appid = wxMp.GetSection("AppID").Value ?? "";//默认值
|
||||
var mp_appSecret = wxMp.GetSection("AppSecret").Value ?? "";//默认值
|
||||
|
||||
builder.Services.AddSingleton<WechatApiClient>(sp =>
|
||||
{
|
||||
return new WechatApiClient(new WechatApiClientOptions
|
||||
{
|
||||
AppId = mp_appid,
|
||||
AppSecret = mp_appSecret
|
||||
});
|
||||
});
|
||||
|
||||
//开启计划任务
|
||||
builder.Services.AddTaskSchedulers();
|
||||
//请求大小限制
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="Lazy.Captcha.Core" Version="2.0.9" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
|
||||
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.12" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.4.0" />
|
||||
|
|
@ -27,6 +28,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Controllers\WebApi\" />
|
||||
<Folder Include="Properties\PublishProfiles\" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
//代码生成数据库配置 初始化数据:http://localhost:8888/common/initseedData
|
||||
"CodeGenDbConfig": {
|
||||
//代码生成连接字符串,注意{dbName}为固定格式,不要填写数据库名
|
||||
"Conn": "Data Source=192.168.1.41;User ID=sa;Password=Dbt@com@123;Initial Catalog={dbName};",
|
||||
"Conn": "Data Source=192.168.1.41;User ID=sa;Password=Dbt@com@123;Encrypt=True;TrustServerCertificate=True;Initial Catalog={dbName};",
|
||||
"DbType": 1,
|
||||
"IsAutoCloseConnection": true,
|
||||
"DbName": "ZrAdmin" //代码生成默认连接数据库,Oracle库是实例的名称
|
||||
|
|
@ -43,8 +43,8 @@
|
|||
"MainDb": "0", // 多租户主库配置ID
|
||||
"UseTenant": 0, //是否启用多租户 0:不启用 1:启用
|
||||
"InjectClass": [ "ZR.Repository", "ZR.Service", "ZR.Tasks", "ZR.ServiceCore", "ZR.Mall" ], //自动注入类
|
||||
"ShowDbLog": true, //是否打印db日志
|
||||
"InitDb": true, //是否初始化db
|
||||
"ShowDbLog": false, //是否打印db日志
|
||||
"InitDb": false, //是否初始化db
|
||||
"DemoMode": false, //是否演示模式
|
||||
"SingleLogin": false, //是否允许多设备/浏览器登录
|
||||
"workId": 1, //雪花id唯一数字
|
||||
|
|
@ -58,11 +58,11 @@
|
|||
},
|
||||
//阿里云存储配置
|
||||
"ALIYUN_OSS": {
|
||||
"REGIONID": "", //eg:cn-hangzhou
|
||||
"KEY": "XX",
|
||||
"SECRET": "XX",
|
||||
"bucketName": "bucketName",
|
||||
"domainUrl": "http://xxx.xxx.com", //访问资源域名
|
||||
"REGIONID": "https://oss-cn-shanghai.aliyuncs.com", //eg:cn-hangzhou
|
||||
"KEY": "LTAI5tAm5ZZf2HWXDSbpa2qZ",
|
||||
"SECRET": "daMgmpVpxVC9R0u88O3gbHjHmytyCM",
|
||||
"bucketName": "zpc-gift",
|
||||
"domainUrl": "https://zpc-gift.oss-cn-shanghai.aliyuncs.com", //访问资源域名
|
||||
"maxSize": 100 //上传文件大小限制 100M
|
||||
},
|
||||
//企业微信通知配置
|
||||
|
|
@ -77,6 +77,10 @@
|
|||
"AppID": "",
|
||||
"AppSecret": ""
|
||||
},
|
||||
"WxMp": {
|
||||
"AppId": "wx595ec949c6efd72b", //公众号AppId"
|
||||
"AppSecret": "81202b95746795f429fda6a448548b60" //公众号AppSecret
|
||||
},
|
||||
//邮箱配置信息
|
||||
"MailOptions": [
|
||||
{
|
||||
|
|
|
|||
BIN
ZR.Admin.WebApi/gift/2025/0731/1753959570_3841.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0731/1753960453_1554.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0731/1753960582_6224.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0731/1753961346_7203.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0731/1753963521_6271.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0801/1754025667_6541.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
ZR.Admin.WebApi/gift/2025/0801/1754025801_3379.jpg
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
ZR.Admin.WebApi/wwwroot/2025/0730/0d11f20ad2eea600.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ZR.Admin.WebApi/wwwroot/2025/0730/2462dc9bc2549207.jpg
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
ZR.Admin.WebApi/wwwroot/2025/0730/434da46405a347d2.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ZR.Admin.WebApi/wwwroot/2025/0730/eff3068dd43bdef6.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ZR.Admin.WebApi/wwwroot/2025/0731/68ce26d1f3ab7887.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -747,6 +747,7 @@ $if(replaceDto.ShowBtnEdit)
|
|||
// 修改按钮操作
|
||||
function handleUpdate(row) {
|
||||
reset()
|
||||
state.submitLoading = false
|
||||
const id = row.${replaceDto.FistLowerPk} || ids.value
|
||||
get${genTable.BusinessName}(id).then((res) => {
|
||||
const { code, data } = res
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
___________ _ _ _ _ ______ _______
|
||||
|___ / __ \ /\ | | (_) | \ | | ____|__ __|
|
||||
/ /| |__) | / \ __| |_ __ ___ _ _ __ | \| | |__ | |
|
||||
/ / | _ / / /\ \ / _` | '_ ` _ \| | '_ \ | . ` | __| | |
|
||||
/ /__| | \ \ / ____ \ (_| | | | | | | | | | |_| |\ | |____ | |
|
||||
/_____|_| \_\/_/ \_\__,_|_| |_| |_|_|_| |_(_)_| \_|______| |_|
|
||||
_ _ _ _ ______ _______
|
||||
/\ | | (_) | \ | | ____|__ __|
|
||||
/ \ __| |_ __ ___ _ _ __ | \| | |__ | |
|
||||
/ /\ \ / _` | '_ ` _ \| | '_ \ | . ` | __| | |
|
||||
/ ____ \ (_| | | | | | | | | | |_| |\ | |____ | |
|
||||
/_/ \_\__,_|_| |_| |_|_|_| |_(_)_| \_|______| |_|
|
||||
|
||||
94
ZR.Common/ImageConverter.cs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ZR.Common;
|
||||
|
||||
public static class ImageConverter
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 将 Base64 编码的字符串转换为图片的二进制数据(byte[])。
|
||||
/// </summary>
|
||||
/// <param name="base64String">Base64 编码的字符串,格式可以包含前缀(如 data:image/png;base64,)或不包含</param>
|
||||
/// <returns>图片的字节数组</returns>
|
||||
public static byte[] Base64ToImageBytes(string base64String)
|
||||
{
|
||||
// 如果包含 data:image/...base64, 的前缀,去除它
|
||||
var base64Data = base64String;
|
||||
|
||||
if (base64String.Contains(","))
|
||||
{
|
||||
base64Data = base64String.Substring(base64String.IndexOf(",") + 1);
|
||||
}
|
||||
|
||||
// 将 base64 字符串转换为字节数组
|
||||
return Convert.FromBase64String(base64Data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 Base64 转换成图片文件并保存到指定路径
|
||||
/// </summary>
|
||||
/// <param name="base64String">Base64 字符串</param>
|
||||
/// <param name="outputPath">输出文件完整路径(包含文件名和扩展名)</param>
|
||||
public static void SaveBase64AsImage(string base64String, string outputPath)
|
||||
{
|
||||
byte[] imageBytes = Base64ToImageBytes(base64String);
|
||||
File.WriteAllBytes(outputPath, imageBytes);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 从 Base64 字符串中提取文件扩展名。
|
||||
/// </summary>
|
||||
/// <param name="base64"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetFileExtensionFromBase64(string base64)
|
||||
{
|
||||
// 正则匹配 MIME 类型
|
||||
var match = Regex.Match(base64, @"^data:image/(?<format>[a-zA-Z+]+);base64,");
|
||||
if (!match.Success) return null;
|
||||
|
||||
string mimeType = match.Groups["format"].Value.ToLower();
|
||||
|
||||
// MIME 类型转文件扩展名
|
||||
return mimeType switch
|
||||
{
|
||||
"png" => ".png",
|
||||
"jpeg" or "jpg" => ".jpg",
|
||||
"gif" => ".gif",
|
||||
"webp" => ".webp",
|
||||
"bmp" => ".bmp",
|
||||
"svg+xml" => ".svg",
|
||||
"tiff" => ".tiff",
|
||||
"x-icon" => ".ico",
|
||||
_ => null // 未知类型
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成图片名称:时间戳(秒)+4位随机数字
|
||||
/// 示例:16907832451234.png
|
||||
/// </summary>
|
||||
/// <param name="extension">文件扩展名(例如 .png、.jpg),可选,默认值为 .png</param>
|
||||
/// <returns>生成的图片文件名</returns>
|
||||
public static string GenerateImageFileName(string extension = ".png")
|
||||
{
|
||||
// 获取当前时间戳(秒)
|
||||
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
||||
|
||||
// 生成 4 位随机数(1000 - 9999)
|
||||
Random random = new Random();
|
||||
int randomNumber = random.Next(1000, 10000);
|
||||
|
||||
// 拼接文件名
|
||||
return $"{timestamp}_{randomNumber}{extension}";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.14.1" />
|
||||
<PackageReference Include="MailKit" Version="4.9.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
|
||||
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.11.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
156
ZR.Model/Business/Dto/GiftClaimDto.cs
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
|
||||
namespace ZR.Model.Business.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表查询对象
|
||||
/// </summary>
|
||||
public class GiftClaimQueryDto : PagerInfo
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Phone { get; set; }
|
||||
public string Company { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string ProductModel { get; set; }
|
||||
public string ProductSerialNumber { get; set; }
|
||||
public int? Status { get; set; }
|
||||
|
||||
public string UserWxOpenId { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 礼品申领表输入输出对象
|
||||
/// </summary>
|
||||
public class GiftClaimDto
|
||||
{
|
||||
[Required(ErrorMessage = "主键不能为空")]
|
||||
[ExcelColumn(Name = "主键")]
|
||||
[ExcelColumnName("主键")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "用户ID不能为空")]
|
||||
[ExcelColumn(Name = "用户ID")]
|
||||
[ExcelColumnName("用户ID")]
|
||||
public int UserId { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "姓名不能为空")]
|
||||
[ExcelColumn(Name = "姓名")]
|
||||
[ExcelColumnName("姓名")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "联系方式不能为空")]
|
||||
[ExcelColumn(Name = "联系方式")]
|
||||
[ExcelColumnName("联系方式")]
|
||||
public string Phone { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "工作单位")]
|
||||
[ExcelColumnName("工作单位")]
|
||||
public string Company { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "收货地址不能为空")]
|
||||
[ExcelColumn(Name = "收货地址")]
|
||||
[ExcelColumnName("收货地址")]
|
||||
public string Address { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "产品型号不能为空")]
|
||||
[ExcelColumn(Name = "产品型号")]
|
||||
[ExcelColumnName("产品型号")]
|
||||
public string ProductModel { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "出品编号不能为空")]
|
||||
[ExcelColumn(Name = "出品编号")]
|
||||
[ExcelColumnName("出品编号")]
|
||||
public string ProductSerialNumber { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "出品年月不能为空")]
|
||||
[ExcelColumn(Name = "出品年月")]
|
||||
[ExcelColumnName("出品年月")]
|
||||
public string ProductDate { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "出品图片")]
|
||||
[ExcelColumnName("出品图片")]
|
||||
public string ProductImage { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "提交时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
|
||||
[ExcelColumnName("提交时间")]
|
||||
public DateTime? CreatedAt { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "审核状态不能为空")]
|
||||
[ExcelColumn(Name = "审核状态")]
|
||||
[ExcelColumnName("审核状态")]
|
||||
public int Status { get; set; }
|
||||
|
||||
|
||||
|
||||
[ExcelColumn(Name = "审核状态")]
|
||||
public string StatusLabel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核时间
|
||||
/// </summary>
|
||||
[ExcelColumn(Name = "审核时间")]
|
||||
[ExcelColumnName("审核时间")]
|
||||
public DateTime? ReviewAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户id
|
||||
/// </summary>
|
||||
[ExcelColumn(Name = "微信用户id")]
|
||||
[ExcelColumnName("微信用户id")]
|
||||
public string UserWxOpenId { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 礼品申领表输入输出对象
|
||||
/// </summary>
|
||||
public class AddGiftClaimDto
|
||||
{
|
||||
|
||||
[Required(ErrorMessage = "用户ID不能为空")]
|
||||
[ExcelColumn(Name = "用户ID")]
|
||||
[ExcelColumnName("用户ID")]
|
||||
public int UserId { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "姓名不能为空")]
|
||||
[ExcelColumn(Name = "姓名")]
|
||||
[ExcelColumnName("姓名")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "联系方式不能为空")]
|
||||
[ExcelColumn(Name = "联系方式")]
|
||||
[ExcelColumnName("联系方式")]
|
||||
public string Phone { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "工作单位")]
|
||||
[ExcelColumnName("工作单位")]
|
||||
public string Company { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "收货地址不能为空")]
|
||||
[ExcelColumn(Name = "收货地址")]
|
||||
[ExcelColumnName("收货地址")]
|
||||
public string Address { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "产品型号不能为空")]
|
||||
[ExcelColumn(Name = "产品型号")]
|
||||
[ExcelColumnName("产品型号")]
|
||||
public string ProductModel { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "出品编号不能为空")]
|
||||
[ExcelColumn(Name = "出品编号")]
|
||||
[ExcelColumnName("出品编号")]
|
||||
public string ProductSerialNumber { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "出品年月不能为空")]
|
||||
[ExcelColumn(Name = "出品年月")]
|
||||
[ExcelColumnName("出品年月")]
|
||||
public string ProductDate { get; set; }
|
||||
[Required(ErrorMessage = "出品图片不能为空")]
|
||||
[ExcelColumn(Name = "出品图片")]
|
||||
[ExcelColumnName("出品图片")]
|
||||
public string ProductImage { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
28
ZR.Model/Business/Dto/GiftConfigDto.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
namespace ZR.Model.Business.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序查询对象
|
||||
/// </summary>
|
||||
public class GiftConfigQueryDto : PagerInfo
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 礼品小程序输入输出对象
|
||||
/// </summary>
|
||||
public class GiftConfigDto
|
||||
{
|
||||
[Required(ErrorMessage = "Id不能为空")]
|
||||
public int Id { get; set; }
|
||||
|
||||
public string HomeImage { get; set; }
|
||||
|
||||
public string Extend { get; set; }
|
||||
|
||||
public string Extend1 { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
73
ZR.Model/Business/Dto/GiftUserDto.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
|
||||
namespace ZR.Model.Business.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表查询对象
|
||||
/// </summary>
|
||||
public class GiftUserQueryDto : PagerInfo
|
||||
{
|
||||
public string Nickname { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户表输入输出对象
|
||||
/// </summary>
|
||||
public class GiftUserDto
|
||||
{
|
||||
[Required(ErrorMessage = "主键ID不能为空")]
|
||||
[ExcelColumn(Name = "主键ID")]
|
||||
[ExcelColumnName("主键ID")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "微信openid不能为空")]
|
||||
[ExcelColumn(Name = "微信openid")]
|
||||
[ExcelColumnName("微信openid")]
|
||||
public string Openid { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "微信unionid")]
|
||||
[ExcelColumnName("微信unionid")]
|
||||
public string Unionid { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "昵称")]
|
||||
[ExcelColumnName("昵称")]
|
||||
public string Nickname { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "头像URL")]
|
||||
[ExcelColumnName("头像URL")]
|
||||
public string AvatarUrl { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "性别")]
|
||||
[ExcelColumnName("性别")]
|
||||
public string Gender { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "手机号")]
|
||||
[ExcelColumnName("手机号")]
|
||||
public string Phone { get; set; }
|
||||
|
||||
[Required(ErrorMessage = "状态不能为空")]
|
||||
[ExcelColumn(Name = "状态")]
|
||||
[ExcelColumnName("状态")]
|
||||
public string Status { get; set; }
|
||||
|
||||
[ExcelColumn(Name = "最后登录时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
|
||||
[ExcelColumnName("最后登录时间")]
|
||||
public DateTime? LastLoginTime { get; set; }
|
||||
|
||||
//[Required(ErrorMessage = "创建时间不能为空")]
|
||||
[ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
|
||||
[ExcelColumnName("创建时间")]
|
||||
public DateTime? CreateTime { get; set; }
|
||||
|
||||
//[Required(ErrorMessage = "更新时间不能为空")]
|
||||
[ExcelColumn(Name = "更新时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
|
||||
[ExcelColumnName("更新时间")]
|
||||
public DateTime? UpdateTime { get; set; }
|
||||
|
||||
|
||||
|
||||
[ExcelColumn(Name = "性别")]
|
||||
public string GenderLabel { get; set; }
|
||||
[ExcelColumn(Name = "状态")]
|
||||
public string StatusLabel { get; set; }
|
||||
}
|
||||
}
|
||||
83
ZR.Model/Business/GiftClaim.cs
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
|
||||
namespace ZR.Model.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表
|
||||
/// </summary>
|
||||
[SugarTable("gift_claim")]
|
||||
public class GiftClaim
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户ID
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "user_id")]
|
||||
public int UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 姓名
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 联系方式
|
||||
/// </summary>
|
||||
public string Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 工作单位
|
||||
/// </summary>
|
||||
public string Company { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 收货地址
|
||||
/// </summary>
|
||||
public string Address { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 产品型号
|
||||
/// </summary>
|
||||
public string ProductModel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出品编号
|
||||
/// </summary>
|
||||
public string ProductSerialNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出品年月
|
||||
/// </summary>
|
||||
public string ProductDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 出品图片
|
||||
/// </summary>
|
||||
public string ProductImage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提交时间
|
||||
/// </summary>
|
||||
public DateTime? CreatedAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审核时间
|
||||
/// </summary>
|
||||
public DateTime? ReviewAt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 微信用户id
|
||||
/// </summary>
|
||||
public string UserWxOpenId { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
32
ZR.Model/Business/GiftConfig.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
namespace ZR.Model.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序
|
||||
/// </summary>
|
||||
[SugarTable("gift_config")]
|
||||
public class GiftConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 首页图片
|
||||
/// </summary>
|
||||
public string HomeImage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扩展1
|
||||
/// </summary>
|
||||
public string Extend { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扩展2
|
||||
/// </summary>
|
||||
public string Extend1 { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
71
ZR.Model/Business/GiftUser.cs
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
|
||||
namespace ZR.Model.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表
|
||||
/// </summary>
|
||||
[SugarTable("gift_user")]
|
||||
public class GiftUser
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键ID
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 微信openid
|
||||
/// </summary>
|
||||
public string Openid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 微信unionid
|
||||
/// </summary>
|
||||
public string Unionid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 昵称
|
||||
/// </summary>
|
||||
public string Nickname { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 头像URL
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "avatar_url")]
|
||||
public string AvatarUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 性别
|
||||
/// </summary>
|
||||
public string Gender { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 手机号
|
||||
/// </summary>
|
||||
public string Phone { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string Status { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后登录时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "last_login_time")]
|
||||
public DateTime? LastLoginTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "create_time")]
|
||||
public DateTime? CreateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 更新时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "update_time")]
|
||||
public DateTime? UpdateTime { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
117
ZR.Service/Business/GiftClaimService.cs
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
||||
namespace ZR.Service.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表Service业务层处理
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IGiftClaimService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class GiftClaimService : BaseService<GiftClaim>, IGiftClaimService
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询礼品申领表列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GiftClaimDto> GetList(GiftClaimQueryDto parm)
|
||||
{
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
//.OrderBy("Id desc")
|
||||
.Where(predicate.ToExpression())
|
||||
.ToPage<GiftClaim, GiftClaimDto>(parm);
|
||||
//response.Result.ForEach(item =>
|
||||
//{
|
||||
// if (item.ProductImage.IndexOf("http") == -1)
|
||||
// {
|
||||
// item.ProductImage = "" +
|
||||
// }
|
||||
|
||||
//});
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
public GiftClaim GetInfo(int Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加礼品申领表
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public GiftClaim AddGiftClaim(GiftClaim model)
|
||||
{
|
||||
return Insertable(model).ExecuteReturnEntity();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改礼品申领表
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateGiftClaim(GiftClaim model)
|
||||
{
|
||||
return Update(model, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出礼品申领表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GiftClaimDto> ExportList(GiftClaimQueryDto parm)
|
||||
{
|
||||
parm.PageNum = 1;
|
||||
parm.PageSize = 100000;
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.Select((it) => new GiftClaimDto()
|
||||
{
|
||||
StatusLabel = it.Status.GetConfigValue<Model.System.SysDictData>("gift_request_claim"),
|
||||
}, true)
|
||||
.ToPage(parm);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询导出表达式
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
private static Expressionable<GiftClaim> QueryExp(GiftClaimQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<GiftClaim>();
|
||||
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), it => it.Name.Contains(parm.Name));
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Phone), it => it.Phone.Contains(parm.Phone));
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Company), it => it.Company.Contains(parm.Company));
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Address), it => it.Address.Contains(parm.Address));
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ProductModel), it => it.ProductModel.Contains(parm.ProductModel));
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.ProductSerialNumber), it => it.ProductSerialNumber.Contains(parm.ProductSerialNumber));
|
||||
predicate = predicate.AndIF(parm.Status != null, it => it.Status == parm.Status);
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.UserWxOpenId), it => it.UserWxOpenId.Contains(parm.UserWxOpenId));
|
||||
return predicate;
|
||||
}
|
||||
}
|
||||
}
|
||||
79
ZR.Service/Business/GiftConfigService.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
||||
namespace ZR.Service.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序Service业务层处理
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IGiftConfigService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class GiftConfigService : BaseService<GiftConfig>, IGiftConfigService
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询礼品小程序列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GiftConfigDto> GetList(GiftConfigQueryDto parm)
|
||||
{
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.ToPage<GiftConfig, GiftConfigDto>(parm);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
public GiftConfig GetInfo(int Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加礼品小程序
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public GiftConfig AddGiftConfig(GiftConfig model)
|
||||
{
|
||||
return Insertable(model).ExecuteReturnEntity();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改礼品小程序
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateGiftConfig(GiftConfig model)
|
||||
{
|
||||
return Update(model, true, "修改礼品小程序");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询导出表达式
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
private static Expressionable<GiftConfig> QueryExp(GiftConfigQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<GiftConfig>();
|
||||
|
||||
return predicate;
|
||||
}
|
||||
}
|
||||
}
|
||||
104
ZR.Service/Business/GiftUserService.cs
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Extensions;
|
||||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
|
||||
namespace ZR.Service.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表Service业务层处理
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IGiftUserService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class GiftUserService : BaseService<GiftUser>, IGiftUserService
|
||||
{
|
||||
/// <summary>
|
||||
/// 查询微信用户表列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GiftUserDto> GetList(GiftUserQueryDto parm)
|
||||
{
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
//.OrderBy("Id desc")
|
||||
.Where(predicate.ToExpression())
|
||||
.ToPage<GiftUser, GiftUserDto>(parm);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
public GiftUser GetInfo(int Id)
|
||||
{
|
||||
var response = Queryable()
|
||||
.Where(x => x.Id == Id)
|
||||
.First();
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加微信用户表
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public GiftUser AddGiftUser(GiftUser model)
|
||||
{
|
||||
return Insertable(model).ExecuteReturnEntity();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改微信用户表
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
public int UpdateGiftUser(GiftUser model)
|
||||
{
|
||||
return Update(model, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出微信用户表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GiftUserDto> ExportList(GiftUserQueryDto parm)
|
||||
{
|
||||
parm.PageNum = 1;
|
||||
parm.PageSize = 100000;
|
||||
var predicate = QueryExp(parm);
|
||||
|
||||
var response = Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.Select((it) => new GiftUserDto()
|
||||
{
|
||||
GenderLabel = it.Gender.GetConfigValue<Model.System.SysDictData>("sys_user_sex"),
|
||||
StatusLabel = it.Status.GetConfigValue<Model.System.SysDictData>("sys_common_status"),
|
||||
}, true)
|
||||
.ToPage(parm);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询导出表达式
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
private static Expressionable<GiftUser> QueryExp(GiftUserQueryDto parm)
|
||||
{
|
||||
var predicate = Expressionable.Create<GiftUser>();
|
||||
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Nickname), it => it.Nickname.Contains(parm.Nickname));
|
||||
return predicate;
|
||||
}
|
||||
}
|
||||
}
|
||||
22
ZR.Service/Business/IBusinessService/IGiftClaimService.cs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
|
||||
namespace ZR.Service.Business.IBusinessService
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品申领表service接口
|
||||
/// </summary>
|
||||
public interface IGiftClaimService : IBaseService<GiftClaim>
|
||||
{
|
||||
PagedInfo<GiftClaimDto> GetList(GiftClaimQueryDto parm);
|
||||
|
||||
GiftClaim GetInfo(int Id);
|
||||
|
||||
|
||||
GiftClaim AddGiftClaim(GiftClaim parm);
|
||||
int UpdateGiftClaim(GiftClaim parm);
|
||||
|
||||
|
||||
PagedInfo<GiftClaimDto> ExportList(GiftClaimQueryDto parm);
|
||||
}
|
||||
}
|
||||
21
ZR.Service/Business/IBusinessService/IGiftConfigService.cs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
|
||||
namespace ZR.Service.Business.IBusinessService
|
||||
{
|
||||
/// <summary>
|
||||
/// 礼品小程序service接口
|
||||
/// </summary>
|
||||
public interface IGiftConfigService : IBaseService<GiftConfig>
|
||||
{
|
||||
PagedInfo<GiftConfigDto> GetList(GiftConfigQueryDto parm);
|
||||
|
||||
GiftConfig GetInfo(int Id);
|
||||
|
||||
|
||||
GiftConfig AddGiftConfig(GiftConfig parm);
|
||||
int UpdateGiftConfig(GiftConfig parm);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
22
ZR.Service/Business/IBusinessService/IGiftUserService.cs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
using ZR.Model.Business.Dto;
|
||||
using ZR.Model.Business;
|
||||
|
||||
namespace ZR.Service.Business.IBusinessService
|
||||
{
|
||||
/// <summary>
|
||||
/// 微信用户表service接口
|
||||
/// </summary>
|
||||
public interface IGiftUserService : IBaseService<GiftUser>
|
||||
{
|
||||
PagedInfo<GiftUserDto> GetList(GiftUserQueryDto parm);
|
||||
|
||||
GiftUser GetInfo(int Id);
|
||||
|
||||
|
||||
GiftUser AddGiftUser(GiftUser parm);
|
||||
int UpdateGiftUser(GiftUser parm);
|
||||
|
||||
|
||||
PagedInfo<GiftUserDto> ExportList(GiftUserQueryDto parm);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,15 @@
|
|||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Model;
|
||||
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
||||
using NLog;
|
||||
|
||||
using ZR.Infrastructure.Helper;
|
||||
using ZR.Infrastructure.IPTools;
|
||||
using ZR.Model.System;
|
||||
using ZR.ServiceCore.Services;
|
||||
|
|
@ -111,11 +115,20 @@ namespace ZR.ServiceCore.Middleware
|
|||
sysOperLog.OperParam = logAttribute.IsSaveRequestData ? sysOperLog.OperParam : "";
|
||||
sysOperLog.JsonResult = logAttribute.IsSaveResponseData ? sysOperLog.JsonResult : "";
|
||||
}
|
||||
|
||||
if (statusCode == 403)
|
||||
{
|
||||
sysOperLog.Status = 1;
|
||||
sysOperLog.ErrorMsg = "无权限访问";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(logAttribute.MessageKey))
|
||||
{
|
||||
|
||||
sysOperLog.ErrorMsg = LogMessageRegistry.GetMessage(logAttribute.MessageKey, context);
|
||||
}
|
||||
}
|
||||
LogEventInfo ei = new(NLog.LogLevel.Info, "GlobalActionMonitor", "");
|
||||
|
||||
ei.Properties["jsonResult"] = !HttpMethods.IsGet(method) ? jsonResult : "";
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ namespace ZR.ServiceCore.Middleware
|
|||
var an1 = string.Empty;
|
||||
if (ex.Message.Contains(q1))
|
||||
{
|
||||
an1 = $"====请查看issue:https://gitee.com/izory/ZrAdminNetCore/issues/I6S4DZ";
|
||||
//an1 = $"====请查看issue:https://gitee.com/izory/ZrAdminNetCore/issues/I6S4DZ";
|
||||
}
|
||||
msg = "服务器好像出了点问题,请联系系统管理员...";
|
||||
error = $"异常原因:{ex.Message}{an1}";
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ namespace ZR.ServiceCore.Middleware
|
|||
await _next(context);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_whitelistPaths.Any(p => path.StartsWith(p, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
await _next(context);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.System;
|
||||
|
||||
|
|
@ -17,7 +18,18 @@ namespace ZR.ServiceCore.Services
|
|||
/// <param name="dto"></param>
|
||||
/// <returns>文件对象</returns>
|
||||
Task<SysFile> SaveFileToLocal(string rootPath, UploadDto dto, string userName, IFormFile formFile);
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="rootPath"></param>
|
||||
/// <param name="dto"></param>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="fileName"></param>
|
||||
/// <param name="fileByte"></param>
|
||||
/// <returns></returns>
|
||||
Task<SysFile> SaveFileToLocal(string rootPath, UploadDto dto, string userName, string fileName, byte[] fileByte);
|
||||
|
||||
/// <summary>
|
||||
/// 上传文件到阿里云
|
||||
/// </summary>
|
||||
|
|
@ -26,7 +38,16 @@ namespace ZR.ServiceCore.Services
|
|||
/// <param name="formFile"></param>
|
||||
/// <returns></returns>
|
||||
Task<SysFile> SaveFileToAliyun(SysFile file, UploadDto dto, IFormFile formFile);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 上传文件到阿里云
|
||||
/// </summary>
|
||||
/// <param name="sysFile"></param>
|
||||
/// <param name="dto"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <returns></returns>
|
||||
Task<SysFile> SaveFileToAliyun(SysFile sysFile, UploadDto dto, byte[] file);
|
||||
|
||||
/// <summary>
|
||||
/// 按时间来创建文件夹
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -2,13 +2,17 @@
|
|||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Enums;
|
||||
using Infrastructure.Model;
|
||||
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
using SixLabors.ImageSharp;
|
||||
using SixLabors.ImageSharp.Formats.Jpeg;
|
||||
|
||||
using System.Net;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
using ZR.Common;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.System;
|
||||
|
|
@ -210,5 +214,50 @@ namespace ZR.ServiceCore.Services
|
|||
// 保存压缩后的图片到输出流
|
||||
await image.SaveAsync(outputStream, encoder);
|
||||
}
|
||||
|
||||
public async Task<SysFile> SaveFileToLocal(string rootPath, UploadDto dto, string userName, string fileName, byte[] fileByte)
|
||||
{
|
||||
var fileDir = dto.FileDir;
|
||||
string fileExt = Path.GetExtension(fileName);
|
||||
fileName = (fileName.IsEmpty() ? HashFileName() : fileName) + fileExt;
|
||||
|
||||
string filePath = GetdirPath(fileDir);
|
||||
string finalFilePath = Path.Combine(rootPath, filePath, fileName);
|
||||
double fileSize = Math.Round(fileByte.Length / 1024.0, 2);
|
||||
|
||||
if (!Directory.Exists(Path.GetDirectoryName(finalFilePath)))
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(finalFilePath));
|
||||
}
|
||||
// 常见的图片扩展名
|
||||
//var imageExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
|
||||
|
||||
// 检查扩展名是否在图片扩展名列表中
|
||||
//bool isImageByExtension = imageExtensions.Contains(fileExt);
|
||||
using (var stream = new FileStream(finalFilePath, FileMode.Create))
|
||||
{
|
||||
await stream.WriteAsync(fileByte, 0, fileByte.Length);
|
||||
}
|
||||
string uploadUrl = OptionsSetting.Upload.UploadUrl;
|
||||
string accessPath = string.Concat(filePath.Replace("\\", "/"), "/", fileName);
|
||||
Uri baseUri = new(uploadUrl);
|
||||
Uri fullUrl = new(baseUri, accessPath);
|
||||
SysFile file = new(fileName, fileName, fileExt, fileSize + "kb", filePath, userName)
|
||||
{
|
||||
StoreType = (int)StoreType.LOCAL,
|
||||
FileType = fileExt,
|
||||
FileUrl = finalFilePath.Replace("\\", "/"),
|
||||
AccessUrl = fullUrl.AbsoluteUri,
|
||||
ClassifyType = "",
|
||||
CategoryId = dto.CategoryId,
|
||||
};
|
||||
file.Id = await InsertFile(file);
|
||||
return file;
|
||||
}
|
||||
|
||||
public async Task<SysFile> SaveFileToAliyun(SysFile sysFile, UploadDto dto, byte[] file)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||