1
dengjunjie
8 天以前 a770206c91e495b802b3e9371e06834586ad7715
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/InventoryInfoService.cs
@@ -1,10 +1,12 @@
using HslCommunication;
using MailKit.Search;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -23,153 +25,57 @@
        }
        public IRepository<Dt_InventoryInfo> Repository => BaseDal;
        /// <summary>
        /// wcs回传给我调用我的方法
        /// èŽ·å–åº“å­˜
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ApiResponse<Dt_InventoryInfo> OrderFeedback(EdiOrderCallbackRequest request)
        public WebResponseContent GetInventory()
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (request == null || request.details == null || !request.details.Any())
                List<object> lists = new List<object>();
                #region å†·å†»åº“
                string WareCodeLD = WarehouseEnum.冷冻库.ObjToInt().ToString("000");
                List<Dt_InventoryInfo> inventoryInfosLD = BaseDal.QueryData(x => x.WarehouseCode == WareCodeLD);
                object LDQty = new
                {
                    return new ApiResponse<Dt_InventoryInfo> { code = "500", msg = "请求参数无效" };
                }
                BaseDal.Db.Ado.BeginTran(); // å¼€å¯äº‹åŠ¡
                foreach (var detail in request.details)
                    name = WarehouseEnum.冷冻库.ObjToString(),
                    count = inventoryInfosLD.Sum(x => x.StockQuantity).ObjToInt()
                };
                lists.Add(LDQty);
                #endregion
                #region éº»ç²¾åº“
                string WareCodeMJ = WarehouseEnum.麻精库.ObjToInt().ToString("000");
                List<Dt_InventoryInfo> inventoryInfosMJ = BaseDal.QueryData(x => x.WarehouseCode == WareCodeMJ);
                object MJQty = new
                {
                    // èŽ·å–æ˜Žç»†ä¸­çš„æ€»å…¥åº“æ•°é‡ï¼ˆè‡ªåŠ¨è½¬ä¸ºæ­£æ•°ï¼‰
                    decimal orderQty = detail.orderDetails?
                        .Sum(x => decimal.TryParse(x.quantity, out var q) ? Math.Abs(q) : 0)
                        ?? 0;
                    //盘点
                    decimal diffQty = detail.stocktakingDetails?
                        .Sum(x => Convert.ToDecimal(x.differenceQuantity))
                        ?? 0;
                    // æ ¹æ®ç‰©æ–™ç¼–号 + æ‰¹æ¬¡å· æŸ¥æ‰¾æ˜¯å¦å·²æœ‰åº“å­˜
                    var entity = BaseDal.Db.Queryable<Dt_InventoryInfo>()
                        .First(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo);
                    if (entity == null)
                    {
                        // ðŸ†• ä¸å­˜åœ¨åˆ™æ–°å»ºåº“存记录
                        entity = new Dt_InventoryInfo
                        {
                            PalletCode = detail.orderDetails?.FirstOrDefault()?.palletCode ?? "",
                            WarehouseCode = 001.ToString(),  // é»˜è®¤åº“房编号,可根据业务改
                            LocationCode = "", // æš‚无可空
                            StockStatus = 1,   // ç«‹åº“固定为 1
                            MaterielCode = detail.productCode ?? detail.productName,
                            MaterielName = detail.productName ?? "",
                            MaterielSpec = detail.productSpecifications ?? "",
                            BatchNo = detail.batchNo,
                            // åˆæ¬¡å…¥åº“数量 = å®žé™…入库数量
                            StockQuantity = 0,
                            OutboundQuantity = 0,
                            SupplyQuantity = 0,
                            InDate = DateTime.Now,
                            ProductionDate = detail.finishDate.ToString("yyyy-MM-dd"),
                            ShelfLife = 0,
                            ValidityPeriod = "",
                            Remark = "WCS回传创建"
                        };
                    }
                    switch (request.orderType)
                    {
                        case "1": // å…¥åº“
                            entity.StockQuantity += orderQty;
                            entity.InDate = DateTime.Now;
                            entity.Remark = "入库单回传";
                            break;
                        case "2": // å‡ºåº“
                            entity.OutboundQuantity += orderQty;
                            entity.StockQuantity -= orderQty;
                            if (entity.StockQuantity < 0) entity.StockQuantity = 0;
                            entity.Remark = "出库单回传";
                            break;
                        case "3": // ç›˜ç‚¹
                            if (detail.stocktakingDetails != null && detail.stocktakingDetails.Any())
                            {
                                foreach (var stock in detail.stocktakingDetails)
                                {
                                    decimal diff = Convert.ToDecimal(stock.differenceQuantity);
                                    if (stock.IsProfit == "1") // ç›˜ç›ˆ
                                    {
                                        entity.SupplyQuantity += Math.Abs(diff);
                                    }
                                    else // ç›˜äº
                                    {
                                        entity.SupplyQuantity -= Math.Abs(diff);
                                        if (entity.SupplyQuantity < 0) entity.SupplyQuantity = 0;
                                    }
                                    entity.PalletCode = stock.palletCode;
                                    entity.Remark = "盘点单回传";
                                }
                            }
                            break;
                    }
                    // æ’入或更新数据库
                    if (entity.Id == 0)
                    {
                        BaseDal.Db.Insertable(entity).ExecuteCommand();
                    }
                    else
                    {
                        BaseDal.Db.Updateable(entity).ExecuteCommand();
                    }
                }
                BaseDal.Db.Ado.CommitTran();
                return new ApiResponse<Dt_InventoryInfo> { code = "0", msg = "成功" };
                    name = WarehouseEnum.麻精库.ObjToString(),
                    count = inventoryInfosMJ.Sum(x => x.StockQuantity).ObjToInt()
                };
                lists.Add(MJQty);
                #endregion
                #region å¤§ä»¶åº“
                string WareCodeDJ = WarehouseEnum.大件库.ObjToInt().ToString("000");
                List<Dt_InventoryInfo> inventoryInfosDJ = BaseDal.QueryData(x => x.WarehouseCode == WareCodeDJ);
                object DJQty = new
                {
                    name = WarehouseEnum.大件库.ObjToString(),
                    count = inventoryInfosDJ.Sum(x => x.StockQuantity).ObjToInt()
                };
                lists.Add(DJQty);
                #endregion
                content.OK(data: lists);
            }
            catch (Exception ex)
            {
                BaseDal.Db.Ado.RollbackTran();
                return new ApiResponse<Dt_InventoryInfo> { code = "500", msg = ex.Message };
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// æŽ¨é€å¼‚常信息给上游系统1.入库单接口;2.入库单报完成接口;3.出库单接口;4.出库报完成接口;5.药品基础信息同步接口;6.供应商信息接口;7.客户信息接口;8.库存
        /// </summary>
        public void SendErrorToUpstream(int type, string code, string message, string remark)
        {
            try
            {
                var url = "http://121.37.118.63:80/GYZ2/95fck/exceptionLog";
                var requestData = new
                {
                    type = type.ToString(),
                    code = code,
                    message = message,
                    remark = remark
                };
                var result = HttpHelper.Post(url, requestData.ToJsonString());
                // å¯ä»¥ååºåˆ—化检查 resultCode æ˜¯å¦ä¸º0
            }
            catch (Exception e)
            {
                // è¿™é‡Œä¸è¦å†æŠ›å¼‚常了,避免死循环
                Console.WriteLine("异常接口推送失败:" + e.Message);
            }
        }
    }
}