Browse Source

优化物品管理模块,新增入库确认审核功能

在多个文件中进行了重要更新:
- 在 `Program.cs` 中添加了 `Grp_GroupShareFile` 注释和 `Pm_GoodsAudit` 类型。
- 更新 `FinancialController.cs` 中的 `CompanyInfo` 初始化。
- 在 `GroupsController.cs` 中添加了对 `Grp_DelegationInfo` 的查询。
- 在 `MarketCustomerResourcesController.cs` 中替换了 `notClentUser` 列表。
- 更新 `PersonnelModuleController.cs` 中的 `GoodsStorageList` 方法,新增入库确认状态变更方法。
- 在 `GoodsDTO.cs` 中添加了 `AuditLabel` 和 `GoodsName` 属性。
- 新增 `Pm_GoodsAudit` 类及相关属性。
- 在 `Pm_GoodsStorage.cs` 中添加了 `ConfirmStatus` 和 `StatusDesc` 属性。
- 新增 `GoodsConfirmEnum` 和 `GoodsAuditDepEnum` 枚举。
- 新增 `GoodsStorageListView` 和审核部门视图类。
- 在 `GoodsRepository.cs` 中进行了代码优化,新增审核、确认和删除操作的方法,并添加了审核部门管理和权限验证。
- 更新物品入库和领用逻辑,确保库存和审核状态一致性。
LEIYI 3 weeks ago
parent
commit
0c266da74d

+ 2 - 1
OASystem/EntitySync/Program.cs

@@ -153,6 +153,7 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Sys_FormTemp), //表单模板
     //typeof(Grp_OrderPreInfo), //团组下单前信息
     //typeof(Grp_OrderPreItem), //团组下单前信息Item
-    typeof(Grp_GroupShareFile),//团组共享文件
+    //typeof(Grp_GroupShareFile),//团组共享文件 
+    typeof(Pm_GoodsAudit),//物品确认审核表 
 }); 
 Console.WriteLine("数据库结构同步完成!");

+ 5 - 1
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -2232,7 +2232,11 @@ namespace OASystem.API.Controllers
         /// <returns></returns>
         private CompanyInfo ExpenseCompanyByTeamId(int teamId)
         {
-            CompanyInfo _companyInfo = new CompanyInfo();
+            CompanyInfo _companyInfo = new CompanyInfo() {
+
+                Id = 2,
+                ConpanyName = "四川泛美交流有限公司"
+            };
 
             List<int> _SiChuan = new List<int>() {
                 38 , // 政府团

+ 1 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -12552,7 +12552,7 @@ FROM
             var cityFilter = new List<string>() { "全部城市", "其他城市" };
             var currencys = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.STid == 66).ToListAsync();
             var eecRates = infoView.Currencys;
-
+             
             var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(x => x.Id == dto.DiId && x.IsDel == 0);
             int pplNum = 1;
             if (groupInfo != null) pplNum = groupInfo.VisitPNumber;

+ 2 - 1
OASystem/OASystem.Api/Controllers/MarketCustomerResourcesController.cs

@@ -1199,7 +1199,8 @@ namespace OASystem.API.Controllers
 
             var count = 0;
 
-            var notClentUser = new List<int>() { 21, 95  , 327 };
+            //var notClentUser = new List<int>() { 21, 95  , 327 };
+            var notClentUser = new List<int>() { 213,327 };
 
             var insertList = new List<Crm_ClientDataAndUser>();
 

+ 44 - 10
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1915,7 +1915,7 @@ WHERE
         }
 
         /// <summary>
-        /// 物资进销存
+        /// 物资进销存(审核,需传token)
         /// 入库 列表
         /// </summary>
         /// <returns></returns>
