@@ -15,4 +15,8 @@ | |||
<ProjectReference Include="..\BPA.KitChen.GroupMealOrder.SqlSugar\BPA.KitChen.GroupMealOrder.SqlSugar.csproj" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Folder Include="Service\AExternalPlatform\Service\WeighOrder\Serviec\" /> | |||
</ItemGroup> | |||
</Project> |
@@ -1,7 +0,0 @@ | |||
namespace BPA.KitChen.GroupMealOrder.Application | |||
{ | |||
public class Class1 | |||
{ | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto | |||
{ | |||
public class BaseEPDto | |||
{ | |||
public string Sign { get; set; } | |||
public string Key { get; set; } | |||
} | |||
} |
@@ -0,0 +1,29 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto | |||
{ | |||
public class BaseRequestDto<T> | |||
{ | |||
/// <summary> | |||
/// 是否下发 | |||
/// </summary> | |||
public bool IsPush { get; set; } | |||
/// <summary> | |||
/// 回调地址 | |||
/// </summary> | |||
public string CallbackUrl { get; set; } | |||
public List<string> StoreIdList { get; set; } | |||
public List<string> DeviceIdList { get; set; } | |||
public List<T> DataInfo { get; set; } | |||
} | |||
} |
@@ -0,0 +1,158 @@ | |||
| |||
using Furion.JsonSerialization; | |||
using Newtonsoft.Json; | |||
using NPOI.POIFS.Crypt.Dsig; | |||
using NPOI.SS.Formula.Functions; | |||
using NPOI.Util.ArrayExtensions; | |||
using System.Collections.Generic; | |||
using System.ComponentModel.DataAnnotations; | |||
using System.Reflection; | |||
using System.Text; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto | |||
{ | |||
/// <summary> | |||
/// Dto参数验证 | |||
/// </summary> | |||
public static class DtoValidator | |||
{ | |||
///// <summary> | |||
///// 获取签名 | |||
///// </summary> | |||
///// <typeparam name="T"></typeparam> | |||
///// <param name="t"></param> | |||
///// <param name="otype">0-不排序 1-按名称ASCII排序</param> | |||
///// <returns></returns> | |||
//public static string GetSign<T>(T t, int otype = 1) | |||
//{ | |||
// string retstr = ""; | |||
// //定义PropertyInfo的List | |||
// List<PropertyInfo> proplist = new List<PropertyInfo>(); | |||
// //遍历泛型类的每个属性加入到List里面 | |||
// Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), | |||
// p => proplist.Add(p)); | |||
// //根据参数进行排序 0-不排序 1-按名称ASCII码排序 | |||
// if (otype == 1) | |||
// proplist = proplist.OrderBy(k => k.Name).ToList(); | |||
// //遍历List泛型生成我们要签名的字符串 | |||
// proplist.ForEach(p => | |||
// { | |||
// if (p.Name.ToLower() != "sign".ToLower()) | |||
// { | |||
// if (p.GetValue(t, null) != null && p.GetValue(t, null).ToString() != "") | |||
// { | |||
// var type = p.GetValue(t, null).GetType().FullName; | |||
// if (type == "System.String" || type == "System.Boolean" || type == "System.Int32" || type == "System.DateTime") | |||
// { | |||
// retstr = retstr + p.Name + "=" + p.GetValue(t, null) + "&"; | |||
// } | |||
// else | |||
// { | |||
// retstr = retstr + p.Name + "=" + JsonConvert.SerializeObject(p.GetValue(t, null)) + "&"; | |||
// } | |||
// } | |||
// } | |||
// }); | |||
// //把字符串最后一位截断 | |||
// retstr = retstr.Substring(0, retstr.Length - 1); | |||
// //输出字符串 | |||
// return retstr; | |||
//} | |||
/// <summary> | |||
/// 获取签名 | |||
/// </summary> | |||
/// <param name="t"></param> | |||
/// <returns></returns> | |||
public static string GetSign(object t) | |||
{ | |||
string retstr = ""; | |||
//定义PropertyInfo的List | |||
List<PropertyInfo> proplist = new List<PropertyInfo>(); | |||
//遍历泛型类的每个属性加入到List里面 | |||
Array.ForEach<PropertyInfo>(t.GetType().GetProperties(), | |||
p => proplist.Add(p)); | |||
//根据参数进行排序 0-不排序 1-按名称ASCII码排序 | |||
proplist = proplist.OrderBy(k => k.Name).ToList(); | |||
//遍历List泛型生成我们要签名的字符串 | |||
proplist.ForEach(p => | |||
{ | |||
if (p.Name.ToLower() != "sign".ToLower()) | |||
{ | |||
if (p.GetValue(t, null) != null && p.GetValue(t, null).ToString() != "") | |||
{ | |||
var type = p.GetValue(t, null).GetType().FullName; | |||
if (type == "System.String"||type== "System.Boolean"||type== "System.Int32" || type == "System.DateTime") | |||
{ | |||
retstr = retstr + p.Name + "=" + p.GetValue(t, null) + "&"; | |||
} | |||
else | |||
{ | |||
var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; | |||
retstr = retstr + p.Name + "=" + JsonConvert.SerializeObject(p.GetValue(t, null), Formatting.None, jsonSetting) + "&"; | |||
} | |||
} | |||
} | |||
}); | |||
//把字符串最后一位截断 | |||
retstr = retstr.Substring(0, retstr.Length - 1); | |||
//输出字符串 | |||
return retstr; | |||
} | |||
/// <summary> | |||
/// 获取属性值 | |||
/// </summary> | |||
/// <param name="obj"></param> | |||
/// <param name="name"></param> | |||
/// <returns></returns> | |||
public static string GetAttributePrice(object obj,string name) | |||
{ | |||
string retstr = ""; | |||
//定义PropertyInfo的List | |||
List<PropertyInfo> proplist = new List<PropertyInfo>(); | |||
//遍历泛型类的每个属性加入到List里面 | |||
Array.ForEach<PropertyInfo>(obj.GetType().GetProperties(), | |||
p => proplist.Add(p)); | |||
//根据参数进行排序 0-不排序 1-按名称ASCII码排序 | |||
proplist = proplist.OrderBy(k => k.Name).ToList(); | |||
//遍历List泛型生成我们要签名的字符串 | |||
proplist.ForEach(p => | |||
{ | |||
if (p.Name.ToLower() == name.ToLower()) | |||
{ | |||
if (p.GetValue(obj, null).GetType().FullName.Contains("System.Collections.Generic.List")) | |||
{ | |||
retstr = JsonConvert.SerializeObject(p.GetValue(obj, null)); | |||
} | |||
else | |||
{ | |||
retstr = p.GetValue(obj, null)?.ToString(); | |||
} | |||
} | |||
}); | |||
//输出字符串 | |||
return retstr; | |||
} | |||
} | |||
} |
@@ -0,0 +1,16 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto | |||
{ | |||
public class ResponDataBase | |||
{ | |||
public string statusCode { get; set; } | |||
public object data { get; set; } | |||
public string succeeded { get; set; } | |||
public string errors { get; set; } | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto | |||
{ | |||
public class ResultSAASManageDto<T> | |||
{ | |||
public int statusCode { get; set; } | |||
public T? data { get; set; } | |||
public string succeeded { get; set; } | |||
public string errors { get; set; } | |||
public string extras { get; set; } | |||
public int timestamp { get; set; } | |||
} | |||
public class ResultSAASManageDto | |||
{ | |||
public int statusCode { get; set; } | |||
public object data { get; set; } | |||
public string succeeded { get; set; } | |||
public string errors { get; set; } | |||
public string extras { get; set; } | |||
public int timestamp { get; set; } | |||
} | |||
public class ResultSAASManageDataDto<T> | |||
{ | |||
public List<T> data { get; set; } | |||
public int total { get; set; } | |||
} | |||
public class ResultTenantDataItemDto | |||
{ | |||
public string id { get; set; } | |||
public string name { get; set; } | |||
public string adminName { get; set; } | |||
public string email { get; set; } | |||
public string phone { get; set; } | |||
public string remark { get; set; } | |||
public string logo { get; set; } | |||
public string createAt { get; set; } | |||
public int status { get; set; } | |||
public string sysRoleId { get; set; } | |||
public int type { get; set; } | |||
} | |||
} |
@@ -0,0 +1,144 @@ | |||
using Furion.FriendlyException; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Enum | |||
{ | |||
/// <summary> | |||
/// 系统错误码 | |||
/// </summary> | |||
[ErrorCodeType] | |||
[Description("系统错误码")] | |||
public enum ErrorCodeEnum | |||
{ | |||
/// <summary> | |||
/// 用户没有注册 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("用户没有注册")] | |||
Code1000, | |||
/// <summary> | |||
/// 操作错误 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("操作错误")] | |||
Code1001, | |||
/// <summary> | |||
/// 重复添加 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("重复添加")] | |||
Code1002, | |||
/// <summary> | |||
/// 操作数据不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("操作数据不存在")] | |||
Code1003, | |||
/// <summary> | |||
/// key不正确 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("key不正确")] | |||
Code1004, | |||
/// <summary> | |||
/// 签名错误 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("签名错误")] | |||
Code1005, | |||
/// <summary> | |||
/// 签名错误 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("签名过期")] | |||
Code1006, | |||
/// <summary> | |||
/// 系统异常 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("系统异常")] | |||
Code1007, | |||
/// <summary> | |||
/// 商品不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("商品不存在")] | |||
Code1008, | |||
/// <summary> | |||
/// 场景id不能为空 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("场景id不能为空")] | |||
Code1009, | |||
/// <summary> | |||
/// 产品不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("产品不存在")] | |||
Code10010, | |||
/// <summary> | |||
/// 产品版本不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("产品版本不存在")] | |||
Code10011, | |||
/// <summary> | |||
/// 设备不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("设备不存在")] | |||
Code10012, | |||
/// <summary> | |||
/// 产品标签不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("产品标签不存在")] | |||
Code10013, | |||
/// <summary> | |||
/// 授权过期 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("授权过期")] | |||
Code10014, | |||
/// <summary> | |||
/// 配方不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("配方不存在")] | |||
Code10015, | |||
/// <summary> | |||
/// 下发错误 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("操作成功,下发错误")] | |||
Code10016, | |||
/// <summary> | |||
/// 名称或编码重复 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("名称或编码重复")] | |||
Code10017, | |||
/// <summary> | |||
/// 模板名称不能重复 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("模板名称不能重复")] | |||
Code10018, | |||
/// <summary> | |||
/// 设备id不能为空 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("设备id不能为空")] | |||
Code10019, | |||
/// <summary> | |||
/// 模板名称不能为空 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("模板名称不能为空")] | |||
Code10020, | |||
/// <summary> | |||
/// 获取场景数据失败 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("获取场景数据失败")] | |||
Code10021, | |||
/// <summary> | |||
/// 场景不存在 | |||
/// </summary> | |||
[ErrorCodeItemMetadata("场景不存在")] | |||
Code10022, | |||
} | |||
} |
@@ -0,0 +1,35 @@ | |||
| |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services; | |||
using Furion.DynamicApiController; | |||
using Microsoft.AspNetCore.Authorization; | |||
using Microsoft.AspNetCore.Components.Forms; | |||
using Microsoft.AspNetCore.Mvc; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService | |||
{ | |||
[ApiDescriptionSettings("开放平台", Tag = "检查"), AllowAnonymous] | |||
public class CheckServices : IDynamicApiController | |||
{ | |||
private readonly ICheckServices _checkServices; | |||
public CheckServices(ICheckServices checkServices) | |||
{ | |||
_checkServices = checkServices; | |||
} | |||
/// <summary> | |||
///检查Sign | |||
/// </summary> | |||
public async Task CheckSign(string key, string signStr, string signMd5) | |||
{ | |||
await _checkServices.CheckSign( key, signStr, signMd5); | |||
} | |||
} | |||
} |
@@ -0,0 +1,81 @@ | |||
| |||
using BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.BaseDto; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Enum; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services.Dtos; | |||
using BPA.KitChen.GroupMealOrder.Core; | |||
using BPA.KitChen.GroupMealOrder.Core.Common; | |||
using BPA.KitChen.GroupMealOrder.SqlSugar; | |||
using Furion; | |||
using Furion.DatabaseAccessor; | |||
using Furion.DataEncryption; | |||
using Furion.DependencyInjection; | |||
using Furion.FriendlyException; | |||
using Microsoft.AspNetCore.Components.Forms; | |||
using Newtonsoft.Json; | |||
using NPOI.Util.ArrayExtensions; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Reflection; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services | |||
{ | |||
public class CheckServices : ICheckServices, ITransient | |||
{ | |||
/// <summary> | |||
///检查Sign | |||
/// </summary> | |||
public async Task CheckSign(string key,string signStr,string signMd5) | |||
{ | |||
//检查key | |||
await CheckKey(key); | |||
var thisSign = signStr + "&key=" + key; | |||
var vvv = MD5Encryption.Encrypt(thisSign.ToUpper()).ToUpper(); | |||
var vvvvv = thisSign.ToUpper(); | |||
if (MD5Encryption.Encrypt(thisSign.ToUpper()).ToUpper() != signMd5.ToUpper()) | |||
{ | |||
throw Oops.Oh(ErrorCodeEnum.Code1005); | |||
} | |||
} | |||
/// <summary> | |||
/// 检查平key验证 | |||
/// </summary> | |||
/// <param name="key"></param> | |||
private async Task CheckKey(string key) | |||
{ | |||
Dictionary<string, string> dic = new Dictionary<string, string>(); | |||
var url = App.Configuration["groupmeal"] + "api/authorization/GetCompanyById"; | |||
var jsonData = HttpHelper.HttpGet(url, key, dic, "application/json"); | |||
var data = JsonConvert.DeserializeObject<ResultSAASManageDto<StoreAuthorizationDto>>(jsonData); | |||
if (data.statusCode != 200) throw Oops.Oh(ErrorCodeEnum.Code10016); | |||
if (data.data == null) throw Oops.Oh(ErrorCodeEnum.Code10016); | |||
await CheckTenant(data.data.GroupId); | |||
} | |||
/// <summary> | |||
/// 检查租户 | |||
/// </summary> | |||
/// <param name="id"></param> | |||
/// <returns></returns> | |||
private async Task CheckTenant(string tenantId) | |||
{ | |||
Dictionary<string, string> dic = new Dictionary<string, string>(); | |||
var url = App.Configuration["baseurl"] + "api/authorization/GetCompanyById"; | |||
var jsonData = HttpHelper.HttpGet(url, tenantId, dic, "application/json"); | |||
var data = JsonConvert.DeserializeObject<ResultSAASManageDto<CompanyDto>>(jsonData); | |||
if (data.statusCode != 200) throw Oops.Oh(ErrorCodeEnum.Code10016); | |||
if (data.data==null) throw Oops.Oh(ErrorCodeEnum.Code10016); | |||
CurrentUser.TenantId = tenantId; | |||
} | |||
} | |||
} |
@@ -0,0 +1,47 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Enum; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services.Dtos | |||
{ | |||
public class CompanyDto | |||
{ | |||
public string Id { get; set; } | |||
/// <summary> | |||
/// 加盟商名称 | |||
/// </summary> | |||
public string Name { get; set; } | |||
/// <summary> | |||
/// 管理员姓名 | |||
/// </summary> | |||
public string AdminName { get; set; } | |||
/// <summary> | |||
/// 邮箱账号 | |||
/// </summary> | |||
public string Email { get; set; } | |||
/// <summary> | |||
/// 电话 | |||
/// </summary> | |||
public string Phone { get; set; } | |||
/// <summary> | |||
/// 备注 | |||
/// </summary> | |||
public string Remark { get; set; } | |||
/// <summary> | |||
/// logo | |||
/// </summary> | |||
public string Code { get; set; } | |||
/// <summary> | |||
/// 状态 【正常 停用】默认 正常 | |||
/// </summary> | |||
public CommonStatus Status { get; set; } = CommonStatus.ENABLE; | |||
/// <summary> | |||
/// 所属平台 0 团餐 1门店 2 后厨 3公共 | |||
/// </summary> | |||
public int Type { get; set; } | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services.Dtos | |||
{ | |||
public class StoreAuthorizationDto | |||
{ | |||
public string Id { get; set; } | |||
public string StoreId { get; set; } | |||
public string Key { get; set; } | |||
public string GroupId { get; set; } | |||
/// <summary> | |||
/// 有效期 长期有效为空 | |||
/// </summary> | |||
public DateTime? PeriodValidity { get; set; } | |||
public DateTime UpdateAt { get; set; } | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
| |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services | |||
{ | |||
public interface ICheckServices | |||
{ | |||
/// <summary> | |||
///检查Sign | |||
/// </summary> | |||
Task CheckSign(string key, string signStr, string signMd5); | |||
} | |||
} |
@@ -0,0 +1,77 @@ | |||
| |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Service; | |||
using BPA.KitChen.GroupMealOrder.Core; | |||
using Furion.DynamicApiController; | |||
using Microsoft.AspNetCore.Authorization; | |||
using Microsoft.AspNetCore.Mvc; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.WeighOrder | |||
{ | |||
[ApiDescriptionSettings("开放平台", Tag = "称重订单"), AllowAnonymous] | |||
public class WeighOrderServices: IDynamicApiController | |||
{ | |||
private readonly IWeighOrderService _weighOrderService; | |||
public WeighOrderServices(IWeighOrderService weighOrderService) | |||
{ | |||
_weighOrderService = weighOrderService; | |||
} | |||
/// <summary> | |||
/// 创建订单 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/ExternalPlatform/WeighOrder/CreateWeighOrder")] | |||
public async Task<WeighOrderDto> CreateWeighOrder(WeighOrderCreteDto inputDto) | |||
{ | |||
return await _weighOrderService.CreateWeighOrder(inputDto); | |||
} | |||
/// <summary> | |||
/// 添加订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/ExternalPlatform/WeighOrder/AddWeighOrderGoods")] | |||
public async Task<bool> AddWeighOrderGoods(List<WeighOrderGoodsCreateDto> inputDto) | |||
{ | |||
return await _weighOrderService.AddWeighOrderGoods(inputDto); | |||
} | |||
/// <summary> | |||
/// 添加订单餐盘 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost( "/api/ExternalPlatform/WeighOrder/AddWeighOrderDiningPlate")] | |||
public async Task<bool> AddWeighOrderDiningPlate(List<WeighOrderDiningPlateCreateDto> inputDto) | |||
{ | |||
return await _weighOrderService.AddWeighOrderDiningPlate(inputDto); | |||
} | |||
/// <summary> | |||
/// 查询订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost( "/api/ExternalPlatform/WeighOrder/GetWeighOrder")] | |||
public async Task<WeighOrderDto> GetWeighOrder(GetOrderInputDto inputDto) | |||
{ | |||
return await _weighOrderService.GetWeighOrder(inputDto); | |||
} | |||
/// <summary> | |||
/// 修改订单状态 | |||
/// </summary> | |||
/// <returns></returns> | |||
[HttpPost( "/api/ExternalPlatform/WeighOrder/UpdateWeighOrderStates")] | |||
public async Task<bool> UpdateWeighOrderStates(WeighOrderUpdateDto inputDto) | |||
{ | |||
return await _weighOrderService.UpdateWeighOrderStates(inputDto); | |||
} | |||
} | |||
} |
@@ -30,6 +30,7 @@ namespace BPA.KitChen.GroupMealOrder.Application.Service.TestService | |||
&& x.GetCustomAttribute<SugarTable>() != null | |||
&& x.Namespace.Contains("BPA.KitChen.GroupMealOrder.Core.Entity")) | |||
.ToArray(); | |||
types = types.Where(x => x.Name != "BPA_Order"&&x.Name!= "BPA_SubOrder").ToArray(); | |||
SqlSugarDb.Db.CodeFirst.InitTables(types); | |||
} | |||
catch (Exception e) | |||
@@ -0,0 +1,22 @@ | |||
using NPOI.SS.Formula.Functions; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos | |||
{ | |||
public class DiningPlateDto | |||
{ | |||
/// <summary> | |||
/// 餐盘信息 | |||
/// </summary> | |||
public string DiningPlateId { get; set; } | |||
/// <summary> | |||
/// 是否占用 | |||
/// </summary> | |||
public bool IsOccupy { get; set; } | |||
} | |||
} |
@@ -0,0 +1,177 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos | |||
{ | |||
/// <summary> | |||
/// | |||
/// </summary> | |||
public class WeighOrderDto: BPA_WeighOrder | |||
{ | |||
/// <summary> | |||
/// 商品信息 | |||
/// </summary> | |||
public List<WeighOrderGoodsDto> GoodsInfo { get; set; } | |||
/// <summary> | |||
/// 餐盘信息 | |||
/// </summary> | |||
public List<WeighOrderDiningPlateDto> DiningPlateInfo { get; set; } | |||
} | |||
public class WeighOrderGoodsDto | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// 订单id | |||
/// </summary> | |||
public string OrderId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsName { get; set; } | |||
/// <summary> | |||
/// 商品商品重量 | |||
/// </summary> | |||
public decimal GoodsWeight { get; set; } | |||
/// <summary> | |||
/// 商品属性 | |||
/// </summary> | |||
public List<GoogsAttribute>? GoodsAttribute { get; set; } | |||
} | |||
public class WeighOrderDiningPlateDto | |||
{ | |||
/// <summary> | |||
/// 订单编号 | |||
/// </summary> | |||
public string OrderId { get; set; } | |||
public string DiningPlateId { get; set; } | |||
} | |||
public class GoogsAttribute | |||
{ | |||
public string AttributeId { get; set; } | |||
public string AttributeName { get; set; } | |||
} | |||
public class GetOrderInputDto | |||
{ | |||
public string OrderId { get; set; } | |||
} | |||
public class WeighOrderCreteDto | |||
{ | |||
/// <summary> | |||
/// 订单金额 | |||
/// </summary> | |||
public decimal TotalAmount { get; set; } | |||
/// <summary> | |||
/// 订单标题 | |||
/// </summary> | |||
[SugarColumn(IsNullable = true)] | |||
public string Subject { get; set; } | |||
/// <summary> | |||
/// 场景id | |||
/// </summary> | |||
public string SceneId { get; set; } | |||
/// <summary> | |||
/// 创建人(会员Id) | |||
/// </summary> | |||
public string CreateId { get; set; } | |||
/// <summary> | |||
/// 商品 | |||
/// </summary> | |||
public List<WeighOrderGoodsCreateDto> Goods { get; set; } | |||
/// <summary> | |||
/// 餐盘信息 | |||
/// </summary> | |||
public List<WeighOrderDiningPlateCreateDto> DiningPlateInfo { get; set; } | |||
} | |||
public class WeighOrderGoodsCreateDto | |||
{ | |||
public string OrderId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsName { get; set; } | |||
/// <summary> | |||
/// 商品商品重量 | |||
/// </summary> | |||
public decimal GoodsWeight { get; set; } | |||
} | |||
public class WeighOrderDiningPlateCreateDto | |||
{ | |||
/// <summary> | |||
/// 订单编号 | |||
/// </summary> | |||
public string OrderId { get; set; } | |||
public string DiningPlateId { get; set; } | |||
} | |||
public class WeighOrderUpdateDto | |||
{ | |||
public string OrderId { get; set; } | |||
public int PayStates { get; set; } | |||
public int States { get; set; } | |||
} | |||
} |
@@ -0,0 +1,64 @@ | |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity; | |||
using Furion.DatabaseAccessor; | |||
using Newtonsoft.Json; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Service | |||
{ | |||
public interface IWeighOrderService | |||
{ | |||
/// <summary> | |||
/// 创建订单 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
Task<WeighOrderDto> CreateWeighOrder(WeighOrderCreteDto inputDto); | |||
/// <summary> | |||
/// 添加订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
Task<bool> AddWeighOrderGoods(List<WeighOrderGoodsCreateDto> inputDto); | |||
/// <summary> | |||
/// 添加订单餐盘 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
Task<bool> AddWeighOrderDiningPlate(List<WeighOrderDiningPlateCreateDto> inputDto); | |||
/// <summary> | |||
/// 查询订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
Task<WeighOrderDto> GetWeighOrder(GetOrderInputDto inputDto); | |||
/// <summary> | |||
/// 修改订单状态 | |||
/// </summary> | |||
/// <returns></returns> | |||
Task<bool> UpdateWeighOrderStates(WeighOrderUpdateDto inputDto); | |||
/// <summary> | |||
/// 添加 餐盘解绑记录 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
Task<bool> AddWeighOrderDiningPlateUnbindRecord(List<string> inputDto); | |||
/// <summary> | |||
/// 获取餐盘绑定信息 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
Task<List<DiningPlateDto>> GetDiningPlateOccupyInfo(List<string> inputDto); | |||
} | |||
} |
@@ -0,0 +1,304 @@ | |||
using BPA.KitChen.GroupMealOrder.Application.BaseDto; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.ThirdAuthorize; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos; | |||
using BPA.KitChen.GroupMealOrder.Core; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity; | |||
using BPA.KitChen.GroupMealOrder.SqlSugar; | |||
using Furion.DependencyInjection; | |||
using Furion.DynamicApiController; | |||
using Microsoft.AspNetCore.Components.Forms; | |||
using Microsoft.AspNetCore.Hosting; | |||
using Newtonsoft.Json; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Service | |||
{ | |||
public class WeighOrderService : ITransient, IWeighOrderService | |||
{ | |||
private readonly SqlSugarScope db; | |||
public WeighOrderService() | |||
{ | |||
db = SqlSugarDb.Db; | |||
} | |||
/// <summary> | |||
/// 创建订单 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
public async Task<WeighOrderDto> CreateWeighOrder(WeighOrderCreteDto inputDto) | |||
{ | |||
var result = new WeighOrderDto(); | |||
var order = new BPA_WeighOrder() | |||
{ | |||
CreateAt = DateTime.Now, | |||
GroupId = CurrentUser.TenantId, | |||
CreateId = inputDto.CreateId, | |||
OrderNumber = Guid.NewGuid().ToString(), | |||
Id = Guid.NewGuid().ToString(), | |||
PayStates = 0, | |||
SceneId = inputDto.SceneId, | |||
States = 0, | |||
TotalAmount = inputDto.TotalAmount, | |||
Subject = inputDto.Subject, | |||
}; | |||
//添加订单 | |||
var res = await db.Insertable(order).ExecuteCommandAsync(); | |||
var orderGoods = new List<BPA_WeighOrderGoods>(); | |||
foreach (var item in inputDto.Goods) | |||
{ | |||
orderGoods.Add(new BPA_WeighOrderGoods() | |||
{ | |||
GoodsAttribute = "", | |||
GoodsId = item.GoodsId, | |||
GoodsName = item.GoodsName, | |||
GoodsWeight = item.GoodsWeight, | |||
GroupId = CurrentUser.TenantId, | |||
Id = Guid.NewGuid().ToString(), | |||
OrderId = order.Id | |||
}); | |||
} | |||
var diningPlate = new List<BPA_WeighOrderDiningPlate>(); | |||
foreach (var item in inputDto.DiningPlateInfo) | |||
{ | |||
diningPlate.Add(new BPA_WeighOrderDiningPlate() | |||
{ | |||
DiningPlateId = item.DiningPlateId, | |||
GroupId = CurrentUser.TenantId, | |||
WeighOrderId = order.Id, | |||
Id = Guid.NewGuid().ToString(), | |||
}); | |||
} | |||
//添加子订单 | |||
if (res > 0) | |||
{ | |||
result = new WeighOrderDto() | |||
{ | |||
CreateAt = order.CreateAt, | |||
CreateId = order.CreateId, | |||
GroupId = order.GroupId, | |||
Id = order.Id, | |||
OrderNumber = order.OrderNumber, | |||
PayStates = order.PayStates, | |||
SceneId = order.SceneId, | |||
States = order.States, | |||
Subject = inputDto.Subject, | |||
TotalAmount = order.TotalAmount, | |||
}; | |||
await db.Insertable(orderGoods).ExecuteCommandAsync(); | |||
await db.Insertable(diningPlate).ExecuteCommandAsync(); | |||
} | |||
result = await GetWeighOrder(new GetOrderInputDto() | |||
{ | |||
OrderId = order.Id, | |||
}); | |||
return result; | |||
} | |||
/// <summary> | |||
/// 添加订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
public async Task<bool> AddWeighOrderGoods(List<WeighOrderGoodsCreateDto> inputDto) | |||
{ | |||
var orderGoods = new List<BPA_WeighOrderGoods>(); | |||
foreach (var item in inputDto) | |||
{ | |||
orderGoods.Add(new BPA_WeighOrderGoods() | |||
{ | |||
GoodsAttribute = "", | |||
GoodsId = item.GoodsId, | |||
GoodsName = item.GoodsName, | |||
GoodsWeight = item.GoodsWeight, | |||
GroupId = CurrentUser.TenantId, | |||
OrderId = item.OrderId, | |||
Id = Guid.NewGuid().ToString(), | |||
}); | |||
} | |||
var res = await db.Insertable(orderGoods).ExecuteCommandAsync(); | |||
return res > 0; | |||
} | |||
/// <summary> | |||
/// 添加订单餐盘 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
public async Task<bool> AddWeighOrderDiningPlate(List<WeighOrderDiningPlateCreateDto> inputDto) | |||
{ | |||
var diningPlate = new List<BPA_WeighOrderDiningPlate>(); | |||
foreach (var item in inputDto) | |||
{ | |||
diningPlate.Add(new BPA_WeighOrderDiningPlate() | |||
{ | |||
DiningPlateId = item.DiningPlateId, | |||
GroupId = CurrentUser.TenantId, | |||
WeighOrderId = item.OrderId, | |||
Id = Guid.NewGuid().ToString(), | |||
}); | |||
} | |||
var res = await db.Insertable(diningPlate).ExecuteCommandAsync(); | |||
return res > 0; | |||
} | |||
/// <summary> | |||
/// 查询订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
public async Task<WeighOrderDto> GetWeighOrder(GetOrderInputDto inputDto) | |||
{ | |||
var result = new WeighOrderDto(); | |||
//查询订单 | |||
result = await db.Queryable<BPA_WeighOrder>() | |||
.Select(x => new WeighOrderDto | |||
{ | |||
CreateAt = x.CreateAt, | |||
CreateId = x.CreateId, | |||
GroupId = x.GroupId, | |||
Id = x.Id, | |||
OrderNumber = x.OrderNumber, | |||
PayStates = 0, | |||
SceneId = x.SceneId, | |||
States = 0, | |||
Subject = x.Subject, | |||
TotalAmount = x.TotalAmount, | |||
}) | |||
.FirstAsync(x => x.Id == inputDto.OrderId); | |||
//查询订单商品 | |||
var orderGoods = await db.Queryable<BPA_WeighOrderGoods>() | |||
.Where(x => x.OrderId == inputDto.OrderId) | |||
.ToListAsync(); | |||
result.GoodsInfo = orderGoods.Select(x => new WeighOrderGoodsDto() | |||
{ | |||
GoodsId = x.GoodsId, | |||
GoodsAttribute = string.IsNullOrEmpty(x.GoodsAttribute) ? null : JsonConvert.DeserializeObject<List<GoogsAttribute>>(x.GoodsAttribute), | |||
GoodsName = x.GoodsName, | |||
GoodsWeight = x.GoodsWeight, | |||
GroupId = x.GroupId, | |||
Id = x.Id, | |||
OrderId = x.OrderId, | |||
}).ToList(); | |||
//查询订单餐盘 | |||
var diningPlate = await db.Queryable<BPA_WeighOrderDiningPlate>() | |||
.Where(x => x.WeighOrderId == inputDto.OrderId) | |||
.Select(x => new WeighOrderDiningPlateDto() | |||
{ | |||
DiningPlateId = x.DiningPlateId, | |||
OrderId = inputDto.OrderId, | |||
}).ToListAsync(); | |||
result.DiningPlateInfo = diningPlate; | |||
return result; | |||
} | |||
/// <summary> | |||
/// 修改订单状态 | |||
/// </summary> | |||
/// <returns></returns> | |||
public async Task<bool> UpdateWeighOrderStates(WeighOrderUpdateDto inputDto) | |||
{ | |||
//查询订单 | |||
var result = await db.Queryable<BPA_WeighOrder>() | |||
.Select(x => new WeighOrderDto | |||
{ | |||
CreateAt = x.CreateAt, | |||
CreateId = x.CreateId, | |||
GroupId = x.GroupId, | |||
Id = x.Id, | |||
OrderNumber = x.OrderNumber, | |||
PayStates = 0, | |||
SceneId = x.SceneId, | |||
States = 0, | |||
Subject = x.Subject, | |||
TotalAmount = x.TotalAmount, | |||
}) | |||
.FirstAsync(x => x.Id == inputDto.OrderId); | |||
result.PayStates = inputDto.PayStates; | |||
result.States = inputDto.States; | |||
var res =await db.Updateable(result).ExecuteCommandAsync(); | |||
return res > 0; | |||
} | |||
/// <summary> | |||
/// 添加 餐盘解绑记录 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
public async Task<bool> AddWeighOrderDiningPlateUnbindRecord(List<string> inputDto) | |||
{ | |||
var list=new List<BPA_WeighOrderDiningPlateUnbindRecord>(); | |||
foreach (var item in inputDto) | |||
{ | |||
list.Add(new BPA_WeighOrderDiningPlateUnbindRecord() | |||
{ | |||
CreateAt=DateTime.Now, | |||
DiningPlateId=item | |||
}); | |||
} | |||
if (list.Count>0) | |||
{ | |||
var res=await db.Updateable(list).ExecuteCommandAsync(); | |||
return res > 0; | |||
} | |||
return false; | |||
} | |||
/// <summary> | |||
/// 获取餐盘绑定信息 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
public async Task<List<DiningPlateDto>> GetDiningPlateOccupyInfo(List<string> inputDto) | |||
{ | |||
var data = await db.Queryable<BPA_WeighOrderDiningPlate, BPA_WeighOrder, BPA_WeighOrderDiningPlateUnbindRecord> | |||
((a, b, c) => new JoinQueryInfos(JoinType.Left, a.WeighOrderId == b.Id, JoinType.Left, a.DiningPlateId == c.DiningPlateId)) | |||
.WhereIF(inputDto.Count > 0, (a, b, c) => inputDto.Contains(a.DiningPlateId)) | |||
.Select((a, b, c) => new DiningPlateDto() | |||
{ | |||
DiningPlateId = a.DiningPlateId, | |||
IsOccupy = b.States == 1 ? false : ((c == null || c.Id == null) ? false : true) | |||
}) | |||
.ToListAsync(); | |||
data = data.Where(x => x.IsOccupy == true).ToList(); | |||
return data; | |||
} | |||
} | |||
} |
@@ -0,0 +1,108 @@ | |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Dtos; | |||
using BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder.Service; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity; | |||
using BPA.KitChen.GroupMealOrder.SqlSugar; | |||
using Furion.DatabaseAccessor; | |||
using Furion.DynamicApiController; | |||
using Microsoft.AspNetCore.Authorization; | |||
using Microsoft.AspNetCore.Mvc; | |||
using Newtonsoft.Json; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Application.Service.WeighOrder | |||
{ | |||
[ApiDescriptionSettings("订单管理", Tag = "称重订单", SplitCamelCase = false)] | |||
public class WeighOrderServices: IDynamicApiController | |||
{ | |||
private readonly IWeighOrderService _weighOrderService; | |||
public WeighOrderServices(IWeighOrderService weighOrderService) | |||
{ | |||
_weighOrderService = weighOrderService; | |||
} | |||
/// <summary> | |||
/// 创建订单 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/CreateWeighOrder")] | |||
public async Task<WeighOrderDto> CreateWeighOrder(WeighOrderCreteDto inputDto) | |||
{ | |||
return await _weighOrderService.CreateWeighOrder(inputDto); | |||
} | |||
/// <summary> | |||
/// 添加订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/AddWeighOrderGoods")] | |||
public async Task<bool> AddWeighOrderGoods(List<WeighOrderGoodsCreateDto> inputDto) | |||
{ | |||
return await _weighOrderService.AddWeighOrderGoods(inputDto); | |||
} | |||
/// <summary> | |||
/// 添加订单餐盘 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/AddWeighOrderDiningPlate")] | |||
public async Task<bool> AddWeighOrderDiningPlate(List<WeighOrderDiningPlateCreateDto> inputDto) | |||
{ | |||
return await _weighOrderService.AddWeighOrderDiningPlate(inputDto); | |||
} | |||
/// <summary> | |||
/// 查询订单商品 | |||
/// </summary> | |||
/// <param name="inputDto"></param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/GetWeighOrder")] | |||
public async Task<WeighOrderDto> GetWeighOrder(GetOrderInputDto inputDto) | |||
{ | |||
return await _weighOrderService.GetWeighOrder(inputDto); | |||
} | |||
/// <summary> | |||
/// 修改订单状态 | |||
/// </summary> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/UpdateWeighOrderStates")] | |||
public async Task<bool> UpdateWeighOrderStates(WeighOrderUpdateDto inputDto) | |||
{ | |||
return await _weighOrderService.UpdateWeighOrderStates(inputDto); | |||
} | |||
/// <summary> | |||
/// 添加 餐盘解绑记录 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/AddWeighOrderDiningPlateUnbindRecord"), AllowAnonymous] | |||
public async Task<bool> AddWeighOrderDiningPlateUnbindRecord(List<string> inputDto) | |||
{ | |||
return await _weighOrderService.AddWeighOrderDiningPlateUnbindRecord(inputDto); | |||
} | |||
/// <summary> | |||
/// 获取餐盘绑定信息 | |||
/// </summary> | |||
/// <param name="inputDto">餐盘ID</param> | |||
/// <returns></returns> | |||
[HttpPost("/api/WeighOrder/GetDiningPlateOccupyInfo"), AllowAnonymous] | |||
public async Task<List<DiningPlateDto>> GetDiningPlateOccupyInfo(List<string> inputDto) | |||
{ | |||
return await _weighOrderService.GetDiningPlateOccupyInfo(inputDto); | |||
} | |||
} | |||
} |
@@ -1,7 +0,0 @@ | |||
namespace BPA.KitChen.GroupMealOrder.Core | |||
{ | |||
public class Class1 | |||
{ | |||
} | |||
} |
@@ -4,9 +4,11 @@ using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.StoreManagementOrder.Core.Entity | |||
namespace BPA.KitChen.GroupMealOrder.Core | |||
{ | |||
internal class Class1 | |||
public class Const | |||
{ | |||
public const string ExternalPlatformUrl = "groupmealorder"; | |||
} | |||
} |
@@ -3,23 +3,28 @@ using Furion; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Security.Claims; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Common | |||
namespace BPA.KitChen.GroupMealOrder.Core | |||
{ | |||
/// <summary> | |||
/// 当前用户 | |||
/// </summary> | |||
public class CurrentUser | |||
public static class CurrentUser | |||
{ | |||
public static string? UserId => App.User?.FindFirst(ClaimConst.CLAINM_USERID)?.Value; | |||
public static string? TenantId => App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
private static string tenantId; | |||
public static string? TenantId | |||
{ | |||
get { return string.IsNullOrEmpty(App.User?.FindFirst(ClaimConst.GroupId)?.Value) ? tenantId : App.User?.FindFirst(ClaimConst.GroupId)?.Value; } | |||
set { tenantId = value; } | |||
} | |||
public static string? Account => App.User?.FindFirst(ClaimConst.CLAINM_ACCOUNT)?.Value; | |||
public static string? RoleId => App.User?.FindFirst(ClaimConst.RoleId)?.Value; | |||
public static string MessageId { get; set; } | |||
} | |||
} |
@@ -1,4 +1,6 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
@@ -12,8 +14,10 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
/// 会员 | |||
/// </summary> | |||
[SugarTable("BPA_MemberInfo")] | |||
public class BPA_MemberInfo : IBaseGroupIdEntity | |||
public class BPA_MemberInfo : IEntity | |||
{ | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// | |||
@@ -7,7 +7,7 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
/// 会员标签 | |||
/// </summary> | |||
[SugarTable("BPA_MemberTag")] | |||
public class BPA_MemberTag : IBaseGroupIdEntity | |||
public class BPA_MemberTag : IEntity | |||
{ | |||
/// <summary> | |||
/// 会员标签名称 | |||
@@ -10,7 +10,7 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
[SugarTable("BPA_ShopAuthorize")] | |||
public class BPA_ShopAuthorize: IBaseGroupIdEntity | |||
public class BPA_ShopAuthorize: IEntity | |||
{ | |||
public string StoreId { get; set; } | |||
@@ -10,7 +10,7 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
[SugarTable("BPA_ThirdOrder")] | |||
public class BPA_ThirdOrder: IBaseGroupIdEntity | |||
public class BPA_ThirdOrder: IEntity | |||
{ | |||
public string OrderNum { get; set; } | |||
@@ -10,7 +10,7 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
[SugarTable("BPA_ThirdOrderInfo")] | |||
public class BPA_ThirdOrderInfo: IBaseGroupIdEntity | |||
public class BPA_ThirdOrderInfo: IEntity | |||
{ | |||
public string ThirdOrderId { get; set; } | |||
@@ -0,0 +1,73 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
/// <summary> | |||
/// 称重订单 | |||
/// </summary> | |||
[SugarTable("bpa_weighorder")] | |||
public class BPA_WeighOrder : IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "Nvarchar(64)", IsNullable = false)] | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// 订单编号 | |||
/// </summary> | |||
public string OrderNumber { get; set; } | |||
/// <summary> | |||
/// 订单金额 | |||
/// </summary> | |||
public decimal TotalAmount { get; set; } | |||
/// <summary> | |||
/// 订单标题 | |||
/// </summary> | |||
[SugarColumn(IsNullable = true)] | |||
public string Subject { get; set; } | |||
/// <summary> | |||
/// 场景id | |||
/// </summary> | |||
public string SceneId { get; set; } | |||
/// <summary> | |||
/// 0.选菜中 1.订单完成 | |||
/// </summary> | |||
public int States { get; set; } | |||
/// <summary> | |||
/// 0.待支付 1.已支付 2.支付失败 | |||
/// </summary> | |||
public int PayStates { get; set; } | |||
/// <summary> | |||
/// 创建时间 | |||
/// </summary> | |||
public DateTime CreateAt { get; set; } = DateTime.Now; | |||
/// <summary> | |||
/// 创建人 | |||
/// </summary> | |||
public string CreateId { get; set; } | |||
} | |||
} |
@@ -0,0 +1,48 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
/// <summary> | |||
/// 称重餐盘订单 | |||
/// </summary> | |||
[SugarTable("bpa_weighorderdiningplate")] | |||
public class BPA_WeighOrderDiningPlate : IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "Nvarchar(64)", IsNullable = false)] | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// 订单编号 | |||
/// </summary> | |||
public string WeighOrderId { get; set; } | |||
public string DiningPlateId { get; set; } | |||
/// <summary> | |||
/// 创建时间 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "DateTime", ColumnDescription = "创建时间", IsNullable = true)] | |||
public DateTime CreateAt { get; set; } = DateTime.Now; | |||
/// <summary> | |||
/// 创建人 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "创建人", IsNullable = false)] | |||
public string CreateBy { get; set; } | |||
} | |||
} |
@@ -0,0 +1,48 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Diagnostics.Metrics; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
/// <summary> | |||
/// 产盘解绑记录 | |||
/// </summary> | |||
[SugarTable("bpa_weighorderdiningplateunbindrecord")] | |||
public class BPA_WeighOrderDiningPlateUnbindRecord : IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "Nvarchar(64)", IsNullable = false)] | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
public string WeighOrderId { get; set; } | |||
public string DiningPlateId { get; set; } | |||
/// <summary> | |||
/// 创建时间 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "DateTime", ColumnDescription = "创建时间", IsNullable = true)] | |||
public DateTime CreateAt { get; set; } = DateTime.Now; | |||
/// <summary> | |||
/// 创建人 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "创建人", IsNullable = true)] | |||
public string CreateBy { get; set; } | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
/// <summary> | |||
/// 称重订单商品 | |||
/// </summary> | |||
[SugarTable("bpa_weighordergoods")] | |||
public class BPA_WeighOrderGoods : IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "Nvarchar(64)", IsNullable = false)] | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// 订单id | |||
/// </summary> | |||
public string OrderId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsId { get; set; } | |||
/// <summary> | |||
/// 商品名称 | |||
/// </summary> | |||
public string GoodsName { get; set; } | |||
/// <summary> | |||
/// 商品商品重量 | |||
/// </summary> | |||
public decimal GoodsWeight { get; set; } | |||
/// <summary> | |||
/// 商品属性 | |||
/// </summary> | |||
public string GoodsAttribute { get; set; } | |||
/// <summary> | |||
/// 创建时间 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "DateTime", ColumnDescription = "创建时间", IsNullable = true)] | |||
public DateTime CreateAt { get; set; } = DateTime.Now; | |||
/// <summary> | |||
/// 创建人 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "创建人", IsNullable = true)] | |||
public string CreateBy { get; set; } | |||
} | |||
} |
@@ -0,0 +1,61 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Diagnostics.Metrics; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity | |||
{ | |||
/// <summary> | |||
/// 称重订单状态变更记录 | |||
/// </summary> | |||
[SugarTable("bpa_weighorderstatesrecord")] | |||
public class BPA_WeighOrderStatesRecord : IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 主键 Guid | |||
/// </summary> | |||
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "Nvarchar(64)", IsNullable = false)] | |||
public string Id { get; set; } = Guid.NewGuid().ToString(); | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
/// <summary> | |||
/// 订单编号 | |||
/// </summary> | |||
public string OrderId { get; set; } | |||
/// <summary> | |||
/// 变更前 | |||
/// </summary> | |||
public int BeforeTheChange { get; set; } | |||
/// <summary> | |||
/// 变更后 | |||
/// </summary> | |||
public int AfterTheChange { get; set; } | |||
/// <summary> | |||
/// 创建时间 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "DateTime", ColumnDescription = "创建时间", IsNullable = true)] | |||
public DateTime CreateAt { get; set; } = DateTime.Now; | |||
/// <summary> | |||
/// 创建人 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "创建人", IsNullable = true)] | |||
public string CreateBy { get; set; } | |||
} | |||
} |
@@ -10,10 +10,10 @@ using System.Threading.Tasks; | |||
namespace BPA.KitChen.GroupMealOrder.Core.Entity.Base | |||
{ | |||
public class IBaseGroupIdEntity: IEntity | |||
public interface IBaseGroupIdEntity | |||
{ | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
public string GroupId { get; set; } | |||
} | |||
} |
@@ -1,4 +1,5 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Enum; | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Enum; | |||
using Furion; | |||
using SqlSugar; | |||
using System; | |||
@@ -8,14 +9,16 @@ namespace BPA.KitChen.GroupMealOrder.Core.Entity.Base | |||
/// <summary> | |||
/// 自定义实体基类 | |||
/// </summary> | |||
public abstract class IEntity: IBaseOPEntity | |||
public abstract class IEntity: IBaseOPEntity, IBaseGroupIdEntity | |||
{ | |||
/// <summary> | |||
/// 状态 | |||
/// </summary> | |||
[SugarColumn(ColumnDataType = "int", ColumnDescription = "状态", IsNullable = false)] | |||
public CommonStatus Status { get; set; } = CommonStatus.ENABLE; | |||
[SugarColumn(ColumnDataType = "nvarchar(64)", ColumnDescription = "GroupId", IsNullable = true)] | |||
public string GroupId { get; set; } = App.User?.FindFirst(ClaimConst.GroupId)?.Value; | |||
} | |||
} |
@@ -12,9 +12,9 @@ namespace BPA.KitChen.GroupMealOrder.Core.RequestAnalysis | |||
{ | |||
public UserAnalysis() | |||
{ | |||
//CurrentUser.AppId = App.HttpContext.Request.Headers["AppId"]; | |||
//CurrentUser.TenantId = App.HttpContext.Request.Headers["TenantId"]; | |||
CurrentUser.TenantId = App.HttpContext.Request.Headers["GroupId"]; | |||
} | |||
} | |||
@@ -1,4 +1,5 @@ | |||
using BPA.KitChen.GroupMealOrder.Core.Common; | |||
using BPA.KitChen.GroupMealOrder.Core; | |||
using BPA.KitChen.GroupMealOrder.Core.Common; | |||
using BPA.KitChen.GroupMealOrder.Core.Common.Const; | |||
using BPA.KitChen.GroupMealOrder.Core.Entity.Base; | |||
using Furion; | |||
@@ -0,0 +1,141 @@ | |||
using BPA.KitChen.GroupMealOrder.Application.Service.AExternalPlatform.Service.CheckService.Services; | |||
using BPA.KitChen.GroupMealOrder.Core; | |||
using Microsoft.AspNetCore.Mvc.Controllers; | |||
using Microsoft.AspNetCore.Mvc.Filters; | |||
using Newtonsoft.Json; | |||
using System.Reflection; | |||
namespace BPA.KitChen.GroupMealOrder.Handlers | |||
{ | |||
public class RequestAuditFiltercs : IAsyncActionFilter | |||
{ | |||
private readonly ICheckServices _checkServices; | |||
public RequestAuditFiltercs( ICheckServices checkServices) | |||
{ | |||
_checkServices = checkServices; | |||
} | |||
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) | |||
{ | |||
CurrentUser.MessageId=Guid.NewGuid().ToString(); | |||
//============== 这里是执行方法之前获取数据 ==================== | |||
// 获取 HttpContext 和 HttpRequest 对象 | |||
var httpContext = context.HttpContext; | |||
var httpRequest = httpContext.Request; | |||
// 获取客户端 Ipv4 地址 | |||
var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4(); | |||
// 获取请求的 Url 地址 | |||
var requestUrl = httpRequest.GetRequestUrlAddress(); | |||
// 获取来源 Url 地址 | |||
var refererUrl = httpRequest.GetRefererUrlAddress(); | |||
// 获取控制器、路由信息 | |||
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; | |||
// 获取请求的方法 | |||
var method = actionDescriptor.MethodInfo; | |||
// 获取请求参数(写入日志,需序列化成字符串后存储) | |||
var parameters = context.ActionArguments; | |||
//foreach (var parameter in parameters) | |||
//{ | |||
// var stingA = DtoValidator.GetSign(parameter.Value); | |||
// var vvv = 00; | |||
//} | |||
//if (requestUrl.ToUpper().Contains("ExternalPlatform".ToUpper())) | |||
//{ | |||
// var key = httpRequest.Headers["key"]; | |||
// var sign = httpRequest.Headers["sign"]; | |||
// List<PropertyInfo> proplist = new List<PropertyInfo>(); | |||
// foreach (var parameter in parameters) | |||
// { | |||
// var stingA = DtoValidator.GetSign(parameter.Value); | |||
// //var sign = DtoValidator.GetAttributePrice(parameter.Value, "sign"); | |||
// await _checkServices.CheckSign(key, stingA, sign); | |||
// } | |||
//} | |||
//============== 这里是执行方法之后获取数据 ==================== | |||
var actionContext = await next(); | |||
// 获取返回的结果 | |||
var returnResult = actionContext.Result; | |||
// 判断是否请求成功,没有异常就是请求成功 | |||
var isRequestSucceed = actionContext.Exception == null; | |||
if (requestUrl.ToUpper().Contains("ExternalPlatform".ToUpper())) | |||
{ | |||
try | |||
{ | |||
////记录日志 | |||
//await SqlSugarDb.Db.Insertable(new BPA_ThirdpartyRequestLog() | |||
//{ | |||
// Id = CurrentUser.MessageId, | |||
// CreateBy = DateTime.Now.ToString(), | |||
// GroupId = CurrentUser.GroupId, | |||
// RequestUrl = requestUrl, | |||
// ReauestMethod = httpRequest.Method, | |||
// ReauestParm = JsonConvert.SerializeObject(parameters), | |||
// ResultParm = !isRequestSucceed ? actionContext.Exception.ToString() : JsonConvert.SerializeObject(returnResult), | |||
// IP = remoteIPv4 | |||
//}).ExecuteCommandAsync(); | |||
////记录下发记录 | |||
//if (isRequestSucceed) | |||
//{ | |||
// foreach (var parameter in parameters) | |||
// { | |||
// var isPush = DtoValidator.GetAttributePrice(parameter.Value, "isPush"); | |||
// var callbackUrl = DtoValidator.GetAttributePrice(parameter.Value, "callbackUrl"); | |||
// var storeIdList = DtoValidator.GetAttributePrice(parameter.Value, "storeIdList"); | |||
// var deviceIdList = DtoValidator.GetAttributePrice(parameter.Value, "deviceIdList"); | |||
// if (isPush.ToUpper() == "true".ToUpper()) | |||
// { | |||
// var list = new List<string>(); | |||
// if (!string.IsNullOrEmpty(deviceIdList)) | |||
// { | |||
// list = JsonConvert.DeserializeObject<List<string>>(deviceIdList); | |||
// } | |||
// if ( !string.IsNullOrEmpty(storeIdList)) | |||
// { | |||
// list = await _thirdpartyPushService.GetDeviceByStoreId(JsonConvert.DeserializeObject<List<string>>(storeIdList)); | |||
// } | |||
// await _thirdpartyPushService.AddThirdpartyPushRecord(new BPA_ThirdpartyPushRecord() | |||
// { | |||
// Id = Guid.NewGuid().ToString(), | |||
// GroupId = CurrentUser.GroupId, | |||
// IsPush = false, | |||
// CallbackUrl = callbackUrl, | |||
// MessageId = msgId, | |||
// PushData = JsonConvert.SerializeObject(parameters), | |||
// PushDevice = JsonConvert.SerializeObject(list) | |||
// }); | |||
// } | |||
// break; | |||
// } | |||
//} | |||
} | |||
catch (Exception e) | |||
{ | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -6,6 +6,8 @@ | |||
} | |||
}, | |||
"SAAS_Manage": "http://10.2.1.26:21995/saasbase/", | |||
"baseurl": "http://localhost:5001/", | |||
"groupmeal": "http://localhost:5002/", | |||
"DBConnectionStr": "server=10.2.1.21;Port=3306;Database=bpa_kitchen_groupmealorder;Uid=root;Pwd=cygadmin;", | |||
"AllowedHosts": "*" | |||
} |