using Hh.Mes.Common.Json; using Hh.Mes.Common.log; using Hh.Mes.Pojo.System; using Hh.Mes.POJO.ApiEntity; using Hh.Mes.POJO.Entity; using Hh.Mes.POJO.EnumEntitys; using Hh.Mes.POJO.Request; using Hh.Mes.POJO.Response; using Hh.Mes.POJO.WebEntity.bus; using Hh.Mes.Service.Logs; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; namespace Hh.Mes.Service.ApiService { public partial class UpstreamService { #region 属性 /// <summary> /// 产品表 /// </summary> private base_product_header Sys_ProductHeader { get; set; } /// <summary> /// 工作中心映射华恒线体code /// </summary> private string Sys_LineCode { get; set; } /// <summary> /// 工艺路线头 /// </summary> private base_process_route_head Sys_ProcessHead { get; set; } /// <summary> /// 工艺路线明细 /// </summary> private List<base_process_route_detail> Sys_ProcessDetail { get; set; } /// <summary> /// 输出返回实体 /// </summary> private ResponseUpstream<string> ResponseOrder { get; set; } /// <summary> /// Json 接受实体 /// </summary> private MomWorkOrderHead MomEntity { get; set; } #region 切割、组队、焊接工序 /// <summary> /// 切割工序 /// </summary> private base_process_route_detail Sys_process_cut { get; set; } /// <summary> /// 组队工序 /// </summary> private base_process_route_detail Sys_process_fitUp { get; set; } /// <summary> /// 焊接工序 /// </summary> private base_process_route_detail Sys_process_weld { get; set; } #endregion //工序任务 管段号 同一组工序明细的值 一样 private string Part_Code { get; set; } /// <summary> /// 更新数据使用 缓存工序任务头变量 /// </summary> private bus_workOrder_head busWkHead { get; set; } #endregion public dynamic SendWorkOrder(MomWorkOrderHead requestData) { return ExceptionsHelp.Instance.ExecuteT(() => { this.MomEntity = requestData; MomWorkOrderHead entity = requestData; var plmeid = entity == null ? "" : entity.plmeid; ResponseOrder = new ResponseUpstream<string>(plmeid); ResponseOrder = HandleAcceptOrderBefore(); if (!ResponseOrder.Status) { QueueInterLog.GetInstance.EnqueueInterLog(null, null, EnumLog.MOM订单下发失败.ToString(), ResponseOrder.Message, 0, user: "AOP", sysTitle: EnumLog.MOM业务问题.ToString()); return ResponseOrder; } //新增生产清单记录 AddApiWorkOrder(entity); //生成订单数据 var orderDataResult = HandleAcceptOrderData(); //设置 BarCode 管段条码 ResponseOrder=SetBarCode(orderDataResult.Item2, ResponseOrder); if (!ResponseOrder.Status) { QueueInterLog.GetInstance.EnqueueInterLog(null, null, EnumLog.MOM订单下发失败.ToString(), ResponseOrder.Message, 0, user: "AOP", sysTitle: EnumLog.MOM业务问题.ToString()); return ResponseOrder; } //保存数据 var saveResult = SaveHandleAcceptOrderData(orderDataResult.Item1, orderDataResult.Item2); return saveResult; }); } /// <summary> /// 订单下发接受数据处理 校验 /// </summary> public ResponseUpstream<string> HandleAcceptOrderBefore() { if (MomEntity == null) { ResponseOrder.ResponseError("【上位系统】生产订单下发:工单数据为空,请检查!"); return ResponseOrder; } if (!typeValidation(MomEntity.type, ResponseOrder).Status) return ResponseOrder; #region plmeid 判断逻辑 if (MomEntity.type == EnumAction.I.ToString()) { if (Context.Queryable<bus_workOrder_head>().Any(t => t.plmeId == MomEntity.plmeid && t.isDelete == AddOrUpdateFlag)) { ResponseOrder.ResponseError($"【上位系统】生产订单信息已存在,请勿重复添加!"); return ResponseOrder; } } //更新 else if (MomEntity.type == EnumAction.U.ToString()) { busWkHead = Context.Queryable<bus_workOrder_head>().First(t => t.plmeId == MomEntity.plmeid && t.isDelete == AddOrUpdateFlag); if (busWkHead == null) { ResponseOrder.ResponseError($"【上位系统】生产订单信息更新,订单不存在或已删除!"); return ResponseOrder; } else if (busWkHead.state != (int)EnumOrderHeadStatus.初始化) { ResponseOrder.ResponseError($"【上位系统】生产订单信息更新,只能更新“初始化”状态的订单!"); return ResponseOrder; } } #endregion #region 空值检查 if (string.IsNullOrWhiteSpace(MomEntity.pro_order_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发:订单号【pro_order_code】不能为空值,请检查!"); return ResponseOrder; } if (string.IsNullOrWhiteSpace(MomEntity.plan_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发:生产计划号【plan_code】不能为空值,请检查!"); return ResponseOrder; } if (string.IsNullOrWhiteSpace(MomEntity.product_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发:产品编码【product_code】不能为空值,请检查!"); return ResponseOrder; } if (string.IsNullOrEmpty(MomEntity.factory_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发:工厂编码【factory_code】不能为空值,请检查!"); return ResponseOrder; } if (string.IsNullOrEmpty(MomEntity.line_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发:产线编码【line_code】不能为空值,请检查!"); return ResponseOrder; } #endregion #region 生产订单的产品号要先存在工艺路线的产品表中 Sys_ProductHeader = base.Context.Queryable<base_product_header>().First(x => x.productCode == MomEntity.product_code && x.isDelete == AddOrUpdateFlag); if (Sys_ProductHeader == null) { ResponseOrder.ResponseError($"【上位系统】工艺路线产品表【产品编码productCode】[{MomEntity.product_code}]不存在,请【上位系统】先发送工艺线路基础数据!"); return ResponseOrder; } #endregion #region 线体映射 var line = base.Context.Queryable<base_line>().First(x => x.otherCode == MomEntity.line_code); if (line == null || string.IsNullOrEmpty(line.lineCode)) { ResponseOrder.ResponseError($"订单下发:没有查询到线体【line_code】和华恒线体一致的数据,请通知管理员在【工厂模型->线体设置】维护外部编码!"); return ResponseOrder; } Sys_LineCode = line.lineCode; #endregion #region 生产订单查询工艺路线基础信息 var pp = base.Context.Queryable<base_process_product_rel>().First(x => x.productCode == MomEntity.product_code); if (pp == null || string.IsNullOrEmpty(pp.lineCode)) { ResponseOrder.ResponseError($"【上位系统】订单下发:没有查询到工艺产品关系productCode【{MomEntity.product_code}】对应的数据,请先发送工艺路线接口数据!"); return ResponseOrder; } Sys_ProcessHead = base.Context.Queryable<base_process_route_head>().First(x => x.keys == pp.processHeadKeys && x.edition == MomEntity.edition); if (Sys_ProcessHead == null || string.IsNullOrEmpty(Sys_ProcessHead.lineCode)) { ResponseOrder.ResponseError($"【上位系统】订单下发:没有查询到工艺路线lineCode【{Sys_LineCode}】【processCode】【{MomEntity.product_code}】版本【{MomEntity.edition}】对应的工艺路线,请先发送工艺路线接口数据!"); return ResponseOrder; } Sys_ProcessDetail = Context.Queryable<base_process_route_detail>().Where(x => x.headkeys == Sys_ProcessHead.keys && x.isDelete == AddOrUpdateFlag).OrderBy(t => t.oprSequence).ToList(); if (Sys_ProcessDetail.Count == 0) { ResponseOrder.ResponseError($"订单下发:没有查询到工艺路线明细【headkeys】【{Sys_ProcessHead.keys}】,反复出现请联系管理员!!"); return ResponseOrder; } #endregion #region 切割、组队、焊接工序是否为空 Sys_process_cut = GetNowBaseprocessRouteDetail(Sys_ProcessHead.keys, EnumoprSequenceCode.切割坡口); if (Sys_process_cut == null) { ResponseOrder.ResponseError($"【MOM】订单下发:工艺路线【{Sys_ProcessHead.keys}、{Sys_ProcessHead.processName}】不存在切割工序【{EnumoprSequenceCode.切割坡口},请核实该产品【{MomEntity.product_code}】的工艺路线工序!"); return ResponseOrder; } Sys_process_fitUp = GetNowBaseprocessRouteDetail(Sys_ProcessHead.keys, EnumoprSequenceCode.组对); if (Sys_process_fitUp == null) { ResponseOrder.ResponseError($"【MOM】订单下发:工艺路线【{Sys_ProcessHead.keys}、{Sys_ProcessHead.processName}】不存在组队工序【{EnumoprSequenceCode.组对},请核实该产品【{MomEntity.product_code}】的工艺路线工序!"); return ResponseOrder; } Sys_process_weld = GetNowBaseprocessRouteDetail(Sys_ProcessHead.keys, EnumoprSequenceCode.焊接); if (Sys_process_weld == null) { ResponseOrder.ResponseError($"【MOM】订单下发:工艺路线【{Sys_ProcessHead.keys}、{Sys_ProcessHead.processName}】不存在焊接工序【{EnumoprSequenceCode.焊接},请核实该产品【{MomEntity.product_code}】的工艺路线工序!"); return ResponseOrder; } #endregion #region 生产订单工序是否在工艺路线中、 切割工序物料不能为空、是否存在物料表信息 if (MomEntity.details.Count < Sys_ProcessDetail.Count) { ResponseOrder.ResponseError($"【MOM】订单下发:子表明细details行数【{MomEntity.details.Count}】小于工艺路线行数【{Sys_ProcessDetail.Count}】不一致,请核实订单计划数据明细数据!"); return ResponseOrder; } foreach (var item in MomEntity.details) { var isOk = Sys_ProcessDetail.Any(x => x.oprSequenceCode == item.proced_code); if (!isOk) { ResponseOrder.ResponseError($"【MOM】订单下发:子表明细工序编码proced_code【{item.proced_code}】不存在工艺路线工序集合中,请核实订单计划数据明细工序编码数据!"); return ResponseOrder; } if (item.proced_code == Sys_process_cut.oprSequenceCode) { foreach (var itemComponent in item.componentDetails) { if (string.IsNullOrEmpty(itemComponent.cut_mater_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发-切割工序:物料编码【cut_mater_code】不能为空值,请检查!"); return ResponseOrder; } else { var isExt = base.Context.Queryable<base_material>().Any(x => x.materialCode == itemComponent.cut_mater_code && x.isDelete == AddOrUpdateFlag); if (isExt) continue; ResponseOrder.ResponseError($"【上位系统】订单下发-切割工序:没有查询到物料主数据cut_mater_code【{itemComponent.cut_mater_code}】对应的信息,请先发送物料主数据接口数据,或者在物料管理模块点击按钮【同步信科物料 】!"); return ResponseOrder; } } }else if (item.proced_code == Sys_process_weld.oprSequenceCode) { foreach (var itemComponent in item.componentDetails) { if (string.IsNullOrEmpty(itemComponent.weld_mater_code)) { ResponseOrder.ResponseError($"【上位系统】订单下发-焊接工序:物料编码【weld_mater_code】不能为空值,请检查!"); return ResponseOrder; } else { var weldMaterCodeList = itemComponent.weld_mater_code.Split(',', StringSplitOptions.RemoveEmptyEntries); for (int xp = 0; xp < weldMaterCodeList.Length; xp++) { var tempMaterCode = weldMaterCodeList[xp]; var isExt = base.Context.Queryable<base_material>().Any(x => x.materialCode == tempMaterCode && x.isDelete == AddOrUpdateFlag); if (isExt) continue; ResponseOrder.ResponseError($"【上位系统】订单下发-焊接工序:没有查询到物料主数据weld_mater_code【{tempMaterCode}】对应的信息,请先发送物料主数据接口数据,或者在物料管理模块点击按钮【同步信科物料 】!"); return ResponseOrder; } } } } } #endregion return ResponseOrder; } /// <summary> /// 新增 生产清单记录 /// </summary> private void AddApiWorkOrder(MomWorkOrderHead entity) { var head = new api_workOrder_head { keys = Guid.NewGuid(), plmeId = entity.plmeid, workOrderCode = entity.pro_order_code, planCode = entity.plan_code, productCode = entity.product_code, productName = entity.product_name, factoryCode = entity.factory_code, lineCode = entity.line_code, orderType = entity.order_type, edition = entity.edition, projectCode = entity.project_code, projectName = entity.project_name, lineNo = entity.line_no, planStartTime = entity.oprplan_start_time, planEndTime = entity.oprplan_end_time, extend1 = entity.extend1, extend2 = entity.extend2, extend3 = entity.extend3, extend4 = entity.extend4, isDelete = AddOrUpdateFlag, createTime = DateTime.Now, createBy = SystemVariable.DefaultCreated }; var details = new List<api_workOrder_detail>(); foreach (var item in entity.details) { var detail = new api_workOrder_detail(); detail.headKeys = head.keys; detail.oprSequenceCode = item.proced_code; detail.isEndProduct = item.isend_product; detail.extend1 = item.extend1; detail.extend2 = item.extend2; detail.createTime = DateTime.Now; detail.createBy = SystemVariable.DefaultCreated; foreach (var itemCom in item.componentDetails) { if (string.IsNullOrEmpty(Part_Code)) Part_Code = itemCom.part_code; detail.cutMaterCode = itemCom.cut_mater_code; detail.cuttingLength = itemCom.cutting_len; detail.weldType = itemCom.weld_type; detail.weldNo = itemCom.weld_no; detail.weldMaterCode = itemCom.weld_mater_code; detail.extendComp1 = itemCom.extendComp1; detail.extendComp2 = itemCom.extendComp2; detail.extendComp3= itemCom.extendComp3; detail.extendComp4 = itemCom.extendComp4; } details.Add(detail); } Context.Insertable(head).AddQueue(); Context.Insertable(details).AddQueue(); } /// <summary> /// 生成数据 /// </summary> private ValueTuple<bus_workOrder_head, List<bus_workOrder_detail>> HandleAcceptOrderData() { #region 生成工序任务头 bus_workOrder_head var busWorkOrderHead = new bus_workOrder_head { keys = Guid.NewGuid(), plmeId = MomEntity.plmeid, workOrderCode = MomEntity.pro_order_code, workOrderName= MomEntity.pro_order_code+ "_订单名称", planCode = MomEntity.plan_code, processHeadKeys = Sys_ProcessHead.keys,//工艺路线keys processCode = Sys_ProductHeader.processCode, //工艺路线编码 productHeaderCode = MomEntity.product_code, //产品编码 productName = MomEntity.product_name, factoryCode = MomEntity.factory_code, lineCode = Sys_LineCode, orderType = MomEntity.order_type, edition= MomEntity.edition, projectCode = MomEntity.project_code, //项目编码 projectName = MomEntity.project_name, lineNo=MomEntity.line_no, //管线号/图纸号 planStartTime = MomEntity.oprplan_start_time, planEndTime = MomEntity.oprplan_end_time, extend1=MomEntity.extend1, extend2=MomEntity.extend2, extend3 = MomEntity.extend3, extend4 = MomEntity.extend4, otherOrderCode = MomEntity.plan_code, state = (int)EnumOrderHeadStatus.初始化, isDelete = AddOrUpdateFlag, createTime = DateTime.Now, createBy = SystemVariable.DefaultCreated }; #endregion #region 生成工序任务明细 busWorkOrderDetailList var busWorkOrderDetailList = new List<bus_workOrder_detail>(); foreach (var item in Sys_ProcessDetail) { if (item.oprSequenceCode == Sys_process_cut.oprSequenceCode) { SetWorkOrderDetailCut(busWorkOrderDetailList, item,busWorkOrderHead); } else if (item.oprSequenceCode == Sys_process_fitUp.oprSequenceCode) { SetWorkOrderDetailFitUpOrWeld(busWorkOrderDetailList, item,busWorkOrderHead); } else if (item.oprSequenceCode == Sys_process_weld.oprSequenceCode) { SetWorkOrderDetailFitUpOrWeld(busWorkOrderDetailList, item,busWorkOrderHead); } else { var jsonMomItem = MomEntity.details.FirstOrDefault(x => x.proced_code == item.oprSequenceCode); for(int i = 0; i < jsonMomItem.componentDetails.Count; i++) { var nowWorkDetail = new bus_workOrder_detail { headKeys = busWorkOrderHead.keys, productHeaderCode = busWorkOrderHead.productHeaderCode, workOrderCode = busWorkOrderHead.workOrderCode, cutMaterCode = jsonMomItem.componentDetails[i].cut_mater_code, cuttingLength = (decimal)jsonMomItem.componentDetails[i].cutting_len, lineCode = Sys_LineCode, designNo = jsonMomItem.componentDetails[i].design_no, designUrl = jsonMomItem.componentDetails[i].design_url, partCode = Part_Code, serialNumber = item.oprSequence, oprSequenceCode = item.oprSequenceCode, oprSequenceName = item.oprSequenceName, workCenterCode = item.workCenterCode, planStartTime = jsonMomItem.oprplan_start_time, planEndTime = jsonMomItem.oprplan_end_time, isEndProduct = jsonMomItem.isend_product, isDelete = AddOrUpdateFlag, state = (int)EnumOrderBodyStatus.初始化, workReportStatus = (int)EnumWorkReportStatus.未报工, createTime = DateTime.Now, createBy = SystemVariable.DefaultCreated }; nowWorkDetail.bodyKeys = Guid.NewGuid(); nowWorkDetail.serialNumberName = nowWorkDetail.serialNumber + "_1"; busWorkOrderDetailList.Add(nowWorkDetail); } } } #endregion // 设置工序任务头的当前工序,为第一个工序任务明细的工序 if (busWorkOrderDetailList.Count > 0) { busWorkOrderHead.nowOprSequenceCode = busWorkOrderDetailList[0].oprSequenceCode; } return (busWorkOrderHead, busWorkOrderDetailList); } //生成管段条码 public ResponseUpstream<string> SetBarCode(List<bus_workOrder_detail> details, ResponseUpstream<string> response) { var barCodeList = new List<string>(); for (int i = 0; i < Sys_ProcessDetail.Count; i++) { var oprSequenceCode = Sys_ProcessDetail[i].oprSequenceCode; var oprList = details.Where(x => x.oprSequenceCode == oprSequenceCode).ToList(); //第一个工序 if (i == 0) { for (int j = 0; j < oprList.Count; j++) { details[j].barCode = base.GetWorkOrderBarCode(); barCodeList.Add(details[j].barCode); } } else { if (barCodeList.Count != oprList.Count) { response.ResponseError($"【上位系统】订单下发:工艺路线工序【{oprSequenceCode}】个数【{barCodeList.Count}】和工序任务明细个数【{oprList.Count}】不一致,请检查!"); return ResponseOrder; } for (int j = 0; j < oprList.Count; j++) { var index = details.FindIndex(x => x.bodyKeys == oprList[j].bodyKeys); details[index].barCode = barCodeList[j]; } } } return response; } /// <summary> /// 切割工序 工序任务设置值 /// </summary> public void SetWorkOrderDetailCut(List<bus_workOrder_detail> busWorkOrderDetailList, base_process_route_detail oprDetail, bus_workOrder_head head) { var cutOprList = MomEntity.details.Where(x => x.proced_code == oprDetail.oprSequenceCode).ToList(); var serialNumberNameIndex = 1; foreach (var itemCut in cutOprList) { for (int i = 0; i < itemCut.componentDetails.Count; i++) { var nowWorkDetail = new bus_workOrder_detail { headKeys = head.keys, bodyKeys = Guid.NewGuid(), productHeaderCode = head.productHeaderCode, workOrderCode = head.workOrderCode, lineCode = Sys_LineCode, designNo= itemCut.componentDetails[i].design_no, designUrl= itemCut.componentDetails[i].design_url, partCode = Part_Code, serialNumber = oprDetail.oprSequence, oprSequenceCode = oprDetail.oprSequenceCode, oprSequenceName = oprDetail.oprSequenceName, workCenterCode = oprDetail.workCenterCode, planStartTime = itemCut.oprplan_start_time, planEndTime = itemCut.oprplan_end_time, isDelete = AddOrUpdateFlag, state = (int)EnumOrderBodyStatus.初始化, workReportStatus = (int)EnumWorkReportStatus.未报工, createTime = DateTime.Now, createBy = SystemVariable.DefaultCreated }; nowWorkDetail.isEndProduct = itemCut.isend_product; nowWorkDetail.serialNumberName = oprDetail.oprSequence + "_" + serialNumberNameIndex++; nowWorkDetail.cutMaterCode = itemCut.componentDetails[i].cut_mater_code; nowWorkDetail.cuttingLength = (decimal)itemCut.componentDetails[i].cutting_len; nowWorkDetail.extend1 = itemCut.componentDetails[i].extend1; nowWorkDetail.extend2 = itemCut.componentDetails[i].extend2; nowWorkDetail.extendComp1 = itemCut.componentDetails[i].extendComp1; nowWorkDetail.extendComp2 = itemCut.componentDetails[i].extendComp2; nowWorkDetail.extendComp3 = itemCut.componentDetails[i].extendComp3; nowWorkDetail.extendComp4 = itemCut.componentDetails[i].extendComp4; busWorkOrderDetailList.Add(nowWorkDetail); } } } /// <summary> /// 组队或者焊接工序 工序任务设置值 /// </summary> public void SetWorkOrderDetailFitUpOrWeld(List<bus_workOrder_detail> busWorkOrderDetailList, base_process_route_detail oprDetail, bus_workOrder_head head) { var oprList = MomEntity.details.Where(x => x.proced_code == oprDetail.oprSequenceCode).ToList(); foreach (var item in oprList) { for (int i = 0; i < item.componentDetails.Count; i++) { //焊接工序物料 var weldNoList = item.componentDetails[i].weld_no.Split(',', StringSplitOptions.RemoveEmptyEntries); var weldMaterCodeList = item.componentDetails[i].weld_mater_code.Split(',', StringSplitOptions.RemoveEmptyEntries); for (int xp = 0; xp < weldNoList.Length; xp++) { var nowWorkDetail = new bus_workOrder_detail { headKeys = head.keys, bodyKeys = Guid.NewGuid(), productHeaderCode = head.productHeaderCode, workOrderCode = head.workOrderCode, lineCode = Sys_LineCode, designNo = item.componentDetails[i].design_no, designUrl = item.componentDetails[i].design_url, partCode = Part_Code, serialNumber = oprDetail.oprSequence, oprSequenceCode = oprDetail.oprSequenceCode, oprSequenceName = oprDetail.oprSequenceName, workCenterCode = oprDetail.workCenterCode, planStartTime = item.oprplan_start_time, planEndTime = item.oprplan_end_time, isEndProduct = item.isend_product, isDelete = AddOrUpdateFlag, state = (int)EnumOrderBodyStatus.初始化, workReportStatus = (int)EnumWorkReportStatus.未报工, createTime = DateTime.Now, createBy = SystemVariable.DefaultCreated, weldType = item.componentDetails[i].weld_type }; nowWorkDetail.serialNumberName = oprDetail.oprSequence + "_" +(xp+1); nowWorkDetail.weldNo = weldNoList[xp]; nowWorkDetail.weldMaterCode = weldMaterCodeList[xp]; nowWorkDetail.extend1 = item.componentDetails[i].extend1; nowWorkDetail.extend2 = item.componentDetails[i].extend2; nowWorkDetail.extendComp1 = item.componentDetails[i].extendComp1; nowWorkDetail.extendComp2 = item.componentDetails[i].extendComp2; nowWorkDetail.extendComp3 = item.componentDetails[i].extendComp3; nowWorkDetail.extendComp4 = item.componentDetails[i].extendComp4; busWorkOrderDetailList.Add(nowWorkDetail); } } } } /// <summary> /// 保存数据 /// </summary> private ResponseUpstream<string> SaveHandleAcceptOrderData(bus_workOrder_head busWorkOrderHead, List<bus_workOrder_detail> busWorkOrderDetailList) { int resultCount = 0; if (busWorkOrderDetailList == null || busWorkOrderDetailList.Count == 0) { ResponseOrder.ResponseError($"【上位系统】订单下发:工序任务明细生成失败,请确认请先发送工艺路线接口数据,反复出现请联系管理员!"); return ResponseOrder; } //新增 if (MomEntity.type == EnumAction.I.ToString()) { Context.Insertable(busWorkOrderHead).AddQueue(); Context.Insertable(busWorkOrderDetailList).AddQueue(); } //更新 else if (MomEntity.type == EnumAction.U.ToString()) { busWorkOrderHead.keys = busWkHead.keys; busWorkOrderHead.updateTime = DateTime.Now; busWorkOrderDetailList.ForEach(x => { x.headKeys = busWkHead.keys; x.updateTime = DateTime.Now; }); Context.Updateable(busWorkOrderHead) .IgnoreColumns(x => new { x.createBy, x.createTime, x.keys }) .Where(x => x.keys == busWorkOrderHead.keys && x.isDelete == AddOrUpdateFlag).AddQueue(); Context.Updateable(busWorkOrderDetailList) .IgnoreColumns(x => new { x.createBy, x.createTime, x.bodyKeys, x.headKeys }) .Where(x => x.bodyKeys == busWorkOrderHead.keys && x.isDelete == AddOrUpdateFlag).AddQueue(); } resultCount = ExecuteQueues(base.Context); return (ResponseUpstream<string>)(resultCount > 0 ? ResponseOrder.ResponseSuccess() : ResponseOrder.ResponseError()); } } }