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.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_External.ERPService;
|
using WIDESEA_External.Model;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_ICheckRepository;
|
using WIDESEA_IInboundRepository;
|
using WIDESEA_IInboundService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_InboundService
|
{
|
public class ReceiveOrderService : ServiceBase<Dt_ReceiveOrder, IReceiveOrderRepository>, IReceiveOrderService
|
{
|
private readonly ICheckOrderRepository _checkOrderRepository;
|
private readonly IInboundRepository _inboundRepository;
|
private readonly IBasicRepository _basicRepository;
|
private readonly IInvokeERPService _invokeERPService;
|
|
public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal)
|
{
|
_checkOrderRepository = checkOrderRepository;
|
_inboundRepository = inboundRepository;
|
_basicRepository = basicRepository;
|
_invokeERPService = invokeERPService;
|
}
|
|
public override WebResponseContent AddData(SaveModel saveModel)
|
{
|
if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower()))
|
{
|
saveModel.MainData[nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower()] = ReceiveOrderStatusEnum.NotStarted.ObjToInt();
|
}
|
else
|
{
|
saveModel.MainData.Add(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower(), ReceiveOrderStatusEnum.NotStarted.ObjToInt());
|
}
|
if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower()))
|
{
|
saveModel.MainData[nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower()] = WhetherEnum.False.ObjToInt();
|
}
|
else
|
{
|
saveModel.MainData.Add(nameof(Dt_ReceiveOrder.UploadStatus).FirstLetterToLower(), WhetherEnum.False.ObjToInt());
|
}
|
if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower()))
|
{
|
saveModel.MainData[nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower()] = DateTime.Now;
|
}
|
else
|
{
|
saveModel.MainData.Add(nameof(Dt_ReceiveOrder.ReceiveDate).FirstLetterToLower(), DateTime.Now);
|
}
|
|
if (saveModel.MainData.TryGetValue(nameof(Dt_ReceiveOrder.SuppliersId).FirstLetterToLower(), out object? suppliersId) && suppliersId != null && !string.IsNullOrEmpty(suppliersId.ToString()))
|
{
|
Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()]));
|
if (receiveOrder != null && receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error("该供应商有未完成的收货单");
|
}
|
}
|
|
return base.AddData(saveModel);
|
}
|
|
public WebResponseContent FeedbackReceiveOrder(int orderId)
|
{
|
try
|
{
|
Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == orderId).Includes(x => x.Details).First();
|
if (receiveOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到收货单");
|
}
|
if (receiveOrder.Details == null || receiveOrder.Details.Count == 0)
|
{
|
return WebResponseContent.Instance.Error($"未找到收货单明细");
|
}
|
|
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId);
|
if (warehouse == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到仓库信息");
|
}
|
|
List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>();
|
foreach (var item in receiveOrder.Details)
|
{
|
RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel()
|
{
|
Currcode = "",
|
IfInspection = item.IfInspection,
|
Lotno = item.LotNo,
|
MaterialsId = item.MaterielCode,
|
PriceInTax = 0,
|
PurchaseOrderCode = item.PurchaseOrderNo,
|
PurchaseOrderSerno = item.PurchaseOrderDetailRowNo,
|
QtyReceived = item.ReceivedQuantity,
|
Serno = item.RowNo,
|
Supplotno = "",
|
Taxrate = ""
|
};
|
recevieOrderDetails.Add(recevieOrderDetail);
|
}
|
|
ERPReceiveModel receiveModel = new ERPReceiveModel()
|
{
|
Code = receiveOrder.ReceiveOrderNo,
|
CompanyId = "",
|
DeliveryCode = receiveOrder.DeliveryCode,
|
CustomerId = receiveOrder.CustomerId,
|
CreatorId = receiveOrder.CustomerId,
|
EndDate = receiveOrder.CreateDate,
|
ReceiveDate = receiveOrder.CreateDate,
|
PlantsId = "",
|
SuppliersId = receiveOrder.SuppliersId,
|
Type = "PO",
|
UniqueTag = receiveOrder.ReceiveOrderId.ToString(),
|
WarehouseCode = warehouse.WarehouseCode,
|
Way = 1,
|
Details = recevieOrderDetails
|
};
|
|
string response = _invokeERPService.InvokeMatReceiveApi(receiveModel);
|
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
|
public WebResponseContent CreateInboundOrder(int receiveOrderId)
|
{
|
try
|
{
|
Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First();
|
if (receiveOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"未找到该收货单信息");
|
}
|
if (receiveOrder.Details == null || receiveOrder.Details.Count() <= 0)
|
{
|
return WebResponseContent.Instance.Error($"未找到该收货单明细信息");
|
}
|
if (receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt())
|
{
|
return WebResponseContent.Instance.Error($"该收货单未完成");
|
}
|
|
List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
|
if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
|
{
|
return WebResponseContent.Instance.Error($"该收货单未质检完成");
|
}
|
|
if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
|
{
|
return WebResponseContent.Instance.Error($"该收货单质检结果审批未完成");
|
}
|
|
Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
|
{
|
UpperOrderNo = receiveOrder.ReceiveOrderNo,
|
CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
|
OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
|
OrderType = InOrderTypeEnum.Purchase.ObjToInt(),
|
WarehouseId = receiveOrder.WarehouseId,
|
SupplierId = receiveOrder.SuppliersId,
|
Details = new List<Dt_InboundOrderDetail>()
|
};
|
|
foreach (var item in receiveOrder.Details)
|
{
|
float quantity = item.ReceivedQuantity;
|
if (item.IfInspection == WhetherEnum.True.ObjToInt())
|
{
|
Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
|
if (checkOrder == null)
|
{
|
return WebResponseContent.Instance.Error($"质检单数据错误");
|
}
|
quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
|
}
|
Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail()
|
{
|
MaterielCode = item.MaterielCode,
|
OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
|
OrderQuantity = quantity,
|
OverInQuantity = 0,
|
ReceiptQuantity = 0,
|
RowNo = item.RowNo,
|
Unit = item.Unit,
|
BatchNo = item.LotNo
|
};
|
inboundOrder.Details.Add(detail);
|
}
|
|
_inboundRepository.InboundOrderRepository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
|
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
}
|
}
|