From 0e01e6019a6661f0718413ba9321ed3a4dfe52aa Mon Sep 17 00:00:00 2001
From: zhaoxinyu <89237069@qq.com>
Date: Thu, 29 Feb 2024 16:15:30 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81Kitting?=
=?UTF-8?q?=E7=AE=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Equipments/DTOs/EquipmentAreaDTO.cs | 59 +++++
.../DTOs/EquipmentAreaForDongyangExportDTO.cs | 49 ++++
.../Equipments/DTOs/EquipmentDTO.cs | 6 +-
.../Equipments/EquipmentAreaPermissions.cs | 21 ++
.../Equipments/IEquipmentAreaAppService.cs | 28 +++
.../Inputs/EquipmentAreaCheckInput.cs | 51 ++++
.../Inputs/EquipmentAreaEditInput.cs | 225 ++++++++++++++++++
.../Inputs/EquipmentAreaImportInput.cs | 53 +++++
.../Equipments/Inputs/EquipmentEditInput.cs | 6 +-
.../Kittings/DTOs/KittingDTO.cs | 20 ++
.../Kittings/DTOs/KittingDetailDTO.cs | 49 ++++
.../Kittings/IKttingAppService.cs | 9 +
.../Kittings/Inputs/KittingDetailInput.cs | 49 ++++
.../Kittings/Inputs/KittingEditInput.cs | 21 ++
.../Kittings/Inputs/KittingImportInput.cs | 107 +++++++++
.../Kittings/KittingPermissions.cs | 21 ++
....Sfs.Basedata.Application.Contracts.csproj | 2 +-
.../BasedataApplicationAutoMapperProfile.cs | 2 +
.../Equipments/EquipmentAreaAppService.cs | 85 +++++++
.../EquipmentAreaAutoMapperProfile.cs | 33 +++
.../Kittings/KittingAppService.cs | 82 +++++++
.../Kittings/KittingAutoMapperProfile.cs | 89 +++++++
.../Equipments/EquipmentArea.cs | 166 +++++++++++++
.../Equipments/EquipmentAreaManager.cs | 29 +++
.../Equipments/IEquipmentAreaManager.cs | 8 +
.../Equipments/IEquipmentAreaRepository.cs | 13 +
.../Kittings/IKittingManager.cs | 20 ++
.../Kittings/IKittingRepository.cs | 9 +
.../Kittings/Kitting.cs | 46 ++++
.../Kittings/KittingDetail.cs | 41 ++++
.../Kittings/KittingManager.cs | 49 ++++
...asedataDbContextModelCreatingExtensions.cs | 2 +
.../BasedataEntityFrameworkCoreModule.cs | 7 +
...entAreaDbContextModelCreatingExtensions.cs | 39 +++
.../EquipmentAreaEfCoreRepository.cs | 56 +++++
...KittingDbContextModelCreatingExtensions.cs | 71 ++++++
.../Kittings/KittingEfCoreRepository.cs | 75 ++++++
37 files changed, 1687 insertions(+), 11 deletions(-)
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaDTO.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/DTOs/EquipmentAreaForDongyangExportDTO.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/EquipmentAreaPermissions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/IEquipmentAreaAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaCheckInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaEditInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Equipments/Inputs/EquipmentAreaImportInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDTO.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/DTOs/KittingDetailDTO.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/IKttingAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingDetailInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingEditInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/Inputs/KittingImportInput.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/Kittings/KittingPermissions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Equipments/EquipmentAreaAutoMapperProfile.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAutoMapperProfile.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentArea.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/EquipmentAreaManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Equipments/IEquipmentAreaRepository.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/IKittingRepository.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingManager.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaDbContextModelCreatingExtensions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Equipments/EquipmentAreaEfCoreRepository.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs
create mode 100644 be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs
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/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..662897906
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Kittings/KittingAppService.cs
@@ -0,0 +1,82 @@
+using System;
+
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using NUglify.Helpers;
+using Volo.Abp.Caching;
+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;
+
+
+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 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)
+ {
+ 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.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..311196b07
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/Kitting.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Threading.Tasks;
+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 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..6f955c033
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Kittings/KittingDetail.cs
@@ -0,0 +1,41 @@
+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; }
+
+
+}
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.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..324addcc7
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingDbContextModelCreatingExtensions.cs
@@ -0,0 +1,71 @@
+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..665d2a8c5
--- /dev/null
+++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/Kittings/KittingEfCoreRepository.cs
@@ -0,0 +1,75 @@
+
+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;
+ //}
+ }
+}