抛光库导入

This commit is contained in:
2024-10-29 17:35:32 +08:00
parent 08b25e0633
commit eb97591d9c
7 changed files with 137 additions and 22 deletions

View File

@@ -1,9 +1,11 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Extensions;
using ZR.Admin.WebApi.Filters; using ZR.Admin.WebApi.Filters;
using ZR.Model; using ZR.Model;
using ZR.Model.MES.wms; using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto; using ZR.Model.MES.wms.Dto;
using ZR.Model.System;
using ZR.Model.System.Dto; using ZR.Model.System.Dto;
using ZR.Service.mes.wms; using ZR.Service.mes.wms;
using ZR.Service.mes.wms.IService; using ZR.Service.mes.wms.IService;
@@ -216,5 +218,38 @@ namespace ZR.Admin.WebApi.Controllers
var response = _WmPolishInventoryService.GetPartNumber(); var response = _WmPolishInventoryService.GetPartNumber();
return SUCCESS(response); return SUCCESS(response);
} }
/// <summary>
/// 抛光导入模板下载
/// </summary>
/// <returns></returns>
[HttpGet("importTemplate")]
[Log(Title = "抛光模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = true, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
(string, string) result = DownloadImportTemplate("抛光仓库盘点模板");
return ExportExcel(result.Item2, result.Item1);
}
/// <summary>
/// 导入
/// </summary>
/// <param name="formFile">使用IFromFile必须使用name属性否则获取不到文件</param>
/// <returns></returns>
[HttpPost("importData")]
[Log(Title = "抛光盘点导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = true)]
[AllowAnonymous]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
List<WmPolishInventoryExportDto> importList = new();
using (var stream = formFile.OpenReadStream())
{
importList = stream.Query<WmPolishInventoryExportDto>(startCell: "A1").ToList();
}
return SUCCESS(_WmPolishInventoryService.ImportExcel(importList));
}
} }
} }

View File

@@ -36,6 +36,8 @@ namespace ZR.Model.MES.wms.Dto
public int? Quantity { get; set; } public int? Quantity { get; set; }
public int RealQuantity { get; set; }
public int? MaxNum { get; set; } public int? MaxNum { get; set; }
public int? MinNum { get; set; } public int? MinNum { get; set; }

View File

@@ -1,3 +1,5 @@
using MiniExcelLibs.Attributes;
namespace ZR.Model.MES.wms.Dto namespace ZR.Model.MES.wms.Dto
{ {
/// <summary> /// <summary>
@@ -59,20 +61,19 @@ namespace ZR.Model.MES.wms.Dto
public DateTime? UpdatedTime { get; set; } public DateTime? UpdatedTime { get; set; }
} }
[SugarTable("wm_polish_inventory", "抛光表")]
public class WmPolishInventoryExportDto public class WmPolishInventoryExportDto
{ {
[SugarColumn(ColumnName = "partnumber")]
public string { get; set; } public string { get; set; }
public string { get; set; } public string { get; set; }
public string { get; set; } public string { get; set; }
public string { get; set; } public string { get; set; }
[SugarColumn(ColumnName = "quantity")]
public int { get; set; } = 0; public int { get; set; } = 0;
public int { get; set; } = 0; public int { get; set; } = 0;
[SugarColumn(ColumnName = "CREATED_TIME")]
public DateTime? { get; set; }
} }
} }

View File

