diff --git a/DOAN.Service/MES/product/IService/IProReportworkService.cs b/DOAN.Service/MES/product/IService/IProReportworkService.cs index 720eb68..89817a7 100644 --- a/DOAN.Service/MES/product/IService/IProReportworkService.cs +++ b/DOAN.Service/MES/product/IService/IProReportworkService.cs @@ -27,5 +27,10 @@ namespace DOAN.Service.MES.product.IService List UserExport(DateTime handleDate); string ManualGenerationOfReportWork(string workorder, string CreatedBy); - } + + int batchPutInFinProduct(DateTime startTime, DateTime endTime); + + int putInAndReject(string Id, int type); + + } } diff --git a/DOAN.Service/MES/product/ProReportworkService.cs b/DOAN.Service/MES/product/ProReportworkService.cs index a8fbaa3..7357e03 100644 --- a/DOAN.Service/MES/product/ProReportworkService.cs +++ b/DOAN.Service/MES/product/ProReportworkService.cs @@ -15,255 +15,354 @@ using DOAN.Model.MES.mm; using Mapster; using Microsoft.AspNetCore.Authentication; using Org.BouncyCastle.Asn1; +using DOAN.Service.MES.mm.line; +using DOAN.Service.MES.mm.line.IService; namespace DOAN.Service.MES.product { - /// - /// 报工表Service业务层处理 - /// - [AppService(ServiceType = typeof(IProReportworkService), ServiceLifetime = LifeTime.Transient)] - public class ProReportworkService : BaseService, IProReportworkService - { - /// - /// 查询报工表列表 - /// - /// - /// - public PagedInfo GetList(ProReportworkQueryDto parm) - { - if (parm.TimeRange != null && parm.TimeRange.Length == 2) - { - parm.TimeRange[0] = parm.TimeRange[0].Date; - // parm.TimeRange[1] = parm.TimeRange[1].Date.AddDays(1); - parm.TimeRange[1] = parm.TimeRange[1].Date; - } + /// + /// 报工表Service业务层处理 + /// + [AppService(ServiceType = typeof(IProReportworkService), ServiceLifetime = LifeTime.Transient)] + public class ProReportworkService : BaseService, IProReportworkService + { + /// + /// 查询报工表列表 + /// + /// + /// + public PagedInfo GetList(ProReportworkQueryDto parm) + { + if (parm.TimeRange != null && parm.TimeRange.Length == 2) + { + parm.TimeRange[0] = parm.TimeRange[0].Date; + // parm.TimeRange[1] = parm.TimeRange[1].Date.AddDays(1); + parm.TimeRange[1] = parm.TimeRange[1].Date; + } - var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(parm.FkWorkorder), (w, r) => w.Workorder.Contains(parm.FkWorkorder)) - .AndIF(!string.IsNullOrEmpty(parm.GroupCode), (w, r) => w.GroupCode == parm.GroupCode) - .AndIF(!string.IsNullOrEmpty(parm.LineCode), (w, r) => w.LineCode == parm.LineCode) - .AndIF(parm.WarehouseconfirmationNum > 0, (w, r) => r.QualifiedNumber > 0) - .AndIF( - parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[0] > DateTime.MinValue, - (w, r) => w.WorkorderDate >= parm.TimeRange[0]) - .AndIF( - parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[1] > DateTime.MinValue, - (w, r) => w.WorkorderDate <= parm.TimeRange[1]) - .AndIF(parm.Status > 0, (w, r) => w.Status == parm.Status) - .AndIF(parm.UnfinishReportwork ==1, (w, r)=>r.FinishedNum() + .AndIF(!string.IsNullOrEmpty(parm.FkWorkorder), (w, r) => w.Workorder.Contains(parm.FkWorkorder)) + .AndIF(!string.IsNullOrEmpty(parm.GroupCode), (w, r) => w.GroupCode == parm.GroupCode) + .AndIF(!string.IsNullOrEmpty(parm.LineCode), (w, r) => w.LineCode == parm.LineCode) + .AndIF(parm.WarehouseconfirmationNum > 0, (w, r) => r.QualifiedNumber > 0) + .AndIF( + parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[0] > DateTime.MinValue, + (w, r) => w.WorkorderDate >= parm.TimeRange[0]) + .AndIF( + parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[1] > DateTime.MinValue, + (w, r) => w.WorkorderDate <= parm.TimeRange[1]) + .AndIF(parm.Status > 0, (w, r) => w.Status == parm.Status) + .AndIF(parm.UnfinishReportwork == 1, (w, r) => r.FinishedNum < r.DispatchNum) + ; - var response = Context.Queryable() - .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) - .Where(predicate.ToExpression()) - .Select((w, r) => new ProReportworkDto - { - Id = r.Id, - ProductionCode = w.ProductionCode, - ProductionName = w.ProductionName, - Specification = w.Specification, - QualifiedNumber = r.QualifiedNumber, - UnqualifiedNumber = r.UnqualifiedNumber, - ReworkNumber = r.ReworkNumber, - ScrapNumber = r.ScrapNumber, - UnfinishedReanson=r.UnfinishedReanson, - WorkorderRamark=w.Remark, - Remark = r.Remark, - Difference = r.QualifiedNumber - r.FinishedNum ?? 0, - FkWorkorder = w.Workorder, - GroupCode = w.GroupCode, - LineCode = w.LineCode, - DispatchNum = w.DeliveryNum ?? 0, - Priority = w.Priority, - Status = w.Status, - Beat = w.Beat, - IsProductPutIn = r.IsProductPutIn - }, true).ToPage_NO_Convert(parm); + var response = Context.Queryable() + .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) + .Where(predicate.ToExpression()) + .Select((w, r) => new ProReportworkDto + { + Id = r.Id, + ProductionCode = w.ProductionCode, + ProductionName = w.ProductionName, + Specification = w.Specification, + QualifiedNumber = r.QualifiedNumber, + UnqualifiedNumber = r.UnqualifiedNumber, + ReworkNumber = r.ReworkNumber, + ScrapNumber = r.ScrapNumber, + UnfinishedReanson = r.UnfinishedReanson, + WorkorderRamark = w.Remark, + Remark = r.Remark, + Difference = r.QualifiedNumber - r.FinishedNum ?? 0, + FkWorkorder = w.Workorder, + GroupCode = w.GroupCode, + LineCode = w.LineCode, + DispatchNum = w.DeliveryNum ?? 0, + Priority = w.Priority, + Status = w.Status, + Beat = w.Beat, + IsProductPutIn = r.IsProductPutIn + }, true).ToPage_NO_Convert(parm); - return response; - } + return response; + } - public PagedInfo GetList_Print(ProReportworkQueryDto parm) - { - if (parm.TimeRange != null && parm.TimeRange.Length == 2) - { - parm.TimeRange[0] = parm.TimeRange[0].Date; - // parm.TimeRange[1] = parm.TimeRange[1].Date.AddDays(1); - parm.TimeRange[1] = parm.TimeRange[1].Date; - } + public PagedInfo GetList_Print(ProReportworkQueryDto parm) + { + if (parm.TimeRange != null && parm.TimeRange.Length == 2) + { + parm.TimeRange[0] = parm.TimeRange[0].Date; + // parm.TimeRange[1] = parm.TimeRange[1].Date.AddDays(1); + parm.TimeRange[1] = parm.TimeRange[1].Date; + } - var predicate = Expressionable.Create() - .AndIF(!string.IsNullOrEmpty(parm.FkWorkorder), (w, r) => w.Workorder.Contains(parm.FkWorkorder)) - .AndIF(!string.IsNullOrEmpty(parm.GroupCode), (w, r) => w.GroupCode == parm.GroupCode) - .AndIF(!string.IsNullOrEmpty(parm.LineCode), (w, r) => w.LineCode == parm.LineCode) - .AndIF(parm.WarehouseconfirmationNum > 0, (w, r) => r.QualifiedNumber > 0) - .AndIF( - parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[0] > DateTime.MinValue, - (w, r) => w.WorkorderDate >= parm.TimeRange[0]) - .AndIF( - parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[1] > DateTime.MinValue, - (w, r) => w.WorkorderDate <= parm.TimeRange[1]) - .AndIF(parm.Status > 0, (w, r) => w.Status == parm.Status) - .AndIF(parm.UnfinishReportwork ==1, (w, r)=>r.FinishedNum() + .AndIF(!string.IsNullOrEmpty(parm.FkWorkorder), (w, r) => w.Workorder.Contains(parm.FkWorkorder)) + .AndIF(!string.IsNullOrEmpty(parm.GroupCode), (w, r) => w.GroupCode == parm.GroupCode) + .AndIF(!string.IsNullOrEmpty(parm.LineCode), (w, r) => w.LineCode == parm.LineCode) + .AndIF(parm.WarehouseconfirmationNum > 0, (w, r) => r.QualifiedNumber > 0) + .AndIF( + parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[0] > DateTime.MinValue, + (w, r) => w.WorkorderDate >= parm.TimeRange[0]) + .AndIF( + parm.TimeRange != null && parm.TimeRange.Length == 2 && parm.TimeRange[1] > DateTime.MinValue, + (w, r) => w.WorkorderDate <= parm.TimeRange[1]) + .AndIF(parm.Status > 0, (w, r) => w.Status == parm.Status) + .AndIF(parm.UnfinishReportwork == 1, (w, r) => r.FinishedNum < r.DispatchNum) + ; - var response = Context.Queryable() - .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) - .Where(predicate.ToExpression()) - .Select((w, r) => new ProReportworkDto - { - Id = r.Id, - ProductionCode = w.ProductionCode, - ProductionName = w.ProductionName, - Specification = w.Specification, - QualifiedNumber = r.QualifiedNumber, - UnqualifiedNumber = r.UnqualifiedNumber, - ReworkNumber = r.ReworkNumber, - ScrapNumber = r.ScrapNumber, - UnfinishedReanson=r.UnfinishedReanson, - WorkorderRamark=w.Remark, - Remark = r.Remark, - Difference = r.QualifiedNumber - r.FinishedNum ?? 0, - FkWorkorder = w.Workorder, - GroupCode = w.GroupCode, - LineCode = w.LineCode, - DispatchNum = w.DeliveryNum ?? 0, - Priority = w.Priority, - Status = w.Status, - Beat = w.Beat, - IsProductPutIn = r.IsProductPutIn - }, true) - .MergeTable() - .OrderBy(t=>new {t.GroupCode,t.ProductionCode}) - //TODO 很奇怪 排序位置不对 差距那么大 - .ToPage_NO_Convert(parm); + var response = Context.Queryable() + .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) + .Where(predicate.ToExpression()) + .Select((w, r) => new ProReportworkDto + { + Id = r.Id, + ProductionCode = w.ProductionCode, + ProductionName = w.ProductionName, + Specification = w.Specification, + QualifiedNumber = r.QualifiedNumber, + UnqualifiedNumber = r.UnqualifiedNumber, + ReworkNumber = r.ReworkNumber, + ScrapNumber = r.ScrapNumber, + UnfinishedReanson = r.UnfinishedReanson, + WorkorderRamark = w.Remark, + Remark = r.Remark, + Difference = r.QualifiedNumber - r.FinishedNum ?? 0, + FkWorkorder = w.Workorder, + GroupCode = w.GroupCode, + LineCode = w.LineCode, + DispatchNum = w.DeliveryNum ?? 0, + Priority = w.Priority, + Status = w.Status, + Beat = w.Beat, + IsProductPutIn = r.IsProductPutIn + }, true) + .MergeTable() + .OrderBy(t => new { t.GroupCode, t.ProductionCode }) + //TODO 很奇怪 排序位置不对 差距那么大 + .ToPage_NO_Convert(parm); - return response; - } + return response; + } - /// - /// 获取详情 - /// - /// - /// - public ProReportwork GetInfo(string Id) - { - var response = Queryable() - .Where(x => x.Id == Id) - .First(); + /// + /// 获取详情 + /// + /// + /// + public ProReportwork GetInfo(string Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); - return response; - } + return response; + } - /// - /// 添加报工表 - /// - /// - /// - public ProReportwork AddProReportwork(ProReportwork model) - { - model.Id = XueHua; + /// + /// 添加报工表 + /// + /// + /// + public ProReportwork AddProReportwork(ProReportwork model) + { + model.Id = XueHua; - return Context.Insertable(model).ExecuteReturnEntity(); - } + return Context.Insertable(model).ExecuteReturnEntity(); + } - /// - /// 修改报工表 - /// - /// - /// - public int UpdateProReportwork(ProReportwork model) - { + /// + /// 修改报工表 + /// + /// + /// + public int UpdateProReportwork(ProReportwork model) + { - //var response = Update(w => w.Id == model.Id, it => new ProReportwork() - //{ - // FkWorkorder = model.FkWorkorder, - // DispatchNum = model.DispatchNum, - // FinishedNum = model.FinishedNum, - // GroupCode = model.GroupCode, - // LineCode = model.LineCode, - // CreatedBy = model.CreatedBy, - // CreatedTime = model.CreatedTime, - // UpdatedBy = model.UpdatedBy, - // UpdatedTime = model.UpdatedTime, - //}); - //return response; - return Update(model, true); - } + //var response = Update(w => w.Id == model.Id, it => new ProReportwork() + //{ + // FkWorkorder = model.FkWorkorder, + // DispatchNum = model.DispatchNum, + // FinishedNum = model.FinishedNum, + // GroupCode = model.GroupCode, + // LineCode = model.LineCode, + // CreatedBy = model.CreatedBy, + // CreatedTime = model.CreatedTime, + // UpdatedBy = model.UpdatedBy, + // UpdatedTime = model.UpdatedTime, + //}); + //return response; + return Update(model, true); + } - public List UserExport(DateTime handleDate) - { - // DateTime AddhandleDate = handleDate.AddDays(1); + public List UserExport(DateTime handleDate) + { + // DateTime AddhandleDate = handleDate.AddDays(1); - return Context.Queryable() - .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) - .Where((w, r) => w.WorkorderDate == handleDate) - .Select((w, r) => new ProReportworkDto() - { - Id = r.Id, - ProductionCode = w.ProductionCode, - ProductionName = w.ProductionName, - Specification = w.Specification, - QualifiedNumber = r.QualifiedNumber, - UnqualifiedNumber = r.UnqualifiedNumber, - ReworkNumber = r.ReworkNumber, - ScrapNumber = r.ScrapNumber, - WorkorderRamark = w.Remark, - Remark = r.Remark, - Difference = r.QualifiedNumber - r.FinishedNum ?? 0, - FkWorkorder = w.Workorder, - GroupCode = w.GroupCode, - LineCode = w.LineCode, - DispatchNum = w.DeliveryNum ?? 0, - Priority = w.Priority, - Status = w.Status, - Beat = w.Beat - }).ToList(); - } + return Context.Queryable() + .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) + .Where((w, r) => w.WorkorderDate == handleDate) + .Select((w, r) => new ProReportworkDto() + { + Id = r.Id, + ProductionCode = w.ProductionCode, + ProductionName = w.ProductionName, + Specification = w.Specification, + QualifiedNumber = r.QualifiedNumber, + UnqualifiedNumber = r.UnqualifiedNumber, + ReworkNumber = r.ReworkNumber, + ScrapNumber = r.ScrapNumber, + WorkorderRamark = w.Remark, + Remark = r.Remark, + Difference = r.QualifiedNumber - r.FinishedNum ?? 0, + FkWorkorder = w.Workorder, + GroupCode = w.GroupCode, + LineCode = w.LineCode, + DispatchNum = w.DeliveryNum ?? 0, + Priority = w.Priority, + Status = w.Status, + Beat = w.Beat + }).ToList(); + } - /// - /// 如果没有id 传入工单 手动生成报工记录 - /// - /// - /// - public string ManualGenerationOfReportWork(string workorder, string CreatedBy) - { - string ReportWork_Id = Context.Queryable().Where(it => it.FkWorkorder == workorder) - .Select(it => it.Id).First(); + /// + /// 如果没有id 传入工单 手动生成报工记录 + /// + /// + /// + public string ManualGenerationOfReportWork(string workorder, string CreatedBy) + { + string ReportWork_Id = Context.Queryable().Where(it => it.FkWorkorder == workorder) + .Select(it => it.Id).First(); - if (!string.IsNullOrEmpty(ReportWork_Id)) - { - return ReportWork_Id; - } + if (!string.IsNullOrEmpty(ReportWork_Id)) + { + return ReportWork_Id; + } - ProWorkorder handleWorkorder = - Context.Queryable().Where(it => it.Workorder == workorder).First(); - ProReportwork proReportwork = new - ProReportwork(); - proReportwork.Id = XueHua; - proReportwork.FkWorkorder = workorder; - proReportwork.DispatchNum = handleWorkorder.DeliveryNum; - proReportwork.FinishedNum = null; - proReportwork.GroupCode = handleWorkorder.GroupCode; - proReportwork.LineCode = handleWorkorder.LineCode; - proReportwork.CreatedBy = CreatedBy; - proReportwork.CreatedTime = DateTime.Now; + ProWorkorder handleWorkorder = + Context.Queryable().Where(it => it.Workorder == workorder).First(); + ProReportwork proReportwork = new + ProReportwork(); + proReportwork.Id = XueHua; + proReportwork.FkWorkorder = workorder; + proReportwork.DispatchNum = handleWorkorder.DeliveryNum; + proReportwork.FinishedNum = null; + proReportwork.GroupCode = handleWorkorder.GroupCode; + proReportwork.LineCode = handleWorkorder.LineCode; + proReportwork.CreatedBy = CreatedBy; + proReportwork.CreatedTime = DateTime.Now; - ProReportwork proReportwork1 = Context.Insertable(proReportwork).ExecuteReturnEntity(); + ProReportwork proReportwork1 = Context.Insertable(proReportwork).ExecuteReturnEntity(); - return proReportwork1.Id; - } + return proReportwork1.Id; + } + /// + /// 成品批量入库 + /// + /// + /// + /// + /// + public int batchPutInFinProduct(DateTime startTime, DateTime endTime) + { + MmLineInventoryService mmLineInventoryService = new MmLineInventoryService(); + if (startTime <= DateTime.MinValue || endTime <= DateTime.MinValue) + { + throw new Exception("日期筛选条件不对"); + } + List proReportworkDtos = Context.Queryable() + .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) + .Where((w, r) => r.CreatedTime >= startTime && r.CreatedTime <= endTime).Select((w, r) => new ProReportworkDto() + { + FkWorkorder=r.FkWorkorder, + LineCode=r.LineCode, + ProductionCode = w.ProductionCode, + ProductionName = w.ProductionName, + QualifiedNumber = r.QualifiedNumber, + }).Distinct().ToList(); - } + foreach (var item in proReportworkDtos) + { + // 查看需要的子件 + var bomList = Context.Queryable().Where(it => it.InvCode == item.ProductionCode).ToList(); + foreach (BaseMaterialBom bom in bomList) + { + decimal quantity = 0; + if (decimal.TryParse(bom.Iusequantity, out decimal res)) + { + quantity = res* item.QualifiedNumber.Value; + } + + + mmLineInventoryService.outboundLineMaterial(3, item.LineCode, bom.SubInvCode, item.FkWorkorder, item.LineCode, quantity); + } + } + + + return 0; + + } + + /// + /// 成品单个入库/驳回 + /// + /// + /// 1入库 2驳回 + /// + /// + public int putInAndReject(string Id, int type) + { + int result = 0; + MmLineInventoryService mmLineInventoryService = new MmLineInventoryService(); + ProReportworkDto proReportworkDto = Context.Queryable() + .LeftJoin((w, r) => w.Workorder == r.FkWorkorder) + .Where((w, r) => r.Id == Id).Select((w, r) => new ProReportworkDto() + { + FkWorkorder = r.FkWorkorder, + LineCode = r.LineCode, + ProductionCode = w.ProductionCode, + ProductionName = w.ProductionName, + QualifiedNumber = r.QualifiedNumber, + }).First(); + // 查看需要的子件 + var bomList = Context.Queryable().Where(it => it.InvCode == proReportworkDto.ProductionCode).ToList(); + if (type == 1) + { + foreach (BaseMaterialBom bom in bomList) + { + decimal quantity = 0; + if (decimal.TryParse(bom.Iusequantity, out decimal res)) + { + quantity = res * proReportworkDto.QualifiedNumber.Value; + } + result=mmLineInventoryService.outboundLineMaterial(3, proReportworkDto.LineCode, bom.SubInvCode, proReportworkDto.FkWorkorder, proReportworkDto.LineCode, quantity); + } + } + else + { + foreach (BaseMaterialBom bom in bomList) + { + decimal quantity = 0; + if (decimal.TryParse(bom.Iusequantity, out decimal res)) + { + quantity = res * proReportworkDto.QualifiedNumber.Value; + } + result=mmLineInventoryService.putInLineMaterial(3, proReportworkDto.LineCode, bom.SubInvCode, "001", proReportworkDto.LineCode, quantity); + } + } + + + return result; + } + } } \ No newline at end of file