using Admin.NET.Core.Service;
using Admin.NET.Application.Entity;
using Microsoft.AspNetCore.Http;
using System.Data;
using System.Web;
using System.Text;
using DocumentFormat.OpenXml.Office.CustomUI;
namespace Admin.NET.Application;
///
/// 跟踪码打印记录服务
///
[ApiDescriptionSettings(ApplicationConst.PrintCenterGroupName, Order = 100)]
public class WmsRecordSncodePrintService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _rep;
private readonly SqlSugarRepository _WmsOrderAsnDetailsRep;
private readonly SqlSugarRepository _wmsMaterialRep;
public WmsRecordSncodePrintService(
SqlSugarRepository wmsMaterialRep,
SqlSugarRepository rep,
SqlSugarRepository wmsOrderAsnDetailsRep)
{
_wmsMaterialRep = wmsMaterialRep;
_rep = rep;
_WmsOrderAsnDetailsRep = wmsOrderAsnDetailsRep;
}
///
/// 分页查询跟踪码打印记录
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
[Description("WmsRecordSncodePrint/Page")]
public async Task> Page(WmsRecordSncodePrintInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "Id").ToPagedListAsync(input.Page, input.PageSize);
}
///
/// 不分页查询跟踪码打印记录
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
[Description("WmsRecordSncodePrint/List")]
public async Task> List([FromQuery] WmsRecordSncodePrintInput input)
{
var query = CommonPageFilter(input);
return await query.OrderBuilder(input, "", "Id").Select().ToListAsync();
}
///
/// 增加跟踪码打印记录
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Add")]
[Description("WmsRecordSncodePrint/Add")]
public async Task Add(List input)
{
//------------ly asn单打印 查找关联单号 关联行号-----------
List handleListAsn = new List();
List queryCodeListForAsn = input.Select(v => v.SNCode).Distinct().ToList();
//ly 特殊情况: 跟踪码是拆分物料 HB_ 开头
if (queryCodeListForAsn.Count > 0)
{
handleListAsn = await _WmsOrderAsnDetailsRep.GetListAsync(u => queryCodeListForAsn.Contains(u.SN_1d) || queryCodeListForAsn.Contains(u.SN_2d));
}
//--------------ly asn单打印 查找关联单号 关联行号----------
WmsOrderAsnDetails itemForWlcf = new WmsOrderAsnDetails(); //物料拆分 存值用
WmsOrderAsnDetails itemForWlhb = new WmsOrderAsnDetails();//物料合并 存值用
//---------------物料拆分 物料合并 能从asn单中查到的值
foreach (var w in input)
{
//物料拆分 关联单号 关联行号赋值相同的值
if (w.TypeForPda == 1)
{
w.PrintSource = PrintSourceEnum.物料拆分打印;
if (handleListAsn.Count == 1)
{
itemForWlcf = handleListAsn.FirstOrDefault();
}
}
//物料合并
if (w.TypeForPda == 2)
{
w.PrintSource = PrintSourceEnum.物料合并打印;
}
}
//---------------物料拆分 物料合并
var warehousOrderDetails1 = input.Adapt>();
foreach (var w in warehousOrderDetails1)
{
if (w.PrintSheetNum == 0)
{
w.PrintSheetNum = 1;
}
if (w.PrintSource == PrintSourceEnum.ASN单跟踪码打印)
{
var items = handleListAsn.FirstOrDefault(x => x.SN_1d == w.SNCode || x.SN_2d == w.SNCode);
if (items != null)
{
w.OrderNo = items.AsnNo;
w.RelationNo = items.PoNo;
w.RelationNoLineNumber = items.PoLineNumber;
w.OrderNoLineNumber = items.AsnLineNumber;
}
}
else
{
if (w.PrintType == PrintTypeEnum.物料跟踪码)
{
if (itemForWlcf != null)
{
w.OrderNo = itemForWlcf.AsnNo;
w.RelationNo = itemForWlcf.PoNo;
w.RelationNoLineNumber = itemForWlcf.PoLineNumber;
w.OrderNoLineNumber = itemForWlcf.AsnLineNumber;
}
else
{
//物料合并 无单号行号
w.OrderNo = "";
w.RelationNo = "";
w.RelationNoLineNumber = "";
w.OrderNoLineNumber = "";
}
}
if (w.MaterialCode == null)
{
throw Oops.Oh("创建失败:物料不能为空");
}
if (w.Quantity == 0)
{
throw Oops.Oh("创建失败:数量需要大于0");
}
w.PrintStatus = PrintStatuEnum.未打印;
//验证
if (w.PrintType == PrintTypeEnum.看板卡)
{
if (w.Quantity == 0)
{
throw Oops.Oh("创建失败:数量需要大于0");
}
if (w.KanBanCardNo == null)
{
throw Oops.Oh("创建失败:看板卡号不能为空");
}
//查询单位
var material = await _wmsMaterialRep.GetFirstAsync(x => x.MaterialCode == w.MaterialCode);
if (material == null)
{
throw Oops.Oh($"创建失败:物料{w.MaterialCode}信息不存在");
}
w.MaterialUnit = material.MaterialUnit;
w.POUnit = material.POUnit;
w.SNCode = " ";
}
else if (w.PrintType == PrintTypeEnum.物料跟踪码)
{
if (w.MaterialUnit == null)
{
throw Oops.Oh("创建失败:单位不能为空");
}
if (w.SNCode == null)
{
throw Oops.Oh("创建失败:跟踪码不能为空");
}
}
}
}
try
{
await _rep.AsTenant().BeginTranAsync();
await _rep.InsertRangeAsync(warehousOrderDetails1); //插入
await _rep.AsTenant().CommitTranAsync();
}
catch
{
await _rep.AsTenant().RollbackTranAsync();
throw;
}
return 200;
}
///
/// 删除跟踪码打印记录
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
[Description("WmsRecordSncodePrint/Delete")]
public async Task Delete(DeleteWmsRecordSncodePrintInput input)
{
var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
//await _rep.FakeDeleteAsync(entity); //假删除
await _rep.DeleteAsync(entity); //真删除
}
///
/// 更新跟踪码打印记录
///
///
///
[HttpPost]
[ApiDescriptionSettings(Name = "Update")]
[Description("WmsRecordSncodePrint/Update")]
public async Task Update(UpdateWmsRecordSncodePrintInput input)
{
throw Oops.Oh($"该方法不支持");
var entity = input.Adapt();
//重复性验证
await CheckExist(entity, true);
await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
///
/// 获取跟踪码打印记录
///
///
///
[HttpGet]
[ApiDescriptionSettings(Name = "Detail")]
[Description("WmsRecordSncodePrint/Detail")]
public async Task Detail([FromQuery] QueryByIdWmsRecordSncodePrintInput input)
{
return await _rep.GetFirstAsync(u => u.Id == input.Id);
}
#region 私有方法
///
/// 公共查询跟踪码打印记录条件
///
///
///
private ISugarQueryable CommonPageFilter(WmsRecordSncodePrintInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.MaterialCode.Contains(input.SearchKey.Trim())
|| u.MaterialName.Contains(input.SearchKey.Trim())
|| u.PlaceCode.Contains(input.SearchKey.Trim())
|| u.PlaceName.Contains(input.SearchKey.Trim())
|| u.SNCode.Contains(input.SearchKey.Trim())
|| u.MaterialUnit.Contains(input.SearchKey.Trim())
|| u.OrderNo.Contains(input.SearchKey.Trim())
|| u.RelationNo.Contains(input.SearchKey.Trim())
|| u.OrderNoLineNumber.Contains(input.SearchKey.Trim())
|| u.RelationNoLineNumber.Contains(input.SearchKey.Trim())
|| u.Remarks.Contains(input.SearchKey.Trim())
|| u.CreateUserName.Contains(input.SearchKey.Trim())
|| u.UpdateUserName.Contains(input.SearchKey.Trim())
)
.WhereIF(input.PrintType.HasValue, u => u.PrintType == input.PrintType)
.WhereIF(!string.IsNullOrWhiteSpace(input.MaterialCode), u => u.MaterialCode.Contains(input.MaterialCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.MaterialName), u => u.MaterialName.Contains(input.MaterialName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.PlaceCode), u => u.PlaceCode.Contains(input.PlaceCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.PlaceName), u => u.PlaceName.Contains(input.PlaceName.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.SNCode), u => u.SNCode.Contains(input.SNCode.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.MaterialUnit), u => u.MaterialUnit.Contains(input.MaterialUnit.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.RelationNo), u => u.RelationNo.Contains(input.RelationNo.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.OrderNoLineNumber), u => u.OrderNoLineNumber.Contains(input.OrderNoLineNumber.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.RelationNoLineNumber), u => u.RelationNoLineNumber.Contains(input.RelationNoLineNumber.Trim()))
.WhereIF(input.PrintSheetNum > 0, u => u.PrintSheetNum == input.PrintSheetNum)
.WhereIF(input.PrintNum > 0, u => u.PrintNum == input.PrintNum)
.WhereIF(input.PrintStatus.HasValue, u => u.PrintStatus == input.PrintStatus)
.WhereIF(input.IsAllowPrint.HasValue, u => u.IsAllowPrint == input.IsAllowPrint)
.WhereIF(!string.IsNullOrWhiteSpace(input.Remarks), u => u.Remarks.Contains(input.Remarks.Trim()))
.Select();
return query;
}
///
/// 重复性验证
///
/// 验证对象
/// 是否是编辑
///
private async Task CheckExist(WmsRecordSncodePrint input, bool isEdit = false)
{
//没有配置组合校验,不需要验重
//没有配置单独校验,不需要验重
}
///
/// 根据组合校验和单独校验验证数据是否已存在-导入时验证
///
///
///
private async Task CheckExisitForImport(List inputs)
{
if (inputs?.Count <= 0)
{
throw Oops.Oh($"导入数据不能为空");
}
//根据组合校验验证表格中中是否已存在相同数据
//根据单独校验验证表格中中是否已存在相同数据
}
#endregion
}