diff --git a/BBWYB.Common/BBWYB.Common.csproj b/BBWYB.Common/BBWYB.Common.csproj index 7c02750..c165dfe 100644 --- a/BBWYB.Common/BBWYB.Common.csproj +++ b/BBWYB.Common/BBWYB.Common.csproj @@ -10,6 +10,7 @@ + diff --git a/BBWYB.Common/Extensions/DateTimeExtension.cs b/BBWYB.Common/Extensions/DateTimeExtension.cs index c35ca35..0ad4f30 100644 --- a/BBWYB.Common/Extensions/DateTimeExtension.cs +++ b/BBWYB.Common/Extensions/DateTimeExtension.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; -namespace BBWY.Common.Extensions +namespace BBWYB.Common.Extensions { public static class DateTimeExtension { diff --git a/BBWYB.Common/Extensions/MapperExtension.cs b/BBWYB.Common/Extensions/MapperExtension.cs index de97c59..060ab3f 100644 --- a/BBWYB.Common/Extensions/MapperExtension.cs +++ b/BBWYB.Common/Extensions/MapperExtension.cs @@ -1,7 +1,7 @@ using AutoMapper; using Microsoft.Extensions.DependencyInjection; -namespace BBWY.Common.Extensions +namespace BBWYB.Common.Extensions { public static class MapperExtension { diff --git a/BBWYB.Common/Extensions/StartupExtension.cs b/BBWYB.Common/Extensions/StartupExtension.cs index 7dd0426..34d8779 100644 --- a/BBWYB.Common/Extensions/StartupExtension.cs +++ b/BBWYB.Common/Extensions/StartupExtension.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -namespace BBWY.Common.Extensions +namespace BBWYB.Common.Extensions { public static class StartupExtension { diff --git a/BBWYB.Common/Http/HttpDownloader.cs b/BBWYB.Common/Http/HttpDownloader.cs index 665bdaf..787771d 100644 --- a/BBWYB.Common/Http/HttpDownloader.cs +++ b/BBWYB.Common/Http/HttpDownloader.cs @@ -4,7 +4,7 @@ using System.Net; using System.Net.Http; using System.Threading; -namespace BBWY.Common.Http +namespace BBWYB.Common.Http { /// /// Http下载器 diff --git a/BBWYB.Common/Http/RestAPIService.cs b/BBWYB.Common/Http/RestAPIService.cs index 21545b4..f0b89ca 100644 --- a/BBWYB.Common/Http/RestAPIService.cs +++ b/BBWYB.Common/Http/RestAPIService.cs @@ -1,10 +1,10 @@ -using BBWY.Common.Extensions; +using BBWYB.Common.Extensions; using Swifter.Json; using System.Net; using System.Net.Http.Headers; using System.Text; -namespace BBWY.Common.Http +namespace BBWYB.Common.Http { public class RestApiService { diff --git a/BBWYB.Common/Models/ApiResponse.cs b/BBWYB.Common/Models/ApiResponse.cs index e475241..fba6009 100644 --- a/BBWYB.Common/Models/ApiResponse.cs +++ b/BBWYB.Common/Models/ApiResponse.cs @@ -1,6 +1,6 @@ using System; -namespace BBWY.Common.Models +namespace BBWYB.Common.Models { public class ApiResponse { diff --git a/BBWYB.Common/Models/BusinessException.cs b/BBWYB.Common/Models/BusinessException.cs index d26b041..94b63ff 100644 --- a/BBWYB.Common/Models/BusinessException.cs +++ b/BBWYB.Common/Models/BusinessException.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace BBWY.Common.Models +namespace BBWYB.Common.Models { /// /// 业务异常 diff --git a/BBWYB.Common/Models/IDenpendency.cs b/BBWYB.Common/Models/IDenpendency.cs index 91b78ec..fc6d76d 100644 --- a/BBWYB.Common/Models/IDenpendency.cs +++ b/BBWYB.Common/Models/IDenpendency.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace BBWY.Common.Models +namespace BBWYB.Common.Models { public interface IDenpendency { diff --git a/BBWYB.Common/TaskSchedulers/DelayTrigger.cs b/BBWYB.Common/TaskSchedulers/DelayTrigger.cs index 53e7f31..3253a12 100644 --- a/BBWYB.Common/TaskSchedulers/DelayTrigger.cs +++ b/BBWYB.Common/TaskSchedulers/DelayTrigger.cs @@ -2,7 +2,7 @@ using System.Threading; using System.Threading.Tasks; -namespace BBWY.Common.Trigger +namespace BBWYB.Common.Trigger { /// /// 延迟触发组件 diff --git a/BBWYB.Server.API/BBWYB.Server.API.csproj b/BBWYB.Server.API/BBWYB.Server.API.csproj index 1133df6..ef243e8 100644 --- a/BBWYB.Server.API/BBWYB.Server.API.csproj +++ b/BBWYB.Server.API/BBWYB.Server.API.csproj @@ -4,14 +4,20 @@ net6.0 enable enable + True + + + + + diff --git a/BBWYB.Server.API/Controllers/BaseApiController.cs b/BBWYB.Server.API/Controllers/BaseApiController.cs new file mode 100644 index 0000000..32fe69d --- /dev/null +++ b/BBWYB.Server.API/Controllers/BaseApiController.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; +namespace BBWYB.Server.API.Controllers +{ + [Produces("application/json")] + [Route("Api/[Controller]/[Action]")] + [ApiController] + public class BaseApiController : ControllerBase + { + protected IHttpContextAccessor httpContextAccessor; + public BaseApiController(IHttpContextAccessor httpContextAccessor) + { + this.httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs new file mode 100644 index 0000000..186b6b8 --- /dev/null +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -0,0 +1,72 @@ +using BBWYB.Server.Business; +using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace BBWYB.Server.API.Controllers +{ + [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] + public class PurchaseSchemeController : BaseApiController + { + private PurchaseSchemeBusiness purchaseSchemeBusiness; + + public PurchaseSchemeController(PurchaseSchemeBusiness purchaseSchemeBusiness, IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor) + { + this.purchaseSchemeBusiness = purchaseSchemeBusiness; + } + + /// + /// 添加/编辑采购商 + /// + /// + [HttpPost] + public void EditPurchaseScheme([FromBody] BatchCURDSchemeRequest batchCURDSchemeRequest) + { + purchaseSchemeBusiness.EditPurchaseScheme(batchCURDSchemeRequest); + } + + /// + /// 根据产品Id批量查询采购商列表 + /// + /// + /// + [HttpPost] + public IList GetPurchaseSchemeList([FromBody] QuerySchemeRequest querySchemeRequest) + { + return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); + } + + /// + /// 删除采购商 + /// + /// + [HttpDelete] + public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + { + purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); + } + + /// + /// 删除采购方案 + /// + /// + [HttpDelete("{schemeId}")] + public void DeletePurchaseScheme([FromRoute] long schemeId) + { + purchaseSchemeBusiness.DeletePurchaseScheme(schemeId); + } + + /// + /// 查询共有采购商 + /// + /// + /// + [HttpPost] + public IList GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) + { + return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); + } + } +} diff --git a/BBWYB.Server.API/Controllers/WeatherForecastController.cs b/BBWYB.Server.API/Controllers/WeatherForecastController.cs deleted file mode 100644 index 13bc48c..0000000 --- a/BBWYB.Server.API/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace BBWYB.Server.API.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateTime.Now.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} \ No newline at end of file diff --git a/BBWYB.Server.API/Program.cs b/BBWYB.Server.API/Program.cs index 48863a6..0afe9ca 100644 --- a/BBWYB.Server.API/Program.cs +++ b/BBWYB.Server.API/Program.cs @@ -1,25 +1,124 @@ +using BBWYB.Common.Http; +using BBWYB.Common.Log; +using BBWYB.Server.Business; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi.Models; +using System.Reflection; +using System.Text; +using Yitter.IdGenerator; + var builder = WebApplication.CreateBuilder(args); +var services = builder.Services; +var configuration = builder.Configuration; + +services.AddMemoryCache(); + +var idOption = new IdGeneratorOptions(1); +var idGenerator = new DefaultIdGenerator(idOption); +services.AddSingleton(typeof(IIdGenerator), idGenerator); -// Add services to the container. +//var fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("DB")).Build(); +//services.AddSingleton(typeof(IFreeSql), fsql); -builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); +services.AddSingleton(); +services.AddSingleton(); +services.AddSingleton(); +services.AddMemoryCache(); +services.AddControllers(); +services.AddHttpContextAccessor(); +services.AddHttpClient(); +services.AddCors(options => +{ + options.AddPolicy("cors", p => + { + p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); + }); +}); + +services.AddControllers(); +services.AddEndpointsApiExplorer(); +services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new OpenApiInfo + { + Version = "v1.0.0", + Title = "ΪӯBAPI", + Description = "ע\r\n1.زƲôշ\r\n2.ApiResponseΪض(Code,Data,Message),ӿеķֵData\r\n3.Code=200" + }); + //JWT֤ + c.AddSecurityDefinition(JwtBearerDefaults.AuthenticationScheme, new OpenApiSecurityScheme + { + Scheme = JwtBearerDefaults.AuthenticationScheme, + BearerFormat = "JWT", + Type = SecuritySchemeType.ApiKey, + Name = "Authorization", + In = ParameterLocation.Header, + Description = "Authorization:Bearer {your JWT token}
", + }); + c.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme{Reference = new OpenApiReference + { + Type = ReferenceType.SecurityScheme, + Id = JwtBearerDefaults.AuthenticationScheme + } + }, + new string[] { } + } + }); + + var executingAssembly = Assembly.GetExecutingAssembly(); + var assemblyNames = executingAssembly.GetReferencedAssemblies().Union(new AssemblyName[] { executingAssembly.GetName() }).ToArray(); + Array.ForEach(assemblyNames, (assemblyName) => + { + //var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; + var xmlFile = $"{assemblyName.Name}.xml"; + var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); + if (!File.Exists(xmlPath)) + return; + c.IncludeXmlComments(xmlPath, true); + }); +}); + +var secret = configuration.GetSection("Secret").Value; +services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, x => +{ + x.SaveToken = true; + x.RequireHttpsMetadata = false; + x.TokenValidationParameters = new TokenValidationParameters() + { + ClockSkew = TimeSpan.Zero, + ValidateIssuerSigningKey = true, + ValidateIssuer = false, + ValidateAudience = false, + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), + //ValidIssuer = issuer, + //ValidAudience = audience, + //ValidateLifetime = true + }; +}); var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) +//yunDingBusiness.RefreshKey(); +var isAllowedSwagger = configuration.GetValue("AllowedSwagger"); +if (isAllowedSwagger) { - app.UseSwagger(); - app.UseSwaggerUI(); + app.UseSwagger(c => c.SerializeAsV2 = true) + .UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "BBWYB API"); + c.RoutePrefix = string.Empty; + }); } -app.UseHttpsRedirection(); - +//app.UseHttpsRedirection(); +app.UseRouting(); +app.UseCors("cors"); app.UseAuthorization(); - app.MapControllers(); app.Run(); diff --git a/BBWYB.Server.API/appsettings.json b/BBWYB.Server.API/appsettings.json index addc00e..503362a 100644 --- a/BBWYB.Server.API/appsettings.json +++ b/BBWYB.Server.API/appsettings.json @@ -9,12 +9,9 @@ "AllowedHosts": "*", "ConnectionStrings": { //"DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy;charset=utf8;sslmode=none;" - "DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;", + "DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;", "MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;" }, - "GlobalSetting": { - "MdsApi": "http://mdsapi.qiyue666.com" - }, "AllowedSwagger": true, "Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0" } diff --git a/BBWYB.Server.Business/BBWYB.Server.Business.csproj b/BBWYB.Server.Business/BBWYB.Server.Business.csproj index 8532fd1..dd73615 100644 --- a/BBWYB.Server.Business/BBWYB.Server.Business.csproj +++ b/BBWYB.Server.Business/BBWYB.Server.Business.csproj @@ -4,8 +4,15 @@ net6.0 enable enable + True + + + + + + diff --git a/BBWYB.Server.Business/BaseBusiness.cs b/BBWYB.Server.Business/BaseBusiness.cs new file mode 100644 index 0000000..84ecea7 --- /dev/null +++ b/BBWYB.Server.Business/BaseBusiness.cs @@ -0,0 +1,18 @@ +using BBWYB.Common.Log; +using Yitter.IdGenerator; +namespace BBWYB.Server.Business +{ + public class BaseBusiness + { + protected IFreeSql fsql; + protected NLogManager nLogManager; + protected IIdGenerator idGenerator; + + public BaseBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) + { + this.fsql = fsql; + this.nLogManager = nLogManager; + this.idGenerator = idGenerator; + } + } +} diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs new file mode 100644 index 0000000..165c19e --- /dev/null +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -0,0 +1,246 @@ +using BBWYB.Common.Extensions; +using BBWYB.Common.Log; +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; +using BBWYB.Server.Model.Dto; +using Yitter.IdGenerator; + +namespace BBWYB.Server.Business +{ + public class PurchaseSchemeBusiness : BaseBusiness, IDenpendency + { + public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { } + + private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest + { + var reqeustPurchaserIdList = purchaserSchemeList.Select(s => s.PurchaserId).Distinct().ToList(); + var existPurchaserIdList = fsql.Select().Where(p => reqeustPurchaserIdList.Contains(p.Id)).ToList(p => p.Id); + var newPurchaserIdList = reqeustPurchaserIdList.Except(existPurchaserIdList); + foreach (var scheme in purchaserSchemeList) + { + if (newPurchaserIdList.Any(p => p == scheme.PurchaserId) && !addPurchaserList.Any(p => p.Id == scheme.PurchaserId)) + { + addPurchaserList.Add(new Purchaser() + { + Id = scheme.PurchaserId, + Name = scheme.PurchaserName, + Location = scheme.PurchaserLocation, + Platform = scheme.PurchasePlatform + }); + } + } + } + + public void EditPurchaseScheme(BatchCURDSchemeRequest batchCURDSchemeRequest) + { + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0 && batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0) + throw new BusinessException("非法参数"); + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(p => string.IsNullOrEmpty(p.PurchaserId) || + string.IsNullOrEmpty(p.PurchaserName))) + throw new BusinessException("新增方案中有采购商Id/Name/Location为空"); + + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(p => string.IsNullOrEmpty(p.PurchaserId) || + string.IsNullOrEmpty(p.PurchaserName))) + throw new BusinessException("编辑方案中有采购商Id/Name/Location为空"); + + List addPurchaseSchemeList = null; + List addPurchaseSchemeProductList = new List(); + List addPurchaseSchemeProductSkuList = new List(); + List newPurchaserList = new List(); + List deletePurchaseSchemeIdList = new List(); + + #region 新增采购方案 + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0) + { + ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList); + + addPurchaseSchemeList = batchCURDSchemeRequest.AddPurchaseSchemeList.Map>(); + + foreach (var scheme in addPurchaseSchemeList) + { + scheme.Id = idGenerator.NewLong(); + scheme.CreateTime = DateTime.Now; + + foreach (var purchaseProduct in scheme.PurchaseSchemeProductList) + { + purchaseProduct.Id = idGenerator.NewLong(); + purchaseProduct.CreateTime = DateTime.Now; + purchaseProduct.SkuPurchaseSchemeId = scheme.Id; + foreach (var purchaseProductSku in purchaseProduct.PurchaseSchemeProductSkuList) + { + purchaseProductSku.Id = idGenerator.NewLong(); + purchaseProductSku.CreateTime = DateTime.Now; + purchaseProductSku.SkuPurchaseSchemeId = scheme.Id; + } + addPurchaseSchemeProductSkuList.AddRange(purchaseProduct.PurchaseSchemeProductSkuList); + } + addPurchaseSchemeProductList.AddRange(scheme.PurchaseSchemeProductList); + } + } + #endregion + + #region 更新采购方案 + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0) + { + //ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); + deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); + + var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map>(); + foreach (var scheme in editPurchaseSchemeList) + { + foreach (var purchaseProduct in scheme.PurchaseSchemeProductList) + { + purchaseProduct.Id = idGenerator.NewLong(); + purchaseProduct.CreateTime = DateTime.Now; + purchaseProduct.SkuPurchaseSchemeId = scheme.Id; + foreach (var purchaseProductSku in purchaseProduct.PurchaseSchemeProductSkuList) + { + purchaseProductSku.Id = idGenerator.NewLong(); + purchaseProductSku.CreateTime = DateTime.Now; + purchaseProductSku.SkuPurchaseSchemeId = scheme.Id; + } + addPurchaseSchemeProductSkuList.AddRange(purchaseProduct.PurchaseSchemeProductSkuList); + } + addPurchaseSchemeProductList.AddRange(scheme.PurchaseSchemeProductList); + } + } + #endregion + + fsql.Transaction(() => + { + if (newPurchaserList.Count > 0) + fsql.Insert(newPurchaserList).ExecuteAffrows(); + + //更新,删除已存在的采购方案商品和Sku + if (deletePurchaseSchemeIdList.Count > 0) + { + fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + } + + //新增 + if (addPurchaseSchemeList != null && addPurchaseSchemeList.Count > 0) + fsql.Insert(addPurchaseSchemeList).ExecuteAffrows(); + if (addPurchaseSchemeProductList.Count > 0) + fsql.Insert(addPurchaseSchemeProductList).ExecuteAffrows(); + if (addPurchaseSchemeProductSkuList.Count > 0) + fsql.Insert(addPurchaseSchemeProductSkuList).ExecuteAffrows(); + + }); + } + + /// + /// 获取采购方案 + /// + /// + /// + public IList GetPurchaseSchemeList(QuerySchemeRequest querySchemeRequest) + { + var select = fsql.Select().InnerJoin((ps, p) => ps.PurchaserId == p.Id); + if (querySchemeRequest.SchemeId != null && querySchemeRequest.SchemeId != 0) + select = select.Where((ps, p) => ps.Id == querySchemeRequest.SchemeId); + else + { + select = select.WhereIf(querySchemeRequest.ShopId != null && querySchemeRequest.ShopId != 0, (ps, p) => ps.ShopId == querySchemeRequest.ShopId) + .WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, (ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId)) + .WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId) + .WhereIf(querySchemeRequest.PurchasePlatform != null, (ps, p) => ps.PurchasePlatform == querySchemeRequest.PurchasePlatform); + } + + var purchaseSchemeList = select.ToList((ps, p) => new PurchaseSchemeResponse + { + Id = ps.Id, + ProductId = ps.ProductId, + SkuId = ps.SkuId, + ShopId = ps.ShopId, + PurchaserId = p.Id, + PurchaserName = p.Name, + PurchaserLocation = p.Location, + DefaultCost = ps.DefaultCost, + RealCost = ps.RealCost, + CreateTime = ps.CreateTime, + PurchasePlatform = ps.PurchasePlatform + }); + + if (purchaseSchemeList.Count > 0) + { + var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList(); + + var purchaseSchemeProductList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) + .ToList().Map>(); + + var purchaseSchemeProductSkuList = fsql.Select().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) + .ToList().Map>(); + + foreach (var scheme in purchaseSchemeList) + { + var schemeProductList = purchaseSchemeProductList.Where(ps => ps.SkuPurchaseSchemeId == scheme.Id); + if (schemeProductList.Count() > 0) + { + scheme.PurchaseSchemeProductList.AddRange(schemeProductList); + foreach (var schemeProduct in schemeProductList) + { + var schemeProductSkuList = purchaseSchemeProductSkuList.Where(psk => psk.SkuPurchaseSchemeId == scheme.Id && + psk.PurchaseProductId == schemeProduct.PurchaseProductId); + if (schemeProductSkuList.Count() > 0) + schemeProduct.PurchaseSchemeProductSkuList.AddRange(schemeProductSkuList); + } + } + } + } + return purchaseSchemeList; + } + + /// + /// 获取共同拥有的采购商 + /// + /// + /// + public IList GetSharePurchaser(QuerySchemeRequest querySchemeRequest) + { + var skuCount = querySchemeRequest.SkuIdList.Count(); + + var purchaseSchemeList = fsql.Select().InnerJoin((ps, p) => ps.PurchaserId == p.Id) + .Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId) + .Where((ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId)) + .ToList(); + if (purchaseSchemeList.Count() == 0) + return null; + + var group = purchaseSchemeList.GroupBy(p => p.PurchaserId); + var sharePurchaserIdList = new List(); + foreach (var g in group) + { + if (g.Count() == skuCount) + sharePurchaserIdList.Add(g.Key); + } + if (sharePurchaserIdList.Count == 0) + return null; + + return fsql.Select().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList(); + } + + public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + { + var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && + ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); + + fsql.Transaction(() => + { + fsql.Delete(purchaseSchemeIdList).ExecuteAffrows(); + fsql.Delete().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); + }); + } + + public void DeletePurchaseScheme(long schemeId) + { + fsql.Transaction(() => + { + fsql.Delete(schemeId).ExecuteAffrows(); + fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); + fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); + }); + } + } +} diff --git a/BBWYB.Server.Business/TaskSchedulerManager.cs b/BBWYB.Server.Business/TaskSchedulerManager.cs new file mode 100644 index 0000000..fa971c1 --- /dev/null +++ b/BBWYB.Server.Business/TaskSchedulerManager.cs @@ -0,0 +1,18 @@ +using System.Threading.Tasks.Schedulers; + +namespace BBWYB.Server.Business +{ + public class TaskSchedulerManager + { + public LimitedConcurrencyLevelTaskScheduler SyncOrderTaskScheduler { get; private set; } + + public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; } + + + public TaskSchedulerManager() + { + SyncOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); + PurchaseOrderCallbackTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); + } + } +} diff --git a/BBWYB.Server.Model/BBWYB.Server.Model.csproj b/BBWYB.Server.Model/BBWYB.Server.Model.csproj index 132c02c..fea6112 100644 --- a/BBWYB.Server.Model/BBWYB.Server.Model.csproj +++ b/BBWYB.Server.Model/BBWYB.Server.Model.csproj @@ -4,6 +4,15 @@ net6.0 enable enable + True + + + + + + + + diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs new file mode 100644 index 0000000..7b5f150 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -0,0 +1,56 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; +namespace BBWYB.Server.Model.Db +{ + + /// + /// Sku采购方案表 + /// + [Table(Name = "purchasescheme", DisableSyncStructure = true)] + public partial class PurchaseScheme + { + + /// + /// Sku采购方案Id + /// + [Column(IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 采购默认成本 + /// + + public decimal DefaultCost { get; set; } = 0.0M; + + [Column(StringLength = 50, IsNullable = false)] + public string ProductId { get; set; } + + /// + /// 采购商Id + /// + [Column(StringLength = 20)] + public string PurchaserId { get; set; } + + /// + /// 采购实际成本 + /// + + public decimal RealCost { get; set; } = 0.0M; + + [Column(StringLength = 50, IsNullable = false)] + public string SkuId { get; set; } + + public long ShopId { get; set; } + + [Column(MapType = typeof(int), DbType = "int(1)")] + public Enums.Platform PurchasePlatform { get; set; } + + [Column(IsIgnore = true)] + public List PurchaseSchemeProductList { get; set; } + } + +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs new file mode 100644 index 0000000..6833df3 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs @@ -0,0 +1,39 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 采购商表 + /// + [Table(Name = "purchaser", DisableSyncStructure = true)] + public partial class Purchaser + { + + /// + /// 采购商Id + /// + [Column(StringLength = 20, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 采购商名称 + /// + [Column(StringLength = 50)] + public string Name { get; set; } + + /// + /// 发货地 + /// + [Column(StringLength = 50)] + public string Location { get; set; } + + /// + /// 采购平台 + /// + [Column(MapType = typeof(int?))] + public Enums.Platform? Platform { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproduct.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproduct.cs new file mode 100644 index 0000000..d0733e3 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproduct.cs @@ -0,0 +1,53 @@ +using FreeSql.DataAnnotations; +using System; +using System.Collections.Generic; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 采购方案商品表 + /// + [Table(Name = "purchaseschemeproduct", DisableSyncStructure = true)] + public partial class PurchaseSchemeProduct + { + + /// + /// 采购商品和采购方案的关系Id + /// + [Column(IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string ProductId { get; set; } + + /// + /// 采购商品Id + /// + [Column(StringLength = 50, IsNullable = false)] + public string PurchaseProductId { get; set; } + + /// + /// 采购商品链接 + /// + [Column(StringLength = 100)] + public string PurchaseUrl { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string SkuId { get; set; } + + /// + /// Sku采购方案Id + /// + public long SkuPurchaseSchemeId { get; set; } + + + [Column(IsIgnore = true)] + public List PurchaseSchemeProductSkuList { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs new file mode 100644 index 0000000..4a9e837 --- /dev/null +++ b/BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs @@ -0,0 +1,51 @@ +using FreeSql.DataAnnotations; +using System; + +namespace BBWYB.Server.Model.Db +{ + + [Table(Name = "purchaseschemeproductsku", DisableSyncStructure = true)] + public partial class PurchaseSchemeProductSku + { + + /// + /// 采购商品的SKU和采购方案的关系Id + /// + [Column(IsPrimary = true)] + public long Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string ProductId { get; set; } + + /// + /// 采购商品Id + /// + [Column(StringLength = 50, IsNullable = false)] + public string PurchaseProductId { get; set; } + + /// + /// 采购商品的SkuId + /// + [Column(StringLength = 50)] + public string PurchaseSkuId { get; set; } + + /// + /// 采购商品Sku的SpecId + /// + [Column(StringLength = 50)] + public string PurchaseSkuSpecId { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string SkuId { get; set; } + + /// + /// Sku采购方案Id + /// + public long SkuPurchaseSchemeId { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs new file mode 100644 index 0000000..8176ee2 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace BBWYB.Server.Model.Dto +{ + public class BatchCURDSchemeRequest + { + /// + /// 需要修改的采购方案 + /// + public IList EditPurchaseSchemeList { get; set; } + + /// + /// 需要新增的采购方案 + /// + public IList AddPurchaseSchemeList { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs new file mode 100644 index 0000000..047cd7b --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/DeletePurchaseSchemeRequest.cs @@ -0,0 +1,9 @@ +namespace BBWYB.Server.Model.Dto +{ + public class DeletePurchaseSchemeRequest + { + public string ProductId { get; set; } + + public string PurchaserId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs new file mode 100644 index 0000000..f82c2fb --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs @@ -0,0 +1,7 @@ +namespace BBWYB.Server.Model.Dto +{ + public class EditPurchaseSchemeRequest: InputPurchaseSchemeRequest + { + public long Id { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs new file mode 100644 index 0000000..499d604 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWYB.Server.Model.Dto +{ + public class InputPurchaseSchemeProductRequest + { + public string ProductId { get; set; } + public string SkuId { get; set; } + public string PurchaseProductId { get; set; } + public string PurchaseUrl { get; set; } + public IList PurchaseSchemeProductSkuList { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs new file mode 100644 index 0000000..bce5af9 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWYB.Server.Model.Dto +{ + public class InputPurchaseSchemeProductSkuRequest + { + public string ProductId { get; set; } + public string SkuId { get; set; } + public string PurchaseProductId { get; set; } + public string PurchaseSkuId { get; set; } + public string PurchaseSkuSpecId { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs new file mode 100644 index 0000000..fe6a956 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; + +namespace BBWYB.Server.Model.Dto +{ + public class InputPurchaseSchemeRequest + { + public string ShopId { get; set; } + public string ProductId { get; set; } + public string SkuId { get; set; } + /// + /// 采购默认成本 + /// + public decimal? DefaultCost { get; set; } + /// + /// 采购实际成本 + /// + public decimal? RealCost { get; set; } + /// + /// 采购商Id + /// + public string PurchaserId { get; set; } + public string PurchaserName { get; set; } + /// + /// 采购商发货地 + /// + public string PurchaserLocation { get; set; } + /// + /// 采购平台 + /// + public Enums.Platform PurchasePlatform { get; set; } = Enums.Platform.阿里巴巴; + + public IList PurchaseSchemeProductList { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs new file mode 100644 index 0000000..abeb2fd --- /dev/null +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + +namespace BBWYB.Server.Model.Dto +{ + public class QuerySchemeRequest + { + /// + /// 采购方案Id + /// + public long? SchemeId { get; set; } + + public long? ShopId { get; set; } + + public IList SkuIdList { get; set; } + + /// + /// 采购商Id, 可空 + /// + public string PurchaserId { get; set; } + + /// + /// 采购平台 + /// + public Enums.Platform? PurchasePlatform { get; set; } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs new file mode 100644 index 0000000..0123956 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductResponse.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaseSchemeProductResponse : Model.Db.PurchaseSchemeProduct + { + public new List PurchaseSchemeProductSkuList { get; set; } + + public PurchaseSchemeProductResponse() + { + PurchaseSchemeProductSkuList = new List(); + } + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs new file mode 100644 index 0000000..7374eaa --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeProductSkuResponse.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaseSchemeProductSkuResponse : Model.Db.PurchaseSchemeProductSku + { + } +} diff --git a/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs new file mode 100644 index 0000000..582c034 --- /dev/null +++ b/BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace BBWYB.Server.Model.Dto +{ + public class PurchaseSchemeResponse : Model.Db.PurchaseScheme + { + public string PurchaserName { get; set; } + + public string PurchaserLocation { get; set; } + + public new List PurchaseSchemeProductList { get; set; } + + public PurchaseSchemeResponse() + { + PurchaseSchemeProductList = new List(); + } + } +} diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs new file mode 100644 index 0000000..dc296f2 --- /dev/null +++ b/BBWYB.Server.Model/Enums.cs @@ -0,0 +1,259 @@ +namespace BBWYB.Server.Model +{ + public class Enums + { + /// + /// 电商平台 + /// + public enum Platform + { + 淘宝 = 0, + 京东 = 1, + 阿里巴巴 = 2, + 拼多多 = 3, + 微信 = 4, + 拳探 = 10 + } + + /// + /// 采购方式 + /// + public enum PurchaseMethod + { + 线上采购 = 0, + 线下采购 = 1 + } + + /// + /// 采购单模式 + /// + public enum PurchaseOrderMode + { + 批发 = 0, + 代发 = 1 + } + + /// + /// 仓储类型 + /// + public enum StorageType + { + 京仓 = 0, + 云仓 = 1, + 本地自发 = 2, + 代发 = 3, + SD = 4 + } + + /// + /// 订单类型 + /// + public enum OrderType + { + #region JD订单类型 + SOP = 22, + LOC = 75, + FBP = 21 + #endregion + } + + /// + /// 支付方式 + /// + public enum PayType + { + 货到付款 = 1, + 邮局汇款 = 2, + 自提 = 3, + 在线支付 = 4, + 公司转账 = 5, + 银行卡转账 = 6 + } + + /// + /// 订单状态 + /// + public enum OrderState + { + 待付款 = 0, + 等待采购 = 1, + 待出库 = 2, + 待收货 = 3, + 已完成 = 4, + 锁定 = 5, + 已取消 = 6, + 暂停 = 7, + 已退款 = 8 + } + + /// + /// 刷单类型 + /// + public enum SDType + { + 自刷 = 0, + 其他 = 1, + 京礼金 = 2, + 刷单组 = 3 + } + + /// + /// 订单同步任务状态 + /// + public enum OrderSyncState + { + Running = 0, + End = 1 + } + + public enum PayChannelType + { + 支付宝 = 0, + 微信 = 1, + 银行卡 = 2 + } + + /// + /// 服务单处理结果 + /// + public enum ServiceResult + { + 退货 = 0, + 换新 = 1, + 原返 = 2, + 线下换新 = 3, + 维修 = 4, + 商品补发 = 5, + 仅退款 = 6, + SD退货 = 7 + } + + /// + /// 商品处理方式 + /// + public enum ProductResult + { + 一件代发_退回厂家 = 0, + 退回齐越仓 = 1, + 退回京仓 = 2, + 退回云仓 = 3, + 客户无退货 = 4 + } + + /// + /// 商品情况 + /// + public enum ProductHealth + { + 可二次销售 = 0, + 残次品_无法二次销售 = 1, + 厂家退货退款 = 2, + 客户无退货 = 3, + 破损 = 4 + } + + /// + /// 排序时间类型 + /// + public enum SortTimeType + { + ModifyTime = 0, StartTime = 1 + } + + /// + /// 支付账单类型 + /// + public enum PayBillType + { + 支付宝 = 0, + 微信 = 1, + 银行卡 = 2 + } + + + /// + /// 资金类型 + /// + public enum AuditCapitalType + { + 当月商品采购 = 0, + 当月商品退款 = 1, + 上月商品采购 = 2, + 上月商品退款 = 3, + 批量采购商品 = 4, + 采购运费 = 5, + 入仓运费 = 6, + 售后成本 = 7, + 发票点数 = 8, + 快递单号 = 9, + 诚e赊还款 = 10, + 空单号 = 11, + 购买刷单号 = 12, + 手机费 = 13, + 质检报告 = 14, + 备用金转入 = 15, + 平台补贴 = 16, + 快递赔付 = 17, + 自定义 = 18, + 备用金充值 = 19 + } + + /// + /// 京东仓库类型 1商家仓 2京东仓 + /// + public enum StockType + { + 商家仓 = 1, 京仓 = 2 + } + + /// + /// 仓库状态 0暂停,1使用 + /// + public enum StockStatus + { + 暂停 = 0, 使用 = 1 + } + + /// + /// SKU库存周期 暂无周期=0,增长期=1,稳定期=2,衰退期=3 + /// + public enum SkuStockNumCycleType + { + 暂无周期 = 0, + 增长期 = 1, + 稳定期 = 2, + 衰退期 = 3 + } + + /// + /// 司南周期 暂无周期 = -1,成长加速期 = 0,成熟利润期 = 1,稳定日销期 = 2,策马奔腾期 = 3 + /// + public enum SiNanCycleType + { + 暂无周期 = -1, + 成长加速期 = 0, + 成熟利润期 = 1, + 稳定日销期 = 2, + 策马奔腾期 = 3 + } + + /// + /// 促销任务状态 等待 = 0,进行中 = 1,已完成 = 2, 已停止 = 3 + /// + public enum PromitionTaskStatus + { + 等待 = 0, + 进行中 = 1, + 已完成 = 2, + 已停止 = 3 + } + + /// + /// AppKey类型 全类型 = 0, 订单管理 = 1, 商品管理 = 2 + /// + public enum AppKeyType + { + 全类型 = 0, 订单管理 = 1, 商品管理 = 2 + } + } +} diff --git a/BBWYB.Server.Model/_MDS重新生成.bat b/BBWYB.Server.Model/_MDS重新生成.bat new file mode 100644 index 0000000..2212476 --- /dev/null +++ b/BBWYB.Server.Model/_MDS重新生成.bat @@ -0,0 +1,2 @@ + +FreeSql.Generator -Razor 1 -NameOptions 1,0,0,0 -NameSpace BBWYB.Server.Model.Db -DB "MySql,data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;" -FileName "{name}.cs" diff --git a/BBWYB.Server.Model/__重新生成.bat b/BBWYB.Server.Model/__重新生成.bat new file mode 100644 index 0000000..6a93730 --- /dev/null +++ b/BBWYB.Server.Model/__重新生成.bat @@ -0,0 +1,2 @@ + +FreeSql.Generator -Razor 1 -NameOptions 1,0,0,0 -NameSpace BBWYB.Server.Model.Db -DB "MySql,data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;" -FileName "{name}.cs"