From 8b286e16d88613191e6dbb46f24947d51c2b7f48 Mon Sep 17 00:00:00 2001 From: "songnan.zhang" Date: Sat, 24 Sep 2022 14:08:40 +0800 Subject: [PATCH] 276PA --- .../QMAPP.FJC.TRACING.csproj | 1 + .../StateActions/SubmitData276PA.cs | 679 ++++++++++++++++++ APPQ5/QMAPP.WinForm/App.config | 13 +- .../QMAPP.WinForm/Properties/AssemblyInfo.cs | 4 +- .../WCF/QMFrameWork.WebServiceHost/Web.config | 12 +- 5 files changed, 696 insertions(+), 13 deletions(-) create mode 100644 APPQ5/QMAPP.FJC.TRACING/StateActions/SubmitData276PA.cs diff --git a/APPQ5/QMAPP.FJC.TRACING/QMAPP.FJC.TRACING.csproj b/APPQ5/QMAPP.FJC.TRACING/QMAPP.FJC.TRACING.csproj index a1ea64c..911579a 100644 --- a/APPQ5/QMAPP.FJC.TRACING/QMAPP.FJC.TRACING.csproj +++ b/APPQ5/QMAPP.FJC.TRACING/QMAPP.FJC.TRACING.csproj @@ -113,6 +113,7 @@ + diff --git a/APPQ5/QMAPP.FJC.TRACING/StateActions/SubmitData276PA.cs b/APPQ5/QMAPP.FJC.TRACING/StateActions/SubmitData276PA.cs new file mode 100644 index 0000000..fa1f9e7 --- /dev/null +++ b/APPQ5/QMAPP.FJC.TRACING/StateActions/SubmitData276PA.cs @@ -0,0 +1,679 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using QMFrameWork.Data; +using QMAPP.FJC.DAL.QT; +using QMAPP.FJC.Entity.QT; +using QMAPP.FJC.TRACING.DAInterface; +using QMAPP.FJC.DAL.Produce; +using QMAPP.FJC.DAL.Basic; +using QMAPP.FJC.Entity.Operation; +using QMAPP.FJC.DAL.Operation; +using QMAPP.FJC.Entity.Basic; +using QMAPP.MD.Entity; +using QMAPP.MD.DAL; +using QMAPP.MD.Entity.View; +using WorkCellDAL = QMAPP.MD.DAL.WorkCellDAL; +using QMAPP.FJC.Entity; +using QMAPP.FJC.DAL.Injection; +using QMAPP.FJC.Entity.Injection; + +namespace QMAPP.FJC.TRACING.StateActions +{ + /// + /// 提交数据 + /// + public class SubmitData276PA : IStateAction + { + /// + /// 执行 + /// + /// + public void Execute(DAObject data) + { + //搜索确认产品物料号 + SearchMaterial(data); + + WorkCellRunStateDAL wcrsdal = new WorkCellRunStateDAL(); + var state = wcrsdal.GetNextState(data.WorkLocState.WORKCELL_CODE, data.WorkLocState.CurrentState.STATE_SEQ); + bool workcellend = state == null; //如果当前为工序最终状态 + + var product = SaveProduct(data, workcellend); + SaveProcessRecord(product, data, workcellend); + //List unsavedDai = new List(); + foreach (var dai in data.WorkLocState.DataCache) + { + if (!dai.SAVED.Contains(data.MouldCode)&&!string.IsNullOrWhiteSpace(dai.DA_VALUE)) //过滤已保存过的和采集值为空值的 + { + switch (dai.DATA_TYPE) + { + case "SN": //零件序列号 + case "BN": //零件批次号 + { + SaveProductStructure(product, dai, data); + break; + } + case "MN": //模具编号 + { + SaveProcessParam(product, dai, data); + break; + } + case "PARM": //加工参数 + { + //SaveProcessParam(product,dai,data); + break; + } + } + dai.SAVED = dai.SAVED + data.MouldCode; + data.AddToPersistentList(dai, dai.PID); + } + if (workcellend && !string.IsNullOrWhiteSpace(dai.MATERIAL_CODE) && !dai.MATERIAL_CODE.Equals(product.MATERIAL_CODE)) //如果采集的物料号于产品物料号一直则不保存产品组成 + { + StringBuilder sql = new StringBuilder(); + sql.AppendLine("MERGE INTO [T_AW_PRODUCTCOUNT] C "); + sql.AppendLine("USING (SELECT @materialcode AS [MATERIAL_CODE]) V "); + sql.AppendLine("ON (C.MATERIAL_CODE=V.MATERIAL_CODE AND C.[PROTYPE]=1) "); + sql.AppendLine("WHEN MATCHED THEN "); + sql.AppendLine(" UPDATE SET C.[COUNTVALUE]=C.[COUNTVALUE]+1 "); + sql.AppendLine("WHEN NOT MATCHED THEN "); + sql.AppendLine(" INSERT ([PID],[MATERIAL_CODE],[COUNTVALUE],[PROTYPE],[UPDATETIME]) "); + sql.AppendLine(" VALUES (NEWID(),V.[MATERIAL_CODE],1,1,GETDATE());"); + data.SQLCommands.Add(new SQLCommand(sql.ToString(), new DataParameter("materialcode", dai.MATERIAL_CODE))); + } + } + //DAICacheDAL dcdal = new DAICacheDAL(); + //dcdal.Update(unsavedDai, data.DataSession); + } + ///// + ///// 搜索确定加工后的产品物料号及加工消耗的物料号 + ///// + ///// + ///// 返回加工消耗物料 + //private string[] SearchMaterial(DAObject data) + //{ + // var materials = (from da in data.WorkLocState.DataCache + // where !string.IsNullOrWhiteSpace(da.MATERIAL_CODE) + // select da.MATERIAL_CODE).ToArray(); + // if (materials.Length == 1) //单一物料加工 + // { + // data.WorkLocState.CurrentState.MATERIAL_CODE = materials[0]; + // var dai = data.WorkLocState.DataCache.FirstOrDefault(p=>p.MATERIAL_CODE==materials[0]); + // data.WorkLocState.CurrentState.PROCESS_CODE = dai.DA_VALUE; + // data.WorkLocState.CurrentState.PRODUCT_PID = dai.OBJ_PID; + // } + // else //多物料组成 + // { + // var bomlocation = GetBomLocation(materials.Distinct().ToArray()); + // if (bomlocation == null) //未定位到 + // { + // materials = (from da in data.WorkLocState.DataCache + // where !string.IsNullOrWhiteSpace(da.MATERIAL_CODE) + // && !string.Equals(da.DA_MODE, "2") //过滤掉可省略的采集点 + // select da.MATERIAL_CODE).ToArray(); + // bomlocation = GetBomLocation(materials.Distinct().ToArray()); + // if (bomlocation == null) //仍未定位到BOM信息 抛出异常 + // { + // throw new Exception("采集数据有误,无法确定生产BOM,请检查采集点配置和BOM配置!"); + // } + // } + // string upperlevelmaterial = ""; + // if (bomlocation.ItemNo > 0) //如果Bom定位为明细项 + // { + // PbomDAL pbidal = new PbomDAL(); + // var bomitem = pbidal.GetByLocate(bomlocation); + // if (bomitem != null) + // { + // upperlevelmaterial = bomitem.MATERIAL_CODE; + // } + // } + // else //如果Bom定位为Bom头 + // { + // var bom = new PbomDAL().GetByCode(bomlocation.BOMCode); + // if (bom != null) + // { + // upperlevelmaterial = bom.MATERIAL_CODE; + // } + // } + // data.WorkLocState.CurrentState.MATERIAL_CODE = upperlevelmaterial; //取得产品物料号 + // } + // return materials.Distinct().ToArray(); + //} + /// + /// 搜索确定加工后的产品物料号及加工消耗的物料号 + /// + /// + /// 返回加工消耗物料 + private string[] SearchMaterial(DAObject data) + { + var materials = (from da in data.WorkLocState.DataCache + where !string.IsNullOrWhiteSpace(da.MATERIAL_CODE) + select da.MATERIAL_CODE).ToArray(); + + BomLocation bomlocation = null; + + bomlocation = GetBomLocation(materials.Distinct().ToArray()); + if (bomlocation == null) //未定位到 + { + materials = (from da in data.WorkLocState.DataCache + where !string.IsNullOrWhiteSpace(da.MATERIAL_CODE) + && !string.Equals(da.DA_MODE, "2") //过滤掉可省略的采集点 + select da.MATERIAL_CODE).ToArray(); + bomlocation = GetBomLocation(materials.Distinct().ToArray()); + if (bomlocation == null) //仍未定位到BOM信息 抛出异常 + { + + if (materials.Length == 1) //单一物料加工 + { + data.WorkLocState.CurrentState.MATERIAL_CODE = materials[0]; + var dai = data.WorkLocState.DataCache.FirstOrDefault(p => p.MATERIAL_CODE == materials[0]); + data.WorkLocState.CurrentState.PROCESS_CODE = dai.DA_VALUE; + data.WorkLocState.CurrentState.PRODUCT_PID = dai.OBJ_PID; + return materials.Distinct().ToArray(); + } + else + { + throw new Exception("采集数据有误,无法确定生产BOM,请检查采集点配置和BOM配置!"); + } + } + } + + + PbomDAL pbidal = new PbomDAL(); + if (materials.Length == 1) //单一物料加工 + { + var oneitem = pbidal.GetBomDetail(new MD.Entity.PbomItem { PBOM_CODE = bomlocation.BOMCode, MATERIAL_CODE = materials[0], GMP = data.WorkLocState.WORKCELL_CODE }); + if (oneitem == null)//并且当前工序不是此物料的发料工序 + { + data.WorkLocState.CurrentState.MATERIAL_CODE = materials[0]; + var dai = data.WorkLocState.DataCache.FirstOrDefault(p => p.MATERIAL_CODE == materials[0]); + data.WorkLocState.CurrentState.PROCESS_CODE = dai.DA_VALUE; + data.WorkLocState.CurrentState.PRODUCT_PID = dai.OBJ_PID; + return materials.Distinct().ToArray(); + } + } + + string upperlevelmaterial = ""; + if (bomlocation.ItemNo > 0) //如果Bom定位为明细项 + { + var bomitem = pbidal.GetByLocate(bomlocation); + if (bomitem != null) + { + upperlevelmaterial = bomitem.MATERIAL_CODE; + } + } + else //如果Bom定位为Bom头 + { + var bom = pbidal.GetByCode(bomlocation.BOMCode); + if (bom != null) + { + upperlevelmaterial = bom.MATERIAL_CODE; + } + } + data.WorkLocState.CurrentState.MATERIAL_CODE = upperlevelmaterial; //取得产品物料号 + + return materials.Distinct().ToArray(); + } + + + /// + /// 保存产品组成信息 + /// + /// 产品 + /// + /// + private void SaveProductStructure(Product product, DAICache dai, DAObject data) + { + if (!dai.MATERIAL_CODE.Equals(product.MATERIAL_CODE)) //如果采集的物料号于产品物料号一直则不保存产品组成 + { + QMAPP.FJC.DAL.Produce.ProductDAL proddal = new QMAPP.FJC.DAL.Produce.ProductDAL(); + Product part = null; + part= data.GetPersistentEntity(dai.OBJ_PID); + if (part == null) + { + part = data.GetObjectFromCache(p => p.PID == dai.OBJ_PID); + if (part == null) + { + part = proddal.GetByPID(dai.OBJ_PID); + + } + } + data.ObjectCacheList.Add(part); + part.USINGCOUNT = part.USINGCOUNT + 1; + part.USINGSTATE = part.CAPACITY > part.USINGCOUNT ? "1" : "2"; + //part.UPDATEDATE = DateTime.Now; + part.UPDATEUSER=data.UserID; + part.WORKLOC_CODE = data.WorkLocState.WORKLOC_CODE; + + //proddal.Update(part, data.DataSession); + data.AddToPersistentList(part, dai.OBJ_PID); + + ProductStructure structure = new ProductStructure() + { + PART_PID = part.PID, + PID = Guid.NewGuid().ToString(), + PROCESS_CODE = product.PRODUCTCODE, + PRODUCT_PID = product.PID, + IsNewInfo=true + }; + //ProductStructureDAL psdal = new ProductStructureDAL(); + //psdal.Insert(structure, data.DataSession); + data.AddToPersistentList(structure, structure.PID); + } + } + /// + /// 保存加工参数 + /// + /// + /// + private void SaveProcessParam(Product product, DAICache dai,DAObject data) + { + ProcessParameters param = new ProcessParameters() + { + DA_CODE = dai.DA_CODE, + DA_MODEL = "1", + DA_TIME = dai.UPDATEDATE, + EQUIPMENT_CODE = "", + MEMBER_CODE = "", + PARM_ITEM = "", + PARM_VAL = dai.DA_VALUE, + PRODUCT_PID = product.PID, + SHIFT_CODE = "", + PID = Guid.NewGuid().ToString(), + TEAM_CODE = "", + WORKCELL_CODE = dai.WORKCELL_CODE, + WORKLOC_CODE = dai.WORKLOC_CODE, + IsNewInfo=true, + }; + //ProcessParametersDAL ppdal = new ProcessParametersDAL(); + //ppdal.Insert(param, data.DataSession); + data.AddToPersistentList(param, param.PID); + } + /// + /// 保存加工记录 + /// + private void SaveProcessRecord(Product product, DAObject data, bool workcellend) + { + //QMAPP.FJC.DAL.Operation.ProductDAL pdal = new DAL.Operation.ProductDAL(); + //pdal.BaseSession = data.DataSession; + //product = pdal.Get(product); + + ProcessRecordDAL prdal = new ProcessRecordDAL(); + ProcessRecord record = null; + record = data.GetPersistentEntity(product.PID);//加工记录的ID使用PRODUCT的ID代替 + if (record == null) + { + record = prdal.Get(product.PID, data.WorkLocState.WORKCELL_CODE); + } + if (record != null) + { + // + record.MANUAL_PASS = data.DAI == null ? "1" : "0"; + + //if (string.IsNullOrEmpty(record.PROCESS_STATE)) + //{ + //record.PROCESS_STATE = workcellend ? "1" : "0"; + //} + + if (record.MANUAL_PASS == "1") + { + record.PROCESS_STATE = "2"; + } + else + { + record.PROCESS_STATE = workcellend ? "1" : "0"; + } + + record.WORKLOC_CODE = data.WorkLocState.WORKLOC_CODE; + + if (workcellend) + { + record.WORK_END_TIME = DateTime.Now; + } + //prdal.Update(record, data.DataSession); + } + else + { + record = new ProcessRecord() + { + IN_WORKCELL_TIME = DateTime.Now, + PID = Guid.NewGuid().ToString(), + MANUAL_PASS = data.DAI == null ? "1" : "0", + //PROCESS_STATE = workcellend ? "1" : "0", + PRODUCT_PID = product.PID, + WORK_START_TIME = DateTime.Now, + WORKCELL_CODE = data.WorkLocState.WORKCELL_CODE, + WORKLOC_CODE = data.WorkLocState.WORKLOC_CODE, + MODULE_CODE = data.MouldCode, + IsNewInfo = true + }; + + if (record.MANUAL_PASS == "1") + { + record.PROCESS_STATE = "2"; + } + else + { + record.PROCESS_STATE = workcellend ? "1" : "0"; + } + + if (workcellend) + { + record.WORK_END_TIME = DateTime.Now; + } + //prdal.Insert(record, data.DataSession); + } + data.AddToPersistentList(record, product.PID);//加工记录的ID使用PRODUCT的ID代替 + data.WorkLocState.CurrentState.RECORD_PID = record.PID; + if (workcellend) + { + #region 插入加工记录 + //闫永刚 20170923 + + MainOperation mo = new MainOperation(); + mo.PID = record.PID; + mo.PDID = product.PID; + mo.PROCESSTYPE = data.WorkLocState.CURRENTPROCESS; + mo.PRODUCTTYPE = ""; + mo.PRODUCTCODE = product.PRODUCTCODE; + mo.MACHINECODDE = data.MachineCode; + mo.MOLDNUMBER = data.MouldCode; + mo.MACHINENAME = data.MachineName; + mo.STATUS = EnumGeter.STATUS.QUALIFIED.GetHashCode().ToString(); + mo.OPERATESTATE = data.DAI == null ? EnumGeter.OPERATESTATE.RELEASED.GetHashCode().ToString(): EnumGeter.OPERATESTATE.COMPLETED.GetHashCode().ToString(); + //mo.OPERATEDDATE = System.DateTime.Now; + mo.CURRENTPROCESS = ""; + //mo.PRODUCELINE = "B9"; + mo.MODELSTATION = "1"; + mo.OPERATEDDATE = DateTime.Now; + mo.CREATEDATE = record.IN_WORKCELL_TIME;//DateTime.Now; + mo.CURRENTPROCESS = data.WorkLocState.CURRENTPROCESS; + mo.MATERIAL_CODE = product.MATERIAL_CODE; + mo.MATERIAL_NAME = product.MATERIAL_NAME; + mo.MATERIAL_TYPE_CODE = product.MATERIAL_TYPE; + mo.WORKCENTER_CODE = product.WORKCENTER_CODE; + mo.WORKCELL_CODE = data.WorkLocState.WORKCELL_CODE; + mo.CREATEUSER = product.CREATEUSER; + mo.IsNewInfo = true; + + //MainOperationDAL moDal = new MainOperationDAL(); + //moDal.Insert(mo); + data.AddToPersistentList(mo, mo.PID); + + #endregion + + #region 更新产品状态 + + #region 产品下道工序设置 + + //直接获取下道工序信息 + QMAPP.MD.Entity.WorkCell nextCell = new WorkCellDAL().GetNextWorkCell(new QMAPP.MD.Entity.WorkCell() { WORKCELL_CODE = data.WorkLocState.WORKCELL_CODE }); + + if (nextCell != null && string.IsNullOrEmpty(nextCell.PID) == false) + { + product.WORKCELL_CODE = nextCell.WORKCELL_CODE; + product.WORKCENTER_CODE = nextCell.WORKCENTER_CODE; + product.TEAM_CODE = ""; + product.WORKLOC_CODE = ""; + product.CURRENTPROCESS = nextCell.CURRENTPROCESS; + } + else + { + //获取其他工艺路线的 + + #region 通过零件号获取BOM + + + //判断当前零件号是否是总成零件号 + //如果不是继续判断下一个工序 + //List pbomList = new PbomDAL().GetList(new Pbom() { MATERIAL_CODE = product.MATERIAL_CODE }); + //if (pbomList.Count == 0) + //{ + ProcessRouteWithWorkCellSeqDAL seqdal = new ProcessRouteWithWorkCellSeqDAL(); + ProcessRouteWithWorkCellSeq seq = seqdal.GetNextWorkCellBetweenRoute(new Product() { WORKCELL_CODE = product.WORKCELL_CODE, MATERIAL_CODE = product.MATERIAL_CODE }); ; + product.WORKCELL_CODE = seq != null ? seq.WORKCELL_CODE : ""; + + QMAPP.MD.Entity.WorkCell workcell = new WorkCellDAL().GetByCondition(new QMAPP.MD.Entity.WorkCell() { WORKCELL_CODE = product.WORKCELL_CODE }); + product.CURRENTPROCESS = workcell.CURRENTPROCESS; + + //} + + + + #endregion + } + + //pdal.Update(product); + + #endregion + + #endregion + + //product.STATUS = (int.Parse(record.PROCESS_STATE) - 1).ToString(); + } + } + /// + /// 获取/创建产品信息 + /// + /// + /// 工序结束 + /// + private Product SaveProduct(DAObject data,bool workcellend) + { + MD.DAL.ProcessRouteDAL routedal = new MD.DAL.ProcessRouteDAL(); + var route = routedal.LocateRoute(data.WorkLocState.WORKCELL_CODE); + if (route == null) + { + throw new Exception("无法定位工艺路线!请检查工序和工艺路线设置。"); + } + + DAL.Basic.ProcessRouteWithWorkCellSeqDAL routeseqdal = new ProcessRouteWithWorkCellSeqDAL(); + var endofroute = routeseqdal.EndOfRoute(route.RouteCode, data.WorkLocState.WORKCELL_CODE); + + var materialdal = new DAL.MD.MaterialDAL(); + var material = materialdal.Get(data.WorkLocState.CurrentState.MATERIAL_CODE); + + QMAPP.FJC.DAL.Produce.ProductDAL dal = new QMAPP.FJC.DAL.Produce.ProductDAL(); + if (!string.IsNullOrEmpty(data.WorkLocState.CurrentState.PROCESS_CODE)) //如果已存在产品条码则获取产品信息 + { + Product product=null; + if (!string.IsNullOrWhiteSpace(data.WorkLocState.CurrentState.PRODUCT_PID))//如果记录了产品ID 则通过产品ID获取产品 + { + product = data.GetPersistentEntity(data.WorkLocState.CurrentState.PRODUCT_PID); + if (product == null) + { + product = data.GetObjectFromCache(p => p.PID == data.WorkLocState.CurrentState.PRODUCT_PID); + if (product == null) + { + product = dal.GetByPID(data.WorkLocState.CurrentState.PRODUCT_PID); + } + } + } + else + { + product = data.GetObjectFromCache(p => p.PRODUCTCODE == data.WorkLocState.CurrentState.PROCESS_CODE && p.MATERIAL_CODE == data.WorkLocState.CurrentState.MATERIAL_CODE); + if (product == null) + { + product = dal.GetByCode(data.WorkLocState.CurrentState.PROCESS_CODE, data.WorkLocState.CurrentState.MATERIAL_CODE); + } + } + data.ObjectCacheList.Add(product); + product.WORKCELL_CODE = data.WorkLocState.WORKCELL_CODE; + product.WORKCENTER_CODE = data.WorkLocState.WORKCENTER_CODE; + product.WORKLOC_CODE = data.WorkLocState.WORKLOC_CODE; + product.MATERIAL_TYPE = material == null ? "" : material.MATERIAL_TYPE_CODE; + if (material != null) + { + product.MATERIAL_CODE = material.MATERIAL_CODE; + } + + //product.UPDATEDATE = DateTime.Now; + product.UPDATEUSER = data.UserID; + if (workcellend) + { + product.STATUS = workcellend ? "0" : ""; + product.USINGSTATE = workcellend ? "0" : ""; + product.OUTFLAG = workcellend ? "0" : ""; + } + if (endofroute) + { + product.ENDOFLINE = "1"; + } + data.AddToPersistentList(product, product.PID); + //dal.Update(product, data.DataSession); + data.WorkLocState.CurrentState.PRODUCT_PID = product.PID; + return product; + } + else //不存在则创建产品信息 + { + + string sn = (from da in data.WorkLocState.DataCache + where string.Equals(da.ISPROCESSCODE, "1") + select da.DA_VALUE).FirstOrDefault(); + if (string.IsNullOrEmpty(sn)) + { + //TODO:根据物料号的不同 分别生成产品序列号 + //sn = ""; + ICodeGenerator cgtor = new CodeGenerators.ProductCodeGenerator(); + sn = cgtor.Generate(data.WorkLocState.CurrentState.MATERIAL_CODE, DateTime.Now, null); + } + Product product = new Product() + { + CAPACITY = 1, + MATERIAL_CODE = data.WorkLocState.CurrentState.MATERIAL_CODE, + CREATEDATE = DateTime.Now, + CREATEUSER = data.UserID, + PID = Guid.NewGuid().ToString(), + PRODUCTCODE = sn, + STATUS = workcellend ? "0" : "", + TEAM_CODE = "", + USINGCOUNT = 0, + WORKCELL_CODE = data.WorkLocState.WORKCELL_CODE, + WORKCENTER_CODE = data.WorkLocState.WORKCENTER_CODE, + WORKLOC_CODE = data.WorkLocState.WORKLOC_CODE, + PRODUCESHIFTTCODE = data.Shift.PRODUCESHIFTTCODE, + USINGSTATE = workcellend ? "0" : "", + PRODUCTSOURCE = "0", + OUTFLAG = workcellend ? "0" : "", + MACHINECODDE = data.MachineCode, + MACHINENAME = data.MachineName, + MATERIAL_TYPE = material == null ? "" : material.MATERIAL_TYPE_CODE, + IsNewInfo = true + }; + if (endofroute) + { + product.ENDOFLINE = "1"; + } + data.AddToPersistentList(product, product.PID); + //dal.Insert(product, data.DataSession); + + //判断是否为浇注工序 + if (data.WorkLocState.WORKCELL_CODE == "FOAMING_VW371") + { + List updateInjectList = new List(); + List addInjectItemList = new List(); + addInjectItemList = this.GetProductInjectionList(product, ref updateInjectList); + ProductInjectionDAL proInDal = new ProductInjectionDAL(); + if (addInjectItemList.Count > 0) + { + foreach (ProductInjection item in addInjectItemList) + { + proInDal.Insert(item); + } + } + } + + data.WorkLocState.CurrentState.PROCESS_CODE = sn; + data.WorkLocState.CurrentState.PRODUCT_PID = product.PID; + return product; + } + + } + /// + /// 根据物料组获取上层物料号 + /// + /// + /// + private BomLocation GetBomLocation(params string[] materials) + { + PbomDAL pbidal = new PbomDAL(); + var bomlocations = pbidal.LocateBom(materials); + //确定物料组成数量一致 + var bomlocation = bomlocations.FirstOrDefault(p => p.SubCount == materials.Length); + return bomlocation; + } + + + #region 投料 + /// + /// + /// + /// + /// + /// + /// + public List GetProductInjectionList(Product product, ref List updateInjectList) + { + InjectionRecorderDAL injectDal = new InjectionRecorderDAL(); + updateInjectList = new List(); + List addInjectItemList = new List(); + + //List ruleList = injectDal.GetCastLastRecorderWithBom(new InjectionRecorder() { MATERIALCODE = product.MATERIAL_CODE }); + //去BOMItem + List ruleList = new PbomDAL().GetSubItem(product.MATERIAL_CODE); + //遍历规则信息 + foreach (MD.Entity.PbomItem pm in ruleList) + { + #region 获取相应的投料信息 + InjectionRecorder inRecorder = null; + List list = injectDal.GetCastLastRecorderWithMAterial(new InjectionRecorder() + { + MATERIALCODE = pm.MATERIAL_CODE + }); + #endregion + if (list.Count > 0) + { + #region 修改投料记录 + inRecorder = updateInjectList.Find(m => m.PID.Equals(list[0].PID)); + if (inRecorder != null) + { + inRecorder.USEDWEIGHTSUM += pm.UNIT_SUM; + } + else + { + inRecorder = list[0]; + inRecorder.USEDWEIGHTSUM += pm.UNIT_SUM; + //updateInjectList.Add(inRecorder); + InjectionRecorderDAL recoderDal = new InjectionRecorderDAL(); + recoderDal.Update(inRecorder); + } + //recoderDal.Update(item); + #endregion + } + if (inRecorder != null) + { + #region 零件投料关联记录 + ProductInjection proInject = new ProductInjection(); + proInject.PID = Guid.NewGuid().ToString(); + proInject.IPID = inRecorder.PID; + proInject.MPPID = product.PID; + proInject.MATERIALNAME = inRecorder.MATERIALNAME; + proInject.MATERIALCODE = inRecorder.MATERIALCODE; + proInject.MATERIALTYPE = inRecorder.MATERIALTYPE; + proInject.MATERIALBATCH = inRecorder.MATERIALBATCH; + proInject.MATERIALCODE = inRecorder.MATERIALCODE; + proInject.INJECTIONINDEX = inRecorder.INJECTIONINDEX; + proInject.INJECTIONTERMINAL = inRecorder.INJECTIONTERMINAL; + proInject.USEDWEIGHT = pm.UNIT_SUM; + proInject.CREATEDATE = System.DateTime.Now; + proInject.CREATEUSER = inRecorder.CREATEUSER; + proInject.UPDATEUSER = inRecorder.UPDATEUSER; + addInjectItemList.Add(proInject); + #endregion + } + } + return addInjectItemList; + } + #endregion + } +} diff --git a/APPQ5/QMAPP.WinForm/App.config b/APPQ5/QMAPP.WinForm/App.config index 5984160..0132462 100644 --- a/APPQ5/QMAPP.WinForm/App.config +++ b/APPQ5/QMAPP.WinForm/App.config @@ -14,12 +14,12 @@ --> + + + + --> @@ -217,7 +217,10 @@ - + + diff --git a/APPQ5/QMAPP.WinForm/Properties/AssemblyInfo.cs b/APPQ5/QMAPP.WinForm/Properties/AssemblyInfo.cs index 99966a9..a7597fd 100644 --- a/APPQ5/QMAPP.WinForm/Properties/AssemblyInfo.cs +++ b/APPQ5/QMAPP.WinForm/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2022.09.01.01")] -[assembly: AssemblyFileVersion("2022.09.01.01")] +[assembly: AssemblyVersion("2022.09.23.01")] +[assembly: AssemblyFileVersion("2022.09.23.01")] diff --git a/ServicesCenter/WCF/QMFrameWork.WebServiceHost/Web.config b/ServicesCenter/WCF/QMFrameWork.WebServiceHost/Web.config index c785078..a2b6567 100644 --- a/ServicesCenter/WCF/QMFrameWork.WebServiceHost/Web.config +++ b/ServicesCenter/WCF/QMFrameWork.WebServiceHost/Web.config @@ -73,15 +73,15 @@ - - - + + + -->