Selaa lähdekoodia

出库任务单导入

zhaoyaxiong 1 vuosi sitten
vanhempi
commit
d2ca0abcec

+ 104 - 0
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/SapOutTaskRecordController.cs

@@ -12,6 +12,9 @@ using ZR.Admin.WebApi.Filters;
 using ZR.Common;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
+using System.Data;
+using ZR.Model.Dto.Inspect;
+using ZR.Model.Models.Inspect;
 
 namespace ZR.Admin.WebApi.Controllers.OutStore
 {
@@ -145,5 +148,106 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
 
             return ToResponse(response);
         }
+
+        /// <summary>
+        /// 导入
+        /// </summary>
+        /// <param name="formFile">使用IFromFile必须使用name属性否则获取不到文件</param>
+        /// <param name="category"></param>
+        /// <returns></returns>
+        [HttpPost("OutTaskImportData")]
+        [Log(Title = "出库任务单导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:import")]
+        public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+        {
+            DataSet dataSet = ExcelReader.ReadExcel(formFile);
+
+            if (dataSet == null)
+            {
+                return SUCCESS("导入失败。<br/><br/>导入错误。文件不是xls文件也不是xlsx文件。");
+            }
+            //简单验证表格式
+            if (!dataSet.Tables[0].Rows[0][1].ToString().Contains("领料单号"))
+            {
+                return SUCCESS($"导入失败。<br/>请确认文件无误。");
+            }
+            //通过领料单号,验证是否已存在出库任务单
+            string checkOutTaskNo = dataSet.Tables[0].Rows[1][1].ToString().Trim();
+            if (string.IsNullOrEmpty(checkOutTaskNo))
+            {
+                return SUCCESS($"导入失败。<br/>B列出库任务单号有误。");
+            }
+            var response = _SapOutTaskRecordService.GetList(
+                new SapOutTaskRecordQueryDto { OutTaskNo = checkOutTaskNo });
+            if (response.Result.Count > 0)
+            {
+                return SUCCESS($"导入失败。<br/><br/>导入出库任务单【{checkOutTaskNo}】已存在。");
+            }
+
+            List<SapOutTaskRecord> sapOutTaskRecords = new();
+            //实例化交验单表对象
+            for (int i = 1; i < dataSet.Tables[0].Rows.Count; i++)
+            //去除第一行标题行
+            {
+                //row中空单元格会转化为空字符串而不是null
+                SapOutTaskRecord sapOutTaskRecord = new();
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][1].ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行B列,领料单号有误。");
+                }
+                else
+                    sapOutTaskRecord.OutTaskNo = dataSet.Tables[0].Rows[i][1].ToString().Trim();//*
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][9]!.ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行J列,WBS元素有误。");
+                }
+                else
+                    sapOutTaskRecord.BomNo = dataSet.Tables[0].Rows[i][9].ToString().Trim();//*
+
+                sapOutTaskRecord.Category = "";//暂时没用,给个空字符串
+
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][7].ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行H列,物料编码有误。");
+                }
+                else
+                    sapOutTaskRecord.MaterialCode = dataSet.Tables[0].Rows[i][7].ToString().Trim();//*
+
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][20].ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行U列,物料名称有误。");
+                }
+                else
+                    sapOutTaskRecord.MaterialName = dataSet.Tables[0].Rows[i][20].ToString().Trim();//*
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][19].ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行T列,规格型号/图号有误。");
+                }
+                else
+                    sapOutTaskRecord.MaterialSpec = dataSet.Tables[0].Rows[i][19].ToString().Trim();//*
+
+                sapOutTaskRecord.Unit= dataSet.Tables[0].Rows[i][11].ToString().Trim();
+
+                if (string.IsNullOrEmpty(dataSet.Tables[0].Rows[i][12].ToString().Trim()))
+                {
+                    return SUCCESS($"导入失败。<br/><br/>{i + 1}行M列,物料数量有误。");
+                }
+                else
+                    sapOutTaskRecord.Qty = Convert.ToInt32(dataSet.Tables[0].Rows[i][12]);//*
+
+                sapOutTaskRecord.CreateBy = HttpContext.GetName();
+                sapOutTaskRecord.CreateTime = DateTime.Now;
+                sapOutTaskRecord.Remark = "导入数据";
+                sapOutTaskRecords.Add(sapOutTaskRecord);
+
+            }
+
+            string msg = _SapOutTaskRecordService.ImportDatas(sapOutTaskRecords);
+
+            //TODO 业务逻辑,自行插入数据到db
+            return SUCCESS("交验单导入成功!");
+        }
+
+
     }
 }