@@ -1923,10 +1923,13 @@ WHERE
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GoodsStorageList(GoodsStorageListDto dto)
         {
+            var currUserInfo = JwtHelper.SerializeJwt(HttpContext.Request.Headers.Authorization);
+            //if (currUserInfo == null) return Ok(JsonView(false, "请传入token!"));
+
             if (dto.PortType < 1 || dto.PortType > 3) return Ok(JsonView(false, MsgTips.Port));
             if (dto.PageIndex < 1 || dto.PageSize < 1) return Ok(JsonView(false, MsgTips.PageIndex));
 
-            return Ok(await _goodsRep.GoodsStorageList(dto));
+            return Ok(await _goodsRep.GoodsStorageList(dto, currUserInfo?.UserId ?? 0));
         }
 
         /// <summary>
@@ -1968,6 +1971,38 @@ WHERE
             return Ok(await _goodsRep.GoodsStorageOp(dto, currUserInfo.UserId));
         }
 
+        /// <summary>
+        /// 物资进销存
+        /// 入库确认状态变更
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> GoodsStorageConfirmStatusChange(GoodsStorageConfirmDto dto)
+        {
+            if (dto.Id < 1) return Ok(JsonView(false, MsgTips.Id));
+
+            if (!Enum.IsDefined(typeof(GoodsAuditDepEnum),(int)dto.AuditDep))
+            {
+                return Ok(JsonView(false, $"审核部门类型超出可用范围!"));
+            }
+
+            if (!Enum.IsDefined(typeof(GoodsConfirmEnum), (int)dto.ConfirmStatus))
+            {
+                return Ok(JsonView(false, $"入库审核状态超出可用范围!"));
+            }
+
+            if (dto.ConfirmStatus == GoodsConfirmEnum.WaitConfirm || dto.ConfirmStatus == GoodsConfirmEnum.PartConfirmed)
+            {
+                return Ok(JsonView(false, $"入库审核状态(待确认、部分确认)不可用!"));
+            }
+
+            var currUserInfo = JwtHelper.SerializeJwt(HttpContext.Request.Headers.Authorization);
+            if (currUserInfo == null) return Ok(JsonView(false, "请传入token!"));
+
+            return Ok(await _goodsRep.GoodsStorageConfirmStatusChange(dto, currUserInfo.UserId));
+        }
+
         /// <summary>
         /// 物资进销存
         /// 入库 Del
@@ -1986,7 +2021,6 @@ WHERE
             return Ok(await _goodsRep.GoodsStorageDel(id, currUserInfo.UserId));
         }
 
-
         /// <summary>
         /// 物资进销存
         /// 入库 excelDownload
@@ -2111,13 +2145,13 @@ WHERE
                 return Ok(JsonView(false, sb.ToString()));
             }
             int[] idArray = dto.Label
-                                .Split(',')
-                                .Select(x =>
-                                {
-                                    if (int.TryParse(x, out var id)) return id; 
-                                    return id;
-                                })
-                                .ToArray();
+                .Split(',')
+                .Select(x =>
+                {
+                    if (int.TryParse(x, out var id)) return id; 
+                    return id;
+                })
+                .ToArray();
             return Ok(await _goodsRep.GoodsReceiveAudit(idArray, currUserInfo.UserId, dto.AuditEnum));
         }
 

+ 34 - 0
OASystem/OASystem.Domain/Dtos/PersonnelModule/GoodsDTO.cs

@@ -97,6 +97,17 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// </summary>
         public int GoodsId { get; set; }
 
+        /// <summary>
+        /// 入库/出库审核状态Ids
+        /// 多个eg:"1,2,3,4"
+        /// </summary>
+        public string AuditLabel { get; set; }
+
+        /// <summary>
+        /// 物品Name(入库审核List搜索条件)
+        /// </summary>
+        public string GoodsName { get; set; }
+
         /// <summary>
         /// 入库批次号
         /// </summary>
@@ -173,6 +184,29 @@ namespace OASystem.Domain.Dtos.PersonnelModule
 
     }
 
