diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs
index 86c329304..0cfdd9257 100644
--- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs
+++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueNoteController.cs
@@ -39,6 +39,10 @@ public class IssueNoteController : AbpController
{
p.ToLot = string.Empty;
p.ToPackingCode = string.Empty;
+ if(p.PositionCode.Contains('W'))
+ {
+ p.RecommendType = EnumRecommendType.PositionCode;
+ }
});
await _issueNoteAppService.CreateAsync(input).ConfigureAwait(false);
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs
new file mode 100644
index 000000000..f1de16b9c
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs
@@ -0,0 +1,59 @@
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+using System;
+using System.Collections.Generic;
+
+[Display(Name = "器具基本信息")]
+
+public class EquipmentAreaDTO : SfsBaseDataDTOBase, IHasCode
+{
+
+
+
+
+
+ ///
+ /// 器具编号
+ ///
+ [Display(Name = "器具编号")]
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public string Type { get; set; } = string.Empty;
+ ///
+ /// 型号
+ ///
+ [Display(Name = "型号")]
+ public string Model { get; set; } = string.Empty;
+ ///
+ /// 库位编号
+ ///
+ [Display(Name = "库位编号")]
+ public string LocCode { get; set; } = string.Empty;
+ ///
+ /// 状态
+ ///
+ [Display(Name = "状态")]
+ public int State { get; set; } = 0;
+
+
+ ///
+ /// 位置编号
+ ///
+ [Display(Name = "位置编号")]
+ public string AreaCode { get; set; }
+
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaForDongyangExportDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaForDongyangExportDTO.cs
new file mode 100644
index 000000000..baae6ceca
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaForDongyangExportDTO.cs
@@ -0,0 +1,49 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "物料信息")]
+public class EquipmentAreaForDongyangExportDTO
+{
+ ///
+ /// 器具编号
+ ///
+ [Display(Name = "器具编号")]
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public string Type { get; set; } = string.Empty;
+ ///
+ /// 型号
+ ///
+ [Display(Name = "型号")]
+ public string Model { get; set; } = string.Empty;
+ ///
+ /// 库位编号
+ ///
+ [Display(Name = "库位编号")]
+ public string LocCode { get; set; } = string.Empty;
+ ///
+ /// 状态
+ ///
+ [Display(Name = "状态")]
+ public int State { get; set; } = 0;
+
+
+ ///
+ /// 位置编号
+ ///
+ [Display(Name = "位置编号")]
+ public string AreaCode { get; set; }
+
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs
index b24b1e152..58c7c3c04 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentDTO.cs
@@ -36,11 +36,7 @@ public class EquipmentDTO : SfsBaseDataDTOBase, IHasCode
///
[Display(Name = "状态")]
public int State { get; set; } = 0;
- ///
- /// 备注
- ///
- [Display(Name = "备注")]
- public string Remark { get; set; } = string.Empty;
+
///
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/EquipmentAreaPermissions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/EquipmentAreaPermissions.cs
new file mode 100644
index 000000000..04fa48623
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/EquipmentAreaPermissions.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.Authorization.Permissions;
+using Win_in.Sfs.Basedata.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public static class EquipmentAreaPermissions
+{
+
+ public const string Default = BasedataPermissions.GroupName + "." + nameof(Equipment);
+ public const string Create = Default + "." + BasedataPermissions.CreateStr;
+ public const string Update = Default + "." + BasedataPermissions.UpdateStr;
+ public const string Delete = Default + "." + BasedataPermissions.DeleteStr;
+
+ public static void AddEquipmentPermission(this PermissionGroupDefinition permissionGroup)
+ {
+ var EquipmentPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(Equipment)));
+ EquipmentPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr));
+ EquipmentPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr));
+ EquipmentPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr));
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/IEquipmentAreaAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/IEquipmentAreaAppService.cs
new file mode 100644
index 000000000..8067e9014
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/IEquipmentAreaAppService.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public interface IEquipmentAreaAppService
+ : ISfsBaseDataAppServiceBase
+ , ISfsGetByCodeAppService
+ , ISfsCheckAppService
+ , ISfsUpsertAppService
+{
+ //Task CheckItemIsAvailable(string itemCode);
+ //[HttpGet("check-item-is-available-no-select-sql")]
+ //void CheckItemIsAvailable(EquipmentDTO EquipmentDTO);
+
+ //Task> GetListByNameAsync(string name);
+
+ //Task GetOrAddAsync(EquipmentEditInput input);
+
+ //Task GetManageTypeAsync(string itemCode);
+ //Task> GetManageTypesAsync(List itemCodes);
+
+ //Task UpsertAsyncByInterface(EquipmentEditInput input);
+ //Task UpsertStdPackQtyAsync(string itemCode, decimal stdpackqty);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaCheckInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaCheckInput.cs
new file mode 100644
index 000000000..9b149c6e7
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaCheckInput.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public class EquipmentAreaCheckInput
+{
+ ///
+ /// 器具编号
+ ///
+ [Display(Name = "器具编号")]
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public string Type { get; set; } = string.Empty;
+ ///
+ /// 型号
+ ///
+ [Display(Name = "型号")]
+ public string Model { get; set; } = string.Empty;
+ ///
+ /// 库位编号
+ ///
+ [Display(Name = "库位编号")]
+ public string LocCode { get; set; } = string.Empty;
+ ///
+ /// 状态
+ ///
+ [Display(Name = "状态")]
+ public int State { get; set; } = 0;
+
+
+ ///
+ /// 位置编号
+ ///
+ [Display(Name = "位置编号")]
+ public string AreaCode { get; set; }
+
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaEditInput.cs
new file mode 100644
index 000000000..be0f614ca
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaEditInput.cs
@@ -0,0 +1,225 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public class EquipmentAreaEditInput : SfsBaseDataCreateOrUpdateInputBase
+{
+ ///
+ /// 器具编号
+ ///
+ [Display(Name = "器具编号")]
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public string Type { get; set; } = string.Empty;
+ ///
+ /// 型号
+ ///
+ [Display(Name = "型号")]
+ public string Model { get; set; } = string.Empty;
+ ///
+ /// 库位编号
+ ///
+ [Display(Name = "库位编号")]
+ public string LocCode { get; set; } = string.Empty;
+ ///
+ /// 状态
+ ///
+ [Display(Name = "状态")]
+ public int State { get; set; } = 0;
+
+
+ ///
+ /// 位置编号
+ ///
+ [Display(Name = "位置编号")]
+ public string AreaCode { get; set; }
+
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+
+
+
+ //#region Base
+ /////
+ ///// 名称
+ /////
+ //[Display(Name = "名称")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Name { get; set; }
+
+ /////
+ ///// 描述1
+ /////
+ //[Display(Name = "描述1")]
+ //[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Desc1 { get; set; }
+
+ /////
+ ///// 描述2
+ /////
+ //[Display(Name = "描述2")]
+ //[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Desc2 { get; set; }
+
+ /////
+ ///// 状态
+ /////
+ //[Display(Name = "状态")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //public EnumItemStatus Status { get; set; }
+
+ /////
+ ///// 制造件
+ /////
+ //[Display(Name = "制造件")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //public bool CanMake { get; set; }
+
+ /////
+ ///// 采购件
+ /////
+ //[Display(Name = "采购件")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //public bool CanBuy { get; set; }
+ /////
+ ///// 外包件
+ /////
+ //[Display(Name = "外包件")]
+ //public bool CanOutsourcing { get; set; }
+ /////
+ ///// 回收件
+ /////
+ //[Display(Name = "回收件")]
+ //public bool IsRecycled { get; set; }
+
+ /////
+ ///// 类型
+ /////
+ //[Display(Name = "类型")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Type { get; set; }
+
+ /////
+ ///// 种类
+ /////
+ //[Display(Name = "种类")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Category { get; set; }
+
+ /////
+ ///// 分组
+ /////
+ //[Display(Name = "分组")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Group { get; set; }
+
+ /////
+ ///// 颜色
+ /////
+ //[Display(Name = "颜色")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Color { get; set; }
+
+ /////
+ ///// 配置
+ /////
+ //[Display(Name = "配置")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Configuration { get; set; }
+
+ /////
+ ///// 虚零件
+ /////
+ //[Display(Name = "虚零件(Is phantom)")]
+ //public virtual bool IsPhantom { get; set; }
+
+ /////
+ ///// 基本计量单位
+ /////
+ //[Display(Name = "基本计量单位")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string BasicUom { get; set; }
+
+ /////
+ ///// 标包数
+ /////
+ //[Display(Name = "标包数")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //public decimal StdPackQty { get; set; }
+
+ /////
+ ///// ABC类
+ /////
+ //[Display(Name = "ABC类")]
+ //[Required(ErrorMessage = "{0}是必填项", AllowEmptyStrings = true)]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string AbcClass { get; set; }
+
+ /////
+ ///// 项目
+ /////
+ //[Display(Name = "项目")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Project { get; set; }
+
+ /////
+ ///// 版本
+ /////
+ //[Display(Name = "版本")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Version { get; set; }
+
+ /////
+ ///// 工程变革
+ /////
+ //[Display(Name = "工程变革")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Eco { get; set; }
+
+ /////
+ ///// 有效期
+ /////
+ //[Display(Name = "有效期")]
+ //public int Validity { get; set; }
+ /////
+ ///// 有效期单位
+ /////
+ //[Display(Name = "有效期单位")]
+ //public EnumValidityUnit ValidityUnit { get; set; }
+
+ /////
+ ///// 管理类型
+ /////
+ //[Display(Name = "管理类型")]
+ //public EnumItemManageType ManageType { get; set; }
+
+ /////
+ ///// 打印标签用的一个等级
+ /////
+ //[Display(Name = "Elevel")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Elevel { get; set; }
+ //#endregion
+
+ //#region Create
+ /////
+ ///// 代码
+ /////
+ //[Display(Name = "代码")]
+ //[Required(ErrorMessage = "{0}是必填项")]
+ //[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ //public string Code { get; set; }
+ //#endregion
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaImportInput.cs
new file mode 100644
index 000000000..b306348dd
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaImportInput.cs
@@ -0,0 +1,53 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "器具位置")]
+public class EquipmentAreaImportInput : SfsBaseDataImportInputBase
+{
+ ///
+ /// 器具编号
+ ///
+ [Display(Name = "器具编号")]
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public string Type { get; set; } = string.Empty;
+ ///
+ /// 型号
+ ///
+ [Display(Name = "型号")]
+ public string Model { get; set; } = string.Empty;
+ ///
+ /// 库位编号
+ ///
+ [Display(Name = "库位编号")]
+ public string LocCode { get; set; } = string.Empty;
+ ///
+ /// 状态
+ ///
+ [Display(Name = "状态")]
+ public int State { get; set; } = 0;
+
+
+ ///
+ /// 位置编号
+ ///
+ [Display(Name = "位置编号")]
+ public string AreaCode { get; set; }
+
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs
index 4822c9a39..aedd223cd 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentEditInput.cs
@@ -33,11 +33,7 @@ public class EquipmentEditInput : SfsBaseDataCreateOrUpdateInputBase
///
[Display(Name = "状态")]
public int State { get; set; } = 0;
- ///
- /// 备注
- ///
- [Display(Name = "备注")]
- public string Remark { get; set; } = string.Empty;
+
///
/// 创建人
///
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs
new file mode 100644
index 000000000..ac0cb8661
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs
@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "Kitting箱")]
+public class KittingDTO : SfsBaseDataDTOBase, IHasCode, IHasName
+{
+ [Display(Name ="编号")]
+ public string Code { get; set; }
+ [Display(Name = "名称")]
+ public string Name { get; set; }
+
+ [Display(Name = "明细")]
+ public virtual ICollection Details { set; get; }= new List();
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs
new file mode 100644
index 000000000..cfa860a62
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs
@@ -0,0 +1,49 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.MultiTenancy;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "Kitting箱明细")]
+public class KittingDetailDTO: AuditedEntityDto, IMultiTenant, IRemark
+{
+ ///
+ /// 主表ID
+ ///
+ [Display(Name = "主表ID")]
+ public Guid MasterId { get; set; }
+ ///
+ /// 物料编码
+ ///
+ [Display(Name = "物料编码")]
+ public string PartCode { set; get; }
+ ///
+ /// 描述1
+ ///
+ [Display(Name = "描述1")]
+ public string Desc1 { set; get; }
+ ///
+ /// 描述2
+ ///
+ [Display(Name = "描述2")]
+ public string Desc2 { set; get; }
+ ///
+ /// 包装数量
+ ///
+ [Display(Name = "包装数量")]
+ public decimal Qty { set; get; }
+
+ ///
+ /// 配置
+ ///
+ [Display(Name = "配置")]
+ public string Conf { set; get; }
+
+ public Guid? TenantId { set; get; }
+
+ public string Remark { get; set; }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/IKttingAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/IKttingAppService.cs
new file mode 100644
index 000000000..ff56f5fab
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/IKttingAppService.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+using Win_in.Sfs.Shared.Application.Contracts;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public interface IKittingAppService: ISfsBaseDataAppServiceBase, ISfsGetByCodeAppService
+{
+ Task UpdateAsync(KittingEditInput input);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs
new file mode 100644
index 000000000..1b9e2a17b
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.MultiTenancy;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Kittings.Inputs;
+public class KittingDetailInput: EntityDto, IMultiTenant, IRemark
+{
+ ///
+ /// 主表ID
+ ///
+ [Display(Name = "主表ID")]
+ public Guid MasterId { get; set; }
+ ///
+ /// 物料编码
+ ///
+ [Display(Name = "物料编码")]
+ public string PartCode { set; get; }
+ ///
+ /// 描述1
+ ///
+ [Display(Name = "描述1")]
+ public string Desc1 { set; get; }
+ ///
+ /// 描述2
+ ///
+ [Display(Name = "描述2")]
+ public string Desc2 { set; get; }
+ ///
+ /// 包装数量
+ ///
+ [Display(Name = "包装数量")]
+ public decimal Qty { set; get; }
+ ///
+ /// 配置
+ ///
+ [Display(Name = "配置")]
+ public string Conf { set; get; }
+ [Display(Name = "租户ID")]
+ public Guid? TenantId { set; get;
+ }
+ [Display(Name = "备注")]
+ public string Remark { get; set; }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs
new file mode 100644
index 000000000..422404a21
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Basedata.Kittings.Inputs;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public class KittingEditInput : SfsBaseDataCreateOrUpdateInputBase
+{
+
+ public string Code { get; set; }
+ public string Name { get; set; }
+
+
+ public virtual ICollection Details { get; set; }=new List();
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs
new file mode 100644
index 000000000..e47e7d778
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs
@@ -0,0 +1,107 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+[Display(Name = "Kitting箱")]
+public class KittingImportInput : SfsBaseDataImportInputBase
+{
+
+ public string Code { get; set; }
+ public string Name { get; set; }
+
+
+}
+
+//[Serializable]
+//public class CustomerDTO : SfsBaseDataDTOBase
+//{
+// ///
+// ///�ͻ�����
+// ///
+// [Display(Name = "�ͻ�����")]
+// [Required(ErrorMessage = "{0}�DZ�����")]
+// [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}�������{1}���ַ�")]
+// public string Code { get; set; }
+
+// ///
+// /// �ͻ�����
+// ///
+// [Display(Name = "�ͻ�����")]
+// [Required(ErrorMessage = "{0}�DZ�����")]
+// [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}�������{1}���ַ�")]
+// public string Name { get; set; }
+
+// ///
+// /// �ͻ�����
+// ///
+// [Display(Name = "�ͻ�����")]
+// [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}�������{1}���ַ�")]
+// public string Description { get; set; }
+
+// ///
+// /// ��ϵ��ַ
+// ///
+// [Display(Name = "��ϵ��ַ")]
+// [StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}�������{1}���ַ�")]
+// public string Address { get; set; }
+
+// ///
+// /// ��ϵ��
+// ///
+
+// [Display(Name = "��ϵ��")]
+// [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}�������{1}���ַ�")]
+// public string Contact { get; set; }
+
+// ///
+// /// ��ϵ�绰
+// ///
+// [Display(Name = "��ϵ�绰")]
+// public string ContactPhone { get; set; }
+
+// ///
+// /// ��ϵ�ʼ�
+// ///
+// [Display(Name = "��ϵ�ʼ�")]
+
+// public string ContactEmail { get; set; }
+
+// ///
+// /// ��ϵ����
+// ///
+// [Display(Name = "��ϵ����")]
+// public string ContactFax { get; set; }
+
+// ///
+// /// ˰��
+// ///
+// [Display(Name = "˰��")]
+// public Nullable TaxRate { get; set; }
+
+// ///
+// /// ����ID
+// ///
+// [Display(Name = "����Id")]
+// public Guid CurrencyId { get; set; }
+
+// ///
+// /// ����ID
+// ///
+// [Display(Name = "��������")]
+// public string CurrencyName { get; set; }
+
+// ///
+// /// �ͻ�����
+// ///
+// [Display(Name = "�ͻ�����")]
+// public Nullable CustomerType { get; set; }
+
+// public bool Enabled { get; set; }
+
+// //public ICollection CustomerItems { set; get; }
+//}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/KittingPermissions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/KittingPermissions.cs
new file mode 100644
index 000000000..d2b46bfdd
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/KittingPermissions.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.Authorization.Permissions;
+using Win_in.Sfs.Basedata.Domain;
+
+namespace Win_in.Sfs.Basedata.Application.Contracts;
+
+public static class KittingPermissions
+{
+
+ public const string Default = BasedataPermissions.GroupName + "." + nameof(Kitting);
+ public const string Create = Default + "." + BasedataPermissions.CreateStr;
+ public const string Update = Default + "." + BasedataPermissions.UpdateStr;
+ public const string Delete = Default + "." + BasedataPermissions.DeleteStr;
+
+ public static void AddKittingPermission(this PermissionGroupDefinition permissionGroup)
+ {
+ var customerPermission = permissionGroup.AddPermission(Default, BasedataPermissionDefinitionProvider.L(nameof(Kitting)));
+ customerPermission.AddChild(Create, BasedataPermissionDefinitionProvider.L(BasedataPermissions.CreateStr));
+ customerPermission.AddChild(Update, BasedataPermissionDefinitionProvider.L(BasedataPermissions.UpdateStr));
+ customerPermission.AddChild(Delete, BasedataPermissionDefinitionProvider.L(BasedataPermissions.DeleteStr));
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/DTOs/PositionCodeDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/DTOs/PositionCodeDTO.cs
index 569e709e7..cce3aaeff 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/DTOs/PositionCodeDTO.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/DTOs/PositionCodeDTO.cs
@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@@ -32,6 +33,12 @@ public class PositionCodeDTO : SfsBaseDataDTOBase, IHasCode
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PartDesc { get; set; }
///
+ /// 基本计量单位
+ ///
+ [Display(Name = "基本计量单位")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string BasicUom { get; set; }
+ ///
/// 库位
///
[Display(Name = "库位")]
@@ -48,4 +55,9 @@ public class PositionCodeDTO : SfsBaseDataDTOBase, IHasCode
///
[Display(Name = "标包数量")]
public decimal StdPackQty { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public EnumRecommendType Type { get; set; }
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs
index 24bc8733f..e629da700 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeEditInput.cs
@@ -1,6 +1,7 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@@ -24,6 +25,11 @@ public class PositionCodeEditInput : SfsBaseDataCreateOrUpdateInputBase
[Display(Name = "物料描述")]
public string PartDesc { get; set; }
///
+ /// 基本计量单位
+ ///
+ [Display(Name = "基本计量单位")]
+ public string BasicUom { get; set; }
+ ///
/// 库位
///
[Display(Name = "库位")]
@@ -38,8 +44,11 @@ public class PositionCodeEditInput : SfsBaseDataCreateOrUpdateInputBase
///
[Display(Name = "标包数量")]
public decimal StdPackQty { get; set; }
-
-
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public EnumRecommendType Type { get; set; }
#endregion
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs
index 60df0022f..9136deffe 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/PositionCode/Inputs/PositionCodeImportInput.cs
@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application.Contracts;
@@ -32,6 +33,12 @@ public class PositionCodeImportInput : SfsBaseDataImportInputBase
[StringLength(SfsEfCorePropertyConst.DescLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PartDesc { get; set; }
///
+ /// 基本计量单位
+ ///
+ [Display(Name = "基本计量单位")]
+ [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
+ public string BasicUom { get; set; }
+ ///
/// 库位
///
[Display(Name = "库位")]
@@ -49,6 +56,10 @@ public class PositionCodeImportInput : SfsBaseDataImportInputBase
[Display(Name = "标包数量")]
[Required(ErrorMessage = "{0}是必填项")]
public decimal StdPackQty { get; set; }
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public EnumRecommendType Type { get; set; }
-
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj
index 0fe7d3a1e..84d9de372 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Win_in.Sfs.Basedata.Application.Contracts.csproj
@@ -1,4 +1,4 @@
-
+
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
index 07acc53a3..47c444e43 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/BasedataApplicationAutoMapperProfile.cs
@@ -50,5 +50,7 @@ public partial class BasedataApplicationAutoMapperProfile : Profile
WorkGroupAutoMapperProfile();
WorkShopAutoMapperProfile();
EquipmentAutoMapperProfile();
+ EquipmentAreaAutoMapperProfile();
+ KittingAutoMapperProfile();
}
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAppService.cs
new file mode 100644
index 000000000..4774d50fe
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAppService.cs
@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Caching;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.ObjectMapping;
+using Volo.Abp.Validation;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Application;
+
+[Authorize]
+[Route($"{BasedataConsts.RootPath}EquipmentArea")]
+public class EquipmentAreaAppService
+ : SfsBaseDataWithCodeAppServiceBase
+ , IEquipmentAreaAppService
+{
+ private readonly IEquipmentAreaManager _manager;
+ private new readonly IEquipmentAreaRepository _repository;
+ private new readonly IEquipmentRepository _eRepository;
+
+ public EquipmentAreaAppService(
+ IEquipmentAreaRepository repository,
+ IEquipmentRepository eRepository,
+ IDistributedCache cache,
+ IEquipmentAreaManager manager)
+ : base(repository, cache)
+ {
+ _repository = repository;
+ _eRepository = eRepository;
+ _manager = manager;
+ base.CreatePolicyName = EquipmentPermissions.Create;
+ base.UpdatePolicyName = EquipmentPermissions.Update;
+ base.DeletePolicyName = EquipmentPermissions.Delete;
+ }
+
+ [HttpPost("check")]
+ //[Authorize(ErpLocationPermissions.Default)]
+
+ public virtual async Task CheckAsync(string code, EquipmentAreaCheckInput input)
+ {
+ //var result = new AbpValidationResult();
+ //if (Repository.GetDbSet().Where(p => p.Code == code).Any())
+ //{
+ // result.Errors.Add(new ValidationResult($"存在编码为{code}的器具!"));
+ //}
+ //if (result.Errors.Count > 0)
+ //{
+ // throw new AbpValidationException(result.Errors);
+ //}
+ await Task.CompletedTask.ConfigureAwait(false);
+ }
+
+
+
+ [HttpPost("upsert")]
+
+ public virtual async Task UpsertAsync(EquipmentAreaEditInput input)
+ {
+ var entity = ObjectMapper.Map(input);
+ await _repository.UpsertAsync(entity).ConfigureAwait(false);
+ }
+ protected override async Task ValidateImportModelAsync(EquipmentAreaImportInput importInput, List validationRresult)
+ {
+
+ await base.ValidateImportModelAsync(importInput, validationRresult).ConfigureAwait(false);
+ //await base.CheckEquipmentAsync(importInput.Code, validationRresult).ConfigureAwait(false);
+ }
+
+
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs
new file mode 100644
index 000000000..34507c831
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs
@@ -0,0 +1,33 @@
+using AutoMapper;
+using Volo.Abp.AutoMapper;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+
+namespace Win_in.Sfs.Basedata.Application;
+
+public partial class BasedataApplicationAutoMapperProfile : Profile
+{
+ private void EquipmentAreaAutoMapperProfile()
+ {
+ CreateMap()
+
+ .ReverseMap();
+
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.TenantId)
+ .Ignore(x => x.Remark)
+ .Ignore(x => x.ExtraProperties)
+ .Ignore(x => x.ConcurrencyStamp)
+ ;
+
+ //CreateMap()
+
+ //CreateMap()
+ // .Ignore(x => x.ItemCategory)
+ // .Ignore(x => x.Color);
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.ConcurrencyStamp).Ignore(x => x.Id);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
new file mode 100644
index 000000000..570ff326f
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using NUglify.Helpers;
+using Volo.Abp;
+using Volo.Abp.Caching;
+using Volo.Abp.Domain.Entities;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Basedata.Kittings.Inputs;
+using Win_in.Sfs.Shared;
+
+
+namespace Win_in.Sfs.Basedata.Application;
+
+[Authorize]
+[Route($"{BasedataConsts.RootPath}kitting")]
+
+public class KittingAppService : SfsBaseDataWithCodeAppServiceBase, IKittingAppService
+{
+ private new readonly IKittingRepository _repository;
+
+
+ private readonly IKittingManager _manager;
+
+ public KittingAppService(IKittingRepository repository, IDistributedCache cache, IKittingManager manager) : base(repository,cache)
+ {
+ _repository = repository;
+ _manager = manager;
+ //base.CreatePolicyName = KittingPermissions.Create;
+ //base.UpdatePolicyName = KittingPermissions.Update;
+ //base.DeletePolicyName = KittingPermissions.Delete;
+ }
+ [HttpPost]
+ [Route("")]
+ public override async Task CreateAsync(KittingEditInput input)
+ {
+
+ var detailquery=await _repository.WithDetailsAsync().ConfigureAwait(false);
+ var first = detailquery.FirstOrDefault(p => p.Code == input.Code);
+ var codes = input.Details.Select(p => p.PartCode);
+ if (first != null)
+ {
+
+ throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱");
+
+
+ //var query = from itm in input.Details
+ // join itm1 in first.Details on itm.PartCode equals itm1.PartCode
+ // into temp1
+ // from tm1 in temp1.DefaultIfEmpty()
+ // where tm1 == null
+ // select itm;
+ //var details = ObjectMapper.Map, List>(query.ToList());
+ //foreach (var itm in details)
+ //{
+ // itm.SetId(GuidGenerator.Create());
+ // itm.MasterId = first.Id;
+ // first.AddDetails(itm);
+ //}
+ //var entity= await _repository.UpdateAsync(first).ConfigureAwait(false);
+
+ //return ObjectMapper.Map(entity);
+ }
+ else
+ {
+ var entity = ObjectMapper.Map(input);
+ entity.SetId(Guid.NewGuid());
+ entity.Details.ForEach(item =>
+ {
+ item.MasterId = entity.Id;
+ });
+ entity = await _repository.InsertAsync(entity).ConfigureAwait(false);
+ return ObjectMapper.Map(entity);
+
+ }
+
+ //first.Details.Where(p => codes.Contains(p.PartCode));
+ //var entity = ObjectMapper.Map(input);
+ //entity.SetId(Guid.NewGuid());
+ //entity.Details.ForEach(item =>
+ //{
+ // item.MasterId = entity.Id;
+ //});
+ //entity = await _repository.InsertAsync(entity).ConfigureAwait(false);
+ //return ObjectMapper.Map(entity);
+ }
+
+ [HttpPut]
+ [Route("{id}")]
+ public override Task UpdateAsync(Guid id, KittingEditInput input)
+ {
+ var detailquery = _repository.WithDetails();
+ var first = detailquery.FirstOrDefault(p => p.Id == id);
+ if (first.Code == input.Code)
+ {
+ throw new UserFriendlyException($"已存在编码:{input.Code}的Kitting箱");
+ }
+
+ var query = from itm in input.Details
+ join itm1 in first.Details on itm.PartCode equals itm1.PartCode
+ select itm;
+ List errors = new List();
+ foreach (var itm in query.ToList())
+ {
+ errors.Add(itm.PartCode);
+ }
+ if(errors.Count > 0)
+ {
+ throw new UserFriendlyException($"零件号${string.Join(",", errors)}已存在");
+
+ }
+
+
+ return base.UpdateAsync(id, input);
+ }
+
+ [HttpPost("update")]
+ public virtual async Task UpdateAsync(KittingEditInput input)
+ {
+ var entity = ObjectMapper.Map(input);
+ //var dic=await _repository.GetAsync(r => r.Code == entity.Code);
+ // if (dic != null)
+ // {
+ // await _repository.DeleteAsync(dic);
+ // }
+ // await _repository.InsertAsync(entity);
+ await _repository.UpdateAsync(entity).ConfigureAwait(false);
+ }
+
+ protected override async Task GetFromRepositoryAsync(string code)
+ {
+ var displayName = typeof(KittingDTO).GetNameOfDisplay();
+
+ var query = await _repository.WithDetailsAsync().ConfigureAwait(false);
+
+ var entity = await query.Where(p => p.Code == code).FirstOrDefaultAsync().ConfigureAwait(false);
+
+ return ObjectMapper.Map(entity);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs
new file mode 100644
index 000000000..2c675cc43
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs
@@ -0,0 +1,89 @@
+using AutoMapper;
+using Volo.Abp.AutoMapper;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Basedata.Kittings.Inputs;
+
+namespace Win_in.Sfs.Basedata.Application;
+
+public partial class BasedataApplicationAutoMapperProfile : Profile
+{
+ private void KittingAutoMapperProfile()
+ {
+ CreateMap()
+ .ReverseMap();
+
+ CreateMap()
+ .ReverseMap();
+
+
+
+ // CreateMap()
+ // .IgnoreAuditedObjectProperties()
+ // .Ignore(x => x.Items)
+ // .Ignore(x => x.TenantId)
+ // .Ignore(x => x.ExtraProperties)
+ // .Ignore(x => x.Remark)
+ // .Ignore(x => x.ConcurrencyStamp)
+ // .Ignore(x => x.Id);
+
+ //CreateMap()
+ // .IgnoreAuditedObjectProperties()
+
+ // .Ignore(x => x.MasterId)
+ // .Ignore(x => x.Enabled)
+ // .Ignore(x => x.TenantId)
+ // .Ignore(x => x.Remark)
+ // .Ignore(x => x.Id);
+
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ // .ForMember(x => x.MasterId, y => y.MapFrom(t => t.MasterId))
+ ;
+
+ CreateMap()
+ .IgnoreAuditedObjectProperties()
+ .Ignore(x => x.ConcurrencyStamp)
+ .Ignore(x => x.Id);
+ }
+
+
+ //CreateMap()
+ // ;
+
+ // CreateMap()
+ // ;
+
+ // CreateMap()
+ // .IgnoreAuditedObjectProperties()
+ // .Ignore(x => x.Items)
+ // .Ignore(x => x.TenantId)
+ // .Ignore(x => x.ExtraProperties)
+ // .Ignore(x => x.Remark)
+ // .Ignore(x => x.ConcurrencyStamp)
+ // .Ignore(x => x.Id);
+
+ //CreateMap()
+ // .IgnoreAuditedObjectProperties()
+ // .ForMember(x => x.Code, y => y.MapFrom(t => t.Item_Code))
+ // .ForMember(x => x.Name, y => y.MapFrom(t => t.Item_Name))
+ // .ForMember(x => x.Description, y => y.MapFrom(t => t.Item_Description))
+ // .ForMember(x => x.Value, y => y.MapFrom(t => t.Item_Value))
+ // .Ignore(x => x.MasterId)
+ // .Ignore(x => x.Enabled)
+ // .Ignore(x => x.TenantId)
+ // .Ignore(x => x.Remark)
+ // .Ignore(x => x.Id);
+
+ //CreateMap()
+ // .IgnoreAuditedObjectProperties()
+ // ;
+
+ //CreateMap()
+ // .IgnoreAuditedObjectProperties()
+ // .Ignore(x => x.ConcurrencyStamp)
+ //.Ignore(x => x.Id);
+
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs
index f80a4ef1a..8f6eccad5 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCode/PositionCodeAppService.cs
@@ -7,6 +7,7 @@ using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
@@ -32,7 +33,7 @@ public class PositionCodeAppService
[UnitOfWork]
public override async Task CreateAsync(PositionCodeEditInput input)
{
- var existEntity = await GetByCodeAsync("W"+input.Code).ConfigureAwait(false);
+ var existEntity = await GetByCodeAsync(input.Code).ConfigureAwait(false);
if (existEntity != null)
{
throw new UserFriendlyException($"{input.Code} 已存在");
@@ -42,12 +43,26 @@ public class PositionCodeAppService
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
input.PartName = itemBasic.Name;
input.PartDesc = itemBasic.Desc1;
+ input.BasicUom = itemBasic.BasicUom;
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
input.LocationName = location.Name;
- input.Code = "W" + input.Code;
+ if(input.Code.Contains('W'))
+ {
+ input.Type = EnumRecommendType.PositionCode;
+ }
+ else if(input.Code.Contains('K'))
+ {
+ input.Type = EnumRecommendType.KittingCode;
+ }
+ else
+ {
+ input.Type = EnumRecommendType.WareCode;
+ }
+
+
return await base.CreateAsync(input).ConfigureAwait(false);
}
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentArea.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentArea.cs
new file mode 100644
index 000000000..9824ea62f
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentArea.cs
@@ -0,0 +1,166 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+///
+/// 器具基本信息
+///
+public class EquipmentArea : SfsBaseDataAggregateRootBase, IHasCode
+{
+
+
+ ///
+ /// 器具编号
+ ///
+ public string Code { get; set; }
+ ///
+ /// 类型
+ ///
+ public string Type { get; set; }
+ ///
+ /// 型号
+ ///
+ public string Model { get; set; }
+
+ ///
+ /// 库位编号
+ ///
+ public string LocCode { get; set; }
+
+ ///
+ /// 位置编号
+ ///
+ public string AreaCode { get; set; }
+
+ ///
+ /// 数量
+ ///
+ public decimal Qty { get; set; }
+ ///
+ /// 状态
+ ///
+ public int State { get; set; }
+ /////
+ ///// 创建人
+ /////
+ //public string Creator { get; set; }
+ /////
+ ///// 创建时间
+ /////
+ //public DateTime CreatTime { get; set; }
+
+
+
+
+
+
+
+
+ /////
+ ///// 代码
+ /////
+ //[IgnoreUpdate]
+ //public string Code { get; set; }
+ /////
+ ///// 名称
+ /////
+ //public string Name { get; set; }
+ /////
+ ///// 描述
+ /////
+ //public string Desc1 { get; set; }
+ /////
+ ///// 描述2
+ /////
+ //public string Desc2 { get; set; }
+ /////
+ ///// 状态
+ /////
+ //public EnumItemStatus Status { get; set; }
+ /////
+ ///// 制造件
+ /////
+ //public bool CanMake { get; set; }
+ /////
+ ///// 采购件
+ /////
+ //[IgnoreUpdate]
+ //public bool CanBuy { get; set; }
+ /////
+ ///// 外包件
+ /////
+ //public bool CanOutsourcing { get; set; }
+ /////
+ ///// 回收件
+ /////
+ //public bool IsRecycled { get; set; }
+
+ //[Display(Name = "类型")]
+ //public string Type { get; set; }
+
+ //[Display(Name = "种类")]
+ //public string Category { get; set; }
+
+ //[Display(Name = "分组")]
+ //public string Group { get; set; }
+
+ //[Display(Name = "颜色")]
+ //public string Color { get; set; }
+
+ //[Display(Name = "配置")]
+ //public string Configuration { get; set; }
+ /////
+ ///// 基本计量单位
+ /////
+ //public string BasicUom { get; set; }
+
+ /////
+ ///// 标包数
+ /////
+ //public decimal StdPackQty { get; set; }
+
+ /////
+ ///// ABC类,默认为C
+ /////
+ //public string AbcClass { get; set; }
+ /////
+ ///// 项目
+ /////
+ //public string Project { get; set; }
+ /////
+ ///// 版本
+ /////
+ //public string Version { get; set; }
+ /////
+ ///// 工程变革
+ /////
+ //public string Eco { get; set; }
+ /////
+ ///// 有效期
+ /////
+ //public int Validity { get; set; }
+ /////
+ ///// 有效期单位
+ /////
+ //public EnumValidityUnit ValidityUnit { get; set; }
+
+ /////
+ ///// 管理类型
+ /////
+ //public EnumItemManageType ManageType { get; set; }
+
+ /////
+ ///// 打印标签用的一个等级
+ /////
+ //public string Elevel { get; set; }
+
+ /////
+ ///// 虚零件
+ /////
+ //public virtual bool IsPhantom { get; set; }
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentAreaManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentAreaManager.cs
new file mode 100644
index 000000000..132e7c577
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentAreaManager.cs
@@ -0,0 +1,29 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Services;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public class EquipmentAreaManager : DomainService, IEquipmentAreaManager
+{
+ private readonly IEquipmentAreaRepository _repository;
+
+ public EquipmentAreaManager(IEquipmentAreaRepository repository)
+ {
+ _repository = repository;
+ }
+
+ ///
+ /// 执行导入
+ ///
+ public virtual async Task ImportDataAsync(List mergeEntities, List deleteEntities = null)
+ {
+ if (deleteEntities != null && deleteEntities.Count > 0)
+ {
+ await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
+ }
+
+ await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
+ }
+}
+
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaManager.cs
new file mode 100644
index 000000000..f4e8156f2
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaManager.cs
@@ -0,0 +1,8 @@
+using Volo.Abp.Domain.Services;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IEquipmentAreaManager : IDomainService, IBulkImportService
+{
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaRepository.cs
new file mode 100644
index 000000000..2d872dcf1
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaRepository.cs
@@ -0,0 +1,13 @@
+using System.Threading.Tasks;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IEquipmentAreaRepository : ISfsBaseDataRepositoryBase, ISfsBulkRepositoryBase
+{
+ public Task UpsertAsync(EquipmentArea entity);
+
+ public Task InsertAutoSaveAsync(EquipmentArea entity);
+
+ public Task UpsertAsyncByInterface(EquipmentArea entity);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingManager.cs
new file mode 100644
index 000000000..fa76f6b0b
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingManager.cs
@@ -0,0 +1,20 @@
+
+using Volo.Abp.Domain.Services;
+
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IKittingManager : IDomainService, IBulkImportService
+{
+ //Task AddByContainerAsync(Guid traceId, string containerCode);
+ //// Task> AddMergeAsync(List inventories);
+ //Task> AddByPackingAsync(Guid traceId, List putawayInventories);
+
+ /////
+ ///// 按箱采购收货上架 根据收货时的ERP储位 物品 进行分组上架 只推荐空库位
+ /////
+ /////
+ /////
+ //Task CreateByErpCodeAndEmptyCapacityAsync(PutawayJob putawayJob);
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs
new file mode 100644
index 000000000..d86331d6c
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs
@@ -0,0 +1,9 @@
+
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public interface IKittingRepository : ISfsBaseDataRepositoryBase, ISfsBulkRepositoryBase
+{
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs
new file mode 100644
index 000000000..acd90d147
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Threading.Tasks;
+using NetTopologySuite.Index.HPRtree;
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+///
+/// Kitting箱
+///
+[Serializable]
+[Display(Name = "Kitting箱")]
+public class Kitting : SfsBaseDataAggregateRootBase, IHasCode
+{
+ public string Code { get ; set ; }
+ public string Name { get ; set ; }
+ public virtual ICollection Details { get; set; } = new List();
+ public void SetId(Guid id)
+ {
+ this.Id = id;
+ }
+
+ public void AddDetails(KittingDetail item)
+ {
+ Details.Add(item);
+ }
+
+
+
+
+ /////
+ ///// 设置任务明细的实际库位和实际数量
+ /////
+ /////
+ /////
+ /////
+ /////
+ //public virtual async Task SetDetail(Guid id, string partCode, string desc1, string desc2, decimal qty, string conf)
+ //{
+ // var detail = GetDetail(id);
+ // detail.PartCode = partCode;
+ // detail.Desc1 = desc1;
+ // detail.Desc2 = desc2;
+ // detail.Qty = qty;
+ // detail.Conf = conf;
+
+ // await Task.CompletedTask.ConfigureAwait(false);
+ //}
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs
new file mode 100644
index 000000000..b1af95693
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs
@@ -0,0 +1,47 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Volo.Abp.Domain.Entities.Auditing;
+using Volo.Abp.MultiTenancy;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public class KittingDetail : AuditedEntity, IMultiTenant, IRemark
+
+{
+ public Guid MasterId { get; set; }
+ ///
+ /// 物料编码
+ ///
+ public string PartCode { set; get; }
+ ///
+ /// 描述1
+ ///
+ public string Desc1 { set; get; }
+ ///
+ /// 描述2
+ ///
+ public string Desc2 { set; get; }
+ ///
+ /// 包装数量
+ ///
+ public decimal Qty { set; get; }
+
+ ///
+ /// 配置
+ ///
+ public string Conf { set; get; }
+
+ public Guid? TenantId { set; get; }
+
+ public string Remark { get; set; }
+
+
+ public void SetId(Guid guid)
+ {
+ Id= guid;
+ }
+
+
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingManager.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingManager.cs
new file mode 100644
index 000000000..0be4b22b2
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingManager.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Volo.Abp;
+using Volo.Abp.Users;
+using Volo.Abp.Validation;
+
+using Win_in.Sfs.Shared.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+
+namespace Win_in.Sfs.Basedata.Domain;
+
+public class KittingManager : IKittingManager
+{
+
+
+ private readonly IKittingRepository _repository;
+
+ public KittingManager(IKittingRepository repository, IWarehouseRepository warehourseRepository, ILocationRepository locationRepository)
+ {
+ _repository = repository;
+ }
+
+ ///
+ /// 执行导入
+ ///
+ public virtual async Task ImportDataAsync(List mergeEntities, List deleteEntities = null)
+ {
+ if (deleteEntities != null && deleteEntities.Count > 0)
+ {
+ await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
+ }
+
+ await _repository.BulkMergeAsync(mergeEntities).ConfigureAwait(false);
+
+ var insertDetails = new List();
+
+ foreach (var item in mergeEntities)
+ {
+ insertDetails.AddRange(item.Details);
+ }
+
+ await _repository.BulkInsertAsync(insertDetails).ConfigureAwait(false);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs
index 8ec924bc8..751e5561f 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/PositionCode/PositionCode.cs
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Entities;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Domain;
@@ -31,6 +32,11 @@ public class PositionCode : SfsBaseDataAggregateRootBase, IHasCode
[Display(Name = "物料描述")]
public string PartDesc { get; set; }
///
+ /// 基本计量单位
+ ///
+ [Display(Name = "基本计量单位")]
+ public string BasicUom { get; set; }
+ ///
/// 库位
///
[Display(Name = "库位")]
@@ -39,12 +45,16 @@ public class PositionCode : SfsBaseDataAggregateRootBase, IHasCode
/// 库位名称
///
[Display(Name = "库位名称")]
- public string LocationName { get; set; }
+ public string LocationName { get; set; }
///
/// 标包数量
///
[Display(Name = "标包数量")]
public decimal StdPackQty { get; set; }
-
+ ///
+ /// 类型
+ ///
+ [Display(Name = "类型")]
+ public EnumRecommendType Type { get; set; }
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
index f35d0caed..5f1efe44d 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataDbContextModelCreatingExtensions.cs
@@ -67,6 +67,8 @@ public static class BasedataDbContextModelCreatingExtensions
//设置decimal的默认小数位数
builder.ConfigurePrecisionOfDecimal();
builder.ConfigurePositionCode(options);
+ builder.ConfigureEquipmentArea(options);
+ builder.ConfigureKitting(options);
}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
index 99c329146..1fe9d93ff 100644
--- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/BasedataEntityFrameworkCoreModule.cs
@@ -69,6 +69,8 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
context.Services.AddTransient();
context.Services.AddTransient();
context.Services.AddTransient();
+ context.Services.AddTransient();
+ context.Services.AddTransient();
ConfigureEntity();
}
@@ -80,6 +82,11 @@ public class BasedataEntityFrameworkCoreModule : AbpModule
{
orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Items);
});
+ options.Entity(orderOptions =>
+ {
+ orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Details);
+ });
+
});
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaDbContextModelCreatingExtensions.cs
new file mode 100644
index 000000000..cda151bd4
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaDbContextModelCreatingExtensions.cs
@@ -0,0 +1,39 @@
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Shared.EntityFrameworkCore;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public static class EquipmentAreaDbContextModelCreatingExtensions
+{
+ public static void ConfigureEquipmentArea(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
+ {
+ builder.Entity(b =>
+ {
+ //Configure table & schema name
+ b.ToTable(options.TablePrefix + nameof(EquipmentArea), options.Schema);
+ //Configure ABP properties
+ b.ConfigureByConvention();
+ //Configure Sfs base properties
+ b.ConfigureSfsBase();
+
+ //Properties
+ b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength).IsRequired(true);
+ b.Property(q => q.Model).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.LocCode).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.AreaCode).HasMaxLength(SfsPropertyConst.CodeLength);
+
+
+ b.HasIndex(q => new { q.Code });
+ b.HasIndex(q => new { q.AreaCode });
+ });
+ }
+}
+
+
+///
+/// 器具编号
+///
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaEfCoreRepository.cs
new file mode 100644
index 000000000..99b6cbd46
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaEfCoreRepository.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public class EquipmentAreaEfCoreRepository : SfsBaseDataEfCoreRepositoryBase, IEquipmentAreaRepository, ISfsBulkRepositoryBase
+{
+ public EquipmentAreaEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+ public virtual async Task UpsertAsyncByInterface(EquipmentArea entity)
+ {
+ var dbSet = await GetDbSetAsync().ConfigureAwait(false);
+ var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code && p.AreaCode==entity.AreaCode).ConfigureAwait(false);
+ if (exist == null)
+ {
+ var insRet = await InsertAsync(entity).ConfigureAwait(false);
+ }
+ else
+ {
+ exist.State = entity.State;
+ exist.Model = entity.Model;
+ exist.Type = entity.Type;
+ exist.LastModificationTime = DateTimeOffset.Now.DateTime;
+
+ }
+ }
+ public virtual async Task UpsertAsync(EquipmentArea entity)
+ {
+ var dbSet = await GetDbSetAsync().ConfigureAwait(false);
+ var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code && p.AreaCode==entity.AreaCode).ConfigureAwait(false);
+ if (exist == null)
+ {
+ var insRet = await InsertAsync(entity).ConfigureAwait(false);
+ }
+ else
+ {
+ exist.State = entity.State;
+ exist.Model = entity.Model;
+ exist.Type = entity.Type;
+ exist.LastModificationTime = DateTimeOffset.Now.DateTime;
+
+ }
+
+
+ }
+
+ public virtual async Task InsertAutoSaveAsync(EquipmentArea entity)
+ {
+ _ = await InsertAsync(entity, true, GetCancellationToken()).ConfigureAwait(false);
+ }
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs
new file mode 100644
index 000000000..ec56fd4f3
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs
@@ -0,0 +1,76 @@
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain.Shared;
+using Win_in.Sfs.Shared.EntityFrameworkCore;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public static class KittingDbContextModelCreatingExtensions
+{
+ public static void ConfigureKitting(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
+ {
+ builder.Entity(b =>
+ {
+ //Configure table & schema name
+ b.ToTable(options.TablePrefix + nameof(Kitting), options.Schema);
+ //Configure ABP properties
+ b.ConfigureByConvention();
+ //Configure Sfs base properties
+ b.ConfigureSfsBase();
+ b.Property(p=>p.Name).HasMaxLength(SfsPropertyConst.DescLength);
+ //Properties
+ b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
+ //Relations
+ b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterId).IsRequired();
+
+
+
+
+
+ //Indexes
+ b.HasIndex(q => new { q.Code }).IsUnique();
+ });
+ builder.Entity(b =>
+ {
+
+ //Configure table & schema name
+ b.ToTable(options.TablePrefix + nameof(KittingDetail), options.Schema);
+ //Configure ABP properties
+ b.ConfigureByConvention();
+ //Configure Sfs base properties
+ b.ConfigureSfsBase();
+
+ b.Property(p => p.Desc1).HasMaxLength(SfsPropertyConst.DescLength);
+ //Properties
+ b.Property(q => q.Desc2).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
+ //Relations
+ b.Property(q => q.MasterId).IsRequired();
+ //Indexes
+
+ });
+ }
+ //public static void ConfigureCustomer(this ModelBuilder builder, BasedataModelBuilderConfigurationOptions options)
+ //{
+ // builder.Entity(b =>
+ // {
+ // //Configure table & schema name
+ // b.ToTable(options.TablePrefix + nameof(Customer), options.Schema);
+ // //Configure ABP properties
+ // b.ConfigureByConvention();
+ // //Configure Sfs base properties
+ // b.ConfigureSfsBase();
+
+ // //Properties
+ // b.Property(q => q.Code).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
+ // b.Property(q => q.Name).HasMaxLength(SfsPropertyConst.NameLength);
+ // b.Property(q => q.Description).HasMaxLength(SfsPropertyConst.DescLength);
+
+ // //Relations
+ // //None
+
+ // //Indexes
+ // b.HasIndex(q => new { q.Code }).IsUnique();
+ // });
+ //}
+}
diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs
new file mode 100644
index 000000000..3a2da3b64
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs
@@ -0,0 +1,78 @@
+
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Win_in.Sfs.Basedata.Domain;
+using Win_in.Sfs.Shared.Domain;
+
+namespace Win_in.Sfs.Basedata.EntityFrameworkCore;
+
+public class KittingEfCoreRepository : SfsBaseDataEfCoreRepositoryBase, IKittingRepository, ISfsBulkRepositoryBase
+{
+ public KittingEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+
+ public virtual async Task UpsertAsync(Kitting entity)
+ {
+ var dbSet = await GetDbSetAsync().ConfigureAwait(false);
+ var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false);
+ if (exist == null)
+ {
+ var insRet = await InsertAsync(entity).ConfigureAwait(false);
+ }
+ else
+ {
+
+
+
+ //exist.Code = entity.Code;
+ exist.Name = entity.Name;
+ //exist.Address = entity.Address;
+ //exist.Country = entity.Country;
+ //exist.City = entity.City;
+ //exist.Phone = entity.Phone;
+ //exist.Fax = entity.Fax;
+ //exist.PostID = entity.PostID;
+ //exist.Contacts = entity.Contacts;
+ //exist.Currency = entity.Currency;
+ //exist.IsActive = entity.IsActive;
+ //exist.Type = entity.Type;
+ exist.TenantId = entity.TenantId;
+ exist.Remark = entity.Remark;
+
+ }
+ // var context = await GetDbContextAsync();
+ // await context.SingleMergeAsync(entity, options =>
+ // {
+ // //业务主键,可以是联合主键
+ // options.ColumnPrimaryKeyExpression = c => new
+ // {
+ // c.Company,
+ // c.Code
+ // };
+ // //需要在更新时忽略的属性
+ // options.IgnoreOnMergeUpdateExpression = c => new
+ // {
+ // c.Id,
+ // };
+ // });
+ }
+
+
+ public virtual async Task UpsertAsyncByInterface(Kitting entity)
+ {
+ //var dbSet = await GetDbSetAsync().ConfigureAwait(false);
+ //var exist = await dbSet.FirstOrDefaultAsync(p => p.Code == entity.Code).ConfigureAwait(false);
+ //if (exist == null)
+ //{
+ // var insRet = await InsertAsync(entity).ConfigureAwait(false);
+ //}
+ //else
+ //{
+ // exist.Name = entity.Name;
+ // exist.ShortName = entity.ShortName;
+ // exist.LastModificationTime = DateTime.Now;
+ //}
+ }
+}
diff --git a/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs
new file mode 100644
index 000000000..f56c9c2ab
--- /dev/null
+++ b/be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumRecommendType.cs
@@ -0,0 +1,27 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Win_in.Sfs.Shared.Domain.Shared;
+
+///
+/// 推荐类型
+///
+public enum EnumRecommendType
+{
+ ///
+ /// 位置码
+ ///
+ [Display(Name = "位置码")]
+ PositionCode = 1,
+
+ ///
+ /// 器具码
+ ///
+ [Display(Name = "器具码")]
+ WareCode = 2,
+
+ ///
+ /// Kitting箱码
+ ///
+ [Display(Name = "Kitting箱码")]
+ KittingCode = 3,
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/Inputs/IssueJobDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/Inputs/IssueJobDetailInput.cs
index e21c6f385..b059524c9 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/Inputs/IssueJobDetailInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/Inputs/IssueJobDetailInput.cs
@@ -121,4 +121,14 @@ public class IssueJobDetailInput : SfsJobRecommendFromDetailInputBase, IHasToLoc
///
[Display(Name = "每次配送数量")]
public decimal DeliveryQty { get; set; }
+
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/Inputs/IssueNoteDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/Inputs/IssueNoteDetailInput.cs
index b85bdb0a2..0d8769392 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/Inputs/IssueNoteDetailInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/Inputs/IssueNoteDetailInput.cs
@@ -1,6 +1,7 @@
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;
@@ -39,4 +40,14 @@ public class IssueNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInputBa
[Display(Name = "在途库库位")]
public string OnTheWayLocationCode { get; set; }
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
new file mode 100644
index 000000000..2d249d85e
--- /dev/null
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ProductRecycleNotes/DTOs/ProductRecycleNoteDetailExtendDto.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs;
+public class ProductRecycleNoteDetailExtendDto
+{
+
+ [Display(Name ="报废类型")]
+ public string Type { get; set; }
+ [Display(Name = "物料代码")]
+ public string ItemCode { get; set; }
+ [Display(Name = "报废库位")]
+
+ public string LocCode { get; set; }
+ [Display(Name = "数量")]
+ public Decimal Qty { get; set; }
+
+ [Display(Name = "报废原因")]
+ public string Reason { get; set; }
+
+
+
+}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/Inputs/MaterialRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/Inputs/MaterialRequestDetailInput.cs
index df430f726..058c47f49 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/Inputs/MaterialRequestDetailInput.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/Inputs/MaterialRequestDetailInput.cs
@@ -71,4 +71,15 @@ public class MaterialRequestDetailInput : SfsStoreDetailWithQtyInputBase
[Display(Name = "明细状态")]
public EnumStatus Status { get; set; }
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
index db384ee8f..4e3ec69d7 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ProductRecycleNotes/ProductRecycleNoteAppService.cs
@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Data;
using Win_in.Sfs.Shared.Application.Contracts;
+using Win_in.Sfs.Wms.Store.Notes.ProductRecycleNotes.DTOs;
///
/// 成品回收记录
@@ -91,6 +92,60 @@ public class ProductRecycleNoteAppService :
}
}
+
+ ///
+ /// 导出报废
+ ///
+ [HttpPost("export-scrap")]
+ public virtual async Task ExportScrapAsync(SfsExportRequestInput requestInput)
+ {
+ try
+ {
+ var pagedResult = await GetPagedListByFilterAsync(
+ new SfsStoreRequestInputBase() { Condition = requestInput.Condition },
+ true).ConfigureAwait(false);
+
+ var items = pagedResult.Items.ToList();
+
+ await SetNoteAndBackFlushDetailsAsync(pagedResult.Items.ToList()).ConfigureAwait(false);
+
+ var exports = BuildProductRecycleNoteAndBackFlushDetailExport(items);
+ List exportlist=new List();
+ foreach (var itm in exports)
+ {
+ exportlist.Add(new ProductRecycleNoteDetailExtendDto()
+ {
+
+ ItemCode = itm.ItemCode,
+ LocCode = itm.LocationCode,
+ Reason = string.Empty,
+ Qty = itm.Qty,
+ Type = "客户退拆"
+
+
+
+ });
+ }
+
+
+
+ return ExportImportService.Export(exports);
+ }
+ catch (Exception ex)
+ {
+ Logger.LogException(ex);
+ throw new Exception(ex.Message);
+ }
+ }
+
+
+
+
+
+
+
+
+
protected virtual async Task SetNoteAndBackFlushDetailsAsync(List dtos)
{
await Task.CompletedTask.ConfigureAwait(false);
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs
index e29d5ee57..209abd419 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs
@@ -214,6 +214,10 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase
public decimal DeliveryQty { get; set; }
+
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/IssueNoteDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/IssueNoteDetail.cs
index 4ba4f018b..bd3fad75b 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/IssueNoteDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/IssueNoteDetail.cs
@@ -1,4 +1,5 @@
using System;
+using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
@@ -29,4 +30,14 @@ public class IssueNoteDetail : SfsStoreRecommendFromDetailWithFromToEntityBase
/// 在途库库位
///
public string OnTheWayLocationCode { get; set; }
+
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs
index 1c59a4fda..19420cba8 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/MaterialRequestDetail.cs
@@ -90,4 +90,15 @@ public class MaterialRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLoca
///
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
+
+ ///
+ /// 位置码
+ ///
+ public string PositionCode { get; set; }
+
+ ///
+ /// 推荐类型
+ ///
+ public EnumRecommendType RecommendType { get; set; }
+
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/IssueJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/IssueJobDbContextModelCreatingExtensions.cs
index 99e7a6c1f..f13b3c4ac 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/IssueJobDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/IssueJobDbContextModelCreatingExtensions.cs
@@ -56,6 +56,7 @@ public static class IssueJobDbContextModelCreatingExtensions
b.Property(q => q.TruncType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
b.Property(q => q.PlannedSplitRule).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
+ b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
//Relations
//None
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/IssueNoteDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/IssueNoteDbContextModelCreatingExtensions.cs
index a29f693e5..3cbe63637 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/IssueNoteDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/IssueNoteDbContextModelCreatingExtensions.cs
@@ -50,6 +50,7 @@ public static class IssueNoteDbContextModelCreatingExtensions
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
b.Property(q => q.ToStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
+ b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
//Relations
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/MaterialRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/MaterialRequestDbContextModelCreatingExtensions.cs
index 27f04bab8..cdfbf4737 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/MaterialRequestDbContextModelCreatingExtensions.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/MaterialRequestDbContextModelCreatingExtensions.cs
@@ -54,6 +54,7 @@ public static class MaterialRequestDbContextModelCreatingExtensions
b.Property(q => q.IssuedQty).HasPrecision(18, 6);
b.Property(q => q.ReceivedQty).HasPrecision(18, 6);
b.Property(q => q.Status).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
+ b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion();
//Relations
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/MaterialRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/MaterialRequestAutoMapperProfile.cs
index 85bb07126..63046f1e2 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/MaterialRequestAutoMapperProfile.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/MaterialRequestAutoMapperProfile.cs
@@ -123,9 +123,11 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.PlannedSplitRule)
.Ignore(x => x.DeliveryQty)
.Ignore(x => x.RequestLocationCode)
- .Ignore(x => x.ToLocationCode)
+ .Ignore(x => x.ToLocationCode)
.Ignore(x => x.ProdLine)
.Ignore(x => x.WorkStation)
+ .Ignore(x => x.PositionCode)
+ .Ignore(x => x.RecommendType)
.IgnoreIHasRecommendAndHandledFrom();
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs
index 830445329..4f9c8d67f 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/MaterialRequestEventHandler.cs
@@ -244,6 +244,8 @@ public class MaterialRequestEventHandler
detail.RequestLocationCode = materialRequestDetail.ToLocationCode;
detail.WorkStation = materialRequestDetail.WorkStation;
detail.ExpiredTime = materialRequestDetail.ExpiredTime;
+ detail.PositionCode = materialRequestDetail.PositionCode;
+ detail.RecommendType = materialRequestDetail.RecommendType;
detail.RecommendPackingCode = balance.PackingCode;
detail.RecommendContainerCode = balance.ContainerCode;