diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
index 76fcdd18..d319b36e 100644
--- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
+++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs
@@ -153,7 +153,7 @@ public class DishesMenuService : IDishesMenuService
Number = number,
Price = price,
- Type = CanteenApplicaitonTypeEnumType.Booking,
+ Type = CanteenApplicationTypeEnumType.Booking,
Version = 0,
};
});
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/MealUserService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/MealUserService.cs
index a83bf496..a8c13089 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/MealUserService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/MealUserService.cs
@@ -100,7 +100,7 @@ public class MealUserService : IMealUserService
Status = BalanceRecordStatusEnumType.Valid,
CostDateTime = DateTime.Now,
Remark = $"{gainfoLeave.Code}:余额转入",
- ApplicationType = CanteenApplicaitonTypeEnumType.MealSupplement,
+ ApplicationType = CanteenApplicationTypeEnumType.MealSupplement,
TenantId = gainfo.Factory,
Werks = gainfo.Werks,
IsDeleted = false,
diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs
index 1e54a38f..83f1fdd0 100644
--- a/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs
+++ b/Src/Dlhis.Canteen/MealSupplementRecord/Services/Implements/MealSupplementRecordService.cs
@@ -156,7 +156,7 @@ public class MealSupplementRecordService : IMealSupplementRecordService
await _dbContext.InsertAsync(new BalanceRecordEntity
{
Amount = request.Balance,
- ApplicationType = CanteenApplicaitonTypeEnumType.MealSupplement,
+ ApplicationType = CanteenApplicationTypeEnumType.MealSupplement,
Type = BalanceRecordTypeEnumType.In,
BusinessPlaceCode = null,
BusinessShiftCode = null,
diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
index d6b91a1d..ecf52125 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
@@ -137,4 +137,16 @@ public class BalancesController : ControllerBase
{
return await _balanceService.GetConsumeDeviceAsync(request);
}
-}
+
+
+ ///
+ /// 海宁餐补数据写入
+ ///
+ ///
+ [Transactional]
+ [HttpPost("haining/import")]
+ public async Task Import(BalanceHainingImportRequest request)
+ {
+ await _balanceService.Import(request);
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceHainingImportRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceHainingImportRequest.cs
new file mode 100644
index 00000000..3e163eb7
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceHainingImportRequest.cs
@@ -0,0 +1,115 @@
+using System.ComponentModel.DataAnnotations;
+using Dlhis.Entity.Canteen.Enums;
+using Kurisu.AspNetCore.Utils.Extensions;
+
+namespace Dlhis.Canteen.Order.Request;
+
+public class BalanceHainingImportRequest : IValidatableObject
+{
+ ///
+ /// 工号
+ ///
+ [Required(ErrorMessage = "工号不可为空")]
+ public string UserCode { get; set; }
+
+ ///
+ /// 流水号
+ ///
+ [Required(ErrorMessage = "流水号不可为空")]
+ public string No { get; set; }
+
+ ///
+ /// 设备号
+ ///
+ public string DeviceUniqueNo { get; set; }
+
+ ///
+ /// 金额
+ ///
+ [Required]
+ public decimal Amount { get; set; }
+
+ ///
+ /// 消费数据类型
+ ///
+ [Required]
+ [EnumDataType(typeof(CanteenApplicationTypeEnumType), ErrorMessage = "消费数据类型有误")]
+ public CanteenApplicationTypeEnumType ApplicationType { get; set; }
+
+ ///
+ /// 餐次
+ ///
+ [Required]
+ [EnumDataType(typeof(ShiftEnumType), ErrorMessage = "餐次类型有误")]
+ public ShiftEnumType ShiftType { get; set; }
+
+ ///
+ /// 营业点
+ ///
+ public Guid? BusinessPlaceCode { get; set; }
+
+ ///
+ /// 消费类型 0:消费, 1:充值
+ ///
+ [Required]
+ [EnumDataType(typeof(BalanceRecordTypeEnumType), ErrorMessage = "消费类型有误")]
+ public BalanceRecordTypeEnumType Type { get; set; }
+
+ ///
+ /// 消费来源
+ ///
+ [EnumDataType(typeof(BalanceRecordSourceEnumType), ErrorMessage = "消费来源有误")]
+ public BalanceRecordSourceEnumType Source { get; set; }
+
+ ///
+ /// 成本日期
+ ///
+ [Required]
+ public DateTime CostDate { get; set; }
+
+ ///
+ /// 消费时间
+ ///
+ [Required]
+ public DateTime CostDateTime { get; set; }
+
+ ///
+ /// 厂区
+ ///
+ [Required(ErrorMessage = "厂区不可为空")]
+ public string Factory { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [Required(ErrorMessage = "备注不可为空")]
+ public string Remark { get; set; }
+
+
+ public IEnumerable Validate(ValidationContext validationContext)
+ {
+ if (Type == BalanceRecordTypeEnumType.Out)
+ {
+ Amount = -Math.Abs(Amount);
+
+ if (DeviceUniqueNo.IsEmpty())
+ {
+ yield return new ValidationResult("消费设备号不能为空", new[] { nameof(DeviceUniqueNo) });
+ }
+
+ if (ApplicationType != CanteenApplicationTypeEnumType.Device)
+ {
+ yield return new ValidationResult("仅支持设备消费", new[] { nameof(ApplicationType) });
+ }
+ }
+ else
+ {
+ Amount = Math.Abs(Amount);
+
+ if (ApplicationType != CanteenApplicationTypeEnumType.MealSupplement)
+ {
+ yield return new ValidationResult("只支持餐补充值", new[] { nameof(ApplicationType) });
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs
index 3231e4df..80109baa 100644
--- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs
@@ -10,7 +10,7 @@ public class BalanceRecordUserPageRequest : PageDto, IValidatableObject
///
/// 消费应用类型
///
- public CanteenApplicaitonTypeEnumType? ApplicationType { get; set; }
+ public CanteenApplicationTypeEnumType? ApplicationType { get; set; }
///
/// 日期范围查询
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserPageResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserPageResponse.cs
index 532b89d1..f056026b 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserPageResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserPageResponse.cs
@@ -55,7 +55,7 @@ public class BalanceRecordUserPageResponse
///
/// 消费应用类型
///
- public CanteenApplicaitonTypeEnumType ApplicationType { get; set; }
+ public CanteenApplicationTypeEnumType ApplicationType { get; set; }
///
/// 消费应用类型
diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
index a7cfb3d7..6454181b 100644
--- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs
@@ -29,4 +29,7 @@ public interface IBalanceService : IScopeDependency
Task> AverageDailyAsync(AverageDailyRequest request);
Task> GetConsumeDeviceAsync(GetConsumeDeviceRequest request);
+
+
+ Task Import(BalanceHainingImportRequest request);
}
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index abf8414c..790e736c 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -494,6 +494,58 @@ public class BalanceService : IBalanceService
return page;
}
+ public async Task Import(BalanceHainingImportRequest request)
+ {
+ var gainfo = await _dbContext.Queryable().Where(x => x.Code == request.UserCode).SingleAsync();
+ gainfo.ThrowIfNull($"工号{request.UserCode}不存在");
+ var gainfoMeal = await _dbContext.Queryable().Where(x => x.UserCode == request.UserCode).SingleAsync();
+
+
+ await _dbContext.InsertAsync(new BalanceRecordEntity
+ {
+ Amount = request.Amount,
+ ApplicationType = request.ApplicationType,
+ Type = request.Type,
+ BusinessPlaceCode = request.BusinessPlaceCode,
+ BusinessShiftCode = null,
+ ShiftType = request.ShiftType,
+ CostDate = request.CostDate,
+ CostDateTime = request.CostDateTime,
+ UserNo = gainfo.No,
+ No = request.No,
+ UserCode = gainfo.Code,
+ TenantId = request.Factory,
+ Status = BalanceRecordStatusEnumType.Valid,
+ Source = request.Source,
+ Remark = request.Remark,
+ CostId = gainfo.CostId,
+ SubsidiesFromMonth = request.CostDate.ToString("yyyyMM"),
+ OriginTenantId = gainfo.Factory,
+ Werks = gainfo.Werks,
+ Name = gainfo.Name,
+ IsCostCrossTenant = false,
+ DepartmentNo = gainfo.DepartmentNo,
+ DeviceUniqueNo = request.DeviceUniqueNo,
+
+ IsDeleted = false,
+
+ CreatedBy = 1,
+ CreateTime = DateTime.Now,
+ ModifiedBy = 1,
+ ModifiedTime = DateTime.Now,
+ });
+
+ var newBalance = gainfoMeal.Balance += request.Amount;
+
+ await _dbContext.Updateable()
+ .SetColumns(x => x.Balance == newBalance)
+ .SetColumns(x => x.ModifiedBy == 1)
+ .SetColumns(x => x.ModifiedTime == DateTime.Now)
+ .SetColumns(x => x.Version == x.Version + 1)
+ .Where(x => x.UserCode == request.UserCode && x.Version == gainfoMeal.Version)
+ .ExecuteCommandThrowVersionAsync("写入失败,正在消费中");
+ }
+
///
/// 获取离线设备
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
index bdcd7ae4..80c7590c 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BookingOrderService.cs
@@ -55,7 +55,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
RequestJson = request.ToJson(),
ThirdNo = string.Empty,
Type = BalanceRecordTypeEnumType.Out,
- ApplicationType = CanteenApplicaitonTypeEnumType.Booking,
+ ApplicationType = CanteenApplicationTypeEnumType.Booking,
Name = gainfo.Name,
Source = request.Source,
UserNo = gainfo.No,
@@ -287,7 +287,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
var end = start.AddDays(1).AddSeconds(-1);
var exists = await DbContext.Queryable()
- .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking)
+ .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.Booking)
.Where(x => x.OrderStatus == CanteenOrderStatusEnumType.Success)
.Where(x => x.ShiftType == shiftType)
.Where(x => x.UserNo == gainfo.No)
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index 9cc3dc2b..9bb19b50 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -182,7 +182,7 @@ public class OrderService : BaseOrderService, IOrderService
RequestJson = request.ToJson(),
ThirdNo = request.ThirdNo,
Type = BalanceRecordTypeEnumType.Out,
- ApplicationType = CanteenApplicaitonTypeEnumType.Device,
+ ApplicationType = CanteenApplicationTypeEnumType.Device,
Name = gainfo.Name,
Source = request.Source,
UserNo = gainfo.No,
@@ -314,7 +314,7 @@ public class OrderService : BaseOrderService, IOrderService
RequestJson = request.ToJson(),
ThirdNo = request.ThirdNo,
Type = BalanceRecordTypeEnumType.Out,
- ApplicationType = CanteenApplicaitonTypeEnumType.Device,
+ ApplicationType = CanteenApplicationTypeEnumType.Device,
Name = gainfo.Name,
Source = request.Source,
UserNo = gainfo.No,
@@ -383,7 +383,7 @@ public class OrderService : BaseOrderService, IOrderService
var pageResult = await DbContext.Queryable().Where(x => x.UserNo == gainfo.No)
.LeftJoin((x, bplace) => x.BusinessPlaceCode == bplace.Code)
- .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking)
+ .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.Booking)
.OrderBy(x => x.CreateTime, OrderByType.Desc)
.Select((x, bplace) => new OrderAggregationResponse
{
@@ -422,7 +422,7 @@ public class OrderService : BaseOrderService, IOrderService
var orders = await DbContext.Queryable().Where(x => x.IsOffline)
.Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
.Where(x => x.OrderStatus == CanteenOrderStatusEnumType.Success)
- .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Device)
+ .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.Device)
.Where(x => SqlFunc.IsNullOrEmpty(x.BusinessShiftCode))
.WhereIF(outRequest.No.IsPresent(), x => x.No == outRequest.No)
.ToListAsync();
diff --git a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
index 23935c82..b5874947 100644
--- a/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
+++ b/Src/Dlhis.Entity/Canteen/Entities/BalanceRecordEntity.cs
@@ -143,7 +143,7 @@ public class BalanceRecordEntity : SugarBaseEntity, ISoftDeleted, ITenantId
/// 餐饮应用类型
///
[SugarColumn(ColumnDescription = "餐饮应用类型", ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))]
- public CanteenApplicaitonTypeEnumType ApplicationType { get; set; }
+ public CanteenApplicationTypeEnumType ApplicationType { get; set; }
public string TenantId { get; set; }
diff --git a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs
index e6538244..7b49aa17 100644
--- a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs
+++ b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs
@@ -22,7 +22,7 @@ public class DishesMenuEntity : SugarBaseEntity, ITenantId, IVersion
/// 菜单类型
///
[SugarColumn(ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))]
- public CanteenApplicaitonTypeEnumType Type { get; set; }
+ public CanteenApplicationTypeEnumType Type { get; set; }
///
/// 所属营业点
diff --git a/Src/Dlhis.Entity/Canteen/Enums/CanteenApplicaitonTypeEnumType.cs b/Src/Dlhis.Entity/Canteen/Enums/CanteenApplicationTypeEnumType.cs
similarity index 93%
rename from Src/Dlhis.Entity/Canteen/Enums/CanteenApplicaitonTypeEnumType.cs
rename to Src/Dlhis.Entity/Canteen/Enums/CanteenApplicationTypeEnumType.cs
index 1b81255c..77bdf515 100644
--- a/Src/Dlhis.Entity/Canteen/Enums/CanteenApplicaitonTypeEnumType.cs
+++ b/Src/Dlhis.Entity/Canteen/Enums/CanteenApplicationTypeEnumType.cs
@@ -6,7 +6,7 @@ namespace Dlhis.Entity.Canteen.Enums;
/// 餐饮应用类型
///
[Description("餐饮应用类型")]
-public enum CanteenApplicaitonTypeEnumType
+public enum CanteenApplicationTypeEnumType
{
[Description("设备消费")]
Device = 100,
diff --git a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs
index c7ee565c..b254623c 100644
--- a/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs
+++ b/Src/Dlhis.ScheduledTask/Jobs/MealSupplementHandlerJob.cs
@@ -159,7 +159,7 @@ public class MealSupplementHandlerJob : BaseJob
await DbContext.InsertAsync(new BalanceRecordEntity
{
Amount = mealSupplement.Amount,
- ApplicationType = CanteenApplicaitonTypeEnumType.MealSupplement,
+ ApplicationType = CanteenApplicationTypeEnumType.MealSupplement,
Type = BalanceRecordTypeEnumType.In,
BusinessPlaceCode = null,
BusinessShiftCode = null,
diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/HangfireController.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/HangfireController.cs
index f52b986a..c44e46d2 100644
--- a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/HangfireController.cs
+++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/HangfireController.cs
@@ -81,7 +81,7 @@ public class HangfireController : ControllerBase
{
var data = await _dbContext.Queryable()
.Where(x => x.UserCode == row.UserCode)
- .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.MealSupplement)
+ .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.MealSupplement)
.Where(x => x.Remark == row.Remark)
.ToListAsync();