using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using JNPF.Common.Contracts;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.FriendlyException;
using JNPF.Systems.Interfaces.System;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.Operations;
using SqlSugar;
using Tnb.BasicData.Entities;
using Tnb.WarehouseMgr.Entities;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Dto;
using Tnb.WarehouseMgr.Entities.Dto.Inputs;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Interfaces;
namespace Tnb.WarehouseMgr
{
///
/// 出库签收
///
public class WmsSignForDeliveryService : BaseWareHouseService, IWmsSignForDeliveryService
{
private readonly ISqlSugarClient _db;
private readonly IWmsCarryService _wareCarryService;
private readonly IDictionaryDataService _dictionaryDataService;
private readonly IWmsCarryMoveInStockService _wmsCarryMoveInStockService;
private static Dictionary _dicBizType = new();
public WmsSignForDeliveryService(ISqlSugarRepository repository, IWmsCarryService wareCarryService, IDictionaryDataService dictionaryDataService, IWmsCarryMoveInStockService wmsCarryMoveInStockService)
{
_db = repository.AsSugarClient();
_wareCarryService = wareCarryService;
_dictionaryDataService = dictionaryDataService;
_wmsCarryMoveInStockService = wmsCarryMoveInStockService;
}
///
/// 根据载具ID获取,对应的执行任务记录
///
///
///
[HttpGet]
public async Task GetDisTasksByCarryId([FromRoute] string carryId)
{
var item = await _db.Queryable().FirstAsync(it => it.carry_id == carryId && it.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && it.is_sign == 0);
return item;
}
///
/// 出库签收
///
///
[HttpPost]
public async Task SignForDelivery(SignForDeliveryInput input)
{
if (_dicBizType.Count < 1)
{
_dicBizType = await _dictionaryDataService.GetDictionaryByTypeId(WmsWareHouseConst.WMS_BIZTYPE_ID);
}
try
{
await _db.Ado.BeginTranAsync();
WmsCarryH? carry = null;
if (!input.carryId.IsNullOrWhiteSpace())
{
carry = await _db.Queryable().SingleAsync(it => it.id == input.carryId);
}
else
{
carry = await _db.Queryable().SingleAsync(it => it.carry_code == input.carry_code);
}
if (carry != null)
{
if (carry?.location_id?.IsNotEmptyOrNull() ?? false)
{
var loc = await _db.Queryable().SingleAsync(it => it.id == carry.location_id);
loc.is_use = ((int)EnumCarryStatus.空闲).ToString();
await _db.Updateable(loc).UpdateColumns(it => it.is_use).ExecuteCommandAsync();
}
WmsDistaskH? disTask = null;
if (!input.disTaskId.IsNullOrEmpty())
{
disTask = await _db.Queryable().SingleAsync(it => it.id == input.disTaskId);
}
else if (!input.carryId.IsNullOrEmpty())
{
disTask = await _db.Queryable().FirstAsync(it => it.carry_id == input.carryId && it.is_sign == 0);
}
else if (!input.carry_code.IsNullOrEmpty())
{
disTask = await _db.Queryable().FirstAsync(it => it.carry_code == input.carry_code && it.is_sign == 0);
}
if (disTask != null)
{
if (_dicBizType.ContainsKey(disTask.biz_type))
{
WareHouseUpInput upInput = new()
{
loginType = "web",
bizTypeId = disTask.biz_type,
requireId = disTask!.require_id!,
carryIds = new List { input.carryId },
distaskCodes = input.distaskCodes
};
await DoUpdate(upInput); //回更业务
}
disTask.is_sign = 1;
await _db.Updateable(disTask).UpdateColumns(it => it.is_sign).ExecuteCommandAsync();
}
}
await _db.Ado.CommitTranAsync();
}
catch (Exception)
{
await _db.Ado.RollbackTranAsync();
throw;
}
}
///
/// MES调用载具签收接口
///
///
///
[HttpPost]
public async Task MESCarrySign(MESCarrySignInput input)
{
var isSuccessFul = false;
if (input.IsNull()) throw new ArgumentNullException("input");
var signInput = input.Adapt();
try
{
await SignForDelivery(signInput);
isSuccessFul = true;
}
catch (Exception)
{
isSuccessFul = false;
}
return isSuccessFul;
}
}
}