+ 2 - 22
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/ZRModel.xml

@@ -1141,29 +1141,9 @@
             出库结果。0:未出库;99:出库完成; 
             </summary>
         </member>
-        <member name="P:ZR.Model.Models.SapOutTaskRecord.CreateBy">
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Unit">
             <summary>
-            创建者 
-            </summary>
-        </member>
-        <member name="P:ZR.Model.Models.SapOutTaskRecord.CreateTime">
-            <summary>
-            创建时间 
-            </summary>
-        </member>
-        <member name="P:ZR.Model.Models.SapOutTaskRecord.UpdateBy">
-            <summary>
-            更新者 
-            </summary>
-        </member>
-        <member name="P:ZR.Model.Models.SapOutTaskRecord.UpdateTime">
-            <summary>
-            更新时间 
-            </summary>
-        </member>
-        <member name="P:ZR.Model.Models.SapOutTaskRecord.Remark">
-            <summary>
-            备注 
+            单位 
             </summary>
         </member>
         <member name="T:ZR.Model.Models.CommonLang">

+ 4 - 4
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/appsettings.json

@@ -7,8 +7,8 @@
     }
   },
   "ConnectionStrings": {
-    "conn_db": "Data Source=localhost;port=3306;User ID=sa;Password=sa123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
-    //"conn_db": "Data Source=39.106.7.239;port=3306;User ID=sa;Password=123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
+    //"conn_db": "Data Source=localhost;port=3306;User ID=sa;Password=sa123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
+    "conn_db": "Data Source=39.106.7.239;port=3306;User ID=sa;Password=123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
     "conn_db_type": "0" //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3
   },
   "urls": "http://localhost:8888;http://192.168.137.1:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改
@@ -44,8 +44,8 @@
     "SendUser": "@all"
   },
   "gen": {
-    "conn": "Data Source=localhost;port=3306;User ID=sa;Password=sa123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
-    //"conn": "Data Source=39.106.7.239;port=3306;User ID=sa;Password=123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
+    //"conn": "Data Source=localhost;port=3306;User ID=sa;Password=sa123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
+    "conn": "Data Source=39.106.7.239;port=3306;User ID=sa;Password=123456;Database=mytest_db;CharSet=utf8;sslmode=none;",
     "dbType": 0, //MySql = 0, SqlServer = 1
     "autoPre": true, //自动去除表前缀
     "author": "admin",

+ 1 - 1
ZrAdminNetCore-net7.0/ZR.Common/ExcelReader.cs

@@ -17,7 +17,7 @@ namespace ZR.Common
             IExcelDataReader? readerData = null;
             using Stream stream = formFile.OpenReadStream();
             //根据excel扩展名选择对应的读取文件流方式
-            switch (formFile.FileName.Split('.').Last())
+            switch (formFile.FileName.Split('.').Last().ToLower())
             {
                 case "xls": readerData = ExcelReaderFactory.CreateBinaryReader(stream); break;
                 case "xlsx": readerData = ExcelReaderFactory.CreateOpenXmlReader(stream); break;

+ 17 - 1
ZrAdminNetCore-net7.0/ZR.Model/Dto/OutStore/SapOutTaskRecordDto.cs

@@ -11,7 +11,21 @@ namespace ZR.Model.Dto.OutStore
     /// </summary>
     public class SapOutTaskRecordQueryDto : PagerInfo
     {
-
+        //    生产令号
+        public string BomNo { get; set; }
+        //    物料编码
+        public string MaterialCode { get; set; }
+        //    物料名称
+        public string MaterialName { get; set; }
+        //    规格型号/图号
+        public string MaterialSpec { get; set; }
+        //    物料类型?好像业务不关注
+        public string Category { get; set; }
+        //    出库任务单号
+        public string OutTaskNo { get; set; }
+        //    创建时间
+        public DateTime? BeginTime { get; set; }
+        public DateTime? EndTime { get; set; }
     }
 
     /// <summary>
@@ -67,6 +81,8 @@ namespace ZR.Model.Dto.OutStore
 
         [Required(ErrorMessage = "出库结果。0:未出库;99:出库完成;不能为空")]
         public int Result { get; set; }
+        
+        public string Unit { get; set; }
 
         public string CreateBy { get; set; }
 

+ 3 - 28
ZrAdminNetCore-net7.0/ZR.Model/Models/OutStore/SapOutTaskRecord.cs

@@ -11,7 +11,7 @@ namespace ZR.Model.Models
     /// @date 2023-05-10
     /// </summary>
     [SugarTable("sap_out_task_record")]
-    public class SapOutTaskRecord
+    public class SapOutTaskRecord:BusinessBase
     {
         /// <summary>
         /// 主键ID 
@@ -65,33 +65,8 @@ namespace ZR.Model.Models
         public int Result { get; set; }
 
         /// <summary>
-        /// 创建者 
+        /// 单位 
         /// </summary>
-        [SugarColumn(ColumnName = "create_by")]
-        public string CreateBy { get; set; }
-
-        /// <summary>
-        /// 创建时间 
-        /// </summary>
-        [SugarColumn(ColumnName = "create_time")]
-        public DateTime? CreateTime { get; set; }
-
-        /// <summary>
-        /// 更新者 
-        /// </summary>
-        [SugarColumn(ColumnName = "update_by")]
-        public string UpdateBy { get; set; }
-
-        /// <summary>
-        /// 更新时间 
-        /// </summary>
-        [SugarColumn(ColumnName = "update_time")]
-        public DateTime? UpdateTime { get; set; }
-
-        /// <summary>
-        /// 备注 
-        /// </summary>
-        public string Remark { get; set; }
-
+        public string Unit { get; set; }
     }
 }

+ 4 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/OutStore/ISapOutTaskRecordService.cs

@@ -4,6 +4,7 @@ using ZR.Model.Dto;
 using ZR.Model.Models;
 using System.Collections.Generic;
 using ZR.Model.Dto.OutStore;
+using ZR.Model.Models.Inspect;
 
 namespace ZR.Service.Business.IBusinessService.OutStore
 {
@@ -24,5 +25,8 @@ namespace ZR.Service.Business.IBusinessService.OutStore
         void TruncateSapOutTaskRecord();
         List<SapOutTaskDto> GetSapOutTaskList(SapOutTaskQueryNoPageDto parm);
         List<SapOutTaskRecordDto> GetSapOutTaskRecordList(string outTaskNo);
+
+        string ImportDatas(List<SapOutTaskRecord> list);
+
     }
 }

