using System.Diagnostics; using DOAN.Model; using DOAN.Model.MES.base_; using DOAN.Model.MES.base_.Dto; using DOAN.Model.MES.order; using DOAN.Model.MES.product; using DOAN.Model.Mobile.ReportFlow.Dto; using DOAN.Model.Public; using DOAN.Model.System; using DOAN.Repository; using DOAN.Service.Mobile.IService; using DOAN.Service.Public.IPublicService; using Infrastructure.Attribute; using JinianNet.JNTemplate; using Mapster; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula.Functions; using SqlSugar.DistributedSystem.Snowflake; namespace DOAN.Service.Mobile; /// /// 广告管理Service业务层处理 /// [AppService(ServiceType = typeof(IReportFlowService), ServiceLifetime = LifeTime.Transient)] public class ReportFlowService : BaseService, IReportFlowService { public ProWorkorder GetWorkOrderDetail(string workorder) { return Context.Queryable().Where(x => x.Workorder == workorder).First(); } public List GetWorkOrdersByDate(DateTime startDate, DateTime endDate) { return Context .Queryable() .Where(it => it.WorkorderDate >= startDate && it.WorkorderDate <= endDate) .ToList(); } public ProReportwork01 GetProcessReportWorkDetail(string workorder, int process) { return Context .Queryable() .Where(x => x.Workorder == workorder && x.ProcessId == process) .First(); } /// /// 首工序报工 /// /// /// /// /// /// /// /// public bool FeedProcessReportwork( string workorder, int processId, int finish_num, string stove_code, string feed_order, string Worker ) { int result = 0; bool Exist = Context .Queryable() .Where(it => it.Workorder == workorder && it.ProcessId == processId) .Any(); string NickName = Context .Queryable() .Where(it => it.UserName == Worker) .Select(it => it.NickName) .First(); Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName; if (Exist) { result = Context .Updateable() .Where(it => it.Workorder == workorder && it.ProcessId == processId) .SetColumns(it => it.FinishNum == finish_num) .SetColumns(it => it.Worker == Worker) .SetColumns(it => it.JobDateTime == DateTime.Now) .SetColumns(it => it.RouteId == 32) .SetColumns(it => it.UpdatedBy == Worker) .SetColumns(it => it.UpdatedTime == DateTime.Now) .ExecuteCommand(); Context .Updateable() .Where(it => it.Workorder == workorder) .SetColumns(it => it.StoveCode == stove_code) .SetColumns(it => it.FeedOrder == feed_order) .ExecuteCommand(); } else { ProReportwork01 proReportwork01 = new ProReportwork01(); proReportwork01.Id = XueHua; proReportwork01.Workorder = workorder; proReportwork01.ProcessId = processId; proReportwork01.FinishNum = finish_num; proReportwork01.RouteId = 32; proReportwork01.Worker = Worker; proReportwork01.JobDateTime = DateTime.Now; proReportwork01.CreatedBy = Worker; proReportwork01.CreatedTime = DateTime.Now; result = Context.Insertable(proReportwork01).ExecuteCommand(); Context .Updateable() .Where(it => it.Workorder == workorder) .SetColumns(it => it.StoveCode == stove_code) .SetColumns(it => it.FeedOrder == feed_order) .ExecuteCommand(); } return result > 0; } public bool ProcessReportWork( string workorder, int process, int finish_num, int bad_num, string Worker ) { int result = 0; bool Exist = Context .Queryable() .Where(it => it.Workorder == workorder && it.ProcessId == process) .Any(); string NickName = Context .Queryable() .Where(it => it.UserName == Worker) .Select(it => it.NickName) .First(); Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName; if (Exist) { result = Context .Updateable() .Where(it => it.Workorder == workorder && it.ProcessId == process) .SetColumns(it => it.FinishNum == finish_num) .SetColumns(it => it.BadNum == bad_num) .SetColumns(it => it.Worker == Worker) .SetColumns(it => it.RouteId == 32) .SetColumns(it => it.JobDateTime == DateTime.Now) .SetColumns(it => it.UpdatedBy == Worker) .SetColumns(it => it.UpdatedTime == DateTime.Now) .ExecuteCommand(); } else { ProReportwork01 proReportwork01 = new ProReportwork01(); proReportwork01.Id = XueHua; proReportwork01.Workorder = workorder; proReportwork01.ProcessId = process; proReportwork01.FinishNum = finish_num; proReportwork01.BadNum = bad_num; proReportwork01.Worker = Worker; proReportwork01.RouteId = 32; proReportwork01.JobDateTime = DateTime.Now; proReportwork01.CreatedBy = Worker; proReportwork01.CreatedTime = DateTime.Now; result = Context.Insertable(proReportwork01).ExecuteCommand(); } return result > 0; } /// /// 出货工序报工 /// /// /// /// /// /// 客户订单号 /// /// public int ShipmentProcessReportwork( string workorder, int processId, int finish_num, int bad_num, string customer_order, string Worker ) { try { //TODO 20250411 采购订单号和工单号是否匹配逻辑不适配实际情况,进行修改 // 判断订单号是否存在 OrderPurchase orderPurchase = Context .Queryable() .Where(o => o.OrderNoMes == customer_order) .First(); if (orderPurchase == null) { // 订单号不存在 return 2; } // 判断工单是否存在 ProWorkorder workorderInfo = Context .Queryable() .Where(it => it.Workorder == workorder) .First(); if (workorderInfo == null) { // 工单不存在 return 4; } // 判断工单主体型号和订单物料号是否匹配 if(workorderInfo.productionCode != orderPurchase.MaterialCode) { return 5; } string NickName = Context .Queryable() .Where(it => it.UserName == Worker) .Select(it => it.NickName) .First(); Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName; int result = 0; // 判断报工信息是否存在 Context.Ado.BeginTran(); // 更新报工信息 ProReportwork01 ReportWorkOrderDetail = Context .Queryable() .Where(it => it.Workorder == workorder && it.ProcessId == processId) .First(); if (ReportWorkOrderDetail == null) { // 新增 ProReportwork01 proReportwork01 = new() { Id = XueHua, Workorder = workorder, ProcessId = processId, FinishNum = finish_num, BadNum = bad_num, Worker = Worker, RouteId = 32, JobDateTime = DateTime.Now, CreatedBy = Worker, CreatedTime = DateTime.Now }; result = Context.Insertable(proReportwork01).ExecuteCommand(); } else { // 修改 ReportWorkOrderDetail.FinishNum = finish_num; ReportWorkOrderDetail.BadNum = bad_num; ReportWorkOrderDetail.Worker = Worker; ReportWorkOrderDetail.UpdatedBy = Worker; ReportWorkOrderDetail.UpdatedTime = DateTime.Now; result = Context.Updateable(ReportWorkOrderDetail).ExecuteCommand(); } // 修改工单信息 Context .Updateable() .Where(it => it.Workorder == workorder) .SetColumns(it => it.ShipmentNum == finish_num) .SetColumns(it => it.CustomerOrder == customer_order) .ExecuteCommand(); // 修改采购订单信息 int newQuantity = Context .Queryable() .Where(it => it.CustomerOrder == customer_order) .Sum(it => it.ShipmentNum) ?? 0; orderPurchase.DeliveryQuantity = newQuantity; if (orderPurchase.DeliveryQuantity > orderPurchase.DemandQuantity) { // 订单超额了 Context.Ado.RollbackTran(); return 3; } if (orderPurchase.DeliveryQuantity == orderPurchase.DemandQuantity) { orderPurchase.Orderindicator = 1; } else { orderPurchase.Orderindicator = 0; } int res = Context.Updateable(orderPurchase).ExecuteCommand(); Context.Ado.CommitTran(); return result > 0 ? 1 : 0; } catch (Exception) { Context.Ado.RollbackTran(); throw; } } public List GetWorkOrderReportWorkList(string workorder) { return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) .Where((rw, wp) => rw.Workorder == workorder) .OrderBy(rw => rw.ProcessId) .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) .ToList(); } public PagedInfo GetReportInfoByName(ProReportWorkDto2 query) { string NickName = Context .Queryable() .Where(it => it.UserName == query.name) .Select(it => it.NickName) .First(); query.name = string.IsNullOrEmpty(NickName) ? query.name + "|异常人员|" : NickName; return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) .Where( (rw, wp) => rw.Worker == query.name && rw.JobDateTime >= DateTime.Today && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) .ToPage_NO_Convert(query); } public List GetProcessByRoute(int route_id) { return Context .Queryable() .LeftJoin((rel, pro) => rel.FkWorkProcesses == pro.Id) .Where((rel, pro) => rel.FkWorkRoute == route_id) .Select((rel, pro) => pro) .ToList() .Adapt, List>(); } public PagedInfo GetReportByProcessId(ProReportWorkDto3 query) { return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) .Where( (rw, wp) => rw.ProcessId == query.processId && rw.JobDateTime >= DateTime.Today && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true) .ToPage_NO_Convert(query); } }