Quellcode durchsuchen

优化物品领用和审核逻辑

在 `FinancialController.cs` 中,添加对 `feeDatas` 列表的检查以确保数据完整性。
在 `PersonnelModuleController.cs` 中,注释掉了对 `GoodsReceiveOp` 的调用,改为使用新的 `GoodsReceiveDetailsView` 数组和 `GoodsReceiveBatchOpDto` 对象。
在 `GoodsRepository.cs` 中,将贵重物品审核模板的业务类型从 `2` 更改为 `3`,并删除旧数据的相关代码,确保只保留最新的明细数据。同时,添加了更新业务状态为审核中的逻辑,并处理审核状态更新失败的情况。
LEIYI vor 4 Tagen
Ursprung
Commit
436d89bbb0

+ 6 - 0
OASystem/OASystem.Api/Controllers/FinancialController.cs

@@ -2084,6 +2084,12 @@ namespace OASystem.API.Controllers
                         }
                     }
 
+                    if (feeDatas.Count < 1)
+                    {
+                        feeDatas.Add(new ClientFeeInfoView() { });
+
+                    }
+
 
                     item_rst.feeItem = feeDatas;
                     #endregion

+ 22 - 22
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -2064,7 +2064,7 @@ WHERE
 
         /// <summary>
         /// 物资进销存
-        /// 领用 List
+        /// 领用记录 List
         /// </summary>
         /// <returns></returns>
         [HttpPost]
@@ -2154,30 +2154,29 @@ WHERE
                 return Ok(JsonView(false, sb.ToString()));
             }
 
-            return Ok(await _goodsRep.GoodsReceiveOp(dto, currUserInfo.UserId));
+            //Return Ok(await _goodsRep.GoodsReceiveOp(dto, currUserInfo.UserId));
 
             //TODO:调试完成后 单个领用使用批量领用方法
-            //var receiveDetails = new GoodsReceiveDetailsView[] {
-            //    new () {
-            //        Id = 0,
-            //        GoodsReceiveId = dto.Id,
-            //        GoodsId = dto.GoodsId,
-            //        Quantity = dto.Quantity,
-            //        Remark = dto.Remark
-            //    }
-            //};
-
-            //var newDto = new GoodsReceiveBatchOpDto()
-            //{
-            //    Id = dto.Id,
-            //    GroupId = dto.GroupId,
-            //    ReceiveDetails = receiveDetails,
-            //    Reason = dto.Reason,
-            //    Remark = dto.Remark,
-            //    CurrUserId = currUserInfo.UserId,
-            //};
+            var receiveDetails = new GoodsReceiveDetailsView[] {
+                new () {
+                    Id = 0,
+                    GoodsId = dto.GoodsId,
+                    Quantity = dto.Quantity,
+                    Remark = dto.Remark
+                }
+            };
+
+            var newDto = new GoodsReceiveBatchOpDto()
+            {
+                Id = dto.Id,
+                GroupId = dto.GroupId,
+                ReceiveDetails = receiveDetails,
+                Reason = dto.Reason,
+                Remark = dto.Remark,
+                CurrUserId = currUserInfo.UserId,
+            };
 
-            //return Ok(await _goodsRep.GoodsReceiveBatchOp(newDto));
+            return Ok(await _goodsRep.GoodsReceiveBatchOpAsync(newDto));
 
         }
 
@@ -2188,6 +2187,7 @@ WHERE
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpPost]
+        [ApiExplorerSettings(IgnoreApi = true)]
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> GoodsReceiveAudit(GoodsReceiveAuditDTO dto)
         {

+ 33 - 25
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/GoodsRepository.cs

@@ -3054,13 +3054,13 @@ FROM
             });
 
             //贵重物品领用审核模板
-            var valuableAuditTemps = await _approvalProcessRep.GetTemplateByBusinessTypeAsync(2); //贵重物品
+            var valuableAuditTemps = await _approvalProcessRep.GetTemplateByBusinessTypeAsync(3); //贵重物品
             var valuableAuditUsers = new List<GoodsStorageAuditPerView>();
             valuableAuditTemps?.TempNodes.ForEach(x =>
             {
                 var auditDep = GoodsAuditDepEnum.Hr_Reception;
                 if (x.NodeName.Contains("人事部主管/经理审核")) auditDep = GoodsAuditDepEnum.Hr;
-                else if (x.NodeName.Contains("前台审核")) auditDep = GoodsAuditDepEnum.Hr_Reception;
+                else if (x.NodeName.Contains("前台审核")) auditDep = GoodsAuditDepEnum.Hr;
                 x.NodeUsers.ForEach(y =>
                 {
                     var userFlang = false;
@@ -3271,29 +3271,30 @@ FROM
                     return _jv;
                 }
 
-                //删除旧数据
-                var delStatus = await _sqlSugar.Updateable<Pm_GoodsReceiveDetails>()
-                    .SetColumns(x => new Pm_GoodsReceiveDetails()
-                    {
-                        IsDel = 1,
-                        DeleteUserId = currUserId,
-                        DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    })
-                    .Where(x => x.GoodsReceiveId == goodsReceiveId)
-                    .ExecuteCommandAsync();
-
-                if (delStatus < 1)
-                {
-                    _jv.Msg = $"领用明细旧数据删除失败!";
-                    _sqlSugar.RollbackTran();
-                    return _jv;
-                }
-
-                //添加新明细数据
+                //更新子表数据
                 if (receiveDetails.Any())
                 {
-                    var addStatus = await _sqlSugar.Insertable(receiveDetails).ExecuteCommandAsync();
-                    if (addStatus < 1)
+                    receiveDetails.ForEach(x => { x.GoodsReceiveId = receiveInfo.Id; });
+
+
+                    var db_receiveDetails = await _sqlSugar.Queryable<Pm_GoodsReceiveDetails>()
+                   .Where(x => x.IsDel == 0 && x.GoodsReceiveId == goodsReceiveId)
+                   .ToListAsync();
+
+                    var toDelete = db_receiveDetails.Where(p => !receiveDetails.Any(np => np.Id == p.Id)).ToList();
+                    if (toDelete.Any())
+                    {
+                        var delStatus = _sqlSugar.Deleteable(toDelete).ExecuteCommand();
+                        if (delStatus < 1)
+                        {
+                            _jv.Msg = $"领用明细旧数据删除失败!";
+                            _sqlSugar.RollbackTran();
+                            return _jv;
+                        }
+                    }
+
+                    var addOrUpdStatus = await _sqlSugar.Storageable<Pm_GoodsReceiveDetails>(receiveDetails.ToList()).ExecuteCommandAsync();
+                    if (addOrUpdStatus < 1)
                     {
                         _jv.Msg = $"领用明细更新失败!";
                         _sqlSugar.RollbackTran();
@@ -3471,7 +3472,6 @@ FROM
             return _jv;
         }
 
-
         /// <summary>
         /// 物品领用 批量 详情
         /// </summary>
@@ -3514,7 +3514,6 @@ FROM
             return _jv;
         }
 
-
         /// <summary>
         /// 物品领用 审核 通过
         /// </summary>
@@ -3665,6 +3664,15 @@ FROM
                     // 进入下一个节点
                     flow.CurrentNodeId = nextNode.Id;
 
+                    // 更新业务状态为审核中
+                    var auditStatus = await UpdateStatusAsync(appId, GoodsAuditEnum.OutConfirming);
+                    if (!auditStatus)
+                    {
+                        _jv.Msg = $"审核状态更新失败!";
+                        _sqlSugar.RollbackTran();
+                        return _jv;
+                    }
+
                     // 为下一个节点创建审核记录
                     var nextNodeUsers = await _approvalProcessRep.GetTemplateNodeUsersAsync(nextNode.Id);
                     var records = nextNodeUsers.Select(user => new Sys_AuditRecord