2025-11-18 19:51:59 +08:00

265 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Infrastructure.Attribute;
using Infrastructure.Extensions;
using RIZO.Model.Mes.Dto.GatherData;
using RIZO.Model.Mes.Dto.WorkOrderInfo;
using RIZO.Model.Mes.MasterData;
using RIZO.Model.Mes.Material;
using RIZO.Model.Mes.WorkOrderInfo;
using RIZO.Repository;
using RIZO.Service.Mes.IMesService.MasterData;
using RIZO.Service.Mes.IMesService.Material;
using RIZO.Service.Mes.IMesService.WorkOrderInfo;
using RIZO.Service.Mes.MasterData;
using RIZO.Service.Mes.Material;
using RIZO.Service.Mes.Process;
namespace RIZO.Service.Mes.WorkOrderInfo
{
/// <summary>
/// 工单主表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IWorkOrderService), ServiceLifetime = LifeTime.Transient)]
public class WorkOrderService : BaseService<WorkOrder>, IWorkOrderService
{
private MaterialInfoService materialInfoService = new MaterialInfoService();
private PlcFirstCodeService plcFirstCodeService = new PlcFirstCodeService();
private WorkOrderItemService workOrderItemService = new WorkOrderItemService();
/// <summary>
/// 查询工单主表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<WorkOrderDto> GetList(WorkOrderQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<WorkOrder, WorkOrderDto>(parm);
return response;
}
public PagedInfo<WorkOrderDto> GetListExport(WorkOrderQueryDto parm)
{
var predicate = QueryExpExport(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<WorkOrder, WorkOrderDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public WorkOrder GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加工单主表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public WorkOrder AddWorkOrder(WorkOrder model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改工单主表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateWorkOrder(WorkOrder model)
{
return Update(model, true);
}
/// <summary>
/// 查询表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<WorkOrder> QueryExp(WorkOrderQueryDto parm)
{
var predicate = Expressionable.Create<WorkOrder>();
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));
}
return predicate;
}
private static Expressionable<WorkOrder> QueryExpExport(WorkOrderQueryDto parm)
{
var predicate = Expressionable.Create<WorkOrder>();
if (parm.StartTime != null && parm.StartTime.ToString().Length > 0)
{
predicate.And(it => it.CreateTime >= parm.StartTime);
}
if (parm.EndTime != null && parm.EndTime.ToString().Length > 0)
{
predicate.And(it => it.CreateTime < parm.EndTime);
}
return predicate;
}
public WorkOrderItem CreateDataBySacnCode(ScanCodeParm parm)
{
try
{
WorkOrderItem workOrderItemNew = new WorkOrderItem();
string strLineCode = parm.LineCode;
string strProcessCode = parm.ProcessCode;
string strIdCode = parm.IDCode;
string strMaterialCode = strIdCode;
string strLineName = parm.LineName;
string strProcessName = parm.ProcessName;
//根据IDCode解析的数据去检索物料档案
var material = materialInfoService.Queryable().Where(it => it.MaterialCode == strMaterialCode).First();
if (material != null)
{
string strDay = DateTime.Now.ToString("yyyyMMdd");
WorkOrder workOrder = createWorkOrder(strDay, strLineCode, strLineName,parm.UserId,parm.UserName);
workOrderItemNew = createWorkOrderItem(workOrder.WorkOrderCode, strMaterialCode, strLineCode, strLineName, strProcessCode, strProcessName, strIdCode, material,parm.UserId,parm.UserName);
}
return workOrderItemNew;
}
catch (Exception ex)
{
return null;
}
}
//根据工单主表号去创建工单从表数据
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;
}
//去寻找特定日期,特定产线的工单,若存在返回工单号,若不存在创建再返回工单号
private WorkOrder createWorkOrder(string strDay, string strLineCode, string strLineName,string strUserId,string strUserName)
{
try
{
WorkOrder orderInfoNew = new WorkOrder();
var WorkOrder = Queryable()
.Where(it => it.OrderDate == strDay && it.LineCode == strLineCode).First(); ;
if (WorkOrder != null)
{
orderInfoNew = WorkOrder;
}
else
{
orderInfoNew.OrderDate = strDay;
orderInfoNew.WorkOrderCode = strLineCode + strDay;
orderInfoNew.LineCode = strLineCode;
orderInfoNew.LineName = strLineName;
orderInfoNew.OrderDate = strDay;
orderInfoNew.OrderStatus = 1;
orderInfoNew.CreateBy = strUserId;
orderInfoNew.CreateName = strUserName;
orderInfoNew.CreateTime = DateTime.Now;
orderInfoNew.UpdateBy = strUserId;
orderInfoNew.UpdateTime = DateTime.Now;
orderInfoNew.UpdateName = strUserName;
int iFlag = Update(orderInfoNew);
}
return orderInfoNew;
}
catch (Exception ex)
{
return null;
}
}
/// <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;
}
}
}