|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using Estsh.Core.Base;
|
|
|
using Estsh.Core.Wms.IRepositories;
|
|
|
using Estsh.Core.Wms.IServices;
|
|
|
using Estsh.Core.Model.Result;
|
|
|
using Estsh.Core.Services;
|
|
|
using Estsh.Core.Repositories;
|
|
|
using Estsh.Core.Models;
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
using static Estsh.Core.Model.EnumUtil.WmsEnumUtil;
|
|
|
using Estsh.Core.Model.EnumUtil;
|
|
|
|
|
|
namespace Estsh.Core.Wms.Services
|
|
|
{
|
|
|
public class NcConcessionService : BaseService<BaseEntity>, INcConcessionService
|
|
|
{
|
|
|
private readonly INcConcessionRepository repository;
|
|
|
private readonly IMoveOrderRepository moveOrderRepository;
|
|
|
private readonly IStockRepository stockRepository;
|
|
|
|
|
|
public NcConcessionService(INcConcessionRepository _repository,
|
|
|
IMoveOrderRepository _moveOrderRepository, IStockRepository _stockRepository) : base(_repository)
|
|
|
{
|
|
|
this.repository = _repository;
|
|
|
this.moveOrderRepository = _moveOrderRepository;
|
|
|
this.stockRepository = _stockRepository;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 检查库位是否可操作
|
|
|
/// </summary>
|
|
|
/// <param name="locateName"></param>
|
|
|
/// <returns></returns>
|
|
|
public string CheckLocateInfo(string locateName)
|
|
|
{
|
|
|
SysLocate locate = repository.GetLocateInfo(locateName);
|
|
|
if (locate == null)
|
|
|
{
|
|
|
return "库位不存在,请检查!";
|
|
|
}
|
|
|
if (locate.Enabled.Equals(Enabled.N))
|
|
|
{
|
|
|
return "库位已禁用,不能使用!";
|
|
|
}
|
|
|
if (locate.LocateType == (int)LocateType.BASICS_LOCATE
|
|
|
|| locate.LocateType == (int)LocateType.MANEUVER_LOCATE
|
|
|
|| locate.LocateType == (int)LocateType.COMBINATION_LOCATE)
|
|
|
{
|
|
|
return "SCAN_OK";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return "库位类型不符合,请检查!";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 处理扫描的箱条码
|
|
|
/// </summary>
|
|
|
/// <param name="cartonNo"></param>
|
|
|
/// <param name="orderNo"></param>
|
|
|
/// <param name="loginId"></param>
|
|
|
/// <returns></returns>
|
|
|
public string DoCanton(string cartonNo, string locateName, string orderNo, string loginId)
|
|
|
{
|
|
|
SysStock cartonInfo = stockRepository.GetCartonInfo(cartonNo);
|
|
|
|
|
|
if (cartonInfo == null)
|
|
|
{
|
|
|
return "包装条码不存在,请检查!";
|
|
|
}
|
|
|
if (cartonInfo.Enabled.Equals(Enabled.N))
|
|
|
{
|
|
|
return "包装条码已被冻结,不允许此操作!";
|
|
|
}
|
|
|
if (cartonInfo.Status != (int)StockStatus.NC_INSTOCK)
|
|
|
{
|
|
|
return "包装条码状态不是NC状态,不允许此操作!";
|
|
|
}
|
|
|
if (cartonInfo.Qty == 0)
|
|
|
{
|
|
|
return "包装条码数量为0,禁止操作!";
|
|
|
}
|
|
|
SysLocate locateInfo = repository.GetLocateInfo(locateName);
|
|
|
if (locateInfo.LocateType == (int)LocateType.BASICS_LOCATE)
|
|
|
{
|
|
|
SysLocatePart locatePart = repository.GetLocatePartInfo(locateName);
|
|
|
if (locatePart == null)
|
|
|
{
|
|
|
return "库位为基础库位,未维护对应的零件!";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (cartonInfo.PartId != locatePart.PartId)
|
|
|
{
|
|
|
return "库位为基础库位,扫描的包装信息与库位对应的零件不符!";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (locateInfo.LocateType == (int)LocateType.MANEUVER_LOCATE)
|
|
|
{
|
|
|
List<SysStock> sysStocks = stockRepository.GetLocateStockInfo(locateName);
|
|
|
if (sysStocks != null && sysStocks.FindIndex(a => a.PartId == cartonInfo.PartId) < 0)
|
|
|
{
|
|
|
return "库位为机动库位,扫描的包装信息与库位现有库存对应的零件不符!";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<WmsMoveDetail> moveDetails = moveOrderRepository.GetMoveDetailList(orderNo);
|
|
|
WmsMoveDetail? moveDetail = moveDetails.SingleOrDefault(x => x.PartId == cartonInfo.PartId);
|
|
|
if (moveDetail == null)
|
|
|
{
|
|
|
return "订单中不包含包装条码对应零件,不允许此操作!";
|
|
|
}
|
|
|
if (moveDetail.Qty <= moveDetail.PickQty)
|
|
|
{
|
|
|
return "此零件对应的订单数量已满,无法再扫描!";
|
|
|
}
|
|
|
if (moveDetail.Qty < moveDetail.PickQty + cartonInfo.Qty)
|
|
|
{
|
|
|
return "箱包装数量大于订单中此零件的剩余待处理数量!";
|
|
|
}
|
|
|
|
|
|
List<WmsMoveSn> moveSns = moveOrderRepository.GetMoveSnList(orderNo);
|
|
|
List<WmsMoveSn> moveSnCreates = moveSns.Where(x => x.Status == (int)MoveOrderSnStatus.CREATE).ToList();
|
|
|
|
|
|
WmsMoveSn? moveSn = null;
|
|
|
if (moveSnCreates != null && moveSnCreates.Count > 0)
|
|
|
{
|
|
|
moveSn = moveSnCreates.SingleOrDefault(x => x.CartonNo.Equals(cartonInfo.CartonNo));
|
|
|
if (moveSn == null)
|
|
|
{
|
|
|
return "订单中不包含此包装条码,不允许此操作!";
|
|
|
}
|
|
|
}
|
|
|
string result = string.Empty;
|
|
|
|
|
|
if (repository.DoCarton(cartonInfo, locateInfo, moveDetail, moveSn, loginId))
|
|
|
{
|
|
|
result = this.SubmitOrder(orderNo, loginId);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = "操作失败,请重新尝试!";
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 提交单据
|
|
|
/// </summary>
|
|
|
/// <param name="orderNo"></param>
|
|
|
/// <param name="loginId"></param>
|
|
|
/// <returns></returns>
|
|
|
public string SubmitOrder(string orderNo,string loginId)
|
|
|
{
|
|
|
string result = string.Empty;
|
|
|
List<WmsMoveDetail> moveDetails = moveOrderRepository.GetMoveDetailList(orderNo);
|
|
|
var moveDetailsExist = moveDetails.Where(a => a.Qty > a.PickQty).ToList();
|
|
|
if (moveDetailsExist == null || moveDetailsExist.Count == 0)
|
|
|
{
|
|
|
// 完成单据并提交接口
|
|
|
if (moveOrderRepository.OrderComplete(orderNo, loginId))
|
|
|
{
|
|
|
repository.InsertInterfaceByNCConcession(orderNo);//添加到接口表
|
|
|
result = "ORDER_COMPLETED";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = "操作失败,请重新尝试!";
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
result = "SCAN_OK";
|
|
|
//提交接口
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|