using Newtonsoft.Json;
|
using Org.BouncyCastle.Crypto;
|
using SqlSugar;
|
//using SqlSugar.Extensions;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
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
|
{
|
private readonly ILabelMasterRepository _labelMasterRepository;
|
public StockInfoRepository(IUnitOfWorkManage unitOfWorkManage, ILabelMasterRepository labelMasterRepository) : base(unitOfWorkManage)
|
{
|
_labelMasterRepository = labelMasterRepository;
|
}
|
|
public List<StockViewDTO> GetAllStockViews()
|
{
|
ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>();
|
ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>();
|
|
return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => new StockViewDTO
|
{
|
AreaId = a.AreaId,
|
LocationCode = b.LocationCode,
|
Column = a.Column,
|
CreateDate = b.CreateDate,
|
Creater = b.Creater,
|
Depth = a.Depth,
|
EnalbeStatus = a.EnableStatus,
|
IsFull = b.IsFull,
|
Layer = a.Layer,
|
LocationName = a.LocationName,
|
LocationStatus = a.LocationStatus,
|
LocationType = a.LocationType,
|
Modifier = b.Modifier,
|
ModifyDate = b.ModifyDate,
|
PalletCode = b.PalletCode,
|
StockRemark = b.Remark,
|
RoadwayNo = a.RoadwayNo,
|
Row = a.Row,
|
StockId = b.Id,
|
StockStatus = b.StockStatus,
|
Details = b.Details,
|
}).Includes(x => x.Details).ToList();
|
}
|
|
public Dt_StockInfo GetStockInfo(string palletCode)
|
{
|
return Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
|
}
|
|
public List<Dt_StockInfo> GetStockInfos(string materielCode)
|
{
|
return Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList();
|
//ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>();
|
//ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode));
|
//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) && 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));
|
//ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode));
|
//return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList();
|
}
|
|
public List<Dt_StockInfo> GetStockInfosByIds(List<int> ids)
|
{
|
return Db.Queryable<Dt_StockInfo>().Where(x => ids.Contains(x.Id)).Includes(x => x.Details).ToList();
|
}
|
|
public List<Dt_StockInfo> GetStockInfosByPalletCodes(List<string> palletCodes)
|
{
|
|
return Db.Queryable<Dt_StockInfo>().Where(x => palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).ToList();
|
}
|
|
public List<Dt_StockInfo> GetStockInfosExclude(string materielCode, List<string> palletCodes)
|
{
|
return Db.Queryable<Dt_StockInfo>().Where(x => !palletCodes.Contains(x.PalletCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList();
|
}
|
|
public bool UpdateDataWithDetail(Dt_StockInfo stockInfo)
|
{
|
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();
|
|
}
|
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;
|
|
}
|
}
|
}
|