22
schangxiang@126.com
2024-12-18 344680022c0c46a1bb108e7d2e81bf2296d79d15
LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsTask/WmsRbLineTask/WmsRbLineTaskService.cs
@@ -116,274 +116,7 @@
    #region 导入
    
    /// <summary>
    /// Excel模板导入机器人任务表功能
    /// </summary>
    /// <param name="file">Excel模板文件</param>
    /// <returns>导入的记录数</returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "ImportExcel")]
    [Description("WmsRbLineTask/ImportExcel")]
    public async Task<int> ImportExcelAsync(IFormFile file)
    {
        int _HeadStartLine = 2;//第1行是说明,第2行是列名
        int _DataStartLine = 3;//第3行开始是数据
        DataTable importDataTable = ExcelUtil.ImportExcelToDataTable(file, _HeadStartLine, _DataStartLine);
        var addList =await CommonImport(importDataTable, _DataStartLine);
        await _rep.InsertRangeAsync(addList);
        return addList.Count;
    }
    
    /// <summary>
    ///  DataTable转换实体对象列表
    /// </summary>
    /// <param name="dataTable"></param>
    /// <param name="dataStartLine">模版列名开始行</param>
    /// <returns></returns>
    private async Task<List<WmsRbLineTask>> CommonImport(DataTable dataTable, int dataStartLine)
    {
        var details = new List<WmsRbLineTask>();
        int index = dataStartLine;//模版列名开始行
        foreach (System.Data.DataRow row in dataTable.Rows)
        {
            index++;
            //导入模版定制化代码(替换模版使用)
                           var addItem = new WmsRbLineTask();
                          #region 定义变量
                           var _TaskNo = "";//任务号
                           var _Upi = "";//部件条码
                           var _Length = "";//长
                           var _Width = "";//宽
                           var _Thk = "";//厚
                           var _PlanNo = "";//批次号
                           var _OrderId = "";//订单号
                           var _PackageCode = "";//包装号
                           var _PlaceCode = "";//库位编码
                           var _RbTaskType = "";//任务类型
                           var _TaskStatus = "";//任务状态
                           var _TaskDescribe = "";//任务描述
                           var _TaskMsg = "";//任务消息
                           var _IssueTime = "";//下发时间
                           var _FinishedTime = "";//任务完成时间
                           var _IsFlagFinish = "";//是否标记强制完成
                           var _LastNum = "";//是否末板
                           var _Info17 = "";//机械臂是否旋转
                           var _MachineXCenter = "";//包装X坐标
                           var _MachineYCenter = "";//包装Y坐标
                           var _MachineZCenter = "";//包装Z坐标
                           var _Sequence = "";//层数
                          #endregion
                          #region 取值
                           _TaskNo = row["任务号"]?.ToString() ;
                           _Upi = row["部件条码"]?.ToString() ;
                           _Length = row["长"]?.ToString() ;
                           _Width = row["宽"]?.ToString() ;
                           _Thk = row["厚"]?.ToString() ;
                           _PlanNo = row["批次号"]?.ToString() ;
                           _OrderId = row["订单号"]?.ToString() ;
                           _PackageCode = row["包装号"]?.ToString() ;
                           _PlaceCode = row["库位编码"]?.ToString() ;
                           _RbTaskType = row["任务类型"]?.ToString() ;
                           _TaskStatus = row["任务状态"]?.ToString() ;
                           _TaskDescribe = row["任务描述"]?.ToString() ;
                           _TaskMsg = row["任务消息"]?.ToString() ;
                           _IssueTime = row["下发时间"]?.ToString() ;
                           _FinishedTime = row["任务完成时间"]?.ToString() ;
                           _IsFlagFinish = row["是否标记强制完成"]?.ToString() ;
                           _LastNum = row["是否末板"]?.ToString() ;
                           _Info17 = row["机械臂是否旋转"]?.ToString() ;
                           _MachineXCenter = row["包装X坐标"]?.ToString() ;
                           _MachineYCenter = row["包装Y坐标"]?.ToString() ;
                           _MachineZCenter = row["包装Z坐标"]?.ToString() ;
                           _Sequence = row["层数"]?.ToString() ;
                          #endregion
                          #region 验证
                          if (string.IsNullOrEmpty(_TaskNo))
                          {
                            throw Oops.Oh($"第{index}行[任务号]{_TaskNo}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_TaskNo))
                          {
                                addItem.TaskNo = (string)(_TaskNo.Trim());
                           }
                          if (string.IsNullOrEmpty(_Upi))
                          {
                            throw Oops.Oh($"第{index}行[部件条码]{_Upi}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_Upi))
                          {
                                addItem.Upi = (string)(_Upi.Trim());
                           }
                          if (string.IsNullOrEmpty(_Length))
                          {
                            throw Oops.Oh($"第{index}行[长]{_Length}不能为空!");
                          }
                          if (string.IsNullOrEmpty(_PlanNo))
                          {
                            throw Oops.Oh($"第{index}行[批次号]{_PlanNo}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PlanNo))
                          {
                                addItem.PlanNo = (string)(_PlanNo.Trim());
                           }
                          if (string.IsNullOrEmpty(_OrderId))
                          {
                            throw Oops.Oh($"第{index}行[订单号]{_OrderId}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_OrderId))
                          {
                                addItem.OrderId = (string)(_OrderId.Trim());
                           }
                          if (string.IsNullOrEmpty(_PackageCode))
                          {
                            throw Oops.Oh($"第{index}行[包装号]{_PackageCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PackageCode))
                          {
                                addItem.PackageCode = (string)(_PackageCode.Trim());
                           }
                          if (string.IsNullOrEmpty(_PlaceCode))
                          {
                            throw Oops.Oh($"第{index}行[库位编码]{_PlaceCode}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_PlaceCode))
                          {
                                addItem.PlaceCode = (string)(_PlaceCode.Trim());
                           }
                          if(!string.IsNullOrEmpty(_RbTaskType))
                          {
                          Admin.NET.Application.RbTaskTypeEnum  enumRbTaskType = default(Admin.NET.Application.RbTaskTypeEnum);
                             if(!Enum.TryParse<Admin.NET.Application.RbTaskTypeEnum>(_RbTaskType, out enumRbTaskType)&&!string.IsNullOrEmpty(_RbTaskType))
                              {
                                throw Oops.Oh($"第{index}行[任务类型]{_RbTaskType}值不正确!");
                              }
                              else
                              {
                                 addItem.RbTaskType = enumRbTaskType;
                              }
                           }
                          if (string.IsNullOrEmpty(_TaskStatus))
                          {
                            throw Oops.Oh($"第{index}行[任务状态]{_TaskStatus}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_TaskStatus))
                          {
                          Admin.NET.Application.TaskStatusEnum  enumTaskStatus = default(Admin.NET.Application.TaskStatusEnum);
                             if(!Enum.TryParse<Admin.NET.Application.TaskStatusEnum>(_TaskStatus, out enumTaskStatus)&&!string.IsNullOrEmpty(_TaskStatus))
                              {
                                throw Oops.Oh($"第{index}行[任务状态]{_TaskStatus}值不正确!");
                              }
                              else
                              {
                                 addItem.TaskStatus = enumTaskStatus;
                              }
                           }
                          if(!string.IsNullOrEmpty(_TaskDescribe))
                          {
                                addItem.TaskDescribe = (string)(_TaskDescribe.Trim());
                           }
                          if(!string.IsNullOrEmpty(_TaskMsg))
                          {
                                addItem.TaskMsg = (string)(_TaskMsg.Trim());
                           }
                          if(!string.IsNullOrEmpty(_IssueTime))
                          {
                                addItem.IssueTime =   Convert.ToDateTime(_IssueTime.Trim());
                           }
                          if(!string.IsNullOrEmpty(_FinishedTime))
                          {
                                addItem.FinishedTime =   Convert.ToDateTime(_FinishedTime.Trim());
                           }
                          if (string.IsNullOrEmpty(_IsFlagFinish))
                          {
                            throw Oops.Oh($"第{index}行[是否标记强制完成]{_IsFlagFinish}不能为空!");
                          }
                          if(!string.IsNullOrEmpty(_IsFlagFinish))
                          {
                            if(!_IsFlagFinish.Equals("是") && !_IsFlagFinish.Equals("否"))
                             {
                               throw Oops.Oh($"第{index}行[是否标记强制完成]{_IsFlagFinish}值不正确!");
                             }
                             else
                             {
                               bool outIsFlagFinish = _IsFlagFinish.Equals("是") ? true : false;
                               addItem.IsFlagFinish = outIsFlagFinish;
                             }
                             }
                          if(!string.IsNullOrEmpty(_LastNum))
                          {
                              if (!int.TryParse(_LastNum, out int outLastNum)&&!string.IsNullOrEmpty(_LastNum))
                              {
                                 throw Oops.Oh($"第{index}行[是否末板]{_LastNum}值不正确!");
                              }
                              if (outLastNum <= 0&&!string.IsNullOrEmpty(_LastNum))
                              {
                                 throw Oops.Oh($"第{index}行[是否末板]{_LastNum}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.LastNum = outLastNum;
                              }
                          }
                          if(!string.IsNullOrEmpty(_Info17))
                          {
                                addItem.Info17 = (string)(_Info17.Trim());
                           }
                          if(!string.IsNullOrEmpty(_Sequence))
                          {
                              if (!int.TryParse(_Sequence, out int outSequence)&&!string.IsNullOrEmpty(_Sequence))
                              {
                                 throw Oops.Oh($"第{index}行[层数]{_Sequence}值不正确!");
                              }
                              if (outSequence <= 0&&!string.IsNullOrEmpty(_Sequence))
                              {
                                 throw Oops.Oh($"第{index}行[层数]{_Sequence}值不能小于等于0!");
                              }
                              else
                              {
                                 addItem.Sequence = outSequence;
                              }
                          }
                          #endregion
            details.Add(addItem);
        }
        //验重
        await CheckExisitForImport(details);
        return details;
    }
    
    /// <summary>
    /// 根据版本下载机器人任务表的Excel导入模板
@@ -459,6 +192,26 @@
                query = query.Where(u => u.FinishedTime <= end);
            }
        } 
        if(input.CreateTimeRange != null && input.CreateTimeRange.Count >0)
        {
            DateTime? start= input.CreateTimeRange[0].Value;
            query = query.WhereIF(start.HasValue, u => u.CreateTime >= start);
            if (input.CreateTimeRange.Count >1 && input.CreateTimeRange[1].HasValue)
            {
                var end = input.CreateTimeRange[1].Value;
                query = query.Where(u => u.CreateTime <= end);
            }
        }
        if(input.UpdateTimeRange != null && input.UpdateTimeRange.Count >0)
        {
            DateTime? start= input.UpdateTimeRange[0].Value;
            query = query.WhereIF(start.HasValue, u => u.UpdateTime >= start);
            if (input.UpdateTimeRange.Count >1 && input.UpdateTimeRange[1].HasValue)
            {
                var end = input.UpdateTimeRange[1].Value;
                query = query.Where(u => u.UpdateTime <= end);
            }
        }
        return query;
       }