+    public class GoodsStorageConfirmDto
+    {
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// 1:人事部
+        /// 2:财务部
+        /// </summary>
+        public GoodsAuditDepEnum AuditDep { get; set; }
+
+        /// <summary>
+        /// 入库确认状态
+        /// 0:待确认
+        /// 1:部分确认
+        /// 2:已确认
+        /// 3:已拒绝
+        /// 注:可用状态(已确认、已拒绝)
+        /// </summary>
+        public GoodsConfirmEnum ConfirmStatus { get; set; }
+
+    }
+
     /// <summary>
     /// 物品入库 操作(Create Or Edit) 
     /// Validator

+ 99 - 0
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_GoodsAudit.cs

@@ -0,0 +1,99 @@
+using OASystem.Domain.Enums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.PersonnelModule
+{
+    /// <summary>
+    /// 物品确认审核表
+    /// </summary>
+    [SugarTable(tableName: "Pm_GoodsAudit", tableDescription: "物品确认审核表")]
+    public class Pm_GoodsAudit : EntityBase
+    {
+        /// <summary>
+        /// 审核类型
+        /// 1.入库 2.出库 
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核类型", IsNullable = true, ColumnDataType = "int")]
+        public int Type { get; set; } = 1;
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核部门", IsNullable = true, ColumnDataType = "bit")]
+        public GoodsAuditDepEnum Dep { get; set; }
+
+        /// <summary>
+        /// DataId 
+        /// </summary>
+        [SugarColumn(ColumnDescription = "DataId", IsNullable = true, ColumnDataType = "int")]
+        public int DataId { get; set; } = 0;
+
+        /// <summary>
+        /// 确认状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核状态", IsNullable = true, ColumnDataType = "bit")]
+        public GoodsConfirmEnum AuditStatus { get; set; } = GoodsConfirmEnum.WaitConfirm;
+
+        /// <summary>
+        /// 审核人 Id
+        /// Sys_User Id
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核人Id", IsNullable = true, ColumnDataType = "int")]
+        public int AuditUserId { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核时间", IsNullable = true, ColumnDataType = "datetime")]
+        public DateTime AuditTime { get; set; }
+
+        public Pm_GoodsAudit(){}
+
+        /// <summary>
+        /// 基础数据初始化
+        /// </summary>
+        /// <param name="type">
+        /// 审核类型
+        /// 1.入库 2.出库 
+        /// </param>
+        /// <param name="dep">审核部门</param>
+        /// <param name="dataId">DataId</param>
+        /// <param name="auditStatus">确认状态</param>
+        /// <param name="currUserId">创建人</param>
+        public Pm_GoodsAudit(int type, GoodsAuditDepEnum dep, int dataId, GoodsConfirmEnum auditStatus,int currUserId)
+        {
+            this.Type = type;
+            this.Dep = dep;
+            this.DataId = dataId;
+            this.AuditStatus = auditStatus;
+            this.AuditTime = DateTime.Now;
+            this.CreateUserId = currUserId;
+        }
+        /// <summary>
+        /// 基础数据初始化
+        /// </summary>
+        /// <param name="type">
+        /// 审核类型
+        /// 1.入库 2.出库 
+        /// </param>
+        /// <param name="dep">审核部门</param>
+        /// <param name="dataId">DataId</param>
+        /// <param name="auditStatus">确认状态</param>
+        /// <param name="auditorId">审核人</param>
+        /// <param name="currUserId">创建人</param>
+        public Pm_GoodsAudit(int type, GoodsAuditDepEnum dep, int dataId, GoodsConfirmEnum auditStatus, int auditorId, int currUserId)
+        {
+            this.Type = type;
+            this.Dep = dep;
+            this.DataId = dataId;
+            this.AuditStatus = auditStatus;
+            this.AuditUserId = currUserId;
+            this.AuditTime = DateTime.Now;
+            this.CreateUserId = currUserId;
+        }
+    }
+}

+ 14 - 1
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_GoodsStorage.cs

@@ -1,4 +1,5 @@
-using System;
+using OASystem.Domain.Enums;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -85,5 +86,17 @@ namespace OASystem.Domain.Entities.PersonnelModule
         [SugarColumn(ColumnDescription = "入库时间", IsNullable = true, ColumnDataType = "varchar(30)")]
         public string? StorageTime { get; set; }
 
+        /// <summary>
+        /// 入库确认状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "入库确认", IsNullable = true, ColumnDataType = "int")]
+        public GoodsConfirmEnum ConfirmStatus { get; set; } = GoodsConfirmEnum.WaitConfirm;
+
+        /// <summary>
+        /// 入库确认描述
+        /// </summary>
+        [SugarColumn(ColumnDescription = "入库确认描述", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string StatusDesc { get; set; } = string.Format("人事部:状态:待确认\t审核人:-\t审核时间:-;\r\n财务部:状态:待确认\t审核人:-\t审核时间:-;");
+
     }
 }

+ 46 - 0
OASystem/OASystem.Domain/Enums/GoodsAuditEnum.cs

@@ -27,5 +27,51 @@ namespace OASystem.Domain.Enums
         /// </summary>
         [Description("未通过")]
         UnApproved
+
+    }
+
+    /// <summary>
+    /// 出库入库状态
+    /// </summary>
+    public enum GoodsConfirmEnum : int
+    {
+        /// <summary>
+        /// 待确认    
+        /// </summary>
+        [Description("待确认")]
+        WaitConfirm,
+        /// <summary>
+        /// 部分确认
+        /// </summary>
+        [Description("部分确认")]
+        PartConfirmed,
+        /// <summary>
+        /// 已确认
+        /// </summary>
+        [Description("已确认")]
+        Confirmed,
+        /// <summary>
+        /// 已拒绝
+        /// </summary>
+        [Description("已拒绝")]
+        UnApproved,
+    }
+
+    /// <summary>
+    /// 出库入库 审核部门
+    /// </summary>
+    public enum GoodsAuditDepEnum : int
+    {
+        /// <summary>
+        /// 人事部
+        /// </summary>
+        [Description("人事部")]
+        Hr = 1,
+        /// <summary>
+        /// 财务部
+        /// </summary>
+        [Description("财务部")]
+        Financial
     }
+
 }

+ 48 - 0
OASystem/OASystem.Domain/ViewModels/PersonnelModule/GoodsInfoView.cs

@@ -258,4 +258,52 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         public decimal StockQuantity { get; set; }
         public string Unit { get; set; }
     }
+
+    public class GoodsStorageListView
+    {
+        public int Id { get; set; }
+        public int GoodsId { get; set; }
+        public string GoodsName { get; set; }
+        public string BatchNo { get; set; }
+        public decimal Quantity { get; set; }
+        public decimal UnitPrice { get; set; }
+        public decimal TotalPrice { get; set; }
+        public string SupplierName { get; set; }
+        public string SupplierTel { get; set; }
+        public string SupplierAddress { get; set; }
+        public string SupplierSource { get; set; }
+        public string StorageUserName { get; set; }
+        public string StorageTime { get; set; }
+        public string CreateUserName { get; set; }
+        public GoodsConfirmEnum ConfirmStatus { get; set; }
+        public string ConfirmStatusText
+        {
+            get
+            {
+                return ConfirmStatus.GetEnumDescription();
+            }
+        }
+        public string StatusDesc { get; set; }
+        public DateTime CreateTime { get; set; }
+
+        public GoodsStorageAuditPerView[] AuditPers { get; set; }
+
+    }
+
+    public class GoodsStorageAuditPerView
+    {
+        public bool AuditPer { get; set; }
+        public GoodsAuditDepEnum AuditDep { get; set; }
+
+        public string ButtonText { get; set; }
+    }
+
+    #region 审核部门View
+    public class GoodsAuditDepView
+    {
+        public GoodsAuditDepEnum AuditDep { get; set; }
+
+        public int[] AuditorIds { get; set; }
+    }
+    #endregion
 }

File diff suppressed because it is too large
+ 630 - 277
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/GoodsRepository.cs