using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TouchSocket.Core;
using WCS.BLL.DbModels;
using WCS.BLL.Services.IService;
using WCS.DAL;
using WCS.DAL.Db;
using WCS.Model;
using WCS.Model.ApiModel;
using WCS.Model.ApiModel.MatBaseInfo;
using WCS.Model.ApiModel.User;
namespace WCS.BLL.Services.Service
{
///
/// 物料基础信息
///
public class MatBaseInfoService : IMatBaseInfoService
{
public MatBaseInfoService()
{
}
public async Task> getMatBaseInfo(GetMatBaseInfoRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.MatCode), t => t.MatCode.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.MatName), t => t.MatName.Contains(request.MatName))
.WhereIF(!string.IsNullOrEmpty(request.MatSpec), t => t.MatSpec.Contains(request.MatSpec))
.WhereIF(request.IsEnable != null, t => t.IsEnable == request.IsEnable.GetValueOrDefault());
var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
.ToListAsync();
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData()
{
TotalCount = totalCount,
MaxPage = request.PageSize == 0 ? 0 : (int)Math.Ceiling((decimal)totalCount / request.PageSize),
Count = records.Count,
Lists = records.ToList()
}
};
}
catch (Exception ex)
{
return new PageQueryResponse()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
public async Task> exportMatBaseInfo(GetMatBaseInfoRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable()
.WhereIF(!string.IsNullOrEmpty(request.MatCode), t => t.MatCode.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.MatName), t => t.MatName.Contains(request.MatName))
.WhereIF(!string.IsNullOrEmpty(request.MatSpec), t => t.MatSpec.Contains(request.MatSpec))
.WhereIF(request.IsEnable != null, t => t.IsEnable == request.IsEnable.GetValueOrDefault());
var records = await recordsQueryable.ToListAsync();
//生成序号
var index = 1;
records.ForEach(r =>
{
r.RowNumber = index++;
});
return new PageQueryResponse()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData()
{
Lists = records
}
};
}
catch (Exception ex)
{
return new PageQueryResponse()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
public async Task>> importMatBaseInfo(List lists, string userName, string deviceType)
{
//获取数据
#region 校验导入的编号是否重复
var matCodes = lists.Select(t => t.物料编码)
.ToList();
var duplicates = matCodes.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key).ToList();
//有重复的情况
if (duplicates.Count > 0)
{
return new ResponseCommon>()
{
Code = 201,
Message = "导入失败:文件中存在物料编码重复",
Data = duplicates
};
}
#endregion
#region 校验导入数据与数据库中数据是否有重复数据
duplicates = await DbHelp.db.Queryable()
.Where(t => matCodes.Contains(t.MatCode))
.Select(t => t.MatCode)
.ToListAsync();
//有重复的情况
if (duplicates.Count > 0)
{
return new ResponseCommon>()
{
Code = 201,
Message = "导入失败:以下物料编码已存在",
Data = duplicates
};
}
#endregion
#region 导入数据
try
{
await DbHelp.db.BeginTranAsync();
foreach (var mat in lists)
{
var matBaseInfo = new MatBaseInfo()
{
MatCode = mat.物料编码,
MatName = mat.名称,
MatSpec = mat.规格,
MatUnit = mat.单位,
MatCustomer = mat.客户,
ModifyUser = userName,
IsEnable = mat.状态 == "启用" ? true : false,
};
await DbHelp.db.Insertable(matBaseInfo).ExecuteCommandAsync();
}
await DbHelp.db.CommitTranAsync();
return new ResponseCommon>()
{
Code = 200,
Message = "导入数据成功",
Data = null
};
}
catch (Exception ex)
{
await DbHelp.db.RollbackTranAsync();
var ErrList = new List
{
ex.Message
};
return new ResponseCommon>()
{
Code = 200,
Message = "导入失败",
Data = ErrList
};
}
#endregion
}
public async Task> addOrUpdateMatBaseInfo(AddMatBaseInfoRequest request)
{
try
{
var matBaseInfo = await DbHelp.db.Queryable()
.Where(t => t.MatCode == request.MatBaseInfo.MatCode)
.FirstAsync();
//修改物料基础数据
if (request.AddOrUpdate == AddOrUpdate.Update)
{
if (matBaseInfo == null)
{
return new ResponseCommon