| | |
| | | |
| | | INSERT INTO dbo.Base_SerialRuleDetail |
| | | (Id, SerialRuleNo, SerialType, ItemNo, SourceType, SerialLength, SearchStart, DecimalType, UserDefine, SerialCodeFlag, Description, SerialTypeNo, GetData, PadLeft, IssueStatus, CreatedTime, UpdatedTime, CreatedUserId, CreatedUserName, UpdatedUserId, UpdatedUserName, IsDeleted) |
| | | VALUES(40, N'1', 40, 1, N'UD', 15, 0, 1, N'BC_', 0, N'客户编号-前缀', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | VALUES(40, N'1', 40, 1, N'UD', 15, 0, 1, N'PL_', 0, N'库位编号-前缀', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | INSERT INTO dbo.Base_SerialRuleDetail |
| | | (Id, SerialRuleNo, SerialType, ItemNo, SourceType, SerialLength, SearchStart, DecimalType, UserDefine, SerialCodeFlag, Description, SerialTypeNo, GetData, PadLeft, IssueStatus, CreatedTime, UpdatedTime, CreatedUserId, CreatedUserName, UpdatedUserId, UpdatedUserName, IsDeleted) |
| | | VALUES(41, N'1', 40, 2, N'Y4', 4, 0, 1, NULL, 0, N'客户编号-年份', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | VALUES(41, N'1', 40, 2, N'Y4', 4, 0, 1, NULL, 0, N'库位编号-年份', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | INSERT INTO dbo.Base_SerialRuleDetail |
| | | (Id, SerialRuleNo, SerialType, ItemNo, SourceType, SerialLength, SearchStart, DecimalType, UserDefine, SerialCodeFlag, Description, SerialTypeNo, GetData, PadLeft, IssueStatus, CreatedTime, UpdatedTime, CreatedUserId, CreatedUserName, UpdatedUserId, UpdatedUserName, IsDeleted) |
| | | VALUES(42, N'1', 40, 3, N'M2', 4, 0, 1, NULL, 0, N'客户编号-月份', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | VALUES(42, N'1', 40, 3, N'M2', 4, 0, 1, NULL, 0, N'库位编号-月份', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | INSERT INTO dbo.Base_SerialRuleDetail |
| | | (Id, SerialRuleNo, SerialType, ItemNo, SourceType, SerialLength, SearchStart, DecimalType, UserDefine, SerialCodeFlag, Description, SerialTypeNo, GetData, PadLeft, IssueStatus, CreatedTime, UpdatedTime, CreatedUserId, CreatedUserName, UpdatedUserId, UpdatedUserName, IsDeleted) |
| | | VALUES(43, N'1', 40, 4, N'D2', 4, 0, 1, NULL, 0, N'客户编号-日', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | VALUES(43, N'1', 40, 4, N'D2', 4, 0, 1, NULL, 0, N'库位编号-日', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | INSERT INTO dbo.Base_SerialRuleDetail |
| | | (Id, SerialRuleNo, SerialType, ItemNo, SourceType, SerialLength, SearchStart, DecimalType, UserDefine, SerialCodeFlag, Description, SerialTypeNo, GetData, PadLeft, IssueStatus, CreatedTime, UpdatedTime, CreatedUserId, CreatedUserName, UpdatedUserId, UpdatedUserName, IsDeleted) |
| | | VALUES(44, N'1', 40, 5, N'SN', 3, 0, 1, NULL, 0, N'客户编号-流水号', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | VALUES(44, N'1', 40, 5, N'SN', 3, 0, 1, NULL, 0, N'库位编号-流水号', NULL, 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0); |
| | | |
| | |
| | | @cancel="handleCancel"> |
| | | <a-spin :spinning="confirmLoading"> |
| | | <a-form :form="form"> |
| | | <!-- <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-input placeholder="请输入库位编码" |
| | | v-decorator="['placeCode', { rules: [{ required: true, message: '请输入库位编码!' }] }]" /> |
| | | </a-form-item> --> |
| | | </a-form-item> |
| | | <a-form-item label="库位名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-input placeholder="请输入库位名称" |
| | | v-decorator="['placeName', { rules: [{ required: true, message: '请输入库位名称!' }] }]" /> |
| | |
| | | @cancel="handleCancel"> |
| | | <a-spin :spinning="confirmLoading"> |
| | | <a-form :form="form"> |
| | | <!-- <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-form-item label="库位编码" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-input placeholder="请输入库位编码" |
| | | v-decorator="['placeCode', { rules: [{ required: true, message: '请输入库位编码!' }] }]" /> |
| | | </a-form-item> --> |
| | | </a-form-item> |
| | | <a-form-item label="库位名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback> |
| | | <a-input placeholder="请输入库位名称" |
| | | v-decorator="['placeName', { rules: [{ required: true, message: '请输入库位名称!' }] }]" /> |
| | |
| | | /// <summary> |
| | | /// 容器类型名称 |
| | | /// </summary> |
| | | [Required(ErrorMessage = "容器类型名称不能为空")] |
| | | public virtual string ContainerTypeName { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// 物料类型编号 |
| | | /// </summary> |
| | | [Required(ErrorMessage = "物料类型编号不能为空")] |
| | | public virtual string MaterialTypeCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 物料类型名称 |
| | | /// </summary> |
| | | [Required(ErrorMessage = "物料类型名称不能为空")] |
| | | public virtual string MaterialTypeName { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | using System.Web; |
| | | using System.ComponentModel; |
| | | using System.Data; |
| | | using NetTopologySuite.Algorithm; |
| | | using Pipelines.Sockets.Unofficial.Arenas; |
| | | namespace Admin.NET.Application |
| | | { |
| | | /// <summary> |
| | |
| | | private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep; |
| | | private readonly ISysExcelTemplateService _sysExcelTemplateService; |
| | | private readonly static object _lock = new(); |
| | | |
| | | private readonly IRepository<WmsMaterialType, MasterDbContextLocator> _wmsMaterialTypeRep; |
| | | private readonly IRepository<WmsContainerType, MasterDbContextLocator> _wmsContainerTypeRep; |
| | | public WmsContainerPackagingService( |
| | | IRepository<WmsContainerPackaging,MasterDbContextLocator> wmsContainerPackagingRep |
| | | ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep |
| | | ,IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep |
| | | ,ISysExcelTemplateService sysExcelTemplateService |
| | | , IRepository<WmsMaterialType, MasterDbContextLocator> wmsMaterialTypeRep |
| | | , IRepository<WmsContainerType, MasterDbContextLocator> wmsContainerTypeRep |
| | | ) |
| | | { |
| | | _wmsContainerPackagingRep = wmsContainerPackagingRep; |
| | | _sysDictTypeRep = sysDictTypeRep; |
| | | _sysDictDataRep = sysDictDataRep; |
| | | _sysExcelTemplateService = sysExcelTemplateService; |
| | | _wmsMaterialTypeRep = wmsMaterialTypeRep; |
| | | _wmsContainerTypeRep = wmsContainerTypeRep; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | public async Task Add(AddWmsContainerPackagingInput input) |
| | | { |
| | | var wmsContainerPackaging = input.Adapt<WmsContainerPackaging>(); |
| | | |
| | | var wmsMaterialType=(await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.MaterialTypeId&&u.IsDeleted==false)).Adapt<WmsMaterialTypeOutput>(); |
| | | if (wmsMaterialType == null) |
| | | { |
| | | throw Oops.Oh($"物料类型不存在"); |
| | | } |
| | | if (wmsMaterialType.IsDisabled == true) |
| | | { |
| | | throw Oops.Oh($"物料类型已禁用"); |
| | | } |
| | | var wmsContainerType=(await _wmsContainerTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.ContainerTypeId&& u.IsDeleted == false)).Adapt<WmsContainerTypeOutput>(); |
| | | if (wmsContainerType == null) |
| | | { |
| | | throw Oops.Oh($"容器类型不存在"); |
| | | } |
| | | if (wmsContainerType.IsDisabled == true) |
| | | { |
| | | throw Oops.Oh($"容器类型已禁用"); |
| | | } |
| | | wmsContainerPackaging.ContainerTypeName = wmsContainerType.TypeName; |
| | | wmsContainerPackaging.MaterialTypeName= wmsMaterialType.MaterialTypeName; |
| | | wmsContainerPackaging.MaterialTypeCode = wmsMaterialType.MaterialTypeCode; |
| | | //验证 |
| | | await CheckExisit(wmsContainerPackaging); |
| | | |
| | |
| | | var _MaterialTypeCode = "";//物料类型编号 |
| | | var _MaterialTypeName = "";//物料类型名称 |
| | | var _BoxQty = "";//物料容器容量 |
| | | var _Id = "";//Id主键 |
| | | #endregion |
| | | |
| | | |
| | |
| | | _MaterialTypeCode = row["物料类型编号"]?.ToString() ; |
| | | _MaterialTypeName = row["物料类型名称"]?.ToString() ; |
| | | _BoxQty = row["物料容器容量"]?.ToString() ; |
| | | _Id = row["Id主键"]?.ToString() ; |
| | | #endregion |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | } |
| | | if(!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!"); |
| | | } |
| | | if (outId <= 0&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!"); |
| | | } |
| | | else |
| | | { |
| | | addItem.Id = outId; |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | |
| | |
| | | { |
| | | |
| | | |
| | | |
| | | string erorMsg = string.Empty; |
| | | bool isExist = false; |
| | | if (!isEdit)//新增 |
| | | { |
| | | //数据是否存在重复 |
| | | isExist = await _wmsContainerPackagingRep.AnyAsync(u => |
| | | u.ContainerTypeId.Equals(input.ContainerTypeId) |
| | | &&u.MaterialTypeId.Equals(input.MaterialTypeId) |
| | | ,false); |
| | | if (isExist) |
| | | { |
| | | erorMsg = $"系统中,容器类型[{input.ContainerTypeName}]-物料类型[{input.MaterialTypeName}]关系已存在"; |
| | | throw Oops.Oh(erorMsg); |
| | | } |
| | | } |
| | | else//编辑 |
| | | { |
| | |
| | | isExist = await _wmsContainerPackagingRep.AnyAsync(u => |
| | | u.Id != input.Id |
| | | &&u.ContainerTypeId.Equals(input.ContainerTypeId) |
| | | && u.MaterialTypeId.Equals(input.MaterialTypeId) |
| | | ,false); |
| | | if (isExist) |
| | | { |
| | | erorMsg = $"系统中,容器类型[{input.ContainerTypeName}]-物料类型[{input.MaterialTypeName}]关系已存在"; |
| | | throw Oops.Oh(erorMsg); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (isExist) throw Oops.Oh(ErrorCode.E0001); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// 库位编码 |
| | | /// </summary> |
| | | [Required(ErrorMessage = "库位编码不能为空")] |
| | | public virtual string PlaceCode { get; set; } |
| | | |
| | | /// <summary> |
| | |
| | | public async Task Add(AddWmsPlaceInput input) |
| | | { |
| | | var wmsPlace = input.Adapt<WmsPlace>(); |
| | | wmsPlace.PlaceCode =await SerialUtil.GetSerial(EnumSerialType.库位编号); |
| | | |
| | | var area = (await _wmsAreaRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.AreaId&&u.IsDeleted==false)).Adapt<WmsAreaOutput>(); |
| | | if (area == null) |
| | | { |
| | |
| | | var _OutSequence = "";//出库顺序 |
| | | var _IsVirtually = "";//是否虚拟 |
| | | var _IsDisabled = "";//是否禁用 |
| | | var _Id = "";//Id主键 |
| | | #endregion |
| | | |
| | | |
| | |
| | | _PlaceName = row["库位名称"]?.ToString() ; |
| | | _PlaceAlias = row["库位别名"]?.ToString() ; |
| | | _PlaceType = row["库位类型"]?.ToString() ; |
| | | _PlaceTypeName = row["库位类型名称"]?.ToString() ; |
| | | _PlaceStatus = row["库位属性"]?.ToString() ; |
| | | _IsSrmPlace = row["是否堆垛机库位"]?.ToString() ; |
| | | _SrmPlaceNo = row["堆垛机库位号"]?.ToString() ; |
| | | _IsRgvPlace = row["是否RGV库位"]?.ToString() ; |
| | | _RgvPlaceNo = row["RGV库位号"]?.ToString() ; |
| | | _IsAgvPlace = row["是否AGV库位"]?.ToString() ; |
| | | _AgvPlaceNo = row["AGV库位号"]?.ToString() ; |
| | | _IsTransPlace = row["是否输送线库位"]?.ToString() ; |
| | | _TransPlaceNo = row["输送线库位号"]?.ToString() ; |
| | | |
| | | _IsActivateWCS = row["是否激活与任务调度"]?.ToString() ; |
| | | _Environment = row["库存环境"]?.ToString() ; |
| | | _AreaCode = row["库区编号"]?.ToString() ; |
| | | _AreaId = row["所在库区"]?.ToString() ; |
| | | //_AreaId = row["所在库区"]?.ToString() ; |
| | | _AreaName = row["库区名称"]?.ToString() ; |
| | | _VerificationCode = row["检验码"]?.ToString() ; |
| | | _RowNo = row["排"]?.ToString() ; |
| | |
| | | _OutSequence = row["出库顺序"]?.ToString() ; |
| | | _IsVirtually = row["是否虚拟"]?.ToString() ; |
| | | _IsDisabled = row["是否禁用"]?.ToString() ; |
| | | _Id = row["Id主键"]?.ToString() ; |
| | | #endregion |
| | | |
| | | |
| | |
| | | throw Oops.Oh($"第{index}行[所在库区]{_AreaId}不能为空!"); |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_AreaId)) |
| | | { |
| | | if (!long.TryParse(_AreaId, out long outAreaId)&&!string.IsNullOrEmpty(_AreaId)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不正确!"); |
| | | } |
| | | if (outAreaId <= 0&&!string.IsNullOrEmpty(_AreaId)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[所在库区]{_AreaId}值不能小于等于0!"); |
| | | } |
| | | else |
| | | { |
| | | addItem.AreaId = outAreaId; |
| | | } |
| | | |
| | | } |
| | | if(!string.IsNullOrEmpty(_AreaName)) |
| | | { |
| | | addItem.AreaName = (string)_AreaName; |
| | |
| | | } |
| | | } |
| | | |
| | | if(!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | if (!long.TryParse(_Id, out long outId)&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不正确!"); |
| | | } |
| | | if (outId <= 0&&!string.IsNullOrEmpty(_Id)) |
| | | { |
| | | throw Oops.Oh($"第{index}行[Id主键]{_Id}值不能小于等于0!"); |
| | | } |
| | | else |
| | | { |
| | | addItem.Id = outId; |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | |