BeizeValveBackend/DOAN.Service/Mobile/ReportFlowService.cs

369 lines
13 KiB
C#
Raw Normal View History

2025-04-11 15:16:52 +08:00
using System.Diagnostics;
2024-12-23 18:34:58 +08:00
using DOAN.Model;
2024-12-03 20:10:18 +08:00
using DOAN.Model.MES.base_;
2024-12-21 10:02:13 +08:00
using DOAN.Model.MES.base_.Dto;
2025-02-18 14:29:42 +08:00
using DOAN.Model.MES.order;
2024-12-03 19:21:32 +08:00
using DOAN.Model.MES.product;
2024-12-03 20:10:18 +08:00
using DOAN.Model.Mobile.ReportFlow.Dto;
2024-12-03 19:21:32 +08:00
using DOAN.Model.Public;
2024-12-16 13:46:46 +08:00
using DOAN.Model.System;
2024-12-23 18:34:58 +08:00
using DOAN.Repository;
2024-12-03 19:21:32 +08:00
using DOAN.Service.Mobile.IService;
using DOAN.Service.Public.IPublicService;
using Infrastructure.Attribute;
2025-04-11 15:16:52 +08:00
using JinianNet.JNTemplate;
2024-12-21 10:02:13 +08:00
using Mapster;
2025-04-11 15:16:52 +08:00
using Microsoft.AspNetCore.Authentication;
2024-12-03 19:21:32 +08:00
using Microsoft.AspNetCore.Mvc;
2025-03-12 17:31:32 +08:00
using NPOI.SS.Formula.Functions;
2024-12-10 16:41:20 +08:00
using SqlSugar.DistributedSystem.Snowflake;
2024-12-03 19:21:32 +08:00
namespace DOAN.Service.Mobile;
/// <summary>
/// 广告管理Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IReportFlowService), ServiceLifetime = LifeTime.Transient)]
public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowService
{
public ProWorkorder GetWorkOrderDetail(string workorder)
{
2024-12-03 19:39:52 +08:00
return Context.Queryable<ProWorkorder>().Where(x => x.Workorder == workorder).First();
}
2025-04-11 15:16:52 +08:00
2024-12-21 10:02:13 +08:00
public List<ProWorkorder> GetWorkOrdersByDate(DateTime startDate, DateTime endDate)
{
2025-04-11 15:16:52 +08:00
return Context
.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate >= startDate && it.WorkorderDate <= endDate)
.ToList();
2024-12-21 10:02:13 +08:00
}
2024-12-03 19:39:52 +08:00
2024-12-03 20:10:18 +08:00
public ProReportwork01 GetProcessReportWorkDetail(string workorder, int process)
2024-12-03 19:39:52 +08:00
{
2025-04-11 15:16:52 +08:00
return Context
.Queryable<ProReportwork01>()
.Where(x => x.Workorder == workorder && x.ProcessId == process)
.First();
2024-12-03 19:39:52 +08:00
}
2024-12-10 16:54:57 +08:00
2024-12-10 16:41:20 +08:00
/// <summary>
/// 首工序报工
/// </summary>
/// <param name="workorder"></param>
/// <param name="processId"></param>
/// <param name="finish_num"></param>
/// <param name="stove_code"></param>
/// <param name="feed_order"></param>
/// <param name="Worker"></param>
/// <returns></returns>
2025-04-11 15:16:52 +08:00
public bool FeedProcessReportwork(
string workorder,
int processId,
int finish_num,
string stove_code,
string feed_order,
string Worker
)
2024-12-03 19:39:52 +08:00
{
int result = 0;
2025-04-11 15:16:52 +08:00
bool Exist = Context
.Queryable<ProReportwork01>()
.Where(it => it.Workorder == workorder && it.ProcessId == processId)
.Any();
2024-12-16 13:46:46 +08:00
2025-04-11 15:16:52 +08:00
string NickName = Context
.Queryable<SysUser>()
.Where(it => it.UserName == Worker)
.Select(it => it.NickName)
.First();
2024-12-19 19:44:47 +08:00
Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName;
2024-12-10 16:41:20 +08:00
if (Exist)
{
2025-04-11 15:16:52 +08:00
result = Context
.Updateable<ProReportwork01>()
.Where(it => it.Workorder == workorder && it.ProcessId == processId)
2024-12-10 16:41:20 +08:00
.SetColumns(it => it.FinishNum == finish_num)
.SetColumns(it => it.Worker == Worker)
2024-12-23 14:00:01 +08:00
.SetColumns(it => it.JobDateTime == DateTime.Now)
2025-04-11 15:16:52 +08:00
.SetColumns(it => it.RouteId == 32)
2024-12-10 16:41:20 +08:00
.SetColumns(it => it.UpdatedBy == Worker)
.SetColumns(it => it.UpdatedTime == DateTime.Now)
.ExecuteCommand();
2025-04-11 15:16:52 +08:00
Context
.Updateable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
2024-12-10 16:54:57 +08:00
.SetColumns(it => it.StoveCode == stove_code)
.SetColumns(it => it.FeedOrder == feed_order)
2024-12-10 16:41:20 +08:00
.ExecuteCommand();
}
else
{
ProReportwork01 proReportwork01 = new ProReportwork01();
proReportwork01.Id = XueHua;
proReportwork01.Workorder = workorder;
proReportwork01.ProcessId = processId;
proReportwork01.FinishNum = finish_num;
2024-12-22 15:12:10 +08:00
proReportwork01.RouteId = 32;
2024-12-10 16:41:20 +08:00
proReportwork01.Worker = Worker;
2024-12-23 14:00:01 +08:00
proReportwork01.JobDateTime = DateTime.Now;
2024-12-10 16:41:20 +08:00
proReportwork01.CreatedBy = Worker;
proReportwork01.CreatedTime = DateTime.Now;
result = Context.Insertable(proReportwork01).ExecuteCommand();
2025-04-11 15:16:52 +08:00
Context
.Updateable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.SetColumns(it => it.StoveCode == stove_code)
.SetColumns(it => it.FeedOrder == feed_order)
.ExecuteCommand();
2024-12-10 16:41:20 +08:00
}
return result > 0;
}
2025-04-11 15:16:52 +08:00
public bool ProcessReportWork(
string workorder,
int process,
int finish_num,
int bad_num,
string Worker
)
2024-12-10 16:41:20 +08:00
{
int result = 0;
2025-04-11 15:16:52 +08:00
bool Exist = Context
.Queryable<ProReportwork01>()
.Where(it => it.Workorder == workorder && it.ProcessId == process)
.Any();
string NickName = Context
.Queryable<SysUser>()
.Where(it => it.UserName == Worker)
.Select(it => it.NickName)
.First();
2024-12-19 19:44:47 +08:00
Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName;
2024-12-10 16:41:20 +08:00
if (Exist)
{
2025-04-11 15:16:52 +08:00
result = Context
.Updateable<ProReportwork01>()
.Where(it => it.Workorder == workorder && it.ProcessId == process)
2024-12-10 16:41:20 +08:00
.SetColumns(it => it.FinishNum == finish_num)
.SetColumns(it => it.BadNum == bad_num)
.SetColumns(it => it.Worker == Worker)
2024-12-22 15:12:10 +08:00
.SetColumns(it => it.RouteId == 32)
2024-12-23 14:00:01 +08:00
.SetColumns(it => it.JobDateTime == DateTime.Now)
2024-12-10 16:41:20 +08:00
.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;
2024-12-22 15:12:10 +08:00
proReportwork01.RouteId = 32;
2024-12-23 14:00:01 +08:00
proReportwork01.JobDateTime = DateTime.Now;
2024-12-10 16:41:20 +08:00
proReportwork01.CreatedBy = Worker;
proReportwork01.CreatedTime = DateTime.Now;
result = Context.Insertable(proReportwork01).ExecuteCommand();
}
return result > 0;
2024-12-03 19:21:32 +08:00
}
2024-12-03 19:51:09 +08:00
2024-12-10 16:41:20 +08:00
/// <summary>
/// 出货工序报工
/// </summary>
/// <param name="workorder"></param>
/// <param name="processId"></param>
/// <param name="finish_num"></param>
/// <param name="bad_num"></param>
2025-04-11 15:16:52 +08:00
/// <param name="customer_order">客户订单号</param>
2024-12-10 16:41:20 +08:00
/// <param name="Worker"></param>
/// <returns></returns>
2025-04-11 15:16:52 +08:00
public int ShipmentProcessReportwork(
string workorder,
int processId,
int finish_num,
int bad_num,
string customer_order,
string Worker
)
2024-12-10 16:41:20 +08:00
{
2025-04-11 15:16:52 +08:00
try
2025-03-12 17:31:32 +08:00
{
2025-04-11 15:16:52 +08:00
//TODO 20250411 采购订单号和工单号是否匹配逻辑不适配实际情况,进行修改
2025-03-12 17:31:32 +08:00
2025-04-11 15:16:52 +08:00
// 判断订单号是否存在
OrderPurchase orderPurchase = Context
.Queryable<OrderPurchase>()
.Where(o => o.OrderNoMes == customer_order)
.First();
if (orderPurchase == null)
2025-02-18 13:26:50 +08:00
{
2025-04-11 15:16:52 +08:00
// 订单号不存在
return 2;
}
// 判断工单是否存在
ProWorkorder workorderInfo =
Context
.Queryable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.First();
if (workorderInfo == null)
{
// 工单不存在
return 4;
}
// 判断工单主体型号和订单物料号是否匹配
if(workorderInfo.productionCode != orderPurchase.MaterialCode)
{
return 5;
}
2025-04-11 15:16:52 +08:00
string NickName = Context
.Queryable<SysUser>()
.Where(it => it.UserName == Worker)
.Select(it => it.NickName)
.First();
Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName;
2025-02-18 13:26:50 +08:00
2025-04-11 15:16:52 +08:00
int result = 0;
2024-12-10 16:41:20 +08:00
2025-04-11 15:16:52 +08:00
// 判断报工信息是否存在
Context.Ado.BeginTran();
// 更新报工信息
ProReportwork01 ReportWorkOrderDetail = Context
.Queryable<ProReportwork01>()
.Where(it => it.Workorder == workorder && it.ProcessId == processId)
.First();
if (ReportWorkOrderDetail == null)
2025-02-18 13:26:50 +08:00
{
2025-04-11 15:16:52 +08:00
// 新增
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
};
2025-02-18 13:26:50 +08:00
result = Context.Insertable(proReportwork01).ExecuteCommand();
2025-04-11 15:16:52 +08:00
}
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<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.SetColumns(it => it.ShipmentNum == finish_num)
.SetColumns(it => it.CustomerOrder == customer_order)
.ExecuteCommand();
// 修改采购订单信息
int newQuantity =
Context
.Queryable<ProWorkorder>()
.Where(it => it.CustomerOrder == customer_order)
.Sum(it => it.ShipmentNum) ?? 0;
2025-04-11 15:16:52 +08:00
orderPurchase.DeliveryQuantity = newQuantity;
if (orderPurchase.DeliveryQuantity > orderPurchase.DemandQuantity)
2025-04-11 15:16:52 +08:00
{
// 订单超额了
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;
2024-12-10 16:41:20 +08:00
}
}
2024-12-03 19:51:09 +08:00
2024-12-03 20:10:18 +08:00
public List<ProReportWorkDetialDto> GetWorkOrderReportWorkList(string workorder)
2024-12-03 19:51:09 +08:00
{
2025-04-11 15:16:52 +08:00
return Context
.Queryable<ProReportwork01>()
2024-12-03 20:10:18 +08:00
.LeftJoin<BaseWorkProcesses>((rw, wp) => rw.ProcessId == wp.Id)
.Where((rw, wp) => rw.Workorder == workorder)
.OrderBy(rw => rw.ProcessId)
2025-04-11 15:16:52 +08:00
.Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name, }, true)
2024-12-03 20:10:18 +08:00
.ToList();
2024-12-21 10:02:13 +08:00
}
2024-12-23 18:34:58 +08:00
public PagedInfo<ProReportWorkDetialDto> GetReportInfoByName(ProReportWorkDto2 query)
2024-12-21 10:02:13 +08:00
{
2025-04-11 15:16:52 +08:00
string NickName = Context
.Queryable<SysUser>()
.Where(it => it.UserName == query.name)
.Select(it => it.NickName)
.First();
2024-12-23 18:34:58 +08:00
query.name = string.IsNullOrEmpty(NickName) ? query.name + "|异常人员|" : NickName;
2024-12-03 20:10:18 +08:00
2025-04-11 15:16:52 +08:00
return Context
.Queryable<ProReportwork01>()
.LeftJoin<BaseWorkProcesses>((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);
2024-12-21 10:02:13 +08:00
}
public List<BaseWorkProcessesDto> GetProcessByRoute(int route_id)
{
2025-04-11 15:16:52 +08:00
return Context
.Queryable<BaseRelWorkRouteProcesses>()
.LeftJoin<BaseWorkProcesses>((rel, pro) => rel.FkWorkProcesses == pro.Id)
.Where((rel, pro) => rel.FkWorkRoute == route_id)
.Select((rel, pro) => pro)
.ToList()
.Adapt<List<BaseWorkProcesses>, List<BaseWorkProcessesDto>>();
2024-12-21 10:02:13 +08:00
}
2024-12-03 20:10:18 +08:00
2024-12-23 18:34:58 +08:00
public PagedInfo<ProReportWorkDetialDto> GetReportByProcessId(ProReportWorkDto3 query)
2024-12-21 10:02:13 +08:00
{
2025-04-11 15:16:52 +08:00
return Context
.Queryable<ProReportwork01>()
.LeftJoin<BaseWorkProcesses>((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);
2024-12-03 19:51:09 +08:00
}
2024-12-03 19:21:32 +08:00
}