2025-11-22 10:14:35 +08:00

255 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 Aliyun.OSS;
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 WorkOrder CreateWorkOrderBySacnCode(FlowCard flowCard)
{
try
{
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);
//根据IDCode解析的数据去检索物料档案
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)
{
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);
}
}
return orderInfoNew;
}
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;
}
/// <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;
}
}
}