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 repository) { _db = repository.AsSugarClient(); } /// /// 载具查询接口 /// /// /// [HttpPost] public async Task MESCarryQuery(MESCarryQueryInput input) { if (input.IsNull()) throw new ArgumentNullException("input"); var data = new List(); try { var carrys = await _db.Queryable() .InnerJoin((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>(); } catch (Exception) { await _db.Ado.RollbackTranAsync(); } return data; } /// /// 载具查询返回接口 /// /// /// [HttpPost] //[NonUnify] public async Task MESCarryQueryResult(MESCarryQueryResultInput input) { if (input.IsNull()) throw new ArgumentNullException("input"); var data = new CarryQueryOutput(); try { var carry = await _db.Queryable().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().Where(it => it.carry_id == carry.id).ToListAsync(); var mCarryIdDic = carryDsLst.ToDictionary(x => x.membercarry_id, x => x.membercarry_code); //var mIds = mCarryIdDic.Keys; Expression> whereExp = carry.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID && carryDsLst?.Count > 0 ? a => mCarryIdDic.Keys.Contains(a.carry_id) : a => a.carry_id == carry.id; var carryCodes = await _db.Queryable().LeftJoin((a, b) => a.carry_id == b.carry_id) .Where(whereExp) .Select((a, b) => new WmsCarryCode { is_check = SqlFunc.Subqueryable().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 < mCarryIdDic.Keys.Count) throw new AppFriendlyException("载具条码数据异常,有料箱为空", 500); var i = 0; foreach (var (_, v) in mCarryIdDic) { carryCodes[i].member_carrycode = v ?? string.Empty; i++; } //for (int i = 0, cnt = mCarryIdDic.Keys.Count; i < cnt; i++) //{ // carryCodes[i].member_carrycode = carryDsLst.Find(x => x.membercarry_id == mIds[i])?.membercarry_code ?? string.Empty; //} } data = carry.Adapt(); data.wmsCarryCodes = carryCodes.Adapt>(); } catch (Exception) { await _db.Ado.RollbackTranAsync(); throw; } return data; } } }