using ApkInfo; using Hh.Mes.Common; using Hh.Mes.Common.config; using Hh.Mes.Common.Json; using Hh.Mes.Common.log; using Hh.Mes.Common.Redis; using Hh.Mes.Pojo.System; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.EnumEntitys; using Hh.Mes.POJO.Response; using Hh.Mes.POJO.ViewModel; using Hh.Mes.POJO.WebEntity; using Hh.Mes.Service.Repository; using Hh.Mes.Service.SystemAuth; using MySqlX.XDevAPI.Common; using NPOI.SS.Formula.Functions; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using static Microsoft.AspNetCore.Hosting.Internal.HostingApplication; namespace Hh.Mes.Service { public class PDAService : RepositorySqlSugar<sys_user> { AuthContextFactory authContextFactory; public PDAService(AuthContextFactory authContextFactory) { this.authContextFactory = authContextFactory; } /// <summary> /// PDA物料追溯查询 /// (扫码查询物料追溯码,查看物料的批次,物料名称,壁厚等物料信息) /// </summary> /// <param name="barCode"></param> /// <returns></returns> public dynamic GetMaterialInfoByBarCode(dynamic requestData) { return ExceptionsHelp.Instance.ExecuteT<dynamic>(() => { var reqData = DynamicJson.Parse(requestData.ToString()); var response = new Response(); if (reqData == null || !reqData.IsDefined("barCode")) { return response.ResponseError($"barCode:参数字段不正确,请核对!"); } string barCode = reqData.barCode; if (string.IsNullOrEmpty(barCode)) return response.ResponseError($"barCode:值不能为空,请核对!"); //1:扫码 BarCode 查询bus_workOrder_detail 表确认BarCode是否存在。 var bwdInfo = Context.Queryable<bus_workOrder_detail>().First(x => x.barCode == barCode); if (bwdInfo == null || string.IsNullOrEmpty(bwdInfo.barCode)) { return response.ResponseError($"barCode:【{barCode}】不存在工序任务明细表中,请核对!"); } if (string.IsNullOrEmpty(bwdInfo.cutMaterCode)) { return response.ResponseError($"根据barCode:【{barCode}】未查询到工序任务明细表中的物料编码信息,请核对!"); } //2:根据BarCode 查询到当前行的 materialCode,在去物料表查询 返回物料表的基础信息。 var materialInfo = Context.Queryable<base_material>().First(x => x.materialCode == bwdInfo.cutMaterCode); if (materialInfo == null) return response.ResponseError($"未查询到{bwdInfo.cutMaterCode}的物料基础信息,请检查!"); //查询套料信息得到管材长度 var cutplandetail = Context.Queryable<bus_cutplan_detail>().First(x => x.barCode == barCode); if (cutplandetail == null) return response.ResponseError($"{barCode}追踪码无效,请检查!"); materialInfo.barCode = barCode; materialInfo.cuttingLength = cutplandetail.cuttingLength; //查询套料头得到物料使用的批次 var buscutplanhead = Context.Queryable<bus_cutplan_head>().First(x => x.keys == cutplandetail.headKeys); if (cutplandetail == null) return response.ResponseError($"{barCode}追踪码无效,请检查!"); materialInfo.lotNo = buscutplanhead.lotNo; materialInfo.extend1 = bwdInfo.batchNo;//批次号 response.Result = materialInfo; return response; }); } #region 组对、焊接 /// <summary> /// 获取匹配的组对信息 /// </summary> /// <param name="pipe">管段码</param> /// <param name="batch">批次码</param> /// <returns></returns> public dynamic GetMatchTeamList(string pipe, string batch) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); if (string.IsNullOrWhiteSpace(pipe)) { response.ResponseErr($"管段码【{pipe}】是空,请重新扫描管段码!"); return response; } if (string.IsNullOrWhiteSpace(batch)) { response.ResponseErr($"批次码【{batch}】是空,请重新扫描批次码!"); return response; } var materialCode = batch;//todo:批次需要调用接口获取物料码 var resultDetail = Context.Queryable<bus_workOrder_detail>().Where(x => x.barCode.Equals(pipe) && x.state == (int)EnumOrderBodyStatus.运输中 && x.weldMaterCode.Equals(materialCode) && x.workCenterCode == EnumoprSequenceCode.组对).ToList(); bus_workOrder_head result = null; if (resultDetail.Count > 0) { var material = Context.Queryable<base_material>().Where(x => x.materialCode.Equals(resultDetail[0].cutMaterCode)).First(); result = Context.Queryable<bus_workOrder_head>().Where(x => x.keys == resultDetail[0].headKeys).First(); if (material != null) { result.types = material.types; result.diameter = material.diameter; result.thickness = material.thickness; } result.teamList = resultDetail; } response.Result = result; return response; }); } /// <summary> /// 获取组对开始列表 /// </summary> /// <returns></returns> public dynamic GetTeamStartList() { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); var resultDetail = Context.Queryable<bus_workOrder_detail>().Where(x => (x.state > (int)EnumOrderBodyStatus.运输中 && x.state < (int)EnumOrderBodyStatus.已完成) && x.workCenterCode == EnumoprSequenceCode.组对).ToList(); var headKeyList = Context.Queryable<bus_workOrder_detail>().Where(x => (x.state > (int)EnumOrderBodyStatus.运输中 && x.state < (int)EnumOrderBodyStatus.已完成) && x.workCenterCode == EnumoprSequenceCode.组对).GroupBy(x => x.headKeys).Select(x => x.headKeys).ToList(); List<bus_workOrder_head> result = new List<bus_workOrder_head>(); foreach (var key in headKeyList) { var item = Context.Queryable<bus_workOrder_head>().Where(x => x.keys == key).First(); item.teamList = new List<bus_workOrder_detail>(); foreach (var detail in resultDetail) { if (detail.headKeys == key) { item.teamList.Add(detail); } } result.Add(item); } response.Result = result; return response; }); } /// <summary> /// 保存组对开始列表 /// </summary> /// <returns></returns> public dynamic SaveTeamStartList(List<bus_workOrder_detail> details) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); foreach (var item in details) { var resultItem = Context.Queryable<bus_workOrder_detail>().Where(x => x.bodyKeys == item.bodyKeys).First(); if (resultItem != null) { resultItem.stationCode = item.stationCode; resultItem.actualEndTime = DateTime.Now; resultItem.batchNo = item.batchNo; resultItem.state = (int)EnumOrderBodyStatus.生产中; resultItem.updateBy = sysWebUser?.Account; resultItem.updateTime = DateTime.Now; Context.Updateable(resultItem).AddQueue(); } } var resultCount = Context.SaveQueues(); return resultCount > 0 ? response.ResponseSuccess() : response.ResponseError(); }); } /// <summary> /// 保存组对结束列表 /// </summary> /// <returns></returns> public dynamic SaveTeamEndList(List<bus_workOrder_detail> details) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); CutWeldService cutWeldService = new CutWeldService(); foreach (var item in details) { var resultItem = Context.Queryable<bus_workOrder_detail>().Where(x => x.bodyKeys == item.bodyKeys).First(); if (resultItem != null) { resultItem.state = (int)EnumOrderBodyStatus.已完成; resultItem.actualEndTime = DateTime.Now; resultItem.updateBy = sysWebUser?.Account; resultItem.updateTime = DateTime.Now; Context.Updateable(resultItem).AddQueue(); var result = Context.Queryable<bus_workOrder_detail>().Where(x => x.barCode == resultItem.barCode && x.weldNo == resultItem.weldNo && x.workCenterCode == EnumoprSequenceCode.焊接).First(); if (result != null) { result.state = (int)EnumOrderBodyStatus.运输中; result.batchNo = resultItem.batchNo; result.updateBy = sysWebUser?.Account; result.updateTime = DateTime.Now; Context.Updateable(result).AddQueue(); } } //工序完工反馈 cutWeldService.SendIWPTechnologylineProcess(resultItem.barCode, (int)EnumCutHeadState.组对完成); } var resultCount = Context.SaveQueues(); return resultCount > 0 ? response.ResponseSuccess() : response.ResponseError(); }); } /// <summary> /// 获取匹配的焊接信息 /// </summary> /// <param name="pipe">管段码</param> /// <param name="batch">批次码</param> /// <returns></returns> public dynamic GetMatchWeldList(string pipe) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); if (string.IsNullOrWhiteSpace(pipe)) { response.ResponseErr($"管段码【{pipe}】是空,请重新扫描管段码!"); return response; } var resultDetail = Context.Queryable<bus_workOrder_detail>().Where(x => x.barCode.Equals(pipe) && x.state == (int)EnumOrderBodyStatus.初始化 && x.workCenterCode == EnumoprSequenceCode.焊接 && !string.IsNullOrEmpty(x.batchNo)).ToList(); bus_workOrder_head result = null; if (resultDetail.Count > 0) { var material = Context.Queryable<base_material>().Where(x => x.materialCode.Equals(resultDetail[0].cutMaterCode)).First(); result = Context.Queryable<bus_workOrder_head>().Where(x => x.keys == resultDetail[0].headKeys).First(); if (material != null) { result.types = material.types; result.diameter = material.diameter; result.thickness = material.thickness; } result.teamList = resultDetail; } response.Result = result; return response; }); } /// <summary> /// 获取焊接开始列表 /// </summary> /// <returns></returns> public dynamic GetWeldStartList() { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); var resultDetail = Context.Queryable<bus_workOrder_detail>().Where(x => (x.state > (int)EnumOrderBodyStatus.初始化 && x.state < (int)EnumOrderBodyStatus.已完成) && x.workCenterCode == EnumoprSequenceCode.焊接).ToList(); var headKeyList = Context.Queryable<bus_workOrder_detail>().Where(x => (x.state > (int)EnumOrderBodyStatus.初始化 && x.state < (int)EnumOrderBodyStatus.已完成) && x.workCenterCode == EnumoprSequenceCode.焊接).GroupBy(x => x.headKeys).Select(x => x.headKeys).ToList(); List<bus_workOrder_head> result = new List<bus_workOrder_head>(); foreach (var key in headKeyList) { var item = Context.Queryable<bus_workOrder_head>().Where(x => x.keys == key).First(); item.teamList = new List<bus_workOrder_detail>(); foreach (var detail in resultDetail) { if (detail.headKeys == key) { item.teamList.Add(detail); } } result.Add(item); } response.Result = result; return response; }); } /// <summary> /// 保存焊接开始列表 /// </summary> /// <returns></returns> public dynamic SaveWeldStartList(List<bus_workOrder_detail> details) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); foreach (var item in details) { var resultItem = Context.Queryable<bus_workOrder_detail>().Where(x => x.bodyKeys == item.bodyKeys).First(); if (resultItem != null) { resultItem.stationCode = item.stationCode; resultItem.actualStartTime = DateTime.Now; resultItem.state = (int)EnumOrderBodyStatus.生产中; resultItem.updateBy = sysWebUser?.Account; resultItem.updateTime = DateTime.Now; Context.Updateable(resultItem).AddQueue(); } } var resultCount = Context.SaveQueues(); return resultCount > 0 ? response.ResponseSuccess() : response.ResponseError(); }); } /// <summary> /// 保存焊接结束列表 /// </summary> /// <returns></returns> public dynamic SaveWeldEndList(List<bus_workOrder_detail> details) { return ExceptionsHelp.Instance.ExecuteT(() => { var response = new Response(); CutWeldService cutWeldService = new CutWeldService(); foreach (var item in details) { var resultItem = Context.Queryable<bus_workOrder_detail>().Where(x => x.bodyKeys == item.bodyKeys).First(); if (resultItem != null) { resultItem.state = (int)EnumOrderBodyStatus.已完成; resultItem.actualEndTime = DateTime.Now; resultItem.updateBy = sysWebUser?.Account; resultItem.updateTime = DateTime.Now; Context.Updateable(resultItem).AddQueue(); } //工序完工反馈 cutWeldService.SendIWPTechnologylineProcess(resultItem.barCode, (int)EnumCutHeadState.焊接完成); } var resultCount = Context.SaveQueues(); return resultCount > 0 ? response.ResponseSuccess() : response.ResponseError(); }); } /// <summary> /// 焊接工艺下发保存 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <param name="barCode">管段码</param> /// <returns></returns> public dynamic SaveWeldTechnology(string equipmentCode, string barCode) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode) || string.IsNullOrWhiteSpace(barCode)) { return response.ResponseError($"设备编码或管段码为空,请重新扫描!"); } //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) { return response.ResponseError($"设备编码{equipmentCode}在设备表中没有找到!"); } //工序任务明细 var resultItem = base.Context.Queryable<bus_workOrder_detail>().Where(x => x.barCode == barCode).First(); if (equipment == null) { return response.ResponseError($"barCode:【{barCode}】不存在工序任务明细表中,请核对!"); } //物料信息 var material = base.Context.Queryable<base_material>().Where(x => x.materialCode == resultItem.cutMaterCode).First(); if (equipment == null) { return response.ResponseError($"barCode:【{barCode}】对应物料没有信息,请核对!"); } //焊接工艺参数 var Equipment = new base_weld_technology_equipment() { technologyHeadId = 0, equipmentCode = equipmentCode, createBy = sysWebUser?.Account, createTime = DateTime.Now.ToString(), sendStatus = 0, minDiameter = material.diameter, minThickness = material.thickness, minWeldingSeam = "0", material = material.types }; switch (Equipment.material) { case "碳钢": Equipment.material = "1"; break; case "不锈钢": Equipment.material = "2"; break; case "合金钢": Equipment.material = "3"; break; case "多重钢": Equipment.material = "4"; break; default: Equipment.material = "0"; break; } response.Status = Add(Equipment); response.Message = $"设备({equipment.name})焊接参数下发成功!"; return response; }); } /// <summary> /// 批次码获取物料信息 /// </summary> /// <param name="lotNo">批次码</param> /// <returns></returns> public dynamic GetMaterialBylotNo(string lotNo) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(lotNo)) { return response.ResponseError($"批次码为空,请重新扫描!"); } //调用上游接口查询批次码对应的物料码 //物料信息 var material = base.Context.Queryable<base_material>().Where(x => x.materialCode == lotNo).First(); if (material == null) { return response.ResponseError($"批次码{lotNo}在系统表中没有找到对应的物料信息!"); } response.Result = material; return response; }); } /// <summary> /// 设备编码获取设备信息 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <returns></returns> public dynamic GetEquipmentByCode(string equipmentCode) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode)) { return response.ResponseError($"设备编码为空,请重新扫描!"); } //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) { return response.ResponseError($"设备编码{equipmentCode}没有找到对应的设备信息!"); } //获取焊接类型ID var equipmentType = base.Context.Queryable<base_equipment_type>().Where(x => x.code == EnumoprSequenceCode.焊接).First(); if (equipmentType == null) { return response.ResponseError($"焊接类型在系统中未配置!"); } //判断设备是否为焊机,只有焊机可以呼叫AGV if (equipment.equipmentTypeId != equipmentType.id) { return response.ResponseError($"只有焊机工位可以呼叫AGV!"); } //AGV呼叫记录 var agvCalllog = base.Context.Queryable<bus_agvCall_log>().Where(x => x.callState == (int)EnumAgvCallState.接料中).First(); if (agvCalllog != null) { equipment.callState = (int)EnumAgvCallState.接料中; equipment.equipmentNmae = agvCalllog.equipmentNmae; } else { equipment.callState = (int)EnumAgvCallState.初始; equipment.equipmentNmae = "无"; } response.Result = equipment; return response; }); } /// <summary> /// Agv接料完成 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <returns></returns> public dynamic AgvCollectingEnd(string equipmentCode) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode)) { return response.ResponseError($"设备编码为空,请重新扫描!"); } //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) { return response.ResponseError($"设备编码{equipmentCode}没有找到对应的设备信息!"); } //获取焊接类型ID var equipmentType = base.Context.Queryable<base_equipment_type>().Where(x => x.code == EnumoprSequenceCode.焊接).First(); if (equipmentType == null) { return response.ResponseError($"焊接类型在系统中未配置!"); } //判断设备是否为焊机,只有焊机可以呼叫AGV if (equipment.equipmentTypeId != equipmentType.id) { return response.ResponseError($"只有焊机工位可以呼叫AGV!"); } //AGV呼叫记录 var agvCalllog = base.Context.Queryable<bus_agvCall_log>().Where(x => x.callState == (int)EnumAgvCallState.接料中).First(); if (agvCalllog == null) { return response.ResponseError($"AGV没有在接料,不能进行此操作!"); } if (agvCalllog.equipmentCode != equipmentCode) { return response.ResponseError($"确保误操作与安全,请扫描正在接料的工位,再操作接料完成!"); } agvCalllog.callState = (int)EnumAgvCallState.接料完成; agvCalllog.updateTime = DateTime.Now; base.Context.Updateable(agvCalllog).ExecuteCommand(); response.Result = ""; response.Message = "AGV接料完成操作成功!"; return response; }); } /// <summary> /// 呼叫Agv接料 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <returns></returns> public dynamic AgvCollectingStart(string equipmentCode) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode)) { return response.ResponseError($"设备编码为空,请重新扫描!"); } //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) { return response.ResponseError($"设备编码{equipmentCode}没有找到对应的设备信息!"); } //获取焊接类型ID var equipmentType = base.Context.Queryable<base_equipment_type>().Where(x => x.code == EnumoprSequenceCode.焊接).First(); if (equipmentType == null) { return response.ResponseError($"焊接类型在系统中未配置!"); } //判断设备是否为焊机,只有焊机可以呼叫AGV if (equipment.equipmentTypeId != equipmentType.id) { return response.ResponseError($"只有焊机工位可以呼叫AGV!"); } //AGV呼叫记录 var agvCalllog = base.Context.Queryable<bus_agvCall_log>().Where(x => x.callState == (int)EnumAgvCallState.接料中).First(); if (agvCalllog != null) { return response.ResponseError($"AGV正在{agvCalllog.equipmentNmae}接料,不能呼叫!"); } var requestData = new { stationCode = equipmentCode, userCode = "" }; //发送WMS-AGV接料 url = "http://172.16.29.881:9100/api/WMS/CallEmptyContainer"; var url = GetDictionaryDictValue("UrlWCSCallEmptyContainer", "GetUrl"); var WCSresponse = HttpManWCS(url, requestData, EnumLog.WCS接口调用.ToString(), method: "post"); if (WCSresponse.Code == 200) { var busAgvCalllog = new bus_agvCall_log(); busAgvCalllog.equipmentNmae = equipment.name; busAgvCalllog.equipmentCode = equipment.code; busAgvCalllog.callState = (int)EnumAgvCallState.接料中; busAgvCalllog.createTime = DateTime.Now; base.Context.Insertable(busAgvCalllog).ExecuteCommand(); response.Result = ""; response.Message = "呼叫AGV接料成功!"; return response; } else { //var WcsResult = DynamicJson.Parse(WCSresponse.Result); return response.ResponseError($"呼叫AGV接料失败!{WCSresponse.Result}"); } }); } /// <summary> /// 托盘入库 /// </summary> /// <param name="containerCode">托盘码</param> /// <returns></returns> public dynamic ContainerTransfer(string containerCode) { var response = new Response(); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(containerCode)) { return response.ResponseError($"托盘码为空,请重新扫描!"); } //AGV呼叫记录 var agvCalllog = base.Context.Queryable<bus_agvCall_log>().Where(x => x.callState == (int)EnumAgvCallState.接料中).First(); if (agvCalllog != null) { return response.ResponseError($"AGV正在{agvCalllog.equipmentNmae}接料,不能回库,需要先完成agv接料状态!"); } var requestData = new { containerCode = containerCode, inLocationCode = "" }; //发送WMS-托盘入库 url = "http://10.193.244.156:8066/api/WMS/ContainerTransfer"; var url = GetDictionaryDictValue("UrlWCSContainerTransfer", "GetUrl"); var WCSresponse = HttpManWCS(url, requestData, EnumLog.WCS接口调用.ToString(), method: "post"); if (WCSresponse.Code == 200) { response.Result = ""; response.Message = "托盘入库成功!"; return response; } else { return response.ResponseError($"托盘入库失败!{WCSresponse.Result}"); } }); } /// <summary> /// 设备任务下发 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <param name="taskNumber">管段码</param> /// <returns></returns> public dynamic EquipmentTaskDistribute(string equipmentCode, string taskNumber) { var response = new Response(true); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode) || string.IsNullOrWhiteSpace(taskNumber)) { return response.ResponseError($"设备编码或任务号为空,请重新扫描!"); } //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) { return response.ResponseError($"设备编码{equipmentCode}在设备表中没有找到!"); } var oprSequenceCode = ""; var orderType = 0; if (equipmentCode == EquipmentCode.锯床) { oprSequenceCode = EnumoprSequenceCode.切割; orderType = (int)EnumOrderType.锯床切割; } if (equipmentCode == EquipmentCode.端面坡口机) { oprSequenceCode = EnumoprSequenceCode.坡口; orderType = (int)EnumOrderType.端面坡口; } if (equipmentCode == EquipmentCode.机器人打磨) { oprSequenceCode = EnumoprSequenceCode.打磨; orderType = (int)EnumOrderType.机器人打磨; } if (equipmentCode == EquipmentCode.机器人XY焊接) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.机器人XY轴; } if (equipmentCode == EquipmentCode.组焊一体机) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.组焊一体机; } if (equipmentCode == EquipmentCode.组焊平台) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.组焊平台; } //工序任务明细 var resultItem = base.Context.Queryable<bus_workOrder_detail>().Where(x => x.barCode == taskNumber&&x.oprSequenceCode== oprSequenceCode).First(); if (resultItem == null) { return response.ResponseError($"taskNumber:【{taskNumber}】不存在工序任务明细表中,请核对!"); } if (resultItem.state >= (int)EnumOrderHeadStatus.生产中) { return response.ResponseError($"taskNumber:【{taskNumber}】任务已经下发,请勿重复操作!"); } //更新工单明细 resultItem.state = (int)EnumOrderHeadStatus.生产中; resultItem.actualStartTime = DateTime.Now; resultItem.updateBy = sysWebUser?.Account; resultItem.updateTime = DateTime.Now; Context.Updateable(resultItem).UpdateColumns(t => new { t.state,t.actualStartTime, t.updateBy, t.updateTime }).AddQueue(); //更新工单 Context.Updateable<bus_workOrder_head>() .SetColumns(x => x.state == (int)EnumOrderHeadStatus.生产中) .SetColumns(x => x.actualStartTime == DateTime.Now) .Where(x => x.keys == resultItem.headKeys).AddQueue(); //设备任务表 var Equipment = new base_task_equipment() { equipmentCode = equipmentCode, taskCode = taskNumber, sendStatus = (int)EnumWeldTechnologyEquipmentStatus.初始, createBy = sysWebUser?.Account, createTime = DateTime.Now }; Context.Insertable(Equipment).AddQueue(); var inContext = Context.SaveQueues(); if (inContext > 0) { response.Message = $"设备({equipment.name})任务下发成功!"; } else { return response.ResponseError($"设备({equipment.name})任务下发失败!"); } return response; }); } /// <summary> /// 设备任务列表查询 /// </summary> /// <param name="equipmentCode">设备编码</param> /// <param name="state">查询状态:0未完成,30进行中,100已经完成</param> /// <returns></returns> public dynamic GetEquipmentTaskList(string equipmentCode, int state) { var response = new Response(true); return ExceptionsHelp.Instance.ExecuteT(() => { if (string.IsNullOrWhiteSpace(equipmentCode) || state < 0) return response.ResponseError($"设备编码或查询状态为空!"); //设备信息 var equipment = base.Context.Queryable<base_equipment>().Where(x => x.code == equipmentCode).First(); if (equipment == null) return response.ResponseError($"设备编码{equipmentCode}在设备表中没有找到!"); var oprSequenceCode = ""; var orderType = 0; if (equipmentCode == EquipmentCode.锯床) { oprSequenceCode = EnumoprSequenceCode.切割; orderType = (int)EnumOrderType.锯床切割; } if (equipmentCode == EquipmentCode.端面坡口机) { oprSequenceCode = EnumoprSequenceCode.坡口; orderType = (int)EnumOrderType.端面坡口; } if (equipmentCode == EquipmentCode.机器人打磨) { oprSequenceCode = EnumoprSequenceCode.打磨; orderType = (int)EnumOrderType.机器人打磨; } if (equipmentCode == EquipmentCode.机器人XY焊接) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.机器人XY轴; } if (equipmentCode == EquipmentCode.组焊一体机) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.组焊一体机; } if (equipmentCode == EquipmentCode.组焊平台) { oprSequenceCode = EnumoprSequenceCode.组焊; orderType = (int)EnumOrderType.组焊平台; } if (oprSequenceCode == "") return response.ResponseError($"设备编码错误!"); //获取列表 var taskList = Context.Queryable<bus_workOrder_head, bus_workOrder_detail, base_material>((a, b,c) => new JoinQueryInfos( JoinType.Left, a.keys == b.headKeys , JoinType.Left,b.cutMaterCode == c.materialCode)) .Where((a,b,c) => a.orderType == orderType.ToString() && b.oprSequenceCode == oprSequenceCode && b.state == state) .Select((a, b, c) =>new { a.orderType, a.planStartTime, a.planEndTime, b.oprSequenceName, b.oprSequenceCode, b.state, b.cutMaterCode, b.cuttingLength, b.designUrl, b.weldNo, b.barCode, c.materialName }).ToList(); response.Result = taskList; return response; }); } #endregion } }