@@ -1289,16 +1289,14 @@ namespace ZR.Service.mes.qc
boardData.StockOneTimeWarehouseCount = oneTimeWarehouseTotal; boardData.StockOneTimeWarehouseCount = oneTimeWarehouseTotal;
// 产线合格 // 产线合格
int productQualifiedTotal = int productQualifiedTotal =
( Context
Context .Queryable<QcQualityStatisticsFirst>()
.Queryable<QcQualityStatisticsFirst>() .WhereIF(
.WhereIF( !string.IsNullOrEmpty(query.Partnumber),
!string.IsNullOrEmpty(query.Partnumber), it => it.FinishedPartNumber == query.Partnumber
it => it.FinishedPartNumber == query.Partnumber )
) .Where(it => it.StartTime >= boardData.OneTimeStockTime)
.Where(it => it.StartTime >= boardData.OneTimeStockTime) .Sum(it => it.QualifiedNumber) ?? 0;
.Sum(it => it.QualifiedNumber) ?? 0
) / 3;
// 倒车雷达 // 倒车雷达
string[] checkStrArray2 = { "倒车雷达" }; string[] checkStrArray2 = { "倒车雷达" };
var ParkingSensorPartNumberCheck = Expressionable.Create<WmMaterial>(); var ParkingSensorPartNumberCheck = Expressionable.Create<WmMaterial>();
@@ -1306,7 +1304,7 @@ namespace ZR.Service.mes.qc
{ {
ParkingSensorPartNumberCheck.Or(it => it.Description.Contains(checkStr)); ParkingSensorPartNumberCheck.Or(it => it.Description.Contains(checkStr));
} }
; ;
ParkingSensorPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); ParkingSensorPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1);
List<string> ParkingSensorPartNumberList = Context List<string> ParkingSensorPartNumberList = Context
.Queryable<WmMaterial>() .Queryable<WmMaterial>()
@@ -1325,9 +1323,9 @@ namespace ZR.Service.mes.qc
.Queryable<QcQualityStatisticsFirst>() .Queryable<QcQualityStatisticsFirst>()
.Where(predicateParkingSensor) .Where(predicateParkingSensor)
.Sum(it => it.QualifiedNumber) ?? 0; .Sum(it => it.QualifiedNumber) ?? 0;
productParkingSensorbQualifiedTotal = productParkingSensorbQualifiedTotal / 3;
// 产线合格 - 倒车雷达 // 产线合格 - 倒车雷达
productQualifiedTotal -= productParkingSensorbQualifiedTotal; productQualifiedTotal =
(productQualifiedTotal - productParkingSensorbQualifiedTotal) / 3;
// 抛光合格 // 抛光合格
int polishQualifiedTotal = int polishQualifiedTotal =
@@ -1350,13 +1348,14 @@ namespace ZR.Service.mes.qc
.Where(it => it.StartTime >= boardData.OneTimeStockTime) .Where(it => it.StartTime >= boardData.OneTimeStockTime)
.Sum(it => it.RequireNumber) ?? 0; .Sum(it => it.RequireNumber) ?? 0;
// 后道直接出库 // 后道直接出库
int afterPolishOutTotal = Context int afterPolishOutTotal =
Context
.Queryable<WmPolishQualityStatistics>() .Queryable<WmPolishQualityStatistics>()
.WhereIF( .WhereIF(
!string.IsNullOrEmpty(query.Partnumber), !string.IsNullOrEmpty(query.Partnumber),
it => it.Partnumber == query.Partnumber it => it.Partnumber == query.Partnumber
) )
.Where(it =>it.Type == 1) .Where(it => it.Type == 1)
.Where(it => it.StartTime >= boardData.OneTimeStockTime) .Where(it => it.StartTime >= boardData.OneTimeStockTime)
.Sum(it => it.RequireNumber) ?? 0; .Sum(it => it.RequireNumber) ?? 0;

View File

@@ -57,5 +57,11 @@ namespace ZR.Service.mes.wms.IService
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public int GetPartNumber(); public int GetPartNumber();
/// <summary>
/// 导入Excel
/// </summary>
/// <param name="users"></param>
/// <returns></returns>
public (string, object, object) ImportExcel(List<WmPolishInventoryExportDto> users);
} }
} }

View File

