feat 电子餐券

This commit is contained in:
2024-08-08 18:05:32 +08:00
parent c078ce8830
commit 366af67135
10 changed files with 389 additions and 206 deletions

View File

@@ -0,0 +1,29 @@
using Dlhis.External.EMealVoucher.Request;
using Dlhis.External.EMealVoucher.Services;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.External.EMealVoucher.Controllers;
[Route("api/[controller]")]
[ApiController]
public class EMealVoucherController : ControllerBase
{
private readonly IEMealVoucherService _eMealVoucherService;
public EMealVoucherController(IEMealVoucherService eMealVoucherService)
{
_eMealVoucherService = eMealVoucherService;
}
/// <summary>
/// 接收
/// </summary>
/// <param name="request"></param>
[HttpPost("receive")]
[Transactional]
public async Task Receive(EMealVoucherReceiveRequest request)
{
await _eMealVoucherService.ReceiveAsync(request);
}
}

View File

@@ -0,0 +1,144 @@
using System.ComponentModel.DataAnnotations;
namespace Dlhis.External.EMealVoucher.Request;
public class EMealVoucherReceiveRequest : IValidatableObject
{
/// <summary>
/// 流水号
/// </summary>
[Required(ErrorMessage = "流水号不能为空")]
public string No { get; set; }
/// <summary>
/// 标题
/// </summary>
[Required(ErrorMessage = "标题不能为空")]
public string Title { get; set; }
/// <summary>
/// 工号
/// </summary>
[Required(ErrorMessage = "工号不能为空")]
public string Code { get; set; }
/// <summary>
/// 手机号
/// </summary>
[Required(ErrorMessage = "成本中心不能为空")]
public string Phone { get; set; }
/// <summary>
/// 申请日期
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 成本中心
/// </summary>
[Required(ErrorMessage = "成本中心不能为空")]
public string CostId { get; set; }
/// <summary>
/// 来宾来源
/// </summary>
[Required(ErrorMessage = "来宾来源不能为空")]
public string Source { get; set; }
/// <summary>
/// 来宾数量
/// </summary>
[Range(1, int.MaxValue, ErrorMessage = "来宾数量有误")]
public int Number { get; set; }
/// <summary>
/// 申请事由
/// </summary>
[Required(ErrorMessage = "申请事由不能为空")]
public string Reason { get; set; }
/// <summary>
/// 餐别组合 早餐1;午餐2;晚餐3;夜宵4,凌晨餐5
/// </summary>
[MinLength(1, ErrorMessage = "消费厂区不能为空")]
[MaxLength(5, ErrorMessage = "消费厂区不能为空")]
public List<int> Shifts { get; set; }
/// <summary>
/// 餐券可消费厂区代码,逗号分隔
/// </summary>
[MinLength(1, ErrorMessage = "消费厂区不能为空")]
public List<string> Factories { get; set; }
/// <summary>
/// 明细
/// </summary>
[MinLength(1, ErrorMessage = "明细不能为空")]
public List<EMealVoucherReceiveDetailRequest> Details { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (Number != Details.Count)
{
yield return new ValidationResult("来宾数量不匹配", new[] { nameof(Number) });
}
}
}
public class EMealVoucherReceiveDetailRequest : IValidatableObject
{
/// <summary>
/// 用户类型 新员工/外来人员
/// </summary>
[Required(ErrorMessage = "用户类型不可为空")]
public string UserType { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[Required(ErrorMessage = "身份证号不可为空")]
public string IdNo { get; set; }
/// <summary>
/// 姓名
/// </summary>
[Required(ErrorMessage = "姓名不可为空")]
public string Name { get; set; }
/// <summary>
/// 手机号
/// </summary>
[MinLength(11, ErrorMessage = "手机号不合法")]
[MaxLength(11, ErrorMessage = "手机号不合法")]
public string Phone { get; set; }
/// <summary>
/// 使用开始
/// </summary>
public DateTime Start { get; set; }
/// <summary>
/// 使用结束
/// </summary>
public DateTime End { get; set; }
/// <summary>
/// 金额
/// </summary>
[Range(0.01, double.MaxValue)]
public decimal Amount { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (End <= DateTime.Now)
{
yield return new ValidationResult("使用结束时间不可小于当前时间", new[] { nameof(End) });
}
if (Start >= End)
{
yield return new ValidationResult("使用开始,使用结束时间有误", new[] { nameof(Start) });
}
}
}

View File

@@ -0,0 +1,8 @@
using Dlhis.External.EMealVoucher.Request;
namespace Dlhis.External.EMealVoucher.Services;
public interface IEMealVoucherService : IScopeDependency
{
Task ReceiveAsync(EMealVoucherReceiveRequest request);
}

View File

@@ -0,0 +1,53 @@
using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
using Dlhis.External.EMealVoucher.Request;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.External.EMealVoucher.Services.Implements;
public class EMealVoucherService : IEMealVoucherService
{
private readonly IDbContext _dbContext;
public EMealVoucherService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task ReceiveAsync(EMealVoucherReceiveRequest request)
{
(await _dbContext.Queryable<EMealVoucherEntity>().Where(x => x.No == request.No).AnyAsync()).ThrowIfTrue($"{request.No}已存在");
var voucher = new EMealVoucherEntity
{
No = request.No,
Title = request.Title,
Code = request.Code,
CostId = request.CostId,
Source = request.Source,
Phone = request.Phone,
Number = request.Number,
Reason = request.Reason,
Shifts = request.Shifts.Select(x => (ShiftEnumType)x).ToList(),
Date = request.Date,
Factories = request.Factories
};
var details = request.Details.Select(x => new EMealVoucherDetailEntity
{
No = request.No,
UserType = x.UserType,
IdNo = x.IdNo,
Name = x.Name,
Phone = x.Phone,
Start = x.Start,
End = x.End,
Amount = x.Amount
}).ToList();
var id = await _dbContext.InsertReturnIdentityAsync(voucher);
details.ForEach(x => x.VoucherId = id);
await _dbContext.InsertAsync(details);
}
}