264 changed files with 56861 additions and 28048 deletions
Binary file not shown.
@ -0,0 +1,185 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text.Json; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.AspNetCore.Mvc; |
|||
using Win_in.Sfs.Auth.Application.Contracts; |
|||
using Win_in.Sfs.Basedata.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
[ApiController] |
|||
[Route($"{PdaHostConst.ROOT_ROUTE}job/production-return")] |
|||
|
|||
public class ProductionReturnRequestController : AbpController |
|||
{ |
|||
private readonly IProductionReturnJobAppService _productionReturnJobAppService; |
|||
private readonly IProductionReturnRequestAppService _productionReturnRequestAppService; |
|||
|
|||
private readonly IUserWorkGroupAppService _userWorkGroupAppService; |
|||
|
|||
private readonly ILocationAppService _locationApp; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
/// <param name="productionReturnJobAppService"></param>
|
|||
/// <param name="userWorkGroupAppService"></param>
|
|||
/// <param name="locationApp"></param>
|
|||
public ProductionReturnRequestController( |
|||
IProductionReturnJobAppService productionReturnJobAppService |
|||
, IUserWorkGroupAppService userWorkGroupAppService |
|||
, ILocationAppService locationApp |
|||
, IProductionReturnRequestAppService productionReturnRequestAppService |
|||
) |
|||
{ |
|||
_productionReturnRequestAppService = productionReturnRequestAppService; |
|||
_userWorkGroupAppService = userWorkGroupAppService; |
|||
this._productionReturnJobAppService = productionReturnJobAppService; |
|||
this._locationApp = locationApp; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取退货任务详情
|
|||
/// </summary>
|
|||
/// <param name="id"></param>
|
|||
/// <returns></returns>
|
|||
//[HttpGet("{id}")]
|
|||
|
|||
//public virtual async Task<ActionResult<ProductionReturnJobDTO>> PublishAsync(Guid id)
|
|||
//{
|
|||
// var result = await _productionReturnJobAppService.GetAsync(id).ConfigureAwait(false);
|
|||
// return Ok(result);
|
|||
//}
|
|||
|
|||
[HttpPost("")] |
|||
|
|||
public virtual async Task<ProductionReturnRequestDTO> CreateAsync(ProductionReturnRequestEditInput input) |
|||
{ |
|||
return await _productionReturnRequestAppService.CreateAsync(input).ConfigureAwait(false); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
/// <summary>
|
|||
/// 获取列表
|
|||
/// </summary>
|
|||
/// <param name="pageSize"></param>
|
|||
/// <param name="pageIndex"></param>
|
|||
/// <returns></returns>
|
|||
//[HttpGet("list")]
|
|||
//public virtual async Task<PagedResultDto<ProductionReturnJobDTO>> GetListAsync(int pageSize, int pageIndex)
|
|||
//{
|
|||
// var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
|
|||
// var jsonCodes = JsonSerializer.Serialize(wlgCodes);
|
|||
|
|||
// var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing };
|
|||
// var jsonStatus = JsonSerializer.Serialize(status);
|
|||
|
|||
// var request = new SfsJobRequestInputBase
|
|||
// {
|
|||
// MaxResultCount = pageSize,
|
|||
// SkipCount = (pageIndex - 1) * pageSize,
|
|||
// Sorting = $"{nameof(ProductionReturnJobDTO.Priority)} ASC",
|
|||
// Condition = new Condition
|
|||
// {
|
|||
// Filters = new List<Filter>
|
|||
// {
|
|||
// new(nameof(ProductionReturnJobDTO.WorkGroupCode),jsonCodes,"In"),
|
|||
// new(nameof(ProductionReturnJobDTO.JobStatus),jsonStatus,"In")
|
|||
// }
|
|||
// }
|
|||
// };
|
|||
|
|||
// var list = await _productionReturnJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
|
|||
// return list;
|
|||
//}
|
|||
|
|||
///// <summary>
|
|||
///// 获取列表 筛选
|
|||
///// </summary>
|
|||
///// <param name="sfsRequestDTO"></param>
|
|||
///// <returns></returns>
|
|||
//[HttpPost("list")]
|
|||
//public virtual async Task<PagedResultDto<ProductionReturnJobDTO>> GetListAsync(SfsJobRequestInputBase sfsRequestDTO)
|
|||
//{
|
|||
// var list = await _productionReturnJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false);
|
|||
// return list;
|
|||
//}
|
|||
|
|||
///// <summary>
|
|||
///// 获取任务数量
|
|||
///// </summary>
|
|||
///// <returns></returns>
|
|||
//[HttpGet("count")]
|
|||
//public virtual async Task<ActionResult<long>> CountAsync()
|
|||
//{
|
|||
// var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
|
|||
// var jsonCodes = JsonSerializer.Serialize(wlgCodes);
|
|||
|
|||
// var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing };
|
|||
// var jsonStatus = JsonSerializer.Serialize(status);
|
|||
|
|||
// var request = new SfsJobRequestInputBase
|
|||
// {
|
|||
// Sorting = $"{nameof(ProductionReturnJobDTO.Priority)} ASC",
|
|||
// Condition = new Condition
|
|||
// {
|
|||
// Filters = new List<Filter>
|
|||
// {
|
|||
// new(nameof(ProductionReturnJobDTO.WorkGroupCode),jsonCodes,"In"),
|
|||
// new(nameof(ProductionReturnJobDTO.JobStatus),jsonStatus,"In")
|
|||
// }
|
|||
// }
|
|||
// };
|
|||
|
|||
// var count = await _productionReturnJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
|
|||
|
|||
// return Ok(count);
|
|||
//}
|
|||
|
|||
///// <summary>
|
|||
///// 承接任务
|
|||
///// </summary>
|
|||
///// <param name="id"></param>
|
|||
///// <returns></returns>
|
|||
//[HttpPost("take/{id}")]
|
|||
//public virtual async Task TakeAsync(Guid id)
|
|||
//{
|
|||
// await _productionReturnJobAppService.AcceptAsync(id).ConfigureAwait(false);
|
|||
//}
|
|||
|
|||
///// <summary>
|
|||
///// 取消承接任务
|
|||
///// </summary>
|
|||
///// <param name="id"></param>
|
|||
///// <returns></returns>
|
|||
//[HttpPost("cancel-take/{id}")]
|
|||
//public virtual async Task CancelTakeAsync(Guid id)
|
|||
//{
|
|||
// await _productionReturnJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
|
|||
//}
|
|||
|
|||
///// <summary>
|
|||
///// 执行任务
|
|||
///// </summary>
|
|||
///// <param name="id"></param>
|
|||
///// <param name="dto"></param>
|
|||
///// <returns></returns>
|
|||
//[HttpPost("finish/{id}")]
|
|||
//public virtual async Task FinishAsync(Guid id, [FromBody] ProductionReturnJobDTO dto)
|
|||
//{
|
|||
// await _productionReturnJobAppService.CompleteAsync(id, dto).ConfigureAwait(false);
|
|||
//}
|
|||
|
|||
} |
@ -0,0 +1,187 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.AspNetCore.Mvc; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
[ApiController] |
|||
[Route($"{PdaHostConst.ROOT_ROUTE}store/transferlib-note")] |
|||
|
|||
public class TransferLibNoteController : AbpController |
|||
{ |
|||
private readonly ITransferLibNoteAppService _transferLibNoteAppService; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteAppService"></param>
|
|||
public TransferLibNoteController(ITransferLibNoteAppService transferLibNoteAppService) |
|||
{ |
|||
_transferLibNoteAppService = transferLibNoteAppService; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取盘点任务详情
|
|||
/// </summary>
|
|||
/// <param name="id"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("{id}")] |
|||
|
|||
public virtual async Task<ActionResult<TransferLibNoteDTO>> GetAsync(Guid id) |
|||
{ |
|||
var result = await _transferLibNoteAppService.GetAsync(id).ConfigureAwait(false); |
|||
return Ok(result); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取列表 筛选
|
|||
/// </summary>
|
|||
/// <param name="sfsRequestDTO"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("list")] |
|||
public virtual async Task<PagedResultDto<TransferLibNoteDTO>> GetListAsync(SfsStoreRequestInputBase sfsRequestDTO) |
|||
{ |
|||
var list = await _transferLibNoteAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false); |
|||
return list; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取列表
|
|||
/// </summary>
|
|||
/// <param name="pageSize"></param>
|
|||
/// <param name="pageIndex"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("list")] |
|||
public virtual async Task<PagedResultDto<TransferLibNoteDTO>> GetListAsync(int pageSize, int pageIndex) |
|||
{ |
|||
|
|||
var request = new SfsStoreRequestInputBase |
|||
{ |
|||
MaxResultCount = pageSize, |
|||
SkipCount = (pageIndex - 1) * pageSize, |
|||
Sorting = $"{nameof(TransferLibNoteDTO.Number)} ASC", |
|||
Condition = new Condition |
|||
{ |
|||
Filters = new List<Filter> |
|||
{ |
|||
new(nameof(TransferLibNoteDTO.Type),EnumTransSubType.Transfer_Area.ToString(),"=="), |
|||
new(nameof(TransferLibNoteDTO.Confirmed),"false","==") |
|||
} |
|||
} |
|||
}; |
|||
|
|||
var list = await _transferLibNoteAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); |
|||
return list; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取任务数量
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
[HttpGet("count")] |
|||
public virtual async Task<ActionResult<long>> CountAsync() |
|||
{ |
|||
var request = new SfsStoreRequestInputBase |
|||
{ |
|||
Sorting = $"{nameof(TransferLibNoteDTO.Number)} ASC", |
|||
Condition = new Condition |
|||
{ |
|||
Filters = new List<Filter> |
|||
{ |
|||
new(nameof(TransferLibNoteDTO.Type),EnumTransSubType.Transfer_Area.ToString(),"=="), |
|||
new(nameof(TransferLibNoteDTO.Confirmed),"false","==") |
|||
} |
|||
} |
|||
}; |
|||
|
|||
var count = await _transferLibNoteAppService.GetCountByFilterAsync(request).ConfigureAwait(false); |
|||
|
|||
return Ok(count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据number获取要料详情
|
|||
/// </summary>
|
|||
/// <param name="number"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("{number}")] |
|||
|
|||
public virtual async Task<ActionResult<TransferLibNoteDTO>> GetAsync(string number) |
|||
{ |
|||
var result = await _transferLibNoteAppService.GetByNumberAsync(number).ConfigureAwait(false); |
|||
return Ok(result); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 完成对应的请求
|
|||
/// </summary>
|
|||
/// <param name="id"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("complete/{id}")] |
|||
|
|||
public virtual async Task<TransferLibNoteDTO> CompleteAsync(Guid id) |
|||
{ |
|||
var entity = await _transferLibNoteAppService.ConfirmAsync(id).ConfigureAwait(false); |
|||
return entity; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 库存转移
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("")] |
|||
public virtual async Task<TransferLibNoteDTO> Create(TransferLibNoteEditInput input) |
|||
{ |
|||
return await _transferLibNoteAppService.CreateAsync(input).ConfigureAwait(false); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 拆箱
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("split-packing")] |
|||
public async Task<TransferLibNoteDTO> SplitPackingAsync(TransferLibNoteEditInput transferLibNoteEditInput) |
|||
{ |
|||
return await _transferLibNoteAppService.SplitPackingAsync(transferLibNoteEditInput).ConfigureAwait(false); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 采购收货拆箱,同时更新、插入PurchaseReceipt任务表、申请表
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <param name="updateJobDetailInput"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("split-packing-purchase-receipt")] |
|||
public async Task<bool> SplitPacking_PurchaseReceiptAsync(TransferLibNoteEditInput transferLibNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) |
|||
{ |
|||
var ret = await _transferLibNoteAppService.SplitPacking_PurchaseReceiptAsync(transferLibNoteEditInput, updateJobDetailInput).ConfigureAwait(false); |
|||
return ret; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 发料拆箱,同时更新、插入Inspect任务表(没有找到申请表//??)
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <param name="updateJobDetailInput"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("split-packing-issue")] |
|||
public async Task<TransferLibNoteDTO> SplitPacking_IssueAsync(TransferLibNoteEditInput transferLibNoteEditInput, [FromQuery] SplitPacking_UpdateJobDetailInput updateJobDetailInput) |
|||
{ |
|||
var ret = await _transferLibNoteAppService.SplitPacking_IssueAsync(transferLibNoteEditInput, updateJobDetailInput).ConfigureAwait(false); |
|||
return ret; |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,136 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.AspNetCore.Mvc; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
[ApiController] |
|||
[Route($"{PdaHostConst.ROOT_ROUTE}store/transferlib-request")] |
|||
|
|||
public class TransferLibRequestController : AbpController |
|||
{ |
|||
private readonly ITransferLibRequestAppService _transferLibRequestAppService; |
|||
|
|||
/// <summary>
|
|||
///
|
|||
/// </summary>
|
|||
/// <param name="transferLibRequestAppService"></param>
|
|||
public TransferLibRequestController(ITransferLibRequestAppService transferLibRequestAppService) |
|||
{ |
|||
_transferLibRequestAppService = transferLibRequestAppService; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取盘点任务详情
|
|||
/// </summary>
|
|||
/// <param name="id"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("{id}")] |
|||
|
|||
public virtual async Task<ActionResult<TransferLibRequestDTO>> GetAsync(Guid id) |
|||
{ |
|||
var result = await _transferLibRequestAppService.GetAsync(id).ConfigureAwait(false); |
|||
return Ok(result); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取列表 筛选
|
|||
/// </summary>
|
|||
/// <param name="sfsRequestDTO"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("list")] |
|||
public virtual async Task<PagedResultDto<TransferLibRequestDTO>> GetListAsync(SfsStoreRequestInputBase sfsRequestDTO) |
|||
{ |
|||
var list = await _transferLibRequestAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false); |
|||
return list; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取列表
|
|||
/// </summary>
|
|||
/// <param name="pageSize"></param>
|
|||
/// <param name="pageIndex"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("list")] |
|||
public virtual async Task<PagedResultDto<TransferLibRequestDTO>> GetListAsync(int pageSize, int pageIndex) |
|||
{ |
|||
|
|||
var request = new SfsStoreRequestInputBase |
|||
{ |
|||
MaxResultCount = pageSize, |
|||
SkipCount = (pageIndex - 1) * pageSize, |
|||
Sorting = $"{nameof(TransferLibRequestDTO.Number)} ASC", |
|||
Condition = new Condition |
|||
{ |
|||
Filters = new List<Filter> |
|||
{ |
|||
new(nameof(TransferLibRequestDTO.Type),EnumTransSubType.Transfer_Area.ToString(),"=="), |
|||
new(nameof(TransferLibRequestDTO.RequestStatus),EnumRequestStatus.New.ToString(),"==") |
|||
} |
|||
} |
|||
}; |
|||
|
|||
var list = await _transferLibRequestAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); |
|||
return list; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取任务数量
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
[HttpGet("count")] |
|||
public virtual async Task<ActionResult<long>> CountAsync() |
|||
{ |
|||
var request = new SfsStoreRequestInputBase |
|||
{ |
|||
Sorting = $"{nameof(TransferLibRequestDTO.Number)} ASC", |
|||
Condition = new Condition |
|||
{ |
|||
Filters = new List<Filter> |
|||
{ |
|||
new(nameof(TransferLibRequestDTO.Type),EnumTransSubType.Transfer_Area.ToString(),"=="), |
|||
new(nameof(TransferLibRequestDTO.RequestStatus),EnumRequestStatus.New.ToString(),"==") |
|||
} |
|||
} |
|||
}; |
|||
|
|||
var count = await _transferLibRequestAppService.GetCountByFilterAsync(request).ConfigureAwait(false); |
|||
|
|||
return Ok(count); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 根据number获取要料详情
|
|||
/// </summary>
|
|||
/// <param name="number"></param>
|
|||
/// <returns></returns>
|
|||
[HttpGet("{number}")] |
|||
|
|||
public virtual async Task<ActionResult<TransferLibRequestDTO>> GetAsync(string number) |
|||
{ |
|||
var result = await _transferLibRequestAppService.GetByNumberAsync(number).ConfigureAwait(false); |
|||
return Ok(result); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 完成对应的请求
|
|||
/// </summary>
|
|||
/// <param name="id"></param>
|
|||
/// <returns></returns>
|
|||
[HttpPost("complete/{id}")] |
|||
|
|||
public virtual async Task<TransferLibRequestDTO> CompleteAsync(Guid id) |
|||
{ |
|||
var entity = await _transferLibRequestAppService.CompleteAsync(id).ConfigureAwait(false); |
|||
return entity; |
|||
} |
|||
} |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,27 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class AssembleJobPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(AssembleJob); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料任务
|
|||
public const string AutoAssembleJob = StorePermissions.GroupName + "." + nameof(AutoAssembleJob); |
|||
|
|||
public static void AddAssembleJobPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var AssembleJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleJob))); |
|||
AssembleJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
AssembleJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
AssembleJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoAssembleJob, StorePermissionDefinitionProvider.L(nameof(AutoAssembleJob))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,46 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 装配发料任务
|
|||
/// </summary>
|
|||
[Display(Name = "装配发料任务")] |
|||
public class AssembleJobDTO : SfsJobDTOBase<AssembleJobDetailDTO> |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string AssembleRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
} |
@ -0,0 +1,112 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
} |
@ -0,0 +1,26 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IAssembleJobAppService |
|||
: ISfsJobAppServiceBase<AssembleJobDTO, SfsJobRequestInputBase, AssembleJobCheckInput, AssembleJobEditInput> |
|||
{ |
|||
Task<List<AssembleJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode); |
|||
|
|||
Task CancelByMaterialRequestAsync(string assembleNumber); |
|||
|
|||
Task<PagedResultDto<AssembleJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType, |
|||
bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<AssembleJobDTO>> GetByRequestNumberAsync(string requestNumber); |
|||
|
|||
/// <summary>
|
|||
/// 保存拆箱时涉及的明细修改
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
Task<AssembleJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); |
|||
|
|||
} |
@ -0,0 +1,6 @@ |
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleJobCheckInput : SfsJobCheckInputBase |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,134 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleJobDetailInput : SfsJobRecommendFromDetailInputBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
} |
@ -0,0 +1,82 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<AssembleJobDetailInput> |
|||
{ |
|||
#region Create
|
|||
/// <summary>
|
|||
/// 上游任务编号
|
|||
/// </summary>
|
|||
[Display(Name = "上游任务编号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string UpStreamJobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string AssembleRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务类型
|
|||
/// </summary>
|
|||
[Display(Name = "任务类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public EnumJobType JobType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否自动完成
|
|||
/// </summary>
|
|||
[Display(Name = "是否自动完成")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool IsAutoComplete { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务明细
|
|||
/// </summary>
|
|||
[Display(Name = "任务明细")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public List<AssembleJobDetailInput> Details { get; set; } = new(); |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,8 @@ |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public class CoatingIssueJobCheckInput : SfsJobCheckInputBase |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,47 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
/// <summary>
|
|||
/// 发料任务
|
|||
/// </summary>
|
|||
[Display(Name = "发料任务")] |
|||
public class CoatingIssueJobDTO : SfsJobDTOBase<CoatingIssueJobDetailDTO> |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string MaterialRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
} |
@ -0,0 +1,113 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public class CoatingIssueJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
} |
@ -0,0 +1,135 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public class CoatingIssueJobDetailInput : SfsJobRecommendFromDetailInputBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
} |
@ -0,0 +1,83 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public class CoatingIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<CoatingIssueJobDetailInput> |
|||
{ |
|||
#region Create
|
|||
/// <summary>
|
|||
/// 上游任务编号
|
|||
/// </summary>
|
|||
[Display(Name = "上游任务编号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string UpStreamJobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string MaterialRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务类型
|
|||
/// </summary>
|
|||
[Display(Name = "任务类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public EnumJobType JobType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否自动完成
|
|||
/// </summary>
|
|||
[Display(Name = "是否自动完成")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool IsAutoComplete { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务明细
|
|||
/// </summary>
|
|||
[Display(Name = "任务明细")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public List<CoatingIssueJobDetailInput> Details { get; set; } = new(); |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,28 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public static class CoatingIssueJobPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(IssueJob); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料任务
|
|||
public const string AutoIssueJob = StorePermissions.GroupName + "." + nameof(AutoIssueJob); |
|||
|
|||
public static void AddCoatingIssueJobPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var IssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueJob))); |
|||
IssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
IssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
IssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoIssueJob, StorePermissionDefinitionProvider.L(nameof(AutoIssueJob))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Jobs.IssueJobs; |
|||
|
|||
public interface ICoatingIssueJobAppService |
|||
: ISfsJobAppServiceBase<CoatingIssueJobDTO, SfsJobRequestInputBase, CoatingIssueJobCheckInput, CoatingIssueJobEditInput> |
|||
{ |
|||
Task<List<CoatingIssueJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode); |
|||
|
|||
Task CancelByMaterialRequestAsync(string materialNumber); |
|||
|
|||
Task<PagedResultDto<CoatingIssueJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType, |
|||
bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<CoatingIssueJobDTO>> GetByRequestNumberAsync(string requestNumber); |
|||
|
|||
/// <summary>
|
|||
/// 保存拆箱时涉及的明细修改
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
Task<CoatingIssueJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); |
|||
|
|||
} |
@ -0,0 +1,46 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 注塑发料任务
|
|||
/// </summary>
|
|||
[Display(Name = "注塑发料任务")] |
|||
public class InjectionJobDTO : SfsJobDTOBase<InjectionJobDetailDTO> |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string InjectionRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
//[Display(Name = "车间")]
|
|||
//[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
|
|||
//public string Workshop { get; set; }
|
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
} |
@ -0,0 +1,112 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
} |
@ -0,0 +1,26 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IInjectionJobAppService |
|||
: ISfsJobAppServiceBase<InjectionJobDTO, SfsJobRequestInputBase, InjectionJobCheckInput, InjectionJobEditInput> |
|||
{ |
|||
Task<List<InjectionJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode); |
|||
|
|||
Task CancelByMaterialRequestAsync(string injectionNumber); |
|||
|
|||
Task<PagedResultDto<InjectionJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType, |
|||
bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<InjectionJobDTO>> GetByRequestNumberAsync(string requestNumber); |
|||
|
|||
/// <summary>
|
|||
/// 保存拆箱时涉及的明细修改
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
Task<InjectionJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input); |
|||
|
|||
} |
@ -0,0 +1,27 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class InjectionJobPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionJob); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料任务
|
|||
public const string AutoInjectionJob = StorePermissions.GroupName + "." + nameof(AutoInjectionJob); |
|||
|
|||
public static void AddInjectionJobPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var InjectionJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionJob))); |
|||
InjectionJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
InjectionJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
InjectionJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoInjectionJob, StorePermissionDefinitionProvider.L(nameof(AutoInjectionJob))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,6 @@ |
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionJobCheckInput : SfsJobCheckInputBase |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,134 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionJobDetailInput : SfsJobRecommendFromDetailInputBase, IHasToLocation |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 请求库位
|
|||
/// </summary>
|
|||
[Display(Name = "请求库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位
|
|||
/// </summary>
|
|||
[Display(Name = "到库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库区
|
|||
/// </summary>
|
|||
[Display(Name = "到库区")] |
|||
public string ToLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到库位组
|
|||
/// </summary>
|
|||
[Display(Name = "到库位组")] |
|||
public string ToLocationGroup { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到ERP库位
|
|||
/// </summary>
|
|||
[Display(Name = "到ERP库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 到仓库
|
|||
/// </summary>
|
|||
[Display(Name = "到仓库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToWarehouseCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工序
|
|||
/// </summary>
|
|||
[Display(Name = "工序")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Operation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 配送方式
|
|||
/// </summary>
|
|||
[Display(Name = "配送方式")] |
|||
public EnumDistributionType DistributionType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整方式
|
|||
/// </summary>
|
|||
[Display(Name = "取整方式")] |
|||
public EnumTruncType TruncType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 取整后数量
|
|||
/// </summary>
|
|||
[Display(Name = "取整后数量")] |
|||
public decimal RoundedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划拆分规则
|
|||
/// </summary>
|
|||
[Display(Name = "计划拆分规则")] |
|||
public EnumPlannedSplitRule PlannedSplitRule { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 计划开始时间
|
|||
/// </summary>
|
|||
[Display(Name = "计划开始时间")] |
|||
public DateTime PlanBeginTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 每次配送数量
|
|||
/// </summary>
|
|||
[Display(Name = "每次配送数量")] |
|||
public decimal DeliveryQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
} |
@ -0,0 +1,82 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionJobDetailInput> |
|||
{ |
|||
#region Create
|
|||
/// <summary>
|
|||
/// 上游任务编号
|
|||
/// </summary>
|
|||
[Display(Name = "上游任务编号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string UpStreamJobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string InjectionRequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务类型
|
|||
/// </summary>
|
|||
[Display(Name = "任务类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public EnumJobType JobType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否自动完成
|
|||
/// </summary>
|
|||
[Display(Name = "是否自动完成")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool IsAutoComplete { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务明细
|
|||
/// </summary>
|
|||
[Display(Name = "任务明细")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public List<InjectionJobDetailInput> Details { get; set; } = new(); |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
//[Display(Name = "车间")]
|
|||
//[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
|
|||
//public string Workshop { get; set; }
|
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 非生产领料任务
|
|||
/// </summary>
|
|||
[Display(Name = "非生产领料任务")] |
|||
public class TransferLibJobDTO : SfsJobDTOBase<TransferLibJobDetailDTO>, IHasNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 调拨申请单号
|
|||
/// </summary>
|
|||
[Display(Name = "调拨申请单号")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调拨类型
|
|||
/// </summary>
|
|||
[Display(Name = "调拨类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用中间库
|
|||
/// </summary>
|
|||
[Display(Name = "使用中间库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
|
|||
} |
@ -0,0 +1,25 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class TransferLibJobDetailDTO : SfsStoreDetailWithFromToDTOBase |
|||
{ |
|||
/// <summary>
|
|||
/// 在途库地址
|
|||
/// </summary>
|
|||
[Display(Name = "在途库地址")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
/// <summary>
|
|||
/// 原因
|
|||
/// </summary>
|
|||
[Display(Name = "原因")] |
|||
public string Reason { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 执行任务状态
|
|||
/// </summary>
|
|||
public EnumJobStatus JobStatus { get; set; } |
|||
|
|||
} |
@ -0,0 +1,7 @@ |
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface ITransferLibJobAppService |
|||
: ISfsJobAppServiceBase<TransferLibJobDTO, SfsJobRequestInputBase, TransferLibJobCheckInput, TransferLibJobEditInput> |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,6 @@ |
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class TransferLibJobCheckInput : SfsJobCheckInputBase |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,29 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Volo.Abp.Data; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class TransferLibJobDetailInput : SfsStoreDetailWithFromToInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 在途库地址
|
|||
/// </summary>
|
|||
[Display(Name = "在途库地址")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 原因
|
|||
/// </summary>
|
|||
[Display(Name = "原因")] |
|||
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Reason { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 执行任务状态
|
|||
/// </summary>
|
|||
public EnumJobStatus JobStatus { get; set; } |
|||
|
|||
} |
@ -0,0 +1,62 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class TransferLibJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<TransferLibJobDetailInput> |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
#endregion
|
|||
|
|||
#region Update
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
#endregion
|
|||
|
|||
/// <summary>
|
|||
/// 调拨申请单号
|
|||
/// </summary>
|
|||
[Display(Name = "调拨申请单号")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调拨类型
|
|||
/// </summary>
|
|||
[Display(Name = "调拨类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用中间库
|
|||
/// </summary>
|
|||
[Display(Name = "使用中间库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
|
|||
/// <summary>
|
|||
/// 任务明细
|
|||
/// </summary>
|
|||
[Display(Name = "任务明细")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public List<TransferLibJobDetailInput> Details { get; set; } |
|||
public string UpStreamJobNumber { get; set; } |
|||
public EnumJobType JobType { get; set; } |
|||
public bool IsAutoComplete { get; set; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class TransferLibJobPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(TransferLibJob); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
public static void AddTransferLibJobPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var IssueJobPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(TransferLibJob))); |
|||
IssueJobPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
IssueJobPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
IssueJobPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
} |
|||
} |
@ -0,0 +1,30 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class AssembleNotePermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(AssembleNote); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料记录
|
|||
public const string AutoAssembleNote = StorePermissions.GroupName + "." + nameof(AutoAssembleNote); |
|||
|
|||
//直接发料
|
|||
public const string DirectAssembleNote = StorePermissions.GroupName + "." + nameof(DirectAssembleNote); |
|||
|
|||
public static void AddAssembleNotePermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var AssembleNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleNote))); |
|||
AssembleNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
AssembleNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
AssembleNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoAssembleNote, StorePermissionDefinitionProvider.L(nameof(AutoAssembleNote))); |
|||
permissionGroup.AddPermission(DirectAssembleNote, StorePermissionDefinitionProvider.L(nameof(DirectAssembleNote))); |
|||
} |
|||
} |
@ -0,0 +1,54 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleNoteDTO : SfsStoreDTOBase<AssembleNoteDetailDTO>, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求代码
|
|||
/// </summary>
|
|||
[Display(Name = "请求代码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
|
|||
} |
@ -0,0 +1,42 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleNoteDetailDTO : SfsStoreRecommendFromDetailWithFromToDTOBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IAssembleNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<AssembleNoteDTO, SfsStoreRequestInputBase, AssembleNoteDetailDTO, SfsStoreRequestInputBase> |
|||
{ |
|||
Task<AssembleNoteDTO> CreateAsync(AssembleNoteEditInput input); |
|||
|
|||
Task<AssembleNoteDTO> ConfirmAsync(Guid id); |
|||
|
|||
Task<AssembleNoteDTO> ConfirmAsync(string number); |
|||
|
|||
Task<PagedResultDto<AssembleNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
|||
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<AssembleNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType); |
|||
} |
@ -0,0 +1,53 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInputBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
} |
@ -0,0 +1,63 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleNoteEditInput : SfsStoreCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 发料记录号
|
|||
/// </summary>
|
|||
[Display(Name = "发料记录号")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<AssembleNoteDetailInput> Details { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求号码
|
|||
/// </summary>
|
|||
[Display(Name = "请求号码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,33 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
public string Workshop { get; set; } |
|||
|
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
} |
@ -0,0 +1,55 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public class CoatingIssueNoteDTO : SfsStoreDTOBase<CoatingIssueNoteDetailDTO>, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求代码
|
|||
/// </summary>
|
|||
[Display(Name = "请求代码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
|
|||
} |
@ -0,0 +1,43 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public class CoatingIssueNoteDetailDTO : SfsStoreRecommendFromDetailWithFromToDTOBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
} |
@ -0,0 +1,54 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public class CoatingIssueNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInputBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
} |
@ -0,0 +1,64 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public class CoatingIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 发料记录号
|
|||
/// </summary>
|
|||
[Display(Name = "发料记录号")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<CoatingIssueNoteDetailInput> Details { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求号码
|
|||
/// </summary>
|
|||
[Display(Name = "请求号码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,34 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public class CoatingIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
public string Workshop { get; set; } |
|||
|
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
} |
@ -0,0 +1,31 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public static class CoatingIssueNotePermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(IssueNote); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料记录
|
|||
public const string AutoIssueNote = StorePermissions.GroupName + "." + nameof(AutoIssueNote); |
|||
|
|||
//直接发料
|
|||
public const string DirectIssueNote = StorePermissions.GroupName + "." + nameof(DirectIssueNote); |
|||
|
|||
public static void AddCoatingIssueNotePermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var issueNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(IssueNote))); |
|||
issueNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
issueNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
issueNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoIssueNote, StorePermissionDefinitionProvider.L(nameof(AutoIssueNote))); |
|||
permissionGroup.AddPermission(DirectIssueNote, StorePermissionDefinitionProvider.L(nameof(DirectIssueNote))); |
|||
} |
|||
} |
@ -0,0 +1,22 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Notes.IssueNotes; |
|||
|
|||
public interface ICoatingIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<CoatingIssueNoteDTO, SfsStoreRequestInputBase, CoatingIssueNoteDetailDTO, SfsStoreRequestInputBase> |
|||
{ |
|||
Task<CoatingIssueNoteDTO> CreateAsync(CoatingIssueNoteEditInput input); |
|||
|
|||
Task<CoatingIssueNoteDTO> ConfirmAsync(Guid id); |
|||
|
|||
Task<CoatingIssueNoteDTO> ConfirmAsync(string number); |
|||
|
|||
Task<PagedResultDto<CoatingIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
|||
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<CoatingIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType); |
|||
} |
@ -0,0 +1,54 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionNoteDTO : SfsStoreDTOBase<InjectionNoteDetailDTO>, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求代码
|
|||
/// </summary>
|
|||
[Display(Name = "请求代码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
|
|||
} |
@ -0,0 +1,42 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionNoteDetailDTO : SfsStoreRecommendFromDetailWithFromToDTOBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IInjectionNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionNoteDTO, SfsStoreRequestInputBase, InjectionNoteDetailDTO, SfsStoreRequestInputBase> |
|||
{ |
|||
Task<InjectionNoteDTO> CreateAsync(InjectionNoteEditInput input); |
|||
|
|||
Task<InjectionNoteDTO> ConfirmAsync(Guid id); |
|||
|
|||
Task<InjectionNoteDTO> ConfirmAsync(string number); |
|||
|
|||
Task<PagedResultDto<InjectionNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
|||
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<InjectionNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType); |
|||
} |
@ -0,0 +1,30 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class InjectionNotePermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionNote); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动发料记录
|
|||
public const string AutoInjectionNote = StorePermissions.GroupName + "." + nameof(AutoInjectionNote); |
|||
|
|||
//直接发料
|
|||
public const string DirectInjectionNote = StorePermissions.GroupName + "." + nameof(DirectInjectionNote); |
|||
|
|||
public static void AddInjectionNotePermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var injectionNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionNote))); |
|||
injectionNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
injectionNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
injectionNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoInjectionNote, StorePermissionDefinitionProvider.L(nameof(AutoInjectionNote))); |
|||
permissionGroup.AddPermission(DirectInjectionNote, StorePermissionDefinitionProvider.L(nameof(DirectInjectionNote))); |
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInputBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 发料时间
|
|||
/// </summary>
|
|||
[Display(Name = "发料时间")] |
|||
public DateTime IssueTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库库位
|
|||
/// </summary>
|
|||
[Display(Name = "在途库库位")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
} |
@ -0,0 +1,63 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionNoteEditInput : SfsStoreCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 发料记录号
|
|||
/// </summary>
|
|||
[Display(Name = "发料记录号")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<InjectionNoteDetailInput> Details { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求号码
|
|||
/// </summary>
|
|||
[Display(Name = "请求号码")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
} |
@ -0,0 +1,33 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
public string Workshop { get; set; } |
|||
|
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料请求类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料请求类型")] |
|||
public string RequestType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
} |
@ -0,0 +1,47 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 库存转移记录-实体DTO
|
|||
/// </summary>
|
|||
public class TransferLibNoteDTO : SfsStoreDTOBase<TransferLibNoteDetailDTO>, IHasNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 调拨申请单号
|
|||
/// </summary>
|
|||
[Display(Name = "调拨申请单号")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调拨类型
|
|||
/// </summary>
|
|||
[Display(Name = "调拨类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用中间库
|
|||
/// </summary>
|
|||
[Display(Name = "使用中间库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
|
|||
} |
@ -0,0 +1,28 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 库存转移记录-明细表
|
|||
/// </summary>
|
|||
public class TransferLibNoteDetailDTO : SfsStoreDetailWithFromToDTOBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 在途库地址
|
|||
/// </summary>
|
|||
[Display(Name = "在途库地址")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
/// <summary>
|
|||
/// 原因
|
|||
/// </summary>
|
|||
[Display(Name = "原因")] |
|||
public string Reason { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 执行任务状态
|
|||
/// </summary>
|
|||
public EnumJobStatus JobStatus { get; set; } |
|||
|
|||
} |
@ -0,0 +1,90 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface ITransferLibNoteAppService : |
|||
ISfsStoreMasterReadOnlyAppServiceBase<TransferLibNoteDTO, SfsStoreRequestInputBase, TransferLibNoteDetailDTO, SfsStoreRequestInputBase> |
|||
{ |
|||
Task<TransferLibNoteDTO> CreateAsync(TransferLibNoteEditInput input); |
|||
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetWipTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetAreaTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetCustomerTransferListAsync(SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetListForDiffERPLocAsync( |
|||
SfsStoreRequestInputBase sfsRequestDTO, |
|||
bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetInsideTransferListAsync( |
|||
SfsStoreRequestInputBase sfsRequestDTO, |
|||
bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
Task<TransferLibNoteDTO> ConfirmAsync(Guid id); |
|||
|
|||
/// <summary>
|
|||
/// 库存转移
|
|||
/// </summary>
|
|||
/// <param name="input"></param>
|
|||
/// <returns></returns>
|
|||
Task<List<TransferLibNoteDTO>> CreateManyAsync(List<TransferLibNoteEditInput> input); |
|||
|
|||
/// <summary>
|
|||
/// 拆箱
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <returns></returns>
|
|||
Task<TransferLibNoteDTO> SplitPackingAsync(TransferLibNoteEditInput transferLibNoteEditInput); |
|||
|
|||
/// <summary>
|
|||
/// 按条件获取拆箱的分页列表
|
|||
/// request sample
|
|||
/// {
|
|||
/// "maxResultCount": 1000,
|
|||
/// "skipCount": 0,
|
|||
/// "sorting": "",
|
|||
/// "condition": { "filters": []}
|
|||
/// }
|
|||
/// </summary>
|
|||
/// <param name="sfsRequestDTO"></param>
|
|||
/// <param name="includeDetails"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
Task<PagedResultDto<TransferLibNoteDTO>> GetSplitPackingTransferListAsync( |
|||
SfsStoreRequestInputBase sfsRequestDTO, bool includeDetails = false, |
|||
CancellationToken cancellationToken = default); |
|||
|
|||
/// <summary>
|
|||
/// 采购收货拆箱,同时更新、插入PurchaseReceipt任务表、申请表
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <param name="updateJobDetailInput"></param>
|
|||
/// <returns></returns>
|
|||
Task<bool> SplitPacking_PurchaseReceiptAsync(TransferLibNoteEditInput transferLibNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); |
|||
|
|||
/// <summary>
|
|||
/// 质检拆箱,同时更新、插入Inspect任务表(不更新申请表)
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <param name="updateJobDetailInput"></param>
|
|||
/// <returns></returns>
|
|||
Task<TransferLibNoteDTO> SplitPacking_InspectAsync(TransferLibNoteEditInput transferLibNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); |
|||
|
|||
/// <summary>
|
|||
/// 发料拆箱,同时更新、插入Inspect任务表(没有找到申请表//??)
|
|||
/// </summary>
|
|||
/// <param name="transferLibNoteEditInput"></param>
|
|||
/// <param name="updateJobDetailInput"></param>
|
|||
/// <returns></returns>
|
|||
Task<TransferLibNoteDTO> SplitPacking_IssueAsync(TransferLibNoteEditInput transferLibNoteEditInput, SplitPacking_UpdateJobDetailInput updateJobDetailInput); |
|||
} |
@ -0,0 +1,32 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 库存转移记录-明细表
|
|||
/// </summary>
|
|||
public class TransferLibNoteDetailInput : SfsStoreDetailWithFromToInputBase |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 在途库地址
|
|||
/// </summary>
|
|||
[Display(Name = "在途库地址")] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 原因
|
|||
/// </summary>
|
|||
[Display(Name = "原因")] |
|||
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Reason { get; set; } |
|||
/// <summary>
|
|||
/// 执行任务状态
|
|||
/// </summary>
|
|||
public EnumJobStatus JobStatus { get; set; } |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,55 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
/// <summary>
|
|||
/// 新增和更新基础DTO
|
|||
/// </summary>
|
|||
public class TransferLibNoteEditInput : SfsStoreCreateOrUpdateInputBase, IHasNumber |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
public bool Confirmed { get; set; } |
|||
#endregion
|
|||
|
|||
#region Update
|
|||
/// <summary>
|
|||
/// 确认时间
|
|||
/// </summary>
|
|||
[Display(Name = "确认时间")] |
|||
public DateTime? ConfirmTime { get; set; } |
|||
#endregion
|
|||
|
|||
/// <summary>
|
|||
/// 调拨申请单号
|
|||
/// </summary>
|
|||
[Display(Name = "调拨申请单号")] |
|||
public string RequestNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 任务ID
|
|||
/// </summary>
|
|||
[Display(Name = "任务ID")] |
|||
public string JobNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调拨类型
|
|||
/// </summary>
|
|||
[Display(Name = "调拨类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用中间库
|
|||
/// </summary>
|
|||
[Display(Name = "使用中间库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
[Display(Name = "详情")] |
|||
public List<TransferLibNoteDetailInput> Details { get; set; } = new List<TransferLibNoteDetailInput>(); |
|||
public string Number { get; set; } |
|||
} |
@ -0,0 +1,85 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using DocumentFormat.OpenXml.Drawing; |
|||
using Win_in.Sfs.Shared.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class TransferLibNoteImportInput : SfsStoreImportInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 调拨类型
|
|||
/// </summary>
|
|||
[Display(Name = "调拨类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[ImporterHeader(Name = "调拨类型")] |
|||
[ExporterHeader(DisplayName = "调拨类型")] |
|||
[ValueMapping("区域内调拨(储位内移库)", EnumTransSubType.Transfer_Inside)] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用中间库
|
|||
/// </summary>
|
|||
[Display(Name = "使用中间库")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 在途库地址
|
|||
/// </summary>
|
|||
[Display(Name = "在途库地址")] |
|||
[ImporterHeader(IsIgnore = true)] |
|||
public string OnTheWayLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已确认
|
|||
/// </summary>
|
|||
[Display(Name = "已确认")] |
|||
[ImporterHeader(IsIgnore = true)] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public bool Confirmed { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 物料号
|
|||
/// </summary>
|
|||
[Display(Name = "物料号")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string ItemCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调拨数量
|
|||
/// </summary>
|
|||
[Display(Name = "调拨数量")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public decimal Qty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调出库位
|
|||
/// </summary>
|
|||
[Display(Name = "调出库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string FromLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 调入库位
|
|||
/// </summary>
|
|||
[Display(Name = "调入库位")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 箱码
|
|||
/// </summary>
|
|||
[Display(Name = "箱码")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public string PackingCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 状态
|
|||
/// </summary>
|
|||
[Display(Name = "状态")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public EnumInventoryStatus Status { get; set; } |
|||
|
|||
} |
@ -0,0 +1,41 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class TransferLibNotePermissions |
|||
{ |
|||
public const string Default = StorePermissions.GroupName + "." + nameof(TransferLibNote); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//线边调拨记录
|
|||
public const string WipTransferLibNote = StorePermissions.GroupName + "." + nameof(WipTransferLibNote); |
|||
//线边调拨记录确认
|
|||
public const string WipTransferLibNoteConfirm = StorePermissions.GroupName + "." + nameof(WipTransferLibNoteConfirm); |
|||
//客户调拨记录
|
|||
public const string CustomerTransferLibNote = StorePermissions.GroupName + "." + nameof(CustomerTransferLibNote); |
|||
//客户调拨记录确认
|
|||
public const string CustomerTransferLibNoteConfirm = StorePermissions.GroupName + "." + nameof(CustomerTransferLibNoteConfirm); |
|||
//库区间调拨记录
|
|||
public const string BetweenAreaTransferLibNote = StorePermissions.GroupName + "." + nameof(BetweenAreaTransferLibNote); |
|||
//库区内调拨记录
|
|||
public const string WithinAreaTransferLibNote = StorePermissions.GroupName + "." + nameof(WithinAreaTransferLibNote); |
|||
|
|||
public static void AddTransferLibNotePermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var transferLibNotePermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(TransferLibNote))); |
|||
transferLibNotePermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
transferLibNotePermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
transferLibNotePermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(WipTransferLibNote, StorePermissionDefinitionProvider.L(nameof(WipTransferLibNote))); |
|||
permissionGroup.AddPermission(WipTransferLibNoteConfirm, StorePermissionDefinitionProvider.L(nameof(WipTransferLibNoteConfirm))); |
|||
permissionGroup.AddPermission(CustomerTransferLibNote, StorePermissionDefinitionProvider.L(nameof(CustomerTransferLibNote))); |
|||
permissionGroup.AddPermission(CustomerTransferLibNoteConfirm, StorePermissionDefinitionProvider.L(nameof(CustomerTransferLibNoteConfirm))); |
|||
permissionGroup.AddPermission(BetweenAreaTransferLibNote, StorePermissionDefinitionProvider.L(nameof(BetweenAreaTransferLibNote))); |
|||
permissionGroup.AddPermission(WithinAreaTransferLibNote, StorePermissionDefinitionProvider.L(nameof(WithinAreaTransferLibNote))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class AssembleRequestPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(AssembleRequest); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动叫料申请
|
|||
public const string AutoAssembleRequest = StorePermissions.GroupName + "." + nameof(AutoAssembleRequest); |
|||
|
|||
public static void AddAssembleRequestPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var AssembleRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(AssembleRequest))); |
|||
AssembleRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
AssembleRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
AssembleRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoAssembleRequest, StorePermissionDefinitionProvider.L(nameof(AutoAssembleRequest))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,40 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleRequestDTO : SfsStoreRequestDTOBase<AssembleRequestDetailDTO>, IHasNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "是否使用在途库")] |
|||
public bool IsUseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 可用来源库位Json集合
|
|||
/// </summary>
|
|||
public string FromLocationCodeJsonList { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料库位
|
|||
/// </summary>
|
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 目标ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "目标ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
} |
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleRequestDetailDTO : SfsStoreDetailWithQtyDTOBase |
|||
{ |
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求未发
|
|||
/// </summary>
|
|||
[Display(Name = "请求未发")] |
|||
[NotMapped] |
|||
public decimal ToBeIssuedQty => Qty - IssuedQty; |
|||
|
|||
/// <summary>
|
|||
/// 已发未收
|
|||
/// </summary>
|
|||
[Display(Name = "已发未收")] |
|||
[NotMapped] |
|||
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; |
|||
|
|||
/// <summary>
|
|||
/// 请求未收
|
|||
/// </summary>
|
|||
[Display(Name = "请求未收")] |
|||
[NotMapped] |
|||
public decimal NotFinishQty => Qty - ReceivedQty; |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IAssembleRequestAppService |
|||
: ISfsStoreRequestMasterAppServiceBase<AssembleRequestDTO, SfsStoreRequestInputBase, AssembleRequestEditInput, AssembleRequestDetailDTO, SfsStoreRequestInputBase> |
|||
|
|||
{ |
|||
|
|||
} |
@ -0,0 +1,85 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleRequestDetailInput : SfsStoreDetailWithQtyInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "来源库区")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 状态
|
|||
/// </summary>
|
|||
[Display(Name = "状态")] |
|||
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New; |
|||
|
|||
/// <summary>
|
|||
/// ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
|
|||
} |
@ -0,0 +1,58 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class AssembleRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备料计划单号
|
|||
/// </summary>
|
|||
[Display(Name = "备料计划单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string PreparationPlanNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<AssembleRequestDetailInput> Details { get; set; } = new List<AssembleRequestDetailInput>(); |
|||
#endregion
|
|||
} |
@ -0,0 +1,53 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
[Display(Name = "叫料申请")] |
|||
public class AssembleRequestImportInput : SfsStoreImportInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[ImporterHeader(Name = "叫料类型")] |
|||
[ExporterHeader(DisplayName = "叫料类型")] |
|||
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 物品代码
|
|||
/// </summary>
|
|||
[Display(Name = "物品代码")] |
|||
[Required] |
|||
public string ItemCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[Required] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "调出库区")] |
|||
[Required] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 数量
|
|||
/// </summary>
|
|||
[Display(Name = "数量")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public decimal Qty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备注
|
|||
/// </summary>
|
|||
[Display(Name = "备注")] |
|||
public string Remark { get; set; } |
|||
} |
@ -0,0 +1,38 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public class CoatingMaterialRequestDTO : SfsStoreRequestDTOBase<CoatingMaterialRequestDetailDTO>, IHasNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备料计划单号
|
|||
/// </summary>
|
|||
[Display(Name = "备料计划单号")] |
|||
public string PreparationPlanNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
|
|||
} |
@ -0,0 +1,95 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public class CoatingMaterialRequestDetailDTO : SfsStoreDetailWithQtyDTOBase |
|||
|
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "来源库区")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
// /// <summary>
|
|||
// /// 在途库库位
|
|||
// /// </summary>
|
|||
// public string OnTheWayLocationCode { get; set; }
|
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 目标ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "目标ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求未发
|
|||
/// </summary>
|
|||
[Display(Name = "请求未发")] |
|||
[NotMapped] |
|||
public decimal ToBeIssuedQty => Qty - IssuedQty; |
|||
|
|||
/// <summary>
|
|||
/// 已发未收
|
|||
/// </summary>
|
|||
[Display(Name = "已发未收")] |
|||
[NotMapped] |
|||
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; |
|||
|
|||
/// <summary>
|
|||
/// 请求未收
|
|||
/// </summary>
|
|||
[Display(Name = "请求未收")] |
|||
[NotMapped] |
|||
public decimal NotFinishQty => Qty - ReceivedQty; |
|||
|
|||
} |
@ -0,0 +1,86 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public class CoatingMaterialRequestDetailInput : SfsStoreDetailWithQtyInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "来源库区")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 状态
|
|||
/// </summary>
|
|||
[Display(Name = "状态")] |
|||
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New; |
|||
|
|||
/// <summary>
|
|||
/// ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
|
|||
} |
@ -0,0 +1,59 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public class CoatingMaterialRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备料计划单号
|
|||
/// </summary>
|
|||
[Display(Name = "备料计划单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string PreparationPlanNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<CoatingMaterialRequestDetailInput> Details { get; set; } = new List<CoatingMaterialRequestDetailInput>(); |
|||
#endregion
|
|||
} |
@ -0,0 +1,54 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Application.Contracts; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
[Display(Name = "叫料申请")] |
|||
public class CoatingMaterialRequestImportInput : SfsStoreImportInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
[ImporterHeader(Name = "叫料类型")] |
|||
[ExporterHeader(DisplayName = "叫料类型")] |
|||
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 物品代码
|
|||
/// </summary>
|
|||
[Display(Name = "物品代码")] |
|||
[Required] |
|||
public string ItemCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[Required] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "调出库区")] |
|||
[Required] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 数量
|
|||
/// </summary>
|
|||
[Display(Name = "数量")] |
|||
[Required(ErrorMessage = "{0}是必填项")] |
|||
public decimal Qty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备注
|
|||
/// </summary>
|
|||
[Display(Name = "备注")] |
|||
public string Remark { get; set; } |
|||
} |
@ -0,0 +1,27 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public static class CoatingMaterialRequestPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(CoatingMaterialRequest); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动叫料申请
|
|||
public const string AutoMaterialRequest = StorePermissions.GroupName + "." + nameof(AutoMaterialRequest); |
|||
|
|||
public static void AddCoatingMaterialRequestPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var MaterialRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(CoatingMaterialRequest))); |
|||
MaterialRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
MaterialRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
MaterialRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoMaterialRequest, StorePermissionDefinitionProvider.L(nameof(AutoMaterialRequest))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,36 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests; |
|||
|
|||
public interface ICoatingMaterialRequestAppService |
|||
: ISfsStoreRequestMasterAppServiceBase<CoatingMaterialRequestDTO, SfsStoreRequestInputBase, CoatingMaterialRequestEditInput, CoatingMaterialRequestDetailDTO, SfsStoreRequestInputBase> |
|||
|
|||
{ |
|||
Task<CoatingMaterialRequestDTO> CreateAndHandleAsync(CoatingMaterialRequestEditInput input); |
|||
|
|||
/// <summary>
|
|||
/// 根据备料计划生成 叫料请求
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
Task<CoatingMaterialRequestDTO> CreateAndHandleByPreparationPlan(string productionPlanNumber); |
|||
|
|||
Task<CoatingMaterialRequestDTO> CreateAndHandleByAPIAsync(CoatingMaterialRequestEditInput input); |
|||
|
|||
/// <summary>
|
|||
/// 根据类型获取叫料请求
|
|||
/// </summary>
|
|||
/// <param name="requestInput"></param>
|
|||
/// <param name="type">叫料请求类型</param>
|
|||
/// <param name="includeDetails"></param>
|
|||
/// <param name="cancellationToken"></param>
|
|||
/// <returns></returns>
|
|||
Task<PagedResultDto<CoatingMaterialRequestDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, |
|||
string type, bool includeDetails = false, CancellationToken cancellationToken = default); |
|||
|
|||
Task<List<CoatingMaterialRequestDTO>> GetListByTypeAsync(string type); |
|||
|
|||
} |
@ -0,0 +1,40 @@ |
|||
using System.ComponentModel.DataAnnotations; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionRequestDTO : SfsStoreRequestDTOBase<InjectionRequestDetailDTO>, IHasNumber |
|||
{ |
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "是否使用在途库")] |
|||
public bool IsUseOnTheWayLocation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 可用来源库位Json集合
|
|||
/// </summary>
|
|||
public string FromLocationCodeJsonList { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料库位
|
|||
/// </summary>
|
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 目标ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "目标ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
} |
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionRequestDetailDTO : SfsStoreDetailWithQtyDTOBase |
|||
{ |
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 请求未发
|
|||
/// </summary>
|
|||
[Display(Name = "请求未发")] |
|||
[NotMapped] |
|||
public decimal ToBeIssuedQty => Qty - IssuedQty; |
|||
|
|||
/// <summary>
|
|||
/// 已发未收
|
|||
/// </summary>
|
|||
[Display(Name = "已发未收")] |
|||
[NotMapped] |
|||
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; |
|||
|
|||
/// <summary>
|
|||
/// 请求未收
|
|||
/// </summary>
|
|||
[Display(Name = "请求未收")] |
|||
[NotMapped] |
|||
public decimal NotFinishQty => Qty - ReceivedQty; |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public interface IInjectionRequestAppService |
|||
: ISfsStoreRequestMasterAppServiceBase<InjectionRequestDTO, SfsStoreRequestInputBase, InjectionRequestEditInput, InjectionRequestDetailDTO, SfsStoreRequestInputBase> |
|||
|
|||
{ |
|||
|
|||
} |
@ -0,0 +1,27 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using Win_in.Sfs.Wms.Store.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public static class InjectionRequestPermissions |
|||
{ |
|||
|
|||
public const string Default = StorePermissions.GroupName + "." + nameof(InjectionRequest); |
|||
public const string Create = Default + "." + StorePermissions.CreateStr; |
|||
public const string Update = Default + "." + StorePermissions.UpdateStr; |
|||
public const string Delete = Default + "." + StorePermissions.DeleteStr; |
|||
|
|||
//自动叫料申请
|
|||
public const string AutoInjectionRequest = StorePermissions.GroupName + "." + nameof(AutoInjectionRequest); |
|||
|
|||
public static void AddInjectionRequestPermission(this PermissionGroupDefinition permissionGroup) |
|||
{ |
|||
var InjectionRequestPermission = permissionGroup.AddPermission(Default, StorePermissionDefinitionProvider.L(nameof(InjectionRequest))); |
|||
InjectionRequestPermission.AddChild(Create, StorePermissionDefinitionProvider.L(StorePermissions.CreateStr)); |
|||
InjectionRequestPermission.AddChild(Update, StorePermissionDefinitionProvider.L(StorePermissions.UpdateStr)); |
|||
InjectionRequestPermission.AddChild(Delete, StorePermissionDefinitionProvider.L(StorePermissions.DeleteStr)); |
|||
|
|||
permissionGroup.AddPermission(AutoInjectionRequest, StorePermissionDefinitionProvider.L(nameof(AutoInjectionRequest))); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,85 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
using Win_in.Sfs.Shared.Domain.Shared; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionRequestDetailInput : SfsStoreDetailWithQtyInputBase |
|||
{ |
|||
/// <summary>
|
|||
/// 目标库位
|
|||
/// </summary>
|
|||
[Display(Name = "目标库位")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ToLocationCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 来源库区
|
|||
/// </summary>
|
|||
[Display(Name = "来源库区")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string FromLocationArea { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 工作中心
|
|||
/// </summary>
|
|||
[Display(Name = "工作中心")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string WorkStation { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 过期时间
|
|||
/// </summary>
|
|||
[Display(Name = "过期时间")] |
|||
public DateTime ExpiredTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 状态
|
|||
/// </summary>
|
|||
[Display(Name = "状态")] |
|||
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New; |
|||
|
|||
/// <summary>
|
|||
/// ERP储位
|
|||
/// </summary>
|
|||
[Display(Name = "ERP储位")] |
|||
public string ToLocationErpCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已发数量
|
|||
/// </summary>
|
|||
[Display(Name = "已发数量")] |
|||
public decimal IssuedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 已收数量
|
|||
/// </summary>
|
|||
[Display(Name = "已收数量")] |
|||
public decimal ReceivedQty { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细状态
|
|||
/// </summary>
|
|||
[Display(Name = "明细状态")] |
|||
public EnumStatus Status { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 位置码
|
|||
/// </summary>
|
|||
public string PositionCode { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 推荐类型
|
|||
/// </summary>
|
|||
public EnumRecommendType RecommendType { get; set; } |
|||
|
|||
|
|||
} |
@ -0,0 +1,58 @@ |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using Win_in.Sfs.Shared.Domain; |
|||
|
|||
namespace Win_in.Sfs.Wms.Store.Application.Contracts; |
|||
|
|||
public class InjectionRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase |
|||
{ |
|||
#region Base
|
|||
/// <summary>
|
|||
/// 车间
|
|||
/// </summary>
|
|||
[Display(Name = "车间")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Workshop { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 生产线
|
|||
/// </summary>
|
|||
[Display(Name = "生产线")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string ProdLine { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 使用在途库
|
|||
/// </summary>
|
|||
[Display(Name = "使用在途库")] |
|||
public bool UseOnTheWayLocation { get; set; } |
|||
#endregion
|
|||
|
|||
#region Create
|
|||
/// <summary>
|
|||
/// 要货单号
|
|||
/// </summary>
|
|||
[Display(Name = "要货单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string Number { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 叫料类型
|
|||
/// </summary>
|
|||
[Display(Name = "叫料类型")] |
|||
public string Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 备料计划单号
|
|||
/// </summary>
|
|||
[Display(Name = "备料计划单号")] |
|||
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
|||
public string PreparationPlanNumber { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 明细列表
|
|||
/// </summary>
|
|||
[Display(Name = "明细列表")] |
|||
public List<InjectionRequestDetailInput> Details { get; set; } = new List<InjectionRequestDetailInput>(); |
|||
#endregion
|
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue