| | |
| | | |
| | | #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导入模板 |
| | |
| | | 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; |
| | | } |
| | | |