2025-11-22 10:14:35 +08:00
|
|
|
|
using Aliyun.OSS;
|
2025-11-12 17:32:28 +08:00
|
|
|
|
using Infrastructure.Attribute;
|
|
|
|
|
|
using Infrastructure.Extensions;
|
2025-11-18 14:54:03 +08:00
|
|
|
|
using RIZO.Model.Mes.Dto.GatherData;
|
2025-11-18 11:39:58 +08:00
|
|
|
|
using RIZO.Model.Mes.Dto.WorkOrderInfo;
|
2025-11-18 14:54:03 +08:00
|
|
|
|
using RIZO.Model.Mes.MasterData;
|
2025-11-18 11:39:58 +08:00
|
|
|
|
using RIZO.Model.Mes.WorkOrderInfo;
|
2025-11-12 17:32:28 +08:00
|
|
|
|
using RIZO.Repository;
|
2025-11-18 14:54:03 +08:00
|
|
|
|
using RIZO.Service.Mes.IMesService.MasterData;
|
2025-11-18 11:39:58 +08:00
|
|
|
|
using RIZO.Service.Mes.IMesService.WorkOrderInfo;
|
2025-11-18 14:54:03 +08:00
|
|
|
|
using RIZO.Service.Mes.MasterData;
|
2025-11-12 17:32:28 +08:00
|
|
|
|
|
2025-11-18 11:39:58 +08:00
|
|
|
|
namespace RIZO.Service.Mes.WorkOrderInfo
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 工单主表Service业务层处理
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[AppService(ServiceType = typeof(IWorkOrderService), ServiceLifetime = LifeTime.Transient)]
|
2025-11-18 11:39:58 +08:00
|
|
|
|
public class WorkOrderService : BaseService<WorkOrder>, IWorkOrderService
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
2025-11-18 14:54:03 +08:00
|
|
|
|
private PlcFirstCodeService plcFirstCodeService = new PlcFirstCodeService();
|
|
|
|
|
|
private WorkOrderItemService workOrderItemService = new WorkOrderItemService();
|
|
|
|
|
|
|
2025-11-12 17:32:28 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 查询工单主表列表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public PagedInfo<WorkOrderDto> GetList(WorkOrderQueryDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var predicate = QueryExp(parm);
|
|
|
|
|
|
|
|
|
|
|
|
var response = Queryable()
|
|
|
|
|
|
.Where(predicate.ToExpression())
|
2025-11-18 11:39:58 +08:00
|
|
|
|
.ToPage<WorkOrder, WorkOrderDto>(parm);
|
2025-11-12 17:32:28 +08:00
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-18 19:17:51 +08:00
|
|
|
|
public PagedInfo<WorkOrderDto> GetListExport(WorkOrderQueryDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var predicate = QueryExpExport(parm);
|
|
|
|
|
|
|
|
|
|
|
|
var response = Queryable()
|
|
|
|
|
|
.Where(predicate.ToExpression())
|
|
|
|
|
|
.ToPage<WorkOrder, WorkOrderDto>(parm);
|
|
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-11-12 17:32:28 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 获取详情
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="Id"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-11-18 11:39:58 +08:00
|
|
|
|
public WorkOrder GetInfo(long Id)
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
var response = Queryable()
|
|
|
|
|
|
.Where(x => x.Id == Id)
|
|
|
|
|
|
.First();
|
|
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 添加工单主表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="model"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-11-18 11:39:58 +08:00
|
|
|
|
public WorkOrder AddWorkOrder(WorkOrder model)
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
return Insertable(model).ExecuteReturnEntity();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 修改工单主表
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="model"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-11-18 11:39:58 +08:00
|
|
|
|
public int UpdateWorkOrder(WorkOrder model)
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
return Update(model, true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-11-18 19:17:51 +08:00
|
|
|
|
/// 查询表达式
|
2025-11-12 17:32:28 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-11-18 11:39:58 +08:00
|
|
|
|
private static Expressionable<WorkOrder> QueryExp(WorkOrderQueryDto parm)
|
2025-11-12 17:32:28 +08:00
|
|
|
|
{
|
2025-11-18 11:39:58 +08:00
|
|
|
|
var predicate = Expressionable.Create<WorkOrder>();
|
2025-11-18 14:54:03 +08:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(parm.LineCode))
|
|
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.LineCode.Contains(parm.LineCode));
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(parm.LineName))
|
|
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.LineName.Contains(parm.LineName));
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(parm.WorkOrderCode))
|
|
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.WorkOrderCode.Contains(parm.WorkOrderCode));
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(parm.OrderDate))
|
|
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.OrderDate.Contains(parm.OrderDate));
|
|
|
|
|
|
}
|
2025-11-12 17:32:28 +08:00
|
|
|
|
return predicate;
|
|
|
|
|
|
}
|
2025-11-18 14:54:03 +08:00
|
|
|
|
|
2025-11-18 19:17:51 +08:00
|
|
|
|
private static Expressionable<WorkOrder> QueryExpExport(WorkOrderQueryDto parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
var predicate = Expressionable.Create<WorkOrder>();
|
2025-11-18 19:51:59 +08:00
|
|
|
|
if (parm.StartTime != null && parm.StartTime.ToString().Length > 0)
|
2025-11-18 19:17:51 +08:00
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.CreateTime >= parm.StartTime);
|
|
|
|
|
|
}
|
2025-11-18 19:51:59 +08:00
|
|
|
|
if (parm.EndTime != null && parm.EndTime.ToString().Length > 0)
|
2025-11-18 19:17:51 +08:00
|
|
|
|
{
|
|
|
|
|
|
predicate.And(it => it.CreateTime < parm.EndTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
return predicate;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-11-22 10:14:35 +08:00
|
|
|
|
public WorkOrder CreateWorkOrderBySacnCode(FlowCard flowCard)
|
2025-11-18 14:54:03 +08:00
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2025-11-22 10:14:35 +08:00
|
|
|
|
WorkOrder orderInfoNew = new WorkOrder();
|
|
|
|
|
|
//扫码信息转成FlowCard对象
|
|
|
|
|
|
//假设扫码结果是json形式
|
|
|
|
|
|
//{
|
|
|
|
|
|
// "FlowCardNo": "0001",
|
|
|
|
|
|
// "MaterialCode": "GEAR-001",
|
|
|
|
|
|
// "MaterialName": "齿轮(A型)",
|
|
|
|
|
|
// "BatchNumber": "Batch-20251122-01",
|
|
|
|
|
|
// "TotalQty": 100
|
|
|
|
|
|
//}
|
|
|
|
|
|
//字符串转对象
|
|
|
|
|
|
//FlowCard flowCard = JsonConvert.DeserializeObject<FlowCard>(ScanCode);
|
2025-11-18 14:54:03 +08:00
|
|
|
|
//根据IDCode解析的数据去检索物料档案
|
2025-11-22 13:56:40 +08:00
|
|
|
|
//var material = materialInfoService.Queryable().Where(it => it.MaterialCode == flowCard.MaterialCode).First();
|
|
|
|
|
|
//if (material != null)
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
string strDay = DateTime.Now.ToString("yyyyMMdd");
|
|
|
|
|
|
//检验流卡二维码生成的工单是否重复生成
|
|
|
|
|
|
var WorkOrder = Queryable()
|
|
|
|
|
|
.Where(it => it.WorkOrderCode == flowCard.FlowCardNo).First(); ;
|
|
|
|
|
|
if (WorkOrder == null)
|
2025-11-18 14:54:03 +08:00
|
|
|
|
{
|
2025-11-22 13:56:40 +08:00
|
|
|
|
orderInfoNew.OrderDate = strDay;
|
|
|
|
|
|
orderInfoNew.WorkOrderCode = flowCard.FlowCardNo;
|
|
|
|
|
|
orderInfoNew.MaterialCode = flowCard.MaterialCode;
|
|
|
|
|
|
orderInfoNew.MaterialName = flowCard.MaterialName;
|
|
|
|
|
|
orderInfoNew.BatchNumber = flowCard.BatchNumber;
|
|
|
|
|
|
orderInfoNew.TotalQty = flowCard.TotalQty;
|
|
|
|
|
|
orderInfoNew.OrderDate = strDay;
|
|
|
|
|
|
orderInfoNew.OrderStatus = 1;
|
|
|
|
|
|
//根据前端是否能返回UserId
|
|
|
|
|
|
//orderInfoNew.CreateBy = parm.UserId;
|
|
|
|
|
|
//orderInfoNew.CreateName = parm.UserName;
|
|
|
|
|
|
//orderInfoNew.UpdateBy = parm.UserId;
|
|
|
|
|
|
//orderInfoNew.UpdateName = parm.UserName;
|
|
|
|
|
|
orderInfoNew.CreateTime = DateTime.Now;
|
|
|
|
|
|
orderInfoNew.UpdateTime = DateTime.Now;
|
|
|
|
|
|
int iFlag = Update(orderInfoNew);
|
2025-11-18 14:54:03 +08:00
|
|
|
|
}
|
2025-11-22 10:14:35 +08:00
|
|
|
|
return orderInfoNew;
|
2025-11-18 14:54:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//根据工单主表号去创建工单从表数据
|
2025-11-22 13:56:40 +08:00
|
|
|
|
//private WorkOrderItem createWorkOrderItem(string strWorkOrderCode, string strMaterialCode, string strLineCode, string strLineName, string strProcessCode, string strProcessName, string strIdCode, MaterialInfo material,string strUserId,string strUserName)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// string plcCode = "";
|
|
|
|
|
|
// string materialCode = material.MaterialCode;
|
|
|
|
|
|
// string strFeature = material.Feature;
|
|
|
|
|
|
// List<PlcFirstCode> plcFirstCodes = plcFirstCodeService.Queryable()
|
|
|
|
|
|
// .Where(it => it.LineCode == strLineCode && (it.Feature == "ALL" || it.Feature == strFeature)).ToList();
|
|
|
|
|
|
// string strPlcFirstCode = "";
|
|
|
|
|
|
// if (plcFirstCodes != null && plcFirstCodes.Any())
|
|
|
|
|
|
// {
|
|
|
|
|
|
// strPlcFirstCode = plcFirstCodes[0].FirstCode;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// int Sequcence = 1;
|
|
|
|
|
|
// WorkOrderItem workOrderItem = workOrderItemService.Queryable()
|
|
|
|
|
|
// .Where(it => it.WorkOrderCode == strWorkOrderCode).OrderByDescending(it => it.Sequcence).First();
|
|
|
|
|
|
// if (workOrderItem != null)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// Sequcence = workOrderItem.Sequcence;
|
|
|
|
|
|
// Sequcence += 1;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// string formattedSequence = Sequcence.ToString("D4");
|
|
|
|
|
|
// string strWorkOrderItemCode = strWorkOrderCode + formattedSequence;
|
|
|
|
|
|
// plcCode = strPlcFirstCode + materialCode + strWorkOrderItemCode;
|
|
|
|
|
|
// WorkOrderItem workOrderItem1 = new WorkOrderItem();
|
|
|
|
|
|
// workOrderItem1.WorkOrderCode = strWorkOrderCode;
|
|
|
|
|
|
// workOrderItem1.WorkOrderItemCode = strWorkOrderItemCode;
|
|
|
|
|
|
// workOrderItem1.PlcCode = plcCode;
|
|
|
|
|
|
// workOrderItem1.ProcessCode = strProcessCode;
|
|
|
|
|
|
// workOrderItem1.ProcessName = strProcessName;
|
|
|
|
|
|
// workOrderItem1.MaterialCode = materialCode;
|
|
|
|
|
|
// workOrderItem1.MaterialName = material.MaterialName;
|
|
|
|
|
|
// workOrderItem1.CreateBy = strUserId;
|
|
|
|
|
|
// workOrderItem1.CreateName = strUserName;
|
|
|
|
|
|
// workOrderItem1.UpdateBy = strUserId;
|
|
|
|
|
|
// workOrderItem1.UpdateName = strUserName;
|
|
|
|
|
|
// workOrderItem1.CreateTime = DateTime.Now;
|
|
|
|
|
|
// workOrderItem1.UpdateTime = DateTime.Now;
|
|
|
|
|
|
// workOrderItem1.Qty = 1;
|
|
|
|
|
|
// workOrderItem1.Sequcence = Sequcence;
|
|
|
|
|
|
// int iFlag = workOrderItemService.Insert(workOrderItem1);
|
|
|
|
|
|
// return workOrderItem1;
|
|
|
|
|
|
//}
|
2025-11-18 18:49:17 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// OrderStatus 1执行中,2已完成
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="parm"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public int ChangeWorkOrderState(WorkOrderState parm)
|
|
|
|
|
|
{
|
|
|
|
|
|
int iResult = 0;
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
iResult = Update(where: it => parm.Ids.Contains(it.Id),
|
|
|
|
|
|
columns: it => new WorkOrder
|
|
|
|
|
|
{
|
|
|
|
|
|
OrderStatus = parm.OrderStatus, // 目标状态
|
|
|
|
|
|
UpdateBy = parm.UserId, // 更新人ID
|
|
|
|
|
|
UpdateName = parm.UserName, // 更新人名称
|
|
|
|
|
|
UpdateTime = DateTime.Now // 更新时间
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
iResult = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
return iResult;
|
|
|
|
|
|
}
|
2025-11-12 17:32:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|