mahao
1 year ago
38 changed files with 6240 additions and 698 deletions
@ -0,0 +1,11 @@ |
|||||
|
@echo off |
||||
|
|
||||
|
tasklist|find /i "SettleAccount.HttpApi.Host.exe" |
||||
|
|
||||
|
if %errorlevel% == 0 ( |
||||
|
exit |
||||
|
) |
||||
|
|
||||
|
%1 start mshta vbscript:createobject("wscript.shell").run("""%~0"" ::",0)(window.close)&&exit |
||||
|
|
||||
|
start /b SettleAccount.HttpApi.Host.exe --urls http://dev.ccwin-in.com:10582 |
@ -0,0 +1,3 @@ |
|||||
|
@ECHO OFF |
||||
|
|
||||
|
taskkill /im SettleAccount.HttpApi.Host.exe /f /t |
@ -0,0 +1,145 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Magicodes.ExporterAndImporter.Core; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Win.Sfs.SettleAccount.Bases; |
||||
|
using Win.Sfs.Shared.Filter; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Entities.BQ.Dtos; |
||||
|
public class PUB_ADJ_DETAIL_DTO : EntityDto<Guid> |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
///工厂地点
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "工厂地点")] |
||||
|
public string Site { get; set; } |
||||
|
/// <summary>
|
||||
|
///扩展1
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "扩展1")] |
||||
|
public string Extend1 { get; set; } |
||||
|
/// <summary>
|
||||
|
///作废发票号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "作废发票号")] |
||||
|
public string OldInvBillNum { get; set; } |
||||
|
/// <summary>
|
||||
|
///发票号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "发票号")] |
||||
|
public string InvBillNum { get; set; } |
||||
|
public decimal Price { get; set; } |
||||
|
public int Version { get; set; } |
||||
|
public string SettleBillNum { get; set; } |
||||
|
public DateTime SettleDate { get; set; } |
||||
|
public string InvGroupNum { get; set; } |
||||
|
public string LU { get; set; } |
||||
|
public string PN { get; set; } |
||||
|
public string KeyCode { get; set; } |
||||
|
public decimal Qty { get; set; } |
||||
|
public string GroupNum { get; set; } |
||||
|
|
||||
|
} |
||||
|
public class PUB_ADJ_DETAIL_EXP_DTO |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
///工厂地点
|
||||
|
/// </summary>
|
||||
|
[ExporterHeader(DisplayName = "工厂地点")] |
||||
|
public string Site { get; set; } |
||||
|
/// <summary>
|
||||
|
///扩展1
|
||||
|
/// </summary>
|
||||
|
[ExporterHeader(DisplayName = "扩展1")] |
||||
|
public string Extend1 { get; set; } |
||||
|
/// <summary>
|
||||
|
///作废发票号
|
||||
|
/// </summary>
|
||||
|
[ExporterHeader(DisplayName = "作废发票号")] |
||||
|
public string OldInvBillNum { get; set; } |
||||
|
/// <summary>
|
||||
|
///发票号
|
||||
|
/// </summary>
|
||||
|
[ExporterHeader(DisplayName = "发票号")] |
||||
|
public string InvBillNum { get; set; } |
||||
|
public decimal Price { get; set; } |
||||
|
public int Version { get; set; } |
||||
|
public string SettleBillNum { get; set; } |
||||
|
public DateTime SettleDate { get; set; } |
||||
|
public string InvGroupNum { get; set; } |
||||
|
public string LU { get; set; } |
||||
|
public string PN { get; set; } |
||||
|
public string KeyCode { get; set; } |
||||
|
public decimal Qty { get; set; } |
||||
|
public string GroupNum { get; set; } |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public class PUB_ADJ_DETAIL_IMP_DTO |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
///工厂地点
|
||||
|
/// </summary>
|
||||
|
[ImporterHeader(Name = "工厂地点")] |
||||
|
public string Site { get; set; } |
||||
|
/// <summary>
|
||||
|
///扩展1
|
||||
|
/// </summary>
|
||||
|
[ImporterHeader(Name = "扩展1")] |
||||
|
public string Extend1 { get; set; } |
||||
|
/// <summary>
|
||||
|
///作废发票号
|
||||
|
/// </summary>
|
||||
|
[ImporterHeader(Name = "作废发票号")] |
||||
|
public string OldInvBillNum { get; set; } |
||||
|
/// <summary>
|
||||
|
///发票号
|
||||
|
/// </summary>
|
||||
|
[ImporterHeader(Name = "发票号")] |
||||
|
public string InvBillNum { get; set; } |
||||
|
public decimal Price { get; set; } |
||||
|
public int Version { get; set; } |
||||
|
public string SettleBillNum { get; set; } |
||||
|
public DateTime SettleDate { get; set; } |
||||
|
public string InvGroupNum { get; set; } |
||||
|
public string LU { get; set; } |
||||
|
public string PN { get; set; } |
||||
|
public string KeyCode { get; set; } |
||||
|
public decimal Qty { get; set; } |
||||
|
public string GroupNum { get; set; } |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
public class PUB_ADJ_DETAIL_REQ_DTO : RequestInputBase |
||||
|
|
||||
|
{ |
||||
|
|
||||
|
[Display(Name = "工厂地点")] |
||||
|
public string Site { get; set; } |
||||
|
[Display(Name = "扩展1")] |
||||
|
public string Extend1 { get; set; } |
||||
|
[Display(Name = "作废发票号")] |
||||
|
public string OldInvBillNum { get; set; } |
||||
|
[Display(Name = "发票号")] |
||||
|
public string InvBillNum { get; set; } |
||||
|
public string InvGroupNum { get; set; } |
||||
|
public string LU { get; set; } |
||||
|
public string PN { get; set; } |
||||
|
public string KeyCode { get; set; } |
||||
|
public string GroupNum { get; set; } |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,204 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Concurrent; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Diagnostics; |
||||
|
using System.Linq; |
||||
|
using System.Threading; |
||||
|
using System.Threading.Tasks; |
||||
|
using Cronos; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Win.Sfs.SettleAccount.Entities.BQ.Vmi; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Entities.BQ; |
||||
|
|
||||
|
public class JobHostdService : BackgroundService |
||||
|
{ |
||||
|
private readonly object _lockObj = new object(); |
||||
|
private readonly IServiceProvider _serviceProvider; |
||||
|
private CancellationToken _stoppingToken; |
||||
|
|
||||
|
public JobHostdService(IServiceProvider serviceProvider) |
||||
|
{ |
||||
|
this._serviceProvider = serviceProvider; |
||||
|
} |
||||
|
|
||||
|
public static List<Type> ServiceTypes { get; private set; } |
||||
|
public ConcurrentDictionary<JobItem, Tuple<CancellationTokenSource, Thread>> Jobs { get; } = new(); |
||||
|
|
||||
|
public static void AddService(IServiceCollection services) |
||||
|
{ |
||||
|
ServiceTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(o => o.GetTypes()) |
||||
|
.Where(o => o.IsClass && !o.IsAbstract && o.IsAssignableTo(typeof(IJobService))) |
||||
|
.ToList(); |
||||
|
ServiceTypes.ForEach(o => |
||||
|
{ |
||||
|
services.AddTransient(typeof(IJobService), o); |
||||
|
services.AddTransient(o); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public void AddJob(JobItem job) |
||||
|
{ |
||||
|
lock (_lockObj) |
||||
|
{ |
||||
|
if (!Jobs.Keys.Any(o => o.Id == job.Id)) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
var source = new CancellationTokenSource(); |
||||
|
var token = source.Token; |
||||
|
var thread = new Thread(async () => |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
var expression = CronExpression.Parse(job.Cron, job.Cron.Split(' ').Length == 5 ? CronFormat.Standard : CronFormat.IncludeSeconds); |
||||
|
var serviceType = ServiceTypes.FirstOrDefault(o => o.FullName == job.Service); |
||||
|
if (serviceType != null) |
||||
|
{ |
||||
|
while (!_stoppingToken.IsCancellationRequested && !token.IsCancellationRequested) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
var now = DateTime.UtcNow; |
||||
|
var nextUtc = expression.GetNextOccurrence(now); |
||||
|
var span = nextUtc - now; |
||||
|
await Task.Delay(span.Value).ConfigureAwait(false); |
||||
|
Debug.WriteLine($"{job.Name} 定时任务开始执行"); |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
if (scope.ServiceProvider.GetService(serviceType) is IJobService jobService) |
||||
|
{ |
||||
|
if (!job.IsDisabled) |
||||
|
{ |
||||
|
var jobItem = this.GetJobItem(job.Id); |
||||
|
if (!jobItem.IsRunning) |
||||
|
{ |
||||
|
this.JobItemStart(job.Id); |
||||
|
} |
||||
|
try |
||||
|
{ |
||||
|
jobService.Invoke(); |
||||
|
this.JobItemSuccess(job.Id); |
||||
|
Debug.WriteLine($"{job.Name} 定时任务执行成功"); |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Debug.WriteLine($"{job.Name} 定时任务执行失败:{ex.Message}"); |
||||
|
Console.WriteLine(ex.ToString()); |
||||
|
this.JobItemFaild(job.Id, ex); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Console.WriteLine(ex.ToString()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Console.WriteLine(ex.ToString()); |
||||
|
} |
||||
|
}); |
||||
|
thread.IsBackground = true; |
||||
|
if (this.Jobs.TryAdd(job, new Tuple<CancellationTokenSource, Thread>(source, thread))) |
||||
|
{ |
||||
|
thread.Start(); |
||||
|
Debug.WriteLine($"{job.Name} 定时任务线程启动"); |
||||
|
} |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Console.WriteLine(ex.ToString()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void JobItemFaild(Guid id, Exception ex) |
||||
|
{ |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
var db = scope.ServiceProvider.GetRequiredService<SettleAccountDbContext>(); |
||||
|
var entity = db.Set<JobItem>().FirstOrDefault(o => o.Id == id); |
||||
|
if (entity != null) |
||||
|
{ |
||||
|
entity.IsRunning = false; |
||||
|
var log = db.Set<JobLog>().FirstOrDefault(o => o.JobId == id); |
||||
|
log.End = DateTime.Now; |
||||
|
log.Success = false; |
||||
|
log.Exception = ex.ToString(); |
||||
|
db.SaveChanges(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void JobItemSuccess(Guid id) |
||||
|
{ |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
var db = scope.ServiceProvider.GetRequiredService<SettleAccountDbContext>(); |
||||
|
var entity = db.Set<JobItem>().FirstOrDefault(o => o.Id == id); |
||||
|
if (entity != null) |
||||
|
{ |
||||
|
entity.IsRunning = false; |
||||
|
var log = db.Set<JobLog>().FirstOrDefault(o => o.JobId == id); |
||||
|
log.End = DateTime.Now; |
||||
|
log.Success = true; |
||||
|
db.SaveChanges(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void JobItemStart(Guid id) |
||||
|
{ |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
var db = scope.ServiceProvider.GetRequiredService<SettleAccountDbContext>(); |
||||
|
var entity = db.Set<JobItem>().FirstOrDefault(o => o.Id == id); |
||||
|
if (entity != null) |
||||
|
{ |
||||
|
entity.IsRunning = true; |
||||
|
var log = db.Set<JobLog>().Add(new JobLog { Start = DateTime.Now, JobId = entity.Id }); |
||||
|
db.SaveChanges(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private JobItem GetJobItem(Guid id) |
||||
|
{ |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
return scope.ServiceProvider.GetRequiredService<SettleAccountDbContext>().Set<JobItem>().AsNoTracking().FirstOrDefault(o => o.Id == id); |
||||
|
} |
||||
|
|
||||
|
public void RemoveJob(JobItem item) |
||||
|
{ |
||||
|
lock (_lockObj) |
||||
|
{ |
||||
|
var key = this.Jobs.Keys.FirstOrDefault(o => o.Id == item.Id); |
||||
|
if (key != null) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (this.Jobs.TryRemove(key, out var value)) |
||||
|
{ |
||||
|
value.Item1.Cancel(); |
||||
|
value.Item2.Interrupt(); |
||||
|
value.Item2.Join(); |
||||
|
} |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Console.WriteLine(ex.ToString()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
protected override Task ExecuteAsync(CancellationToken stoppingToken) |
||||
|
{ |
||||
|
this._stoppingToken = stoppingToken; |
||||
|
using var scope = this._serviceProvider.CreateScope(); |
||||
|
var db = scope.ServiceProvider.GetRequiredService<SettleAccountDbContext>(); |
||||
|
var jobs = db.Set<JobItem>().AsNoTracking().ToList(); |
||||
|
jobs.ForEach(this.AddJob); |
||||
|
return Task.CompletedTask; |
||||
|
} |
||||
|
} |
@ -1,125 +0,0 @@ |
|||||
using SettleAccount.Bases; |
|
||||
using System; |
|
||||
using System.ComponentModel.DataAnnotations; |
|
||||
using Win.Sfs.SettleAccount; |
|
||||
|
|
||||
namespace SettleAccount.Domain.BQ; |
|
||||
|
|
||||
|
|
||||
[Display(Name = "BBAC不可结算导入明细")] |
|
||||
public class BBAC_ADJ_DETAIL:SA_NOT_BASE |
|
||||
{ |
|
||||
///// <summary>
|
|
||||
///// 对应字段(Material+ExternalCalNumber)
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "LU+生产码")]
|
|
||||
//public string KeyCode { get; set; } = null!;
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 期间
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "期间")]
|
|
||||
//public int Version { get; set; }
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 结算单号
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "结算单号")]
|
|
||||
//public string SettleBillNum { get; set; } = null!;
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 对应字段Material
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "零件号")]
|
|
||||
//public string LU { get; set; } = null!;
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 对应字段ExternalCalNumber
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "生产码")]
|
|
||||
//public string PN { get; set; } = null!;
|
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 选择工厂导入
|
|
||||
/// </summary>
|
|
||||
[Display(Name = "工厂地点")] |
|
||||
public string Site { get; set; } = null!; |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 对应字段Quantity
|
|
||||
/// </summary>
|
|
||||
//[Display(Name = "结算数量")]
|
|
||||
//public decimal Qty { get; set; }
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 匹配价格表对应区间对应地点带出
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "单价")]
|
|
||||
//public decimal Price { get; set; }
|
|
||||
|
|
||||
/// <summary>
|
|
||||
/// ExternalCallNumber包含(R0)为买单件 1为JIS 2.为买单件
|
|
||||
/// </summary>
|
|
||||
[Display(Name = "业务类别")] |
|
||||
public EnumBusinessType BusinessType { get; set; } |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 对应字段MovementType,996正常,997为退货
|
|
||||
/// </summary>
|
|
||||
[Display(Name = "是否退货")] |
|
||||
public string IsReturn { get; set; } = null!; |
|
||||
|
|
||||
//[Display(Name = "发票分组号")]
|
|
||||
//public string InvGroupNum { get; set; } = null!;
|
|
||||
|
|
||||
///// <summary>
|
|
||||
///// 对应字段PostingDate
|
|
||||
///// </summary>
|
|
||||
//[Display(Name = "结算日期(收货日期)")]
|
|
||||
//public DateTime SettleDate { get; set; }
|
|
||||
|
|
||||
/// <summary>
|
|
||||
/// 对应字段Reference
|
|
||||
/// </summary>
|
|
||||
//[Display(Name = "结算分组")]
|
|
||||
//public string GroupNum { get; set; } = null!;
|
|
||||
|
|
||||
[Display(Name = "合同号")] |
|
||||
public string ContractDocID { get; set; } |
|
||||
[Display(Name = "作废发票号")] |
|
||||
public string OldInvBillNum { get; set; } |
|
||||
|
|
||||
[Display(Name = "发票号")] |
|
||||
public string InvBillNum { get; set; } |
|
||||
|
|
||||
public BBAC_ADJ_DETAIL() |
|
||||
{ |
|
||||
|
|
||||
} |
|
||||
|
|
||||
public BBAC_ADJ_DETAIL(Guid guid, string keyCode, int version, string settleBillNum, string lU, string pN, string site, decimal qty, decimal price, EnumBusinessType category, string isReturn, string invGroupNum, DateTime settleDate, string groupNum,string contractDocID, string oldinv, string inv) |
|
||||
{ |
|
||||
Id = guid; |
|
||||
KeyCode = keyCode; |
|
||||
Version = version; |
|
||||
SettleBillNum = settleBillNum; |
|
||||
LU = lU; |
|
||||
PN = pN; |
|
||||
Site = site; |
|
||||
Qty = qty; |
|
||||
Price = price; |
|
||||
BusinessType = category; |
|
||||
IsReturn = isReturn; |
|
||||
InvGroupNum = invGroupNum; |
|
||||
SettleDate = settleDate; |
|
||||
GroupNum = groupNum; |
|
||||
ContractDocID = contractDocID; |
|
||||
|
|
||||
|
|
||||
OldInvBillNum = oldinv; |
|
||||
|
|
||||
|
|
||||
InvBillNum =inv; |
|
||||
|
|
||||
} |
|
||||
} |
|
File diff suppressed because it is too large
@ -0,0 +1,93 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace Win.Sfs.SettleAccount.Migrations |
||||
|
{ |
||||
|
public partial class _202307270004 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropTable( |
||||
|
name: "Set_BBAC_ADJ_DETAIL"); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "ParentInvbillNum", |
||||
|
table: "Set_INVOICE_GRP", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<decimal>( |
||||
|
name: "Tax", |
||||
|
table: "Set_INVOICE_GRP", |
||||
|
type: "decimal(18,2)", |
||||
|
nullable: false, |
||||
|
defaultValue: 0m); |
||||
|
|
||||
|
migrationBuilder.AlterColumn<bool>( |
||||
|
name: "IsReturn", |
||||
|
table: "Set_BBAC_CAN_SA_DETAIL", |
||||
|
type: "bit", |
||||
|
maxLength: 50, |
||||
|
nullable: false, |
||||
|
defaultValue: false, |
||||
|
oldClrType: typeof(string), |
||||
|
oldType: "nvarchar(50)", |
||||
|
oldMaxLength: 50, |
||||
|
oldNullable: true); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "ParentInvbillNum", |
||||
|
table: "Set_INVOICE_GRP"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Tax", |
||||
|
table: "Set_INVOICE_GRP"); |
||||
|
|
||||
|
migrationBuilder.AlterColumn<string>( |
||||
|
name: "IsReturn", |
||||
|
table: "Set_BBAC_CAN_SA_DETAIL", |
||||
|
type: "nvarchar(50)", |
||||
|
maxLength: 50, |
||||
|
nullable: true, |
||||
|
oldClrType: typeof(bool), |
||||
|
oldType: "bit", |
||||
|
oldMaxLength: 50); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "Set_BBAC_ADJ_DETAIL", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
BusinessType = table.Column<int>(type: "int", nullable: false), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
ContractDocID = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
GroupNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
InvBillNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
InvGroupNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
IsReturn = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
KeyCode = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
LU = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
OldInvBillNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
PN = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false), |
||||
|
Qty = table.Column<decimal>(type: "decimal(18,2)", nullable: false), |
||||
|
SettleBillNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
SettleDate = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
Site = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true), |
||||
|
Version = table.Column<int>(type: "int", nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_Set_BBAC_ADJ_DETAIL", x => x.Id); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue