ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs
@@ -1,6 +1,7 @@
using Org.BouncyCastle.Crypto;
using Newtonsoft.Json;
using Org.BouncyCastle.Crypto;
using SqlSugar;
using SqlSugar.Extensions;
//using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -8,17 +9,24 @@
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Stock;
using WIDESEA_IBasicRepository;
using WIDESEA_IStockRepository;
using WIDESEA_Model;
using WIDESEA_Model.Models;
using WIDESEA_Model.Models.System.Reponse;
using WIDESEA_Model.Models.System.Request;
namespace WIDESEA_StockRepository
{
    public class StockInfoRepository : RepositoryBase<Dt_StockInfo>, IStockInfoRepository
    {
        public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        private readonly ILabelMasterRepository _labelMasterRepository;
        public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage, ILabelMasterRepository labelMasterRepository) : base(unitOfWorkManage)
        {
            _labelMasterRepository = labelMasterRepository;
        }
        public List<StockViewDTO> GetAllStockViews()
@@ -65,9 +73,20 @@
            //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).Includes(x => x.Details).ToList();
        }
        /// <summary>
        /// æ ¹æ®æ‰¹æ¬¡å·å’Œç‰©æ–™ç¼–码获取库存信息
        /// </summary>
        /// <param name="materielCode"></param>
        /// <returns></returns>
        public List<Dt_StockInfo> GetStockInfos(string materielCode, string batchNo)
        {
            return Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == batchNo)).ToList();
        }
        public List<Dt_StockInfo> GetStockInfos(string materielCode, List<string> locationCodes)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList();
            //修改只获取已上架状态的库存
            return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode) && x.StockStatus == (int)StockStatusEmun.已上架).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList();
            //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode));
@@ -82,6 +101,7 @@
        public List<Dt_StockInfo> GetStockInfosByPalletCodes(List<string> palletCodes)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).ToList();
        }
@@ -94,12 +114,194 @@
        {
            return Db.UpdateNav(stockInfo).Include(x => x.Details).ExecuteCommand();
        }
        public Dt_StockInfo GetPalletStockInfo(string roadwayNo)
        {
            //ISugarQueryable<string> locationCodes = Db.Queryable<Dt_LocationInfo>().Where(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == x.EnalbeStatus)).Select(x => x.LocationCode);
            return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
            return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
        }
        public Dt_StockInfo GetPalletStockInfo(string roadwayNo, string strayType)
        {
            //ISugarQueryable<string> locationCodes = Db.Queryable<Dt_LocationInfo>().Where(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == x.EnalbeStatus)).Select(x => x.LocationCode);
            if (strayType == "1")
            {
                return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt() && x.PalletCode.Substring(0, 1) == "T" && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
            }
            else
            {
                return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.已入库.ObjToInt() && x.PalletCode.Substring(0, 1) == "B" && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First();
            }
        }
        /// <summary>
        /// ç«‹åº“WMS库存信息接口,供上游系统调用
        /// </summary>
        /// <param name="inventoryQueryRequest"></param>
        /// <returns></returns>
        public InventoryQueryResponse InventoryQuery(string inventoryQueryRequeststr)
        {
            InventoryQueryResponse inventoryQueryResponse = new InventoryQueryResponse();
            try
            {
                InventoryQueryRequest inventoryQueryRequest = JsonConvert.DeserializeObject<InventoryQueryRequest>(inventoryQueryRequeststr);
                if (inventoryQueryRequest != null)
                {
                    List<StockItem> DATA = new List<StockItem>();
                    inventoryQueryResponse.DATA = DATA;
                    List<StockViewDTO> stockviews = GetAllStockViews();
                    foreach (var view in stockviews)
                    {
                        foreach (var detail in view.Details)
                        {
                            Dt_LabelMaster labelMaster = _labelMasterRepository.QueryFirst(x => x.LABEL_NO == detail.SerialNumber);
                            StockItem stockItem = new StockItem();
                            stockItem.BATCH = detail.BatchNo;
                            stockItem.LABEL_NO = detail.SerialNumber;
                            stockItem.LGORT = "0030";//库位
                            if (labelMaster != null)
                            {
                                if (labelMaster.WH_NUMBER == inventoryQueryRequest.DATA[0].WH_NUMBER && labelMaster.WERKS == inventoryQueryRequest.DATA[0].WERKS)
                                {
                                    stockItem.LIFNR = labelMaster.LIFNR;
                                    stockItem.LIKTX = labelMaster.LIKTX;
                                    stockItem.LK_BIN_CODE = view.LocationCode;
                                    stockItem.MAKTX = labelMaster.MAKTX;
                                    stockItem.MATNR = labelMaster.MATNR;
                                    stockItem.MEINS = labelMaster.UNIT;
                                    stockItem.QTY = labelMaster.BOX_QTY;
                                    var sobkz = "非限制";
                                    if (labelMaster.SOBKZ == "0")
                                    {
                                        sobkz = "非限制";
                                    }
                                    else if (labelMaster.SOBKZ == "1")
                                    {
                                        sobkz = "冻结";
                                    }
                                    else if (labelMaster.SOBKZ == "2")
                                    {
                                        sobkz = "待质检";
                                    }
                                    stockItem.SOBKZ = sobkz;
                                    stockItem.TPNUM = view.PalletCode;
                                    stockItem.WERKS = labelMaster.WERKS;//工厂
                                    stockItem.WH_NUMBER = labelMaster.WH_NUMBER;//仓库号
                                    DATA.Add(stockItem);
                                }
                            }
                        }
                    }
                    if (DATA.Count > 0)
                    {
                        inventoryQueryResponse.MSGTY = "S";
                        inventoryQueryResponse.MSGTX = "";
                    }
                    else
                    {
                        inventoryQueryResponse.MSGTY = "I";
                        inventoryQueryResponse.MSGTX = "";
                    }
                }
            }
            catch (Exception ex)
            {
                inventoryQueryResponse.MSGTY = "E";
                inventoryQueryResponse.MSGTX = ex.Message;
            }
            return inventoryQueryResponse;
        }
        /// <summary>
        /// ç«‹åº“WMS冻结/解冻信息接口,供上游系统调用
        /// </summary>
        /// <param name="freezeByCustomerResponse"></param>
        /// <returns></returns>
        public freezeByCustomerResponse freezeByCustomer(string freezeRequeststr)
        {
            freezeByCustomerResponse freezeResponse = new freezeByCustomerResponse();
            try
            {
                freezeByCustomerRequest freezeRequest = JsonConvert.DeserializeObject<freezeByCustomerRequest>(freezeRequeststr);
                if (freezeRequest.WERKS == AppSettings.Configuration["WERKS"] && freezeRequest.WH_NUMBER == AppSettings.Configuration["WERKS"])
                {
                    //根据批次和物料号查找对应的托盘号,冻结库存,只有入库成功了,才能被冻结
                    List<Dt_StockInfo> stockInfos = GetStockInfos(freezeRequest.MATNR, freezeRequest.BATCH);
                    List<Dt_LabelMaster> labelInfos = _labelMasterRepository.QueryData(x => x.MATNR == freezeRequest.MATNR && x.BATCH == freezeRequest.BATCH);
                    if (freezeRequest.YWLX == "00")//00冻结
                    {
                        foreach (var item in stockInfos)
                        {
                            if (item.StockStatus == (int)StockStatusEmun.已入库)
                            {
                                item.StockStatus = (int)StockStatusEmun.出库冻结;
                                UpdateData(item);
                            }
                        }
                        foreach (var li in labelInfos)
                        {
                            li.SOBKZ = "1";
                        }
                        _labelMasterRepository.UpdateData(labelInfos);
                        freezeResponse.MSGTY = "S";
                        freezeResponse.MSGTX = "";
                    }
                    else if (freezeRequest.YWLX == "01") //01解冻
                    {
                        foreach (var item in stockInfos)
                        {
                            if (item.StockStatus == (int)StockStatusEmun.出库冻结)
                            {
                                item.StockStatus = (int)StockStatusEmun.已入库;
                                UpdateData(item);
                            }
                        }
                        foreach (var li in labelInfos)
                        {
                            //if (li.LABEL_STATUS == "01")
                            //{
                            //    li.SOBKZ = "2";
                            //}
                            //else
                            //{
                            li.SOBKZ = "0";
                            //}
                        }
                        _labelMasterRepository.UpdateData(labelInfos);
                        freezeResponse.MSGTY = "S";
                        freezeResponse.MSGTX = "";
                    }
                    else
                    {
                        freezeResponse.MSGTY = "E";
                        freezeResponse.MSGTX = "不支持该业务类型";
                    }
                }
                else
                {
                    freezeResponse.MSGTY = "E";
                    freezeResponse.MSGTX = "请传入正确的工厂号和仓库号";
                }
            }
            catch (Exception ex)
            {
                freezeResponse.MSGTY = "E";
                freezeResponse.MSGTX = ex.Message;
            }
            return freezeResponse;
        }
    }
}