using System; using SqlSugar; using Infrastructure.Attribute; using Infrastructure.Extensions; using ZR.Model; using ZR.Repository; using System.Linq; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; using ZR.Service.mes.wms.IService; using System.Collections.Generic; using Mapster; using System.Reflection; namespace ZR.Service.mes.wms { /// /// 成品库当前货物表Service业务层处理 /// [AppService(ServiceType = typeof(IWmGoodsNowProductionService), ServiceLifetime = LifeTime.Transient)] public class WmGoodsNowProductionService : BaseService, IWmGoodsNowProductionService { /// /// 查询成品库当前货物表列表 /// /// /// public PagedInfo GetList(WmGoodsNowProductionQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.Partnumber), it => it.Partnumber.Contains(parm.Partnumber)) .AndIF(!string.IsNullOrEmpty(parm.PackageCodeClient), it => it.PackageCodeClient.Contains(parm.PackageCodeClient)) .AndIF(!string.IsNullOrEmpty(parm.LocationCode), it => it.LocationCode.Contains(parm.LocationCode)) ; var response = Queryable() .Where(predicate.ToExpression()) .OrderByDescending(x=>x.EntryWarehouseTime) .ToPage(parm); foreach (WmGoodsNowProductionDto item in response.Result) { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber==item.Partnumber) .First(); if (material == null) { item.Description = "此零件号不在物料清单内!"; continue; } item.Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } return response; } /// /// 批量查看 /// /// /// /// public (List, int) QuerypatchsearchList(WmGoodsNowProductionQueryDto parm) { List list = null; int total = 0; var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.Partnumber), it => it.Partnumber.Contains(parm.Partnumber)) .AndIF(!string.IsNullOrEmpty(parm.PackageCodeClient), it => it.PackageCodeClient.Contains(parm.PackageCodeClient)); List rawdatas = Queryable().Where(predicate.ToExpression()).ToPageList(parm.PageNum, parm.PageSize, ref total); if (rawdatas != null && rawdatas.Count > 0) { //todo 对字段进行拆分 List WmGoods_nodeDto_list = rawdatas.Select(p => new WmGoods_nodeDto() { Id = p.Id, PackageCode = p.PackageCode, PackageCodeClient_short_parent = p.PackageCodeClient.Split("_")[0], PackageCodeClient_son = p.PackageCodeClient, PackageCodeOriginal = p.PackageCodeClient, LocationCode = p.LocationCode, Partnumber = p.Partnumber, Pack_num = 1, GoodsNumLogic = p.GoodsNumLogic, GoodsNumAction = p.GoodsNumAction, EntryWarehouseTime = p.EntryWarehouseTime, Remark = p.Remark, }).ToList(); //todo 分组 聚合 生成父节点 List WmGoods_nodeDto_list_parent = WmGoods_nodeDto_list.GroupBy(p => p.PackageCodeClient_short_parent) .Select(group => new WmGoods_nodeDto() { PackageCodeClient_short_parent = "", PackageCodeClient_son = group.Key, GoodsNumLogic = group.Sum(group => group.GoodsNumLogic), GoodsNumAction = group.Sum(group => group.GoodsNumAction), Partnumber = group.Max(group => group.Partnumber), Pack_num = group.Count() }).ToList(); //todo 合并 list = WmGoods_nodeDto_list.Concat(WmGoods_nodeDto_list_parent).ToList(); } return (list, total); } /// /// 移动端 货物查看 根据Query零件号与批次号查看信息 /// /// /// public List QueryshortPatch(CommonQueryDto parm) { // 结果集 List resultList = new(); // 全数据处理 var predicate = Expressionable.Create() .OrIF(!string.IsNullOrEmpty(parm.Query), it => it.Partnumber.Contains(parm.Query)) .OrIF(!string.IsNullOrEmpty(parm.Query), it => it.PackageCodeClient.Contains(parm.Query)); List wmGoodsNowsList = Context.Queryable() .Where(predicate.ToExpression()) .OrderByDescending(it => it.PackageCodeClient) .ToList(); // 聚合数据 resultList = wmGoodsNowsList.GroupBy(it => it.PackageCodeClient.Split('_')[0]) .Select(group => new WmGoodShortPackageCodeDto { ShortPackageCode = group.Key, Partnumber = group.Max(item => item.Partnumber), EntryWarehouseTime = group.Max(item => item.EntryWarehouseTime), PackageNumber = group.Count(), PartnumberNumber = group.Sum(item=>item.GoodsNumAction) }).ToList(); // 结果数据处理 //每页多少条 int rows = parm.PageSize; //第几页 int page = parm.PageNum; //每一页开始下标 int startIndex = (page - 1) * rows; //数据总数 int sum = resultList.Count; if (startIndex + rows > sum) { resultList = resultList.Skip(startIndex).Take(sum).ToList(); } else { resultList = resultList.Skip(startIndex).Take(startIndex + rows).ToList(); } return resultList; /*if (rawdatas != null && rawdatas.Count > 0) { //todo 对字段进行拆分 List WmGoods_nodeDto_list = rawdatas.Select(p => new WmGoods_nodeDto() { Id = p.Id, PackageCode = p.PackageCode, PackageCodeClient_short_parent = p.PackageCodeClient.Split("_")[0], PackageCodeClient_son = p.PackageCodeClient, PackageCodeOriginal = p.PackageCodeClient, LocationCode = p.LocationCode, Partnumber = p.Partnumber, GoodsNumLogic = p.GoodsNumLogic, GoodsNumAction = p.GoodsNumAction, EntryWarehouseTime = p.EntryWarehouseTime, Remark = p.Remark, }).ToList(); //todo 分组 聚合 生成父节点 List WmGoods_nodeDto_list_parent = WmGoods_nodeDto_list.GroupBy(p => p.PackageCodeClient_short_parent) .Select(group => new WmGoods_nodeDto() { PackageCodeClient_short_parent = "", PackageCodeClient_son = group.Key, GoodsNumLogic = group.Sum(group => group.GoodsNumLogic), GoodsNumAction = group.Sum(group => group.GoodsNumAction), Partnumber = group.Max(group => group.Partnumber), Pack_num = group.Count() }).ToList(); //todo 合并 return WmGoods_nodeDto_list_parent.OrderByDescending(it => it.PackageCodeClient_son).ToList(); } return null;*/ } /// /// 移动端 短批次号详情 /// /// /// public List Patchsearchdetail(WmGoodsNowProductionQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.PackageCodeClient), it => it.PackageCodeClient.Contains(parm.PackageCodeClient)); var response = Queryable() .Where(predicate.ToExpression()) .OrderBy(it => it.PackageCodeClient) .Select(it => new WmGoodsNowProductionDto { PackageCodeClient = it.PackageCodeClient, LocationCode = it.LocationCode, Partnumber = it.Partnumber, GoodsNumAction = it.GoodsNumAction, EntryWarehouseTime = it.EntryWarehouseTime, Remark = (!string.IsNullOrEmpty(it.Remark)? it.Remark:"无备注"), }) .ToList(); return response; } /// /// 获取详情 /// /// /// public WmGoodsNowProduction GetInfo(string Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加成品库当前货物表 /// /// /// public WmGoodsNowProduction AddWmGoodsNowProduction(WmGoodsNowProduction model) { if (string.IsNullOrEmpty(model.Id)) { model.Id = SnowFlakeSingle.Instance.NextId().ToString();//也可以在程序中直接获取ID } if (string.IsNullOrEmpty(model.PackageCode)) { model.PackageCode = model.PackageCodeClient; } if (string.IsNullOrEmpty(model.PackageCodeOriginal)) { model.PackageCodeOriginal = model.PackageCodeClient; } return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改成品库当前货物表 /// /// /// public int UpdateWmGoodsNowProduction(WmGoodsNowProduction model) { //var response = Update(w => w.Id == model.Id, it => new WmGoodsNowProduction() //{ // PackageCode = model.PackageCode, // PackageCodeClient = model.PackageCodeClient, // PackageCodeOriginal = model.PackageCodeOriginal, // LocationCode = model.LocationCode, // Partnumber = model.Partnumber, // GoodsNumLogic = model.GoodsNumLogic, // GoodsNumAction = model.GoodsNumAction, // EntryWarehouseTime = model.EntryWarehouseTime, // Remark = model.Remark, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, //}); //return response; return Update(model, true); } /// /// 修改实际库存 /// /// /// /// public int ModifyInventoryQuantity(string id, int stack_num) { return Context.Updateable() .SetColumns(it => it.GoodsNumAction == stack_num) .Where(it => it.Id == id).ExecuteCommand(); } public PagedInfo GetDictData(WmGoodsNowProductionDictDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.Query), it => it.Partnumber.Contains(parm.Query)) .Or(it => it.PackageCodeClient.Contains(parm.Query)) // .Or(it => it.LocationCode.Contains(parm.Query)) ; var response = Queryable() .Where(predicate.ToExpression()) .Select(it => new WmGoodsNowProductionDictDto { Id = it.Id, PackageCodeClient = it.PackageCodeClient, LocationCode = it.LocationCode, Partnumber = it.Partnumber, Description = string.Empty, GoodsNumAction = it.GoodsNumAction, GoodsNumLogic = it.GoodsNumLogic, Label = string.Empty, }) .ToPage(parm); foreach (WmGoodsNowProductionDictDto item in response.Result) { WmMaterial material = Context.Queryable() .Where(it => it.Partnumber == item.Partnumber) .First(); if (material == null) { item.Description = "此零件号不在物料清单内!"; } else { item.Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } string label = "批次号:" + item.PackageCodeClient + " 零件号:" + item.Partnumber + " 描述:" + item.Description; var value = new { Id = item.Id, PackageCodeClient = item.PackageCodeClient, LocationCode = item.LocationCode, Partnumber = item.Partnumber, Description = item.Description, GoodsNumAction = item.GoodsNumAction, GoodsNumLogic = item.GoodsNumLogic, }; item.Value = value; item.Label = label; } return response; } } }