|
using AutoMapper;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.CommonEnum;
|
using WIDESEA_Common.OrderEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.CodeConfigEnum;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.Basic;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_ICheckRepository;
|
using WIDESEA_IInboundRepository;
|
using WIDESEA_IInboundService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_InboundService
|
{
|
public class ReceiveOrderDetailService : ServiceBase<Dt_ReceiveOrderDetail, IReceiveOrderDetailRepository>, IReceiveOrderDetailService
|
{
|
private readonly IMapper _mapper;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IInboundRepository _inboundRepository;
|
private readonly IBasicRepository _basicRepository;
|
private readonly ICheckOrderRepository _checkOrderRepository;
|
|
public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository) : base(BaseDal)
|
{
|
_mapper = mapper;
|
_unitOfWorkManage = unitOfWorkManage;
|
_inboundRepository = inboundRepository;
|
_basicRepository = basicRepository;
|
_checkOrderRepository = checkOrderRepository;
|
}
|
|
private static object _rowNoLocker = new object();
|
/// <summary>
|
/// 扫码添加收货单明细(单个)
|
/// </summary>
|
/// <param name="serNum">物料码</param>
|
/// <param name="orderNo">收货单号</param>
|
/// <returns></returns>
|
public WebResponseContent AddReceiveOrderDetail(string serNum, string orderNo)
|
{
|
try
|
{
|
Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderNo == orderNo);
|
if (receiveOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该收货单");
|
}
|
|
if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.Completed.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该单据已收货完成");
|
}
|
|
MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum);
|
|
Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode);
|
if (materielInfo == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该物料的信息");
|
}
|
|
Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo);
|
if (purchaseOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该采购单");
|
}
|
|
if (purchaseOrder.SupplierCode != receiveOrder.SuppliersId)
|
{
|
return WebResponseContent.Instance.Error($"供应商不一致,请新建收货单");
|
}
|
|
if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该采购单收货已完成");
|
}
|
|
List<Dt_PurchaseOrderDetail> purchaseOrderDetails = _inboundRepository.PurchaseOrderDetailRepository.QueryData(x => x.PurchaseOrderId == purchaseOrder.Id);
|
if (purchaseOrderDetails == null || purchaseOrderDetails.Count == 0)
|
{
|
return WebResponseContent.Instance.Error($"未找到该采购单明细数据");
|
}
|
|
Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrderDetails.FirstOrDefault(x => x.PurchaseDetailQuantity == model.Quantity && x.MaterielCode == model.MaterielCode && x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt());
|
if (purchaseOrderDetail == null)
|
{
|
if (purchaseOrderDetails.Count > 0)
|
{
|
return WebResponseContent.Instance.Error($"该明细收货已完成");
|
}
|
return WebResponseContent.Instance.Error($"未找到对应的采购单明细数据");
|
}
|
Dt_ReceiveOrderDetail detail = BaseDal.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
|
if (detail != null)
|
{
|
return WebResponseContent.Instance.Error($"该明细收货已完成");
|
}
|
|
lock (_rowNoLocker)
|
{
|
int rowNo = 0;
|
List<Dt_ReceiveOrderDetail> receiveOrderDetails = BaseDal.QueryData(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId);
|
if (receiveOrderDetails != null && receiveOrderDetails.Count > 0)
|
{
|
rowNo = receiveOrderDetails.Max(x => x.RowNo);
|
}
|
|
Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
|
{
|
PurchaseOrderNo = model.PurchaseOrderNo,
|
ReceivedQuantity = model.Quantity,
|
MaterielCode = model.MaterielCode,
|
LotNo = model.LotNo,
|
ReceiveOrderId = receiveOrder.ReceiveOrderId,
|
PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
|
IfInspection = materielInfo.IsCheck.ObjToInt(),
|
CurrCode = "",
|
PriceInTax = 0,
|
TaxRate = "",
|
RowNo = rowNo + 1,
|
Unit = purchaseOrderDetail.Unit
|
};
|
|
if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
|
{
|
receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
|
}
|
purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
|
|
_unitOfWorkManage.BeginTran();
|
BaseDal.AddData(receiveOrderDetail);
|
_inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
|
_inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
|
|
if (materielInfo.IsCheck == WhetherEnum.True)
|
{
|
Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
|
checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
|
checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
|
checkOrder.ScrappedQuantity = 0;
|
checkOrder.ReturnQuantity = 0;
|
checkOrder.DefectedQuantity = 0;
|
_checkOrderRepository.AddData(checkOrder);
|
}
|
|
_unitOfWorkManage.CommitTran();
|
return WebResponseContent.Instance.OK();
|
}
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
public WebResponseContent ScaninnerCode(string innerCode)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
var innerCodes = innerCode.Split(',');
|
var matCode = innerCodes.FirstOrDefault(x => x.Contains("M:"));//.Replace("M:", "");
|
if (matCode == null) throw new Exception("未获取到物料码");
|
var batchNo = innerCodes.FirstOrDefault(x => x.Contains("BS:"));//.Replace("BS:", "")
|
if (batchNo == null) throw new Exception("未获取到批次号");
|
var purchaseOrderNo = innerCodes.FirstOrDefault(x => x.Contains("PO:"));//.Replace("PO:", "")
|
if (purchaseOrderNo == null) throw new Exception("未获取到采购单号");
|
var qty = innerCodes.FirstOrDefault(x => x.Contains("Q:"));
|
if (qty == null) throw new Exception("未获取到数量");
|
InnerCodeDTO innerCodeDTO = new InnerCodeDTO()
|
{
|
matCode = matCode.Replace("M:", ""),
|
batchNo = batchNo.Replace("BS:", ""),
|
purchaseOrderNo = purchaseOrderNo.Replace("PO:", ""),
|
qty = Convert.ToInt32(qty.Replace("Q:", ""))
|
};
|
content.OK("扫描成功", data: innerCodeDTO);
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
public WebResponseContent GetReceiveOrderInfos(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
string searchValue = saveModel.MainData["searchValue"].ToString();
|
string orderNo = saveModel.MainData["orderNo"].ToString();
|
Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).First();
|
if (receiveOrder == null) throw new Exception($"未找到单据编号【{orderNo}】信息");
|
List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>();
|
if (string.IsNullOrEmpty(searchValue))
|
{
|
receiveOrderDetails = Db.Queryable<Dt_ReceiveOrderDetail>().Where(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId).ToList();
|
}
|
else
|
{
|
receiveOrderDetails = Db.Queryable<Dt_ReceiveOrderDetail>().Where(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId && x.MaterielCode == searchValue).ToList();
|
}
|
|
content.OK(data: receiveOrderDetails);
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
}
|
}
|