377 lines
18 KiB
C#
Raw Permalink Normal View History

2025-04-24 18:31:27 +08:00
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;
2025-06-05 10:23:15 +08:00
using MyCode.Project.Infrastructure.Enumeration;
2025-04-24 18:31:27 +08:00
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;
2025-04-25 18:42:29 +08:00
private ITiaoMaRepository _tiaoMaRepository;
2025-06-05 10:23:15 +08:00
private ISysWorkProcessV2Repository _sysWorkProcessV2Repository;
2025-04-24 18:31:27 +08:00
public InvoiceOrderService(IPurchaseOrderRepository purchaseOrderRepository
, IPurchaseOrderItemRepository purchaseOrderItemRepository
, IInvoiceOrderItemRepository invoiceOrderItemRepository
, IInvoiceOrderRepository invoiceOrderRepository
2025-06-05 10:23:15 +08:00
, ISysWorkProcessV2Repository sysWorkProcessV2Repository
2025-04-25 18:42:29 +08:00
, ITiaoMaRepository tiaoMaRepository
2025-04-24 18:31:27 +08:00
, IWorkProcessService workProcessService
, IKingDeeService kingDeeService)
{
_purchaseOrderItemRepository = purchaseOrderItemRepository;
_purchaseOrderRepository = purchaseOrderRepository;
_invoiceOrderItemRepository = invoiceOrderItemRepository;
_invoiceOrderRepository = invoiceOrderRepository;
2025-06-05 10:23:15 +08:00
_sysWorkProcessV2Repository = sysWorkProcessV2Repository;
2025-04-25 18:42:29 +08:00
_tiaoMaRepository = tiaoMaRepository;
2025-04-24 18:31:27 +08:00
_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();
2025-04-27 16:59:10 +08:00
var ids = orderItems.Select(t => t.Id).ToList();
2025-05-06 18:03:50 +08:00
2025-04-24 18:31:27 +08:00
if (orderHead == null)
{
throw new BaseException("订单数据不正确");
}
2025-05-06 17:22:37 +08:00
orderItems = _invoiceOrderItemRepository.Queryable().Where(t => t.InvoiceOrderId == orderHead.Id).ToList();
2025-05-06 18:03:50 +08:00
var OrderItemIds = orderItems.Select(t => t.PurchaseOrderItemId).ToList();
2025-04-24 18:31:27 +08:00
BillDelete billDelete = new BillDelete();
billDelete.Numbers = orderHead.FBillNo;
try
{
var result = _kingDeeService.Delete("PUR_ReceiveBill", billDelete);
2025-04-27 16:59:10 +08:00
//LogHelper.Info(result);
2025-05-06 17:22:37 +08:00
2025-04-27 16:59:10 +08:00
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)
{
2025-05-15 12:36:05 +08:00
t.FRemainReceiveQty = t.FRemainReceiveQty + temp.Qty.SafeValue();
t.FReceiveQty = t.FReceiveQty - temp.Qty.SafeValue();
2025-04-27 16:59:10 +08:00
}
});
_purchaseOrderItemRepository.Update(purchaseItem);
2025-05-06 17:22:37 +08:00
_invoiceOrderItemRepository.Delete(t => t.InvoiceOrderId == orderHead.Id);
_invoiceOrderRepository.Delete(t => t.Id == orderHead.Id);
2025-04-27 16:59:10 +08:00
_tiaoMaRepository.Delete(t => ids.Contains(t.InvoceOrderItemId.Value));
2025-04-24 18:31:27 +08:00
}
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);
2025-05-27 14:18:45 +08:00
//LogHelper.Info(sheet + "的收料订单数据");
//LogHelper.Info(result);
2025-04-24 18:31:27 +08:00
/**
* *
* [{"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)
{
2025-05-29 11:55:50 +08:00
oldItem= oldItems.Where(t=>t.MSSSupplierLot=="0" || t.MSSSupplierLot == null).FirstOrDefault();
2025-04-24 18:31:27 +08:00
}
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
2025-04-25 18:42:29 +08:00
//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");
2025-04-24 18:31:27 +08:00
}
2025-06-05 17:26:42 +08:00
//_tiaoMaRepository.Delete(t => t.InvoceOrderItemId == act.Id); purchaseOrderItem.F_TSPR_Text_qtr1
2025-04-25 18:42:29 +08:00
var orderItem = _invoiceOrderItemRepository.Queryable().Where(t => t.Id == act.Id).First();
if (orderItem == null)
{
throw new BaseException("不正确的ID值");
}
2025-04-27 16:59:10 +08:00
var order = _invoiceOrderRepository.Queryable().Where(t => t.Id == orderItem.InvoiceOrderId).First();
if (order == null)
{
throw new BaseException("不正确的ID数据");
}
2025-06-05 17:26:42 +08:00
var purchaseOrderItem = _purchaseOrderItemRepository.Queryable().Where(t => t.Id == orderItem.PurchaseOrderItemId).First();
if (purchaseOrderItem == null)
{
throw new BaseException("不正确的ID数据");
}
2025-04-27 16:59:10 +08:00
List<TiaoMaList> addList = new List<TiaoMaList>();
2025-04-27 13:44:26 +08:00
if (orderItem.CuseQty == act.CuseQty)
2025-04-25 18:42:29 +08:00
{
2025-04-27 13:44:26 +08:00
var barcodeList = _tiaoMaRepository.Queryable().Where(t => t.InvoceOrderItemId == orderItem.Id).ToList();
2025-04-27 16:59:10 +08:00
addList =AutoMapperHelper.AutoMappToList<TiaoMaList,TiaoMa>( barcodeList);
addList.ForEach(t =>
{
t.SupplierId = order.SupplierId;
t.SupplierName = order.SupplierName;
2025-06-06 11:44:23 +08:00
t.Fdemandbillno = purchaseOrderItem.FDEMANDBILLNO;
2025-06-05 17:26:42 +08:00
t.Remart = purchaseOrderItem.Remark;
2025-04-27 16:59:10 +08:00
});
2025-04-25 18:42:29 +08:00
}
2025-04-28 15:44:41 +08:00
var allBarcodeList = _tiaoMaRepository.Queryable().Where(t => t.FBillNo == order.FBillNo).Select(t => t.FBarCode).ToList().Distinct().ToList();
if (addList.Count==0)
2025-04-27 13:44:26 +08:00
{
2025-04-27 16:59:10 +08:00
_tiaoMaRepository.Delete(t=>t.InvoceOrderItemId== orderItem.Id);
2025-04-27 13:44:26 +08:00
orderItem.CuseQty = act.CuseQty;
_invoiceOrderItemRepository.Update(orderItem);
2025-04-27 16:59:10 +08:00
2025-04-25 18:42:29 +08:00
2025-04-27 13:44:26 +08:00
decimal zongQty = orderItem.Qty.SafeValue();
int yu = (int)Math.Ceiling(zongQty % act.CuseQty);
int baoShu = 0;
baoShu = (int)(zongQty / act.CuseQty);
2025-06-04 10:00:59 +08:00
2025-04-27 13:44:26 +08:00
// 条码 物料编码数量收料通知单号供应商批号key
2025-06-04 10:00:59 +08:00
// 条码 :物料编码,数量,收料通知单号,供应商批号,美塞斯批号key
2025-04-27 13:44:26 +08:00
for (int i = 0; i < baoShu; i++)
{
2025-04-25 18:42:29 +08:00
2025-06-04 10:00:59 +08:00
string FBarCode = $@"{orderItem.MaterialCode}*{act.CuseQty.ToString("F2")}*{order.FBillNo}*{orderItem.FSupplierLot}*{orderItem.MSSSupplierLot}";
2025-04-27 16:59:10 +08:00
TiaoMaList tiaoMa = new TiaoMaList();
tiaoMa = AutoMapperHelper.AutoMappToSingle<TiaoMaList, InvoiceOrderItem>(orderItem);
2025-04-27 13:44:26 +08:00
tiaoMa.Id = Guid.NewGuid();
tiaoMa.FBarCode = FBarCode;
tiaoMa.Qty = act.CuseQty;
tiaoMa.SortNum = i + 1;
tiaoMa.PurchaseBillNo = orderItem.FBillNo;
tiaoMa.FBillNo = order.FBillNo;
2025-04-27 16:59:10 +08:00
tiaoMa.SupplierId = order.SupplierId;
tiaoMa.SupplierName = order.SupplierName;
2025-05-13 13:51:53 +08:00
tiaoMa.InvoceOrderItemId = orderItem.Id;
2025-06-06 11:44:23 +08:00
tiaoMa.Fdemandbillno = purchaseOrderItem.FDEMANDBILLNO;
2025-06-05 17:26:42 +08:00
tiaoMa.Remart = purchaseOrderItem.Remark;
2025-04-27 13:44:26 +08:00
addList.Add(tiaoMa);
}
if (yu > 0)
{
2025-06-04 10:00:59 +08:00
string FBarCode = $@"{orderItem.MaterialCode}*{decimal.Parse(yu.ToString()).ToString("F2")}*{order.FBillNo}*{orderItem.FSupplierLot}*{orderItem.MSSSupplierLot}";
2025-04-27 16:59:10 +08:00
TiaoMaList tiaoMa = new TiaoMaList();
tiaoMa = AutoMapperHelper.AutoMappToSingle<TiaoMaList, InvoiceOrderItem>(orderItem);
2025-04-27 13:44:26 +08:00
tiaoMa.Id = Guid.NewGuid();
tiaoMa.FBarCode = FBarCode;
tiaoMa.Qty = yu;
tiaoMa.SortNum = baoShu + 1;
tiaoMa.PurchaseBillNo = orderItem.FBillNo;
tiaoMa.FBillNo = order.FBillNo;
2025-04-27 16:59:10 +08:00
tiaoMa.SupplierId = order.SupplierId;
tiaoMa.SupplierName = order.SupplierName;
2025-05-13 13:51:53 +08:00
tiaoMa.InvoceOrderItemId = orderItem.Id;
2025-06-06 11:44:23 +08:00
tiaoMa.Fdemandbillno = purchaseOrderItem.FDEMANDBILLNO;
2025-06-05 17:26:42 +08:00
tiaoMa.Remart = purchaseOrderItem.Remark;
2025-04-27 13:44:26 +08:00
addList.Add(tiaoMa);
}
2025-04-27 16:59:10 +08:00
if (addList.Count > 0)
{
var addtemp = AutoMapperHelper.AutoMappToList<TiaoMa, TiaoMaList>(addList);
_tiaoMaRepository.Add(addtemp);
}
2025-04-25 18:42:29 +08:00
2025-04-27 13:44:26 +08:00
List<AddTiaoMa> addTiaoMas = new List<AddTiaoMa>();
2025-04-28 15:44:41 +08:00
var addList2 = addList.Where(t => !allBarcodeList.Contains(t.FBarCode)).ToList();
addTiaoMas = addList2.Select(t => new AddTiaoMa
2025-04-27 13:44:26 +08:00
{
FBarCode = t.FBarCode,
2025-04-28 15:44:41 +08:00
FBarCodeRule = "01",
2025-04-27 13:44:26 +08:00
FBillCode = t.FBillNo,
FSupplierLot = t.FSupplierLot == null ? "" : t.FSupplierLot,
FMaterialId = t.MaterialCode,
FLot = t.MSSSupplierLot,
2025-06-05 17:26:42 +08:00
FQty = t.Qty.Value.ToString(),
}).ToList();
2025-04-27 13:44:26 +08:00
_workProcessService.Add<IKingDeeService>(this.MerchantId, "AddTiaoMa", "生成条码档案", JsonHelper.ToJson(addTiaoMas), 5);
}
2025-04-28 15:44:41 +08:00
2025-05-15 23:43:24 +08:00
addList = addList.OrderBy(t => t.SortNum).ToList();
2025-04-25 18:42:29 +08:00
TiaoMaResp result = new TiaoMaResp();
result.Id = orderItem.Id;
2025-04-27 16:59:10 +08:00
result.BarCodeList = addList;
2025-04-25 18:42:29 +08:00
return result;
2025-04-24 18:31:27 +08:00
}
#endregion
2025-06-05 10:23:15 +08:00
2025-04-24 18:31:27 +08:00
}
}