using Magicodes.ExporterAndImporter.Excel.Utility;
|
using Microsoft.AspNetCore.Http;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_IPackInfoRepository;
|
using WIDESEAWCS_Common.Utilities;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_IPackInfoService;
|
using WIDESEAWCS_IBasicInfoRepository;
|
namespace WIDESEAWCS_PackInfoService
|
{
|
public class PackaxisService : ServiceBase<Dt_Packaxis, IPackaxisRepository>, IPackaxisService
|
{
|
public PackaxisService(IPackaxisRepository BaseDal) : base(BaseDal)
|
{
|
}
|
private readonly IPackTypeRepository _packTypeRepository;
|
private readonly IStationMangerRepository _stationMangerRepository;
|
public PackaxisService(IPackaxisRepository BaseDal, IPackTypeRepository packTypeRepository, IStationMangerRepository stationMangerRepository) : base(BaseDal)
|
{
|
_packTypeRepository = packTypeRepository;
|
_stationMangerRepository = stationMangerRepository;
|
}
|
public override WebResponseContent Import(List<IFormFile> files)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
// 1. 验证文件
|
if (files == null || files.Count == 0)
|
return new WebResponseContent { Status = false, Message = "请选择上传的文件" };
|
|
var formFile = files[0];
|
|
// 2. 准备目录(使用Path.Combine)
|
var dicPath = Path.Combine(
|
AppDomain.CurrentDomain.BaseDirectory,
|
"ExcelImport",
|
DateTime.Now.ToString("yyyyMMdd"),
|
typeof(Dt_Packaxis).Name);
|
|
Directory.CreateDirectory(dicPath);
|
// 3. 保存上传文件
|
var fileName = $"{Guid.NewGuid()}_{formFile.FileName}";
|
var fullPath = Path.Combine(dicPath, fileName);
|
|
using (var stream = new FileStream(fullPath, FileMode.Create))
|
{
|
formFile.CopyToAsync(stream);
|
}
|
|
// 4. 导入Excel数据
|
DataTable dtExcel = new DataTable();
|
using (ImportExcelHelper excelHelper = new ImportExcelHelper(fullPath))
|
{
|
dtExcel = excelHelper.ExcelToDataTable();
|
}
|
List<Dt_Packaxis> addAxis = new List<Dt_Packaxis>();
|
List<Dt_Packaxis> updateAxis = new List<Dt_Packaxis>();
|
if (dtExcel == null || dtExcel.Rows.Count == 0)
|
{
|
return content.Error("未找到数据请检查Excel表格数据格式是否正确!");
|
}
|
for (int i = 0; i < dtExcel.Rows.Count; i++)
|
{
|
DataRow row = dtExcel.Rows[i];
|
string id = row["id"]?.ToString() ?? string.Empty;
|
string DeviceCode = row["DeviceCode"]?.ToString() ?? string.Empty;
|
string StationCode = row["StationCode"]?.ToString() ?? string.Empty;
|
int PackType = row["PackType"].ObjToInt();
|
string PackNum = row["PackNum"]?.ToString() ?? string.Empty;
|
string AxisX = row["AxisX"]?.ToString() ?? string.Empty;
|
string AxisXCount = row["AxisXCount"]?.ToString() ?? string.Empty;
|
string AxisXSpacing = row["AxisXSpacing"]?.ToString() ?? string.Empty;
|
string AxisY = row["AxisY"]?.ToString() ?? string.Empty;
|
string AxisYCount = row["AxisYCount"]?.ToString() ?? string.Empty;
|
string AxisYSpacing = row["AxisYSpacing"]?.ToString() ?? string.Empty;
|
string AxisZ = row["AxisZ"]?.ToString() ?? string.Empty;
|
string AxisZCount = row["AxisZCount"]?.ToString() ?? string.Empty;
|
string AxisZSpacing = row["AxisZSpacing"]?.ToString() ?? string.Empty;
|
var axis = BaseDal.QueryFirst(x => x.DeviceCode == DeviceCode && x.StationCode == StationCode && x.PackType == PackType);
|
if (axis == null)
|
if (axis == null)
|
{
|
Dt_Packaxis packaxis = new Dt_Packaxis()
|
{
|
DeviceCode = DeviceCode,
|
StationCode = StationCode,
|
PackType = PackType,
|
PackNum = Convert.ToInt32(PackNum),
|
AxisX = Convert.ToInt32(AxisX),
|
AxisXCount = Convert.ToInt32(AxisXCount),
|
AxisXSpacing = Convert.ToInt32(AxisXSpacing),
|
AxisY = Convert.ToInt32(AxisY),
|
AxisYCount = Convert.ToInt32(AxisYCount),
|
AxisYSpacing = Convert.ToInt32(AxisYSpacing),
|
AxisZ = Convert.ToInt32(AxisZ),
|
AxisZCount = Convert.ToInt32(AxisZCount),
|
AxisZSpacing = Convert.ToInt32(AxisZSpacing),
|
Creater = App.User.UserId > 0 ? App.User.UserName : "System",
|
CreateDate = DateTime.Now
|
};
|
addAxis.Add(packaxis);
|
}
|
else
|
{
|
axis.DeviceCode = DeviceCode;
|
axis.StationCode = StationCode;
|
axis.PackType = PackType;
|
axis.PackNum = Convert.ToInt32(PackNum);
|
axis.AxisX = Convert.ToInt32(AxisX);
|
axis.AxisXCount = Convert.ToInt32(AxisXCount);
|
axis.AxisXSpacing = Convert.ToInt32(AxisXSpacing);
|
axis.AxisY = Convert.ToInt32(AxisY);
|
axis.AxisYCount = Convert.ToInt32(AxisYCount);
|
axis.AxisYSpacing = Convert.ToInt32(AxisYSpacing);
|
axis.AxisZ = Convert.ToInt32(AxisZ);
|
axis.AxisZCount = Convert.ToInt32(AxisZCount);
|
axis.AxisZSpacing = Convert.ToInt32(AxisZSpacing);
|
axis.Modifier = App.User.UserId > 0 ? App.User.UserName : "System";
|
axis.ModifyDate = DateTime.Now;
|
updateAxis.Add(axis);
|
}
|
}
|
BaseDal.AddData(addAxis);
|
BaseDal.UpdateData(updateAxis);
|
|
content = WebResponseContent.Instance.OK("导入成功!");
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
|
return content;
|
}
|
/// <summary>
|
/// 添加坐标数据
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public override WebResponseContent AddData(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
string json = JsonConvert.SerializeObject(saveModel.MainData);
|
Dt_Packaxis dt_Pack = JsonConvert.DeserializeObject<Dt_Packaxis>(json);
|
Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == dt_Pack.StationCode && x.StackerCraneCode == dt_Pack.DeviceCode);
|
Dt_PackType packTyp = _packTypeRepository.QueryFirst(x => x.Id == dt_Pack.PackType);
|
|
int w = 1200;//这个是码垛托盘宽1.2米
|
int h = 1500;//托盘的高度限高1.5米
|
int AxisXCountMax = w / packTyp.PackLength;//X坐标最多放码垛数量
|
int AxisYCountMax = w / packTyp.PackWidth;//Y坐标最多放码垛数量
|
int AxisZCountMax = h / packTyp.PackHeight;//Z坐标最多放码垛数量
|
|
|
if (dt_Pack.AxisXCount <= 0 || dt_Pack.AxisXCount > AxisXCountMax || dt_Pack.AxisYCount <= 0 || dt_Pack.AxisYCount > AxisYCountMax || dt_Pack.AxisZCount <= 0 || dt_Pack.AxisZCount > AxisZCountMax)
|
{
|
return WebResponseContent.Instance.Error($"添加失败,请输入X坐标码垛数大于0且小于{AxisXCountMax + 1}且Y坐标码垛数大于0且小于{AxisYCountMax + 1}且Z坐标码垛数大于0且小于{AxisZCountMax + 1}");
|
}
|
|
if (stationManger.IsNullOrEmpty())
|
{
|
return WebResponseContent.Instance.Error($"添加失败,该码垛机器输送线工位选错!");
|
}
|
|
Dt_Packaxis packaxis = BaseDal.QueryFirst(x => x.DeviceCode == dt_Pack.DeviceCode && x.StationCode == dt_Pack.StationCode && x.PackType == dt_Pack.PackType);
|
|
|
|
if (packaxis.IsNullOrEmpty())
|
{
|
|
saveModel.MainData["PackNum"] = dt_Pack.AxisXCount * dt_Pack.AxisYCount * dt_Pack.AxisZCount;
|
|
return base.AddData(saveModel);
|
}
|
return WebResponseContent.Instance.Error($"添加失败,该码垛坐标数据已存在!");
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
|
return content;
|
|
}
|
/// <summary>
|
/// 修改坐标数据
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public override WebResponseContent UpdateData(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
string json = JsonConvert.SerializeObject(saveModel.MainData);
|
Dt_Packaxis dt_Pack = JsonConvert.DeserializeObject<Dt_Packaxis>(json);
|
|
Dt_PackType packTyp = _packTypeRepository.QueryFirst(x => x.Id == dt_Pack.PackType);
|
|
int w = 1200;//这个是码垛托盘宽1.2米
|
int h = 1500;//托盘的高度限高1.5米
|
int AxisXCountMax = w / packTyp.PackLength;//X坐标最多放码垛数量
|
int AxisYCountMax = w / packTyp.PackWidth;//Y坐标最多放码垛数量
|
int AxisZCountMax = h / packTyp.PackHeight;//Z坐标最多放码垛数量
|
|
|
if (dt_Pack.AxisXCount <= 0 || dt_Pack.AxisXCount > AxisXCountMax || dt_Pack.AxisYCount <= 0 || dt_Pack.AxisYCount > AxisYCountMax || dt_Pack.AxisZCount <= 0 || dt_Pack.AxisZCount > AxisZCountMax)
|
{
|
return WebResponseContent.Instance.Error($"修改失败,请输入X坐标码垛数大于0且小于{AxisXCountMax + 1}且Y坐标码垛数大于0且小于{AxisYCountMax + 1}且Z坐标码垛数大于0且小于{AxisZCountMax + 1}");
|
}
|
|
Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == dt_Pack.StationCode && x.StackerCraneCode == dt_Pack.DeviceCode);
|
if (stationManger.IsNullOrEmpty())
|
{
|
return WebResponseContent.Instance.Error($"修改失败,该码垛机器输送线工位选错!");
|
}
|
Dt_Packaxis packaxis = BaseDal.QueryFirst(x => x.Id != dt_Pack.Id && x.DeviceCode == dt_Pack.DeviceCode && x.StationCode == dt_Pack.StationCode && x.PackType == dt_Pack.PackType);
|
if (packaxis.IsNullOrEmpty())
|
{
|
|
saveModel.MainData["PackNum"] = dt_Pack.AxisXCount * dt_Pack.AxisYCount * dt_Pack.AxisZCount;
|
|
return base.UpdateData(saveModel);
|
}
|
|
return WebResponseContent.Instance.Error($"修改失败,该码垛坐标数据已存在!");
|
}
|
catch (Exception ex)
|
{
|
content = WebResponseContent.Instance.Error(ex.Message);
|
}
|
|
return content;
|
|
}
|
}
|
}
|