Files
tnb.server/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryQueryService.cs
2023-08-21 17:51:04 +08:00

109 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Aop.Api.Domain;
using JNPF.Common.Extension;
using JNPF.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Org.BouncyCastle.Crypto;
using SqlSugar;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Dto.Outputs;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
public class WmsCarryQueryService : BaseWareHouseService, IWmsCarryQueryService
{
private readonly ISqlSugarClient _db;
public WmsCarryQueryService(ISqlSugarRepository<WmsCarryH> repository)
{
_db = repository.AsSugarClient();
}
/// <summary>
/// 载具查询接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<dynamic> MESCarryQuery(MESCarryQueryInput input)
{
if (input.IsNull()) throw new ArgumentNullException("input");
var data = new List<CarryQueryOutput>();
try
{
var carrys = await _db.Queryable<WmsCarryH>()
.InnerJoin<WmsCollocationSchemeH>((a, b) => a.collocation_scheme_id == b.id)
.Where((a, b) => a.carry_code.Contains(input.carry_code) || b.bill_name.Contains(input.collocation_scheme_name))
.ToListAsync();
data = carrys.Adapt<List<CarryQueryOutput>>();
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
}
return data;
}
/// <summary>
/// 载具查询返回接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
//[NonUnify]
public async Task<dynamic> MESCarryQueryResult(MESCarryQueryResultInput input)
{
if (input.IsNull()) throw new ArgumentNullException("input");
var data = new CarryQueryOutput();
try
{
var carry = await _db.Queryable<WmsCarryH>().FirstAsync(a => a.carry_code == input.carry_code && a.status == 1);
if (carry.IsNull()) throw new AppFriendlyException($"编号{input.carry_code},对应载具不存在或被禁用", 500);
var carryDsLst = await _db.Queryable<WmsCarryD>().Where(it => it.carry_id == carry.id).ToListAsync();
var mIds = carryDsLst.Select(it => it.membercarry_id).ToList();
Expression<Func<WmsCarryCode, bool>> whereExp = carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && carryDsLst?.Count > 0
? a => mIds.Contains(a.carry_id)
: a => a.carry_id == carry.id;
var carryCodes = await _db.Queryable<WmsCarryCode>().LeftJoin<WmsInstockH>((a, b) => a.carry_id == b.carry_id)
.Where(whereExp)
.Select((a, b) => new WmsCarryCode
{
is_check = SqlFunc.Subqueryable<WmsCarryH>().Where(it => it.id == a.carry_id).Select(it => it.is_check),
instock_time = b.create_time,
}, true)
.Mapper(a => a.check_conclusion = a.is_check == 1 ? "合格" : "不合格")
.ToListAsync();
if (carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && carryDsLst?.Count > 0)
{
if (carryCodes.Count < mIds.Count) throw new AppFriendlyException("载具条码数据异常,有料箱为空", 500);
for (int i = 0, cnt = mIds.Count; i < cnt; i++)
{
carryCodes[i].member_carrycode = carryDsLst.Find(x => x.membercarry_id == mIds[i])?.membercarry_code ?? string.Empty;
}
}
data = carry.Adapt<CarryQueryOutput>();
data.wmsCarryCodes = carryCodes.Adapt<List<CarryCodeQueryOutput>>();
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
throw;
}
return data;
}
}
}