@@ -75,6 +75,12 @@ namespace ZR.Service.mes.wms
item.Description = !string.IsNullOrEmpty(material.Description) item.Description = !string.IsNullOrEmpty(material.Description)
? material.Description ? material.Description
: material.ProductName; : material.ProductName;
// 获取实际库存
List<string> partnumbers = new List<string>();
partnumbers.Add(item.Partnumber);
Dictionary<string, int> dict = GetBatchOneTimeRealPartNum(partnumbers);
item.RealQuantity = dict.TryGetValue(item.Partnumber, out int value) ? value : 0;
} }
} }
return response; return response;
@@ -481,7 +487,7 @@ namespace ZR.Service.mes.wms
.ToDictionary(g => g.Partnumber, g => SqlFunc.AggregateSum(g.Quantity) ?? 0); .ToDictionary(g => g.Partnumber, g => SqlFunc.AggregateSum(g.Quantity) ?? 0);
} }
// Util 获取指定抛光库零件加报表后库存 // Util 获取指定一次合格库零件加报表后库存
public Dictionary<string, int> GetBatchOneTimeRealPartNum(List<string> partnumbers) public Dictionary<string, int> GetBatchOneTimeRealPartNum(List<string> partnumbers)
{ {
try try

View File

@@ -2,15 +2,19 @@ using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Aliyun.OSS; using Aliyun.OSS;
using Infrastructure;
using Infrastructure.Attribute; using Infrastructure.Attribute;
using Infrastructure.Extensions; using Infrastructure.Extensions;
using JinianNet.JNTemplate;
using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using SqlSugar; using SqlSugar;
using ZR.Common;
using ZR.Model; using ZR.Model;
using ZR.Model.MES.qc.DTO; using ZR.Model.MES.qc.DTO;
using ZR.Model.MES.wms; using ZR.Model.MES.wms;
using ZR.Model.MES.wms.Dto; using ZR.Model.MES.wms.Dto;
using ZR.Model.System;
using ZR.Repository; using ZR.Repository;
using ZR.Service.mes.qc; using ZR.Service.mes.qc;
using ZR.Service.mes.wms.IService; using ZR.Service.mes.wms.IService;
@@ -83,6 +87,12 @@ namespace ZR.Service.mes.wms
item.Description = !string.IsNullOrEmpty(material.Description) item.Description = !string.IsNullOrEmpty(material.Description)
? material.Description ? material.Description
: material.ProductName; : material.ProductName;
// 获取实际库存
List<string> partnumbers = new List<string>();
partnumbers.Add(item.Partnumber);
Dictionary<string, int> dict = GetBatchPolishRealPartNum(partnumbers);
item.RealQuantity = dict.TryGetValue(item.Partnumber, out int value)? value : 0;
} }
} }
return response; return response;
@@ -518,6 +528,9 @@ namespace ZR.Service.mes.wms
Dictionary<string, object> stockNumbers = GetBatchPolishStockPartNum(partnumbers); Dictionary<string, object> stockNumbers = GetBatchPolishStockPartNum(partnumbers);
Dictionary<string, int> realNumbers = GetBatchPolishRealPartNum(partnumbers); Dictionary<string, int> realNumbers = GetBatchPolishRealPartNum(partnumbers);
// 更新盘点时间
DateTime dateTime = DateTime.Now.ToLocalTime();
// 构建导出数据 // 构建导出数据
List<WmPolishInventoryExportDto> exportDto = materials List<WmPolishInventoryExportDto> exportDto = materials
.Select(it => .Select(it =>
@@ -532,6 +545,7 @@ namespace ZR.Service.mes.wms
= it.Color, = it.Color,
= it.Specification, = it.Specification,
= it.Description, = it.Description,
= dateTime,
= stockNumber, = stockNumber,
= found2 ? realNumber : 0, = found2 ? realNumber : 0,
}; };
@@ -576,5 +590,57 @@ namespace ZR.Service.mes.wms
throw; throw;
} }
} }
/// <summary>
/// 导入数据
/// </summary>
/// <param name="importData"></param>
/// <returns></returns>
public (string, object, object) ImportExcel(List<WmPolishInventoryExportDto> importList)
{
List<WmPolishInventory> wmPolishInventorylist = importList.Select(it => new WmPolishInventory {
Id = SnowFlakeSingle.Instance.NextId().ToString(),
Type = 1,
Status = 1,
MaxNum = 0,
MinNum = 0,
WarnNum = 0,
CreatedBy = "页面导入",
Remark = "EXCEL 盘点导入",
CreatedTime = it. ?? DateTime.Now.ToLocalTime(),
Partnumber = it.,
Quantity = it.
}).ToList();
var x = Context.Storageable(wmPolishInventorylist)
.SplitError(x => x.Item.Partnumber.IsEmpty(), "零件号不能为空")
.SplitError(x => x.Item.Quantity.IsEmpty(), "盘点数不能为空")
.SplitUpdate(it => it.Any()) // 数据库存在更新
.SplitDelete(it => it.Item.Quantity == 0) //盘点数为0的不导入
.SplitInsert(it => true) // 其余插入
.WhereColumns(it => it.Partnumber)//如果不是主键可以这样实现多字段it=>new{it.x1,it.x2}
.ToStorage();
// 清空全部
var result = x.AsInsertable.ExecuteCommand();//不存在则插入;
var result2 = x.AsUpdateable.IgnoreColumns(it => new { it.Id }).ExecuteCommand();//存在则修改;
var result3 = x.AsDeleteable.ExecuteCommand(); //盘点数为0的删除;
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.Item.Partnumber + " : " + item.StorageMessage);
}
return (msg, x.ErrorList, x.IgnoreList);
}
} }
} }