+ 44 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/OutStore/SapOutTaskRecordService.cs

@@ -12,6 +12,8 @@ using Mapster;
 using ZR.Model.Models.Inspect;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
+using Infrastructure;
+using Org.BouncyCastle.Math.EC.Rfc7748;
 
 namespace ZR.Service.Business.OutStore
 {
@@ -36,6 +38,17 @@ namespace ZR.Service.Business.OutStore
             //开始拼装查询条件
             var predicate = Expressionable.Create<SapOutTaskRecord>();
 
+            if (parm.BeginTime != null && parm.EndTime != null)
+            {
+                parm.BeginTime = DateTimeHelper.GetBeginTime(parm.BeginTime, -1);
+                parm.EndTime = DateTimeHelper.GetBeginTime(parm.EndTime, 1);
+                predicate.And(d => d.CreateTime >= parm.BeginTime && d.CreateTime <= parm.EndTime);
+            }
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.OutTaskNo), d => d.OutTaskNo.Contains(parm.OutTaskNo));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), d => d.BomNo.Contains(parm.BomNo));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.MaterialCode), d => d.MaterialCode.Contains(parm.MaterialCode));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.MaterialName), d => d.MaterialName.Contains(parm.MaterialName));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.MaterialSpec), d => d.MaterialSpec.Contains(parm.MaterialSpec));
             //搜索条件查询语法参考Sqlsugar
             var response = Queryable()
                 .Where(predicate.ToExpression())
@@ -110,6 +123,37 @@ namespace ZR.Service.Business.OutStore
             return Update(model, true);
         }
 
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="list"></param>
+        /// <returns></returns>
+        public string ImportDatas(List<SapOutTaskRecord> list)
+        {
+            var x = Context.Storageable(list)
+                .SplitInsert(it => !it.Any())
+                .ToStorage();
+            var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+            string msg = string.Format(" 插入{0} 更新{1} 错误数据{2} 不计算数据{3} 删除数据{4},总共{5}",
+                               x.InsertList.Count,
+                               x.UpdateList.Count,
+                               x.ErrorList.Count,
+                               x.IgnoreList.Count,
+                               x.DeleteList.Count,
+                               x.TotalList.Count);
+            //输出统计                      
+            Console.WriteLine(msg);
+
+            //输出错误信息               
+            foreach (var item in x.ErrorList)
+            {
+                Console.WriteLine("导入出库任务单错误:" + item.StorageMessage);
+            }
+
+            return msg;
+        }
+
         /// <summary>
         /// 清空
         /// </summary>