yanjinhui
2025-12-01 2b49f7643d15b74889d190f216630559006ed93a
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/InventoryServices.cs
@@ -1,12 +1,7 @@
using HslCommunication;
using MailKit.Search;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using WIDESEA_Common;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
@@ -30,12 +25,22 @@
    {
        private readonly ICabinOrderServices _cabinOrderServices;
        private readonly IDeliveryOrderServices _deliveryOrderServices;
        private readonly ICabinOrderHtyServices _cabinOrderHtyServices;
        private readonly IDeliveryOrderHtyServices _deliveryOrderHtyServices;
        private readonly ISupplyTaskService _supplyTaskService;
        public InventoryServices(IRepository<Dt_Inventory> BaseDal, ICabinOrderServices cabinOrderServices, IDeliveryOrderServices deliveryOrderServices, ISupplyTaskService supplyTaskService) : base(BaseDal)
        private readonly ISupplyTaskHtyService _supplyTaskHtyService;
        private readonly IInventory_BatchServices _inventoryBatchServices;
        private readonly IMessageInfoService _infoService;
        public InventoryServices(IRepository<Dt_Inventory> BaseDal, ICabinOrderServices cabinOrderServices, IDeliveryOrderServices deliveryOrderServices, ISupplyTaskService supplyTaskService, IInventory_BatchServices inventoryBatchServices, IMessageInfoService infoService,ICabinOrderHtyServices cabinOrderlHtyServices,IDeliveryOrderHtyServices deliveryOrderHtyServices, ISupplyTaskHtyService supplyTaskHtyService) : base(BaseDal)
        {
            _cabinOrderServices = cabinOrderServices;
            _deliveryOrderServices = deliveryOrderServices;
            _supplyTaskService = supplyTaskService;
            _inventoryBatchServices = inventoryBatchServices;
            _infoService = infoService;
            _cabinOrderHtyServices = cabinOrderlHtyServices;
            _deliveryOrderHtyServices = deliveryOrderHtyServices;
            _supplyTaskHtyService = supplyTaskHtyService;
        }
        /// <summary>
@@ -45,51 +50,41 @@
        /// <param name="batch_num">批号</param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public WebResponseContent GetInventoryList(string goods_no, string batch_num)
        public WebResponseContent GetInventoryList(int[] keys)
        {
            var responseContent = new WebResponseContent();
            try
            {
                var url = "http://121.37.118.63/GYZ2/95fck/repositoryInfo";
                var result = HttpHelper.Post(url, new { goods_no, batch_num }.ToJsonString());
                //根据id查询库存批次信息表,获取到他们的商品编码和批次号
                var inventoryBatches = _inventoryBatchServices.Repository.QueryData(x => keys.Contains(x.Id)); //查全部
                var response = JsonConvert.DeserializeObject<UpstreamResponse<InventoryInfo>>(result);
                if (response.resultCode != "0")
                var url = "http://192.168.1.100:80/GYZ2/95fck/repositoryInfo";
                foreach (var item in inventoryBatches)
                {
                    //SendErrorToUpstream(8, "", response.resultMsg ?? "上游接口返回失败", "");
                    return responseContent.Error(response.resultMsg ?? "上游接口返回失败");
                }
                    var result = HttpHelper.Post(url, new { goods_no = item.MaterielCode, batch_num = item.BatchNo }.ToJsonString());
                if (response.data == null || !response.data.Any())
                {
                    return responseContent.OK("无新库存数据");
                    var response = JsonConvert.DeserializeObject<UpstreamResponse<InventoryInfo>>(result);
                    if (response == null) continue;
                    var data = response.data.FirstOrDefault();
                    if (data != null)
                        item.ERPStockQuantity = data.business_qty;
                }
                Db.Ado.BeginTran();
                foreach (var item in response.data)
                {
                    // ä½¿ç”¨ FirstOrDefault é¿å…æ‰¾ä¸åˆ°è®°å½•时抛出异常
                    var Inver = Db.Queryable<Dt_Inventory_Batch>()
                        .First(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num);
                    if (Inver != null)
                    {
                        Inver.ERPStockQuantity = item.business_qty;
                        Db.Updateable(Inver).ExecuteCommand();
                    }
                }
                Db.Ado.CommitTran();
                _inventoryBatchServices.UpdateData(inventoryBatches);
                return responseContent.OK("库存信息同步完成");
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                //SendErrorToUpstream(8, "", ex.Message, "");
                return responseContent.Error("同步失败: " + ex.Message);
            }
        }
        /// <summary>
        /// wcs回传给我调用我的方法 ä¸ç®¡æ˜¯å…¥åº“ å‡ºåº“ ç›˜ç‚¹éƒ½ä¼šè°ƒç”¨è¿™ä¸ªæŽ¥å£(现在用这个)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ApiResponse<Dt_InventoryInfo> OrderFeedback(EdiOrderCallbackRequest request)
        {
@@ -102,7 +97,22 @@
                    case "1": //入库
                        {
                            Dt_CabinOrder cabinOrder = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == request.externalOrderNo && x.Warehouse_no == Warecode).Includes(x => x.Details).First();
                            if (cabinOrder == null) throw new Exception($"未找到入库单号【{request.externalOrderNo}】的入库单信息");
                            if (cabinOrder == null)
                            {
                                //查找历史入库单,如果有就返回0给下游
                                    var inHty = _cabinOrderHtyServices.Repository.QueryData(x => x.Order_no == request.externalOrderNo && x.Warehouse_no == Warecode).ToList();
                                    if (inHty.Count>0)
                                    {
                                        return new ApiResponse<Dt_InventoryInfo>
                                        {
                                            code = "0",
                                            msg = $"成功"
                                        };
                                }
                                throw new Exception($"未找到入库单号【{request.externalOrderNo}】的入库单信息");
                            }
                            if (cabinOrder.OdrderStatus == "已完成")
                                return new ApiResponse<Dt_InventoryInfo> { code = "0", msg = $"成功" };
                            WebResponseContent content = _cabinOrderServices.CompleteLKInOrder(cabinOrder, request);
@@ -112,7 +122,19 @@
                    case "2":
                        {
                            Dt_DeliveryOrder deliveryOrder = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == request.externalOrderNo && x.Warehouse_no == Warecode).Includes(x => x.Details).First();
                            if (deliveryOrder == null) throw new Exception($"未找到出库单号【{request.externalOrderNo}】的出库单信息");
                            if (deliveryOrder == null)
                                {
                                var outHty = _deliveryOrderHtyServices.Repository.QueryData(x => x.Out_no == request.externalOrderNo && x.Warehouse_no == Warecode).ToList();
                                    if (outHty.Count>0)
                                    {
                                        return new ApiResponse<Dt_InventoryInfo>
                                        {
                                            code = "0",
                                            msg = $"成功"
                                        };
                                }
                                    throw new Exception($"未找到出库单号【{request.externalOrderNo}】的出库单信息");
                                }
                            if (deliveryOrder.OutStatus == "已完成")
                                return new ApiResponse<Dt_InventoryInfo> { code = "0", msg = $"成功" };
                            WebResponseContent content = _deliveryOrderServices.CompleteLKOutOrder(deliveryOrder, request);
@@ -126,7 +148,20 @@
                            foreach (var detail in request.details)
                            {
                                Dt_SupplyTask? supplyTask = supplyTasks.Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo).FirstOrDefault();
                                if (supplyTask == null) throw new Exception($"未找到订单号【{request.externalOrderNo}】物料编号【{detail.productCode}】的盘点任务");
                                if (supplyTask == null)
                                {
                                    var suppHty = _supplyTaskHtyService.Repository.QueryData(x => x.OrderNo == request.externalOrderNo && x.WarehouseCode == Warecode).ToList();
                                    if (suppHty.Count>0)
                                    {
                                        return new ApiResponse<Dt_InventoryInfo>
                                        {
                                            code = "0",
                                            msg = $"成功"
                                        };
                                    }
                                    throw new Exception($"未找到订单号【{request.externalOrderNo}】物料编号【{detail.productCode}】的盘点任务");
                                }
                                if (detail.isLossOrProfit == 1) // ç›˜äº
                                {
                                    supplyTask.SupplyQuantity = supplyTask.StockQuantity - detail.ea;
@@ -553,7 +588,7 @@
        {
            try
            {
                var url = "http://121.37.118.63:80/GYZ2/95fck/exceptionLog";
                var url = "http://192.168.1.100:80/GYZ2/95fck/exceptionLog";
                var requestData = new
                {