358 lines
17 KiB
C#
358 lines
17 KiB
C#
using Kingdee.CDP.WebApi.SDK;
|
||
using MyCode.Project.Domain.Message.Act.PurchaseOrder;
|
||
using MyCode.Project.Domain.Message.Common;
|
||
using MyCode.Project.Domain.Message.Request.InvoiceOrder;
|
||
using MyCode.Project.Domain.Message.Request.KingDee;
|
||
using MyCode.Project.Domain.Message.Request.PurchaseOrder;
|
||
using MyCode.Project.Domain.Message.Response.InvoiceOrder;
|
||
using MyCode.Project.Domain.Message.Response.PurchaseOrder;
|
||
using MyCode.Project.Domain.Message.Response.User;
|
||
using MyCode.Project.Domain.Model;
|
||
using MyCode.Project.Domain.Repositories;
|
||
using MyCode.Project.Infrastructure.Common;
|
||
using MyCode.Project.Infrastructure.Exceptions;
|
||
using MyCode.Project.Infrastructure.Extensions;
|
||
using MyCode.Project.OutSideService;
|
||
using MyCode.Project.Repositories;
|
||
using MyCode.Project.Repositories.Common;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Configuration;
|
||
using System.Linq;
|
||
using System.Runtime.CompilerServices;
|
||
|
||
namespace MyCode.Project.Services.Implementation
|
||
{
|
||
/// <summary>
|
||
/// 发货通知单 相关服务
|
||
/// </summary>
|
||
public class InvoiceOrderService : ServiceBase , IInvoiceOrderService
|
||
{
|
||
private IWorkProcessService _workProcessService;
|
||
private IKingDeeService _kingDeeService;
|
||
private IPurchaseOrderRepository _purchaseOrderRepository;
|
||
private IPurchaseOrderItemRepository _purchaseOrderItemRepository;
|
||
private IInvoiceOrderItemRepository _invoiceOrderItemRepository;
|
||
private IInvoiceOrderRepository _invoiceOrderRepository;
|
||
private ITiaoMaRepository _tiaoMaRepository;
|
||
|
||
public InvoiceOrderService(IPurchaseOrderRepository purchaseOrderRepository
|
||
, IPurchaseOrderItemRepository purchaseOrderItemRepository
|
||
, IInvoiceOrderItemRepository invoiceOrderItemRepository
|
||
, IInvoiceOrderRepository invoiceOrderRepository
|
||
, ITiaoMaRepository tiaoMaRepository
|
||
, IWorkProcessService workProcessService
|
||
, IKingDeeService kingDeeService)
|
||
{
|
||
_purchaseOrderItemRepository = purchaseOrderItemRepository;
|
||
_purchaseOrderRepository = purchaseOrderRepository;
|
||
_invoiceOrderItemRepository = invoiceOrderItemRepository;
|
||
_invoiceOrderRepository = invoiceOrderRepository;
|
||
_tiaoMaRepository = tiaoMaRepository;
|
||
_workProcessService = workProcessService;
|
||
_kingDeeService = kingDeeService;
|
||
}
|
||
|
||
#region GetPageList(发货通知单分页列表)
|
||
/// <summary>
|
||
/// 发货通知单分页列表
|
||
/// </summary>
|
||
/// <param name="pagedSearch"></param>
|
||
/// <param name="loginInfo"></param>
|
||
/// <returns></returns>
|
||
|
||
public PageResult<InvoiceOrderPageList> GetPageList(PagedSearch<InvoiceOrderPageSearch> pagedSearch, LoginInfo loginInfo)
|
||
{
|
||
return _invoiceOrderRepository.GetPageList(pagedSearch, loginInfo.SupplierId, loginInfo.FPurchaseOrgId);
|
||
}
|
||
#endregion
|
||
|
||
#region DeleteOrder(删除某个发货订单)
|
||
/// <summary>
|
||
/// 删除某个发货订单
|
||
/// </summary>
|
||
/// <param name="formId"></param>
|
||
/// <param name="billdelete"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="Exception"></exception>
|
||
[TransactionCallHandler]
|
||
public void DeleteOrder(IdAct act, LoginInfo loginInfo)
|
||
{
|
||
var orderItems = _invoiceOrderItemRepository.Queryable().Where(t => t.Id == act.Id).ToList();
|
||
Guid pid = orderItems.Select(t => t.InvoiceOrderId.Value).FirstOrDefault();
|
||
var orderHead = _invoiceOrderRepository.Queryable().Where(t => t.SupplierId == loginInfo.SupplierId && t.Id == pid).First();
|
||
var ids = orderItems.Select(t => t.Id).ToList();
|
||
|
||
if (orderHead == null)
|
||
{
|
||
throw new BaseException("订单数据不正确");
|
||
}
|
||
orderItems = _invoiceOrderItemRepository.Queryable().Where(t => t.InvoiceOrderId == orderHead.Id).ToList();
|
||
var OrderItemIds = orderItems.Select(t => t.PurchaseOrderItemId).ToList();
|
||
BillDelete billDelete = new BillDelete();
|
||
billDelete.Numbers = orderHead.FBillNo;
|
||
try
|
||
{
|
||
var result = _kingDeeService.Delete("PUR_ReceiveBill", billDelete);
|
||
//LogHelper.Info(result);
|
||
|
||
var purchaseItem = _purchaseOrderItemRepository.Queryable().Where(t => OrderItemIds.Contains(t.Id)).ToList();
|
||
purchaseItem.ForEach(t =>
|
||
{
|
||
var temp = orderItems.FirstOrDefault(h => h.PurchaseOrderItemId == t.Id);
|
||
if (temp != null)
|
||
{
|
||
t.FRemainReceiveQty = t.FRemainReceiveQty + temp.Qty.SafeValue();
|
||
t.FReceiveQty = t.FReceiveQty - temp.Qty.SafeValue();
|
||
}
|
||
});
|
||
_purchaseOrderItemRepository.Update(purchaseItem);
|
||
_invoiceOrderItemRepository.Delete(t => t.InvoiceOrderId == orderHead.Id);
|
||
_invoiceOrderRepository.Delete(t => t.Id == orderHead.Id);
|
||
|
||
_tiaoMaRepository.Delete(t => ids.Contains(t.InvoceOrderItemId.Value));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new BaseException($"删除失败,原因是{ex.Message}");
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
|
||
#region
|
||
/// <summary>
|
||
/// 根据收料通知单号查列表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string QueryList(string FbillNo, string FSupplierId)
|
||
{
|
||
BillQuery queryParam = new BillQuery();
|
||
queryParam = new BillQuery()
|
||
{
|
||
FormId = "PUR_ReceiveBill",
|
||
FieldKeys = $@"FID,FBillNo,FMaterialId.FNumber,FSupplierLot,FLot.fname,FSUPDELQTY,FDetailEntity_FEntryId",
|
||
TopRowCount = 100000,
|
||
Limit = 20000,
|
||
StartRow = 0,
|
||
};
|
||
FilterList filterString = new FilterList(false);
|
||
|
||
|
||
//FilterItem FDocumentStatusItem = new FilterItem("FBillNo", "67", "C", "0");
|
||
//FilterItem FCancelStatusItem = new FilterItem("FCancelStatus", "105", "A", "0");
|
||
FilterItem FCancelStatusItem1 = new FilterItem { FieldName = "FBillNo", Compare = "67", Value = FbillNo, Logic = "0" };
|
||
FilterItem FCancelStatusItem2 = new FilterItem { FieldName = "FSupplierId.FNumber", Compare = "67", Value = FSupplierId, Logic = "0" };
|
||
//FilterItem FCancelStatusItem3 = new FilterItem { FieldName = "FSupplierId.FNumber", Compare = "67", Value = FSupplierId.ToString(), Logic = "0" };
|
||
//FilterItem FCancelStatusItem4 = new FilterItem { FieldName = "FBaseDeliveryMaxQty", Compare = "21", Value = "0", Logic = "0" };
|
||
|
||
filterString.AddFilterItem(FCancelStatusItem1).AddFilterItem(FCancelStatusItem2);
|
||
////.AddFilterItem(FCancelStatusItem4)
|
||
//.AddFilterItem(FCancelStatusItem2).AddFilterItem(FCancelStatusItem3);
|
||
queryParam.FilterString = filterString.GetFilterString();
|
||
var result = _kingDeeService.QueryList(queryParam);
|
||
|
||
return result;
|
||
}
|
||
#endregion
|
||
|
||
#region SetMSSSupplierLot(查询金蝶的美塞斯批号)
|
||
/// <summary>
|
||
/// 写入金蝶的美塞斯批号
|
||
/// </summary>
|
||
/// <param name="sheet"></param>
|
||
/// <exception cref="BaseException"></exception>
|
||
public void SetMSSSupplierLot(string sheet)
|
||
{
|
||
var sheetOrder = _invoiceOrderRepository.Queryable().Where(t => t.Sheet == sheet).First();
|
||
if (sheetOrder == null)
|
||
return;
|
||
var result = QueryList(sheetOrder.FBillNo, sheetOrder.SupplierId);
|
||
LogHelper.Info(sheet + "的收料订单数据");
|
||
LogHelper.Info(result);
|
||
/**
|
||
* *
|
||
* [{"FID":100160,"FBillNo":"CGSL000148","FMaterialId.FNumber":"89833-001","FSupplierLot":"AA5","FLot.fname":"A1","FSUPDELQTY":100.0000000000,"FDetailEntity.FEntryId":100299}
|
||
* ,{"FID":100160,"FBillNo":"CGSL000148","FMaterialId.FNumber":"89834-002","FSupplierLot":"aa6","FLot.fname":"A2","FSUPDELQTY":100.0000000000,"FDetailEntity.FEntryId":100300}]
|
||
*
|
||
* */
|
||
List<dynamic> data = JsonHelper.ToObject<List<dynamic>>(result);
|
||
//List<dynamic> data = System.Text.Json.JsonSerializer.Deserialize<List<dynamic>>(result);
|
||
if (data.Count > 0)
|
||
{
|
||
int fid = 0;
|
||
Guid ida = Guid.Empty;
|
||
List<int> fids = data.Select(k => int.Parse((string)k["FID"])).ToList().Distinct().ToList();
|
||
|
||
var oldOrderItemList = _invoiceOrderItemRepository.Queryable().Where(g => g.InvoiceOrderId == sheetOrder.Id).ToList();
|
||
List<int?> entityIdList = new List<int?>();
|
||
|
||
foreach (var item in data)
|
||
{
|
||
int fido = int.Parse((string)item["FID"]);
|
||
string FSupplierLot = (string)item["FSupplierLot"];
|
||
if (string.IsNullOrWhiteSpace(FSupplierLot))
|
||
FSupplierLot = FSupplierLot.Trim();
|
||
else
|
||
FSupplierLot = "";
|
||
var oldItems = oldOrderItemList.Where(k => k.MaterialCode == (string)item["FMaterialId.FNumber"] && k.Qty == (decimal)item["FSUPDELQTY"]
|
||
).ToList();
|
||
var oldItem = oldItems.FirstOrDefault();
|
||
if (oldItems.Count > 1)
|
||
{
|
||
oldItem= oldItems.FirstOrDefault(h=>h.FSupplierLot== FSupplierLot);
|
||
}
|
||
if (oldItem == null)
|
||
{
|
||
//throw new BaseException((string)item["FMaterialId.FNumber"] + (decimal)item["FSUPDELQTY"] + item["FSupplierLot"] + "找不到对应的明细");
|
||
continue;
|
||
}
|
||
else
|
||
{
|
||
|
||
oldItem.Fid = item["FID"];
|
||
oldItem.MSSSupplierLot = item["FLot.fname"];
|
||
oldItem.EntityId = item["FDetailEntity.FEntryId"];
|
||
|
||
|
||
}
|
||
|
||
|
||
}
|
||
_invoiceOrderItemRepository.Update(oldOrderItemList);
|
||
//物料编码,数量,收料通知单号,供应商批号,key
|
||
//AddTiaoMa addTiao = new AddTiaoMa();
|
||
//List<AddTiaoMa> addTiaoMas = new List<AddTiaoMa>();
|
||
//addTiaoMas = oldOrderItemList.Select(t => new AddTiaoMa
|
||
//{
|
||
// FBarCode = $@"{t.MaterialCode}*{t.Qty.Value.ToString("F2")}*{sheetOrder.FBillNo}*{t.FSupplierLot}",
|
||
// FBarCodeRule = "03",
|
||
// FBillCode = sheetOrder.FBillNo,
|
||
// FSupplierLot = t.FSupplierLot == null ? "" : t.FSupplierLot,
|
||
// FMaterialId = t.MaterialCode,
|
||
// FLot=t.MSSSupplierLot,
|
||
// FQty = t.Qty.Value.ToString()
|
||
//}).ToList();
|
||
//_workProcessService.Add<IKingDeeService>(this.MerchantId, "AddTiaoMa", "生成条码档案", JsonHelper.ToJson(addTiaoMas), 5);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region SetBaoShuTiaoMa(根据每包数量得到全部包裹打印条码)
|
||
/// <summary>
|
||
/// 根据每包数量得到全部包裹打印条码
|
||
/// </summary>
|
||
/// <param name="act"></param>
|
||
/// <returns></returns>
|
||
/// <exception cref="BaseException"></exception>
|
||
[TransactionCallHandler]
|
||
public TiaoMaResp SetBaoShuTiaoMa(TiaoMaAct act)
|
||
{
|
||
if (act.CuseQty <= 0)
|
||
{
|
||
throw new BaseException("每包数量必须大于0");
|
||
}
|
||
//_tiaoMaRepository.Delete(t => t.InvoceOrderItemId == act.Id);
|
||
var orderItem = _invoiceOrderItemRepository.Queryable().Where(t => t.Id == act.Id).First();
|
||
if (orderItem == null)
|
||
{
|
||
throw new BaseException("不正确的ID值");
|
||
}
|
||
var order = _invoiceOrderRepository.Queryable().Where(t => t.Id == orderItem.InvoiceOrderId).First();
|
||
if (order == null)
|
||
{
|
||
throw new BaseException("不正确的ID数据");
|
||
}
|
||
List<TiaoMaList> addList = new List<TiaoMaList>();
|
||
if (orderItem.CuseQty == act.CuseQty)
|
||
{
|
||
var barcodeList = _tiaoMaRepository.Queryable().Where(t => t.InvoceOrderItemId == orderItem.Id).ToList();
|
||
addList =AutoMapperHelper.AutoMappToList<TiaoMaList,TiaoMa>( barcodeList);
|
||
addList.ForEach(t =>
|
||
{
|
||
t.SupplierId = order.SupplierId;
|
||
t.SupplierName = order.SupplierName;
|
||
});
|
||
|
||
|
||
}
|
||
var allBarcodeList = _tiaoMaRepository.Queryable().Where(t => t.FBillNo == order.FBillNo).Select(t => t.FBarCode).ToList().Distinct().ToList();
|
||
if (addList.Count==0)
|
||
{
|
||
_tiaoMaRepository.Delete(t=>t.InvoceOrderItemId== orderItem.Id);
|
||
orderItem.CuseQty = act.CuseQty;
|
||
_invoiceOrderItemRepository.Update(orderItem);
|
||
|
||
|
||
decimal zongQty = orderItem.Qty.SafeValue();
|
||
int yu = (int)Math.Ceiling(zongQty % act.CuseQty);
|
||
int baoShu = 0;
|
||
baoShu = (int)(zongQty / act.CuseQty);
|
||
|
||
// 条码 :物料编码,数量,收料通知单号,供应商批号,key
|
||
for (int i = 0; i < baoShu; i++)
|
||
{
|
||
|
||
string FBarCode = $@"{orderItem.MaterialCode}*{act.CuseQty.ToString("F2")}*{orderItem.FBillNo}*{orderItem.FSupplierLot}";
|
||
TiaoMaList tiaoMa = new TiaoMaList();
|
||
tiaoMa = AutoMapperHelper.AutoMappToSingle<TiaoMaList, InvoiceOrderItem>(orderItem);
|
||
tiaoMa.Id = Guid.NewGuid();
|
||
tiaoMa.FBarCode = FBarCode;
|
||
tiaoMa.Qty = act.CuseQty;
|
||
tiaoMa.SortNum = i + 1;
|
||
tiaoMa.PurchaseBillNo = orderItem.FBillNo;
|
||
tiaoMa.FBillNo = order.FBillNo;
|
||
tiaoMa.SupplierId = order.SupplierId;
|
||
tiaoMa.SupplierName = order.SupplierName;
|
||
tiaoMa.InvoceOrderItemId = orderItem.Id;
|
||
addList.Add(tiaoMa);
|
||
}
|
||
if (yu > 0)
|
||
{
|
||
string FBarCode = $@"{orderItem.MaterialCode}*{decimal.Parse(yu.ToString()).ToString("F2")}*{orderItem.FBillNo}*{orderItem.FSupplierLot}";
|
||
TiaoMaList tiaoMa = new TiaoMaList();
|
||
tiaoMa = AutoMapperHelper.AutoMappToSingle<TiaoMaList, InvoiceOrderItem>(orderItem);
|
||
tiaoMa.Id = Guid.NewGuid();
|
||
tiaoMa.FBarCode = FBarCode;
|
||
tiaoMa.Qty = yu;
|
||
tiaoMa.SortNum = baoShu + 1;
|
||
tiaoMa.PurchaseBillNo = orderItem.FBillNo;
|
||
tiaoMa.FBillNo = order.FBillNo;
|
||
tiaoMa.SupplierId = order.SupplierId;
|
||
tiaoMa.SupplierName = order.SupplierName;
|
||
tiaoMa.InvoceOrderItemId = orderItem.Id;
|
||
addList.Add(tiaoMa);
|
||
}
|
||
if (addList.Count > 0)
|
||
{
|
||
var addtemp = AutoMapperHelper.AutoMappToList<TiaoMa, TiaoMaList>(addList);
|
||
_tiaoMaRepository.Add(addtemp);
|
||
}
|
||
|
||
List<AddTiaoMa> addTiaoMas = new List<AddTiaoMa>();
|
||
var addList2 = addList.Where(t => !allBarcodeList.Contains(t.FBarCode)).ToList();
|
||
|
||
addTiaoMas = addList2.Select(t => new AddTiaoMa
|
||
{
|
||
FBarCode = t.FBarCode,
|
||
FBarCodeRule = "01",
|
||
FBillCode = t.FBillNo,
|
||
FSupplierLot = t.FSupplierLot == null ? "" : t.FSupplierLot,
|
||
FMaterialId = t.MaterialCode,
|
||
FLot = t.MSSSupplierLot,
|
||
FQty = t.Qty.Value.ToString()
|
||
}).ToList();
|
||
_workProcessService.Add<IKingDeeService>(this.MerchantId, "AddTiaoMa", "生成条码档案", JsonHelper.ToJson(addTiaoMas), 5);
|
||
}
|
||
|
||
|
||
TiaoMaResp result = new TiaoMaResp();
|
||
result.Id = orderItem.Id;
|
||
result.BarCodeList = addList;
|
||
return result;
|
||
|
||
}
|
||
#endregion
|
||
}
|
||
}
|