using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using QMAPP.BLL; using QMFrameWork.Data; using QMAPP.FJC.BLL.Dict; using QMAPP.FJC.Entity.Operation; using QMAPP.FJC.DAL.Operation; using QMAPP.Entity; using QMAPP.FJC.DAL.ProductIn; using QMAPP.FJC.Entity; using QMFrameWork.Log; using QMAPP.FJC.DAL.ProductionPlan; using QMAPP.FJC.Entity.ProductionPlan; using System.Text.RegularExpressions; using QMAPP.MD.Entity; using QMAPP.MD.DAL; namespace QMAPP.FJC.BLL.Operation { public class MainCodeChangeBLL : BaseBLL { #region 获取列表 /// /// 获取列表 /// /// 条件 /// 数据页 /// 数据页 public DataPage GetList(MainCodeChange condition, DataPage page) { try { page = new MainCodeChangeDAL().GetList(condition, page); List list = page.Result as List; page.Result = list; return page; } catch (Exception ex) { throw ex; } } /// /// 获取列表web /// /// 条件 /// 数据页 /// 数据页 public DataResult GetListWeb(MainCodeChange condition, DataPage page) { DataResult result = new DataResult(); try { //获取信息列表 page = new MainCodeChangeDAL().GetList(condition, page); #region 转换状态显示类型 //List fisOrderList = page.Result as List; ////处理字典信息 //DictManageBLL dictSCANSTATE = new DictManageBLL(DictKind.SCANSTATE); //foreach (var info in fisOrderList) //{ // info.SCANSTATE = dictSCANSTATE.GetDictValue(info.SCANSTATE); //} #endregion result.Result = page; } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "成品信息逻辑层-获取列表!" }); result.IsSuccess = false; result.Msg = Resource.SystemException; throw ex; } result.IsSuccess = true; return result; } #endregion #region 插入信息 /// /// 插入信息(单表) /// /// 信息 /// 插入行数 public int Insert(MainCodeChange model) { try { //基本信息 model.PID = Guid.NewGuid().ToString(); model.CREATEUSER = this.LoginUser.UserID; model.CREATEDATE = DateTime.Now; MainDAL cmdDAL = new MainDAL(); if (ExistsMain(model) == true) return -1; return new MainCodeChangeDAL().Insert(model); } catch (Exception ex) { throw ex; } } #endregion #region 信息是否重复 /// /// 判断名称是否存在 /// /// /// true:已存在;fasel:不存在。 public bool ExistsMain(MainCodeChange model) { try { return new MainCodeChangeDAL().ExistsMain(model); } catch (Exception ex) { throw ex; } } #endregion #region 获取生成新的Maincode /// /// 获取生成新的Maincode /// /// public DataResult Generate(string materialCode) { using (IDataSession session = AppDataFactory.CreateMainSession()) { try { DataResult result = new DataResult(); DAL.Operation.MainDAL maindal = new DAL.Operation.MainDAL(); maindal.BaseSession = session; PrintCode condition = maindal.GetMaxMainCode(materialCode); string newcode = "1"; if (!string.IsNullOrEmpty(condition.MAINCODE)) { string mainCode = (Convert.ToInt32(condition.MAINCODE.Substring(1, 6))).ToString(); newcode = (Convert.ToInt32(mainCode) + 1) + ""; } newcode = "052 4XR" + condition.MAINCODE.Substring(0, 1) + newcode.PadLeft(6, '0'); result.Result = newcode + CalculateChecksum(newcode); PrintCode pc = new PrintCode(); pc.PID = condition.PID; pc.MAINCODE = result.Result; pc.PRODUCTCODE = condition.PRODUCTCODE; pc.ISCOMPLETE = 0; pc.CREATETIME = System.DateTime.Now; DAL.Operation.PrintCodeDAL dal = new DAL.Operation.PrintCodeDAL(); dal.BaseSession = session; dal.UpdateForChangeCode(pc); session.CommitTs(); return result; } catch (Exception ex) { session.RollbackTs(); return new DataResult { IsSuccess = false, Ex = ex, Msg = ex.Message }; } } } /// /// 计算验证码 /// /// public static string CalculateChecksum(string barcode) { string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"; int sum = 0; foreach (var c in barcode) { sum += chars.IndexOf(c); } int rem = sum % chars.Length; return chars[rem].ToString(); } #endregion #region 导出数据 /// /// 获取导出的数据 /// /// 查询条件 /// 数据 public DataResult GetExportData(MainCodeChange model) { DataResult result = new DataResult(); try { result.IsSuccess = true; result.Result = new MainCodeChangeDAL().GetExportData(model); } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "导出错误!" }); result.IsSuccess = false; result.Msg = "导出错误!"; } return result; } #endregion #region 门板条码重新生成 public Product DPRegenerate(Product product) { using (IDataSession session = AppDataFactory.CreateMainSession()) { try { string oldcode=product.PRODUCTCODE; product.OUTFLAG = "2"; string regexp="(?<=\\d)R\\d"; var flag=System.Text.RegularExpressions.Regex.Match(oldcode,regexp); if(flag.Success) { var nflag = "R" + (int.Parse(flag.Value[1] + "") + 1); product.PRODUCTCODE = System.Text.RegularExpressions.Regex.Replace(oldcode, regexp, nflag); } else { product.PRODUCTCODE = oldcode.Insert(oldcode.Length - 6, "R0"); } //GenerateCode(product.MATERIAL_CODE, product.CREATEDATE); var changelog = new MainCodeChange { CREATEDATE = DateTime.Now, CREATEUSER = LoginUser.UserID, MATERIAL_NAME = product.MATERIAL_NAME, MATERIALCODE = product.MATERIAL_CODE, NEWMAINCODE = product.PRODUCTCODE, ORIGMAINCODE = oldcode, PRODUCELINE = product.PRODUCELINE, PRODUCTCODE = product.PRODUCTCODE, PID = Guid.NewGuid().ToString() }; DAL.Operation.ProductDAL dal = new ProductDAL(); dal.BaseSession = session; DAL.QT.ProductStructureDAL psdal = new DAL.QT.ProductStructureDAL(); psdal.BaseSession = session; DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL(); cdal.BaseSession = session; DAL.Operation.MainOperationDAL modal = new MainOperationDAL(); modal.BaseSession = session; session.OpenTs(); dal.ReplaceBarcode(oldcode, product.PRODUCTCODE); psdal.ReplaceProcesscode(oldcode, product.PRODUCTCODE); modal.ReplaceBarcode(oldcode, product.PRODUCTCODE); modal.DPParamReplace(oldcode, product.PRODUCTCODE); cdal.Insert(changelog); session.CommitTs(); return product; } catch (Exception ex) { session.RollbackTs(); throw ex; } } } private string GenerateCode(string materialcode, DateTime time) { QMAPP.FJC.DAL.MD.MaterialDAL mdal = new QMAPP.FJC.DAL.MD.MaterialDAL(); var material = mdal.Get(new QMAPP.FJC.Entity.MD.Material { MATERIAL_CODE = materialcode }); if (material == null) { throw new Exception("查找物料信息失败!"); } DAL.Basic.MaterialCodeInitDAL mcdal = new DAL.Basic.MaterialCodeInitDAL(); var materialinit = mcdal.GetByCondition(new Entity.Basic.MaterialCodeInit { MATERIAL_TYPE = material.MATERIAL_TYPE_CODE }); string prefix = ""; if (materialinit != null) { prefix = materialinit.PRODUCT_TYPES; } var productdal = new DAL.Produce.ProductDAL(); string maxcode = productdal.GetMaxCode(material.MATERIAL_TYPE_CODE, time); string newcode = "1"; if (!string.IsNullOrEmpty(maxcode)) { newcode = (Convert.ToInt32(maxcode) + 1) + ""; } newcode = prefix + time.ToString("yyyyMMdd") + newcode.PadLeft(6, '0'); return newcode; } #endregion public DataResult ReplacePlanNo(Product product,string newplanno) { using (IDataSession session = AppDataFactory.CreateMainSession()) { try { var changelog = new MainCodeChange { CREATEDATE = DateTime.Now, CREATEUSER = LoginUser.UserID, MATERIAL_NAME = product.MATERIAL_NAME, MATERIALCODE = product.MATERIAL_CODE, NEWMAINCODE = newplanno, ORIGMAINCODE = product.PLAN_NO, PRODUCELINE = product.PRODUCELINE, PRODUCTCODE = product.PRODUCTCODE, PID = Guid.NewGuid().ToString() }; DAL.Operation.ProductDAL dal = new ProductDAL(); dal.BaseSession = session; DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL(); cdal.BaseSession = session; if (product.ENDOFLINE != "1") { var order = SetOrder(session, newplanno, product); dal.ReplacePlanNo(product.PRODUCTCODE, newplanno, order.ORDERPLANID); } else { dal.ReplacePlanNo(product.PRODUCTCODE, newplanno, ""); } cdal.Insert(changelog); session.CommitTs(); return new DataResult { IsSuccess = true }; } catch (Exception ex) { session.RollbackTs(); return new DataResult { IsSuccess = false, Ex = ex, Msg = ex.Message }; } } } public DataResult ExchangePlanNo(Product oproduct, Product nproduct) { using (IDataSession session = AppDataFactory.CreateMainSession()) { try { var changelog = new MainCodeChange { CREATEDATE = DateTime.Now, CREATEUSER = LoginUser.UserID, MATERIAL_NAME = oproduct.MATERIAL_NAME, MATERIALCODE = oproduct.MATERIAL_CODE, NEWMAINCODE = nproduct.PLAN_NO, ORIGMAINCODE = oproduct.PLAN_NO, PRODUCELINE = oproduct.PRODUCELINE, PRODUCTCODE = oproduct.PRODUCTCODE, PID = Guid.NewGuid().ToString() }; var changelog1 = new MainCodeChange { CREATEDATE = DateTime.Now, CREATEUSER = LoginUser.UserID, MATERIAL_NAME = nproduct.MATERIAL_NAME, MATERIALCODE = nproduct.MATERIAL_CODE, NEWMAINCODE = oproduct.PLAN_NO, ORIGMAINCODE = nproduct.PLAN_NO, PRODUCELINE = nproduct.PRODUCELINE, PRODUCTCODE = nproduct.PRODUCTCODE, PID = Guid.NewGuid().ToString() }; DAL.Operation.ProductDAL dal = new ProductDAL(); dal.BaseSession = session; DAL.Operation.MainCodeChangeDAL cdal = new MainCodeChangeDAL(); cdal.BaseSession = session; if (nproduct.ENDOFLINE != "1") { var norder= SetOrder(session, oproduct.PLAN_NO, nproduct); dal.ReplacePlanNo(nproduct.PRODUCTCODE, oproduct.PLAN_NO,norder.ORDERPLANID); } else { dal.ReplacePlanNo(nproduct.PRODUCTCODE, oproduct.PLAN_NO,""); } if (oproduct.ENDOFLINE != "1") { var oorder = SetOrder(session, nproduct.PLAN_NO, oproduct); dal.ReplacePlanNo(oproduct.PRODUCTCODE, nproduct.PLAN_NO,oorder.ORDERPLANID); } else { dal.ReplacePlanNo(oproduct.PRODUCTCODE, nproduct.PLAN_NO,""); } cdal.Insert(changelog); session.CommitTs(); return new DataResult { IsSuccess = true }; } catch (Exception ex) { session.RollbackTs(); return new DataResult { IsSuccess = false, Ex = ex, Msg = ex.Message }; } } } private Entity.ProductionPlan.WorkOrder SetOrder(IDataSession session , string orderno,Product product) { string regexp_full = "^D\\d{2}\\w+[RF][LR]\\d{2}(10|11|12|0[1-9])(30|31|2\\d|1\\d|0[1-9])\\w\\d{5}$"; string regexp_prefix = "^D\\d{2}\\w+(?=[RF][LR]\\d{6})"; string regexp_position = "[RF][LR](?=\\d{6})"; string regexp_date = "(?<=[RF][LR])\\d{2}(10|11|12|0[1-9])(30|31|2\\d|1\\d|0[1-9])"; string regexp_seq = "\\d{5}$"; string regexp_sdSeq = "(?<=SD)\\d{4}$"; var plandal = new DAL.FIS.OrderPlanDAL(); var workorderdal = new DAL.ProductionPlan.WorkOrderDAL(); //Entity.FIS.OrderPlan plan = null; Entity.ProductionPlan.WorkOrder order = null; order = workorderdal.GetOneByOrderNO(orderno); if (order == null) { var plan=plandal.GetInfo(new Entity.FIS.OrderPlan { PLAN_NO = Regex.Replace(orderno,regexp_sdSeq, "") }); if (plan == null) { string codeprefix = Regex.Match(orderno, regexp_prefix).Value; string positioncode = Regex.Match(orderno, regexp_position).Value; string date = Regex.Match(orderno, regexp_date).Value; string seq = ""; if (Regex.IsMatch(orderno, regexp_full)) { seq = Regex.Match(orderno, regexp_seq).Value; } else { seq = Regex.Match(orderno, regexp_sdSeq).Value; } string materialcode = new DAL.FIS.FISPhraseDAL().GetMESModulCode(codeprefix, positioncode); if (string.IsNullOrWhiteSpace(materialcode)) { throw new Exception("FIS短语字典配置不准确或未更新!"); } DateTime plandate = new DateTime(2000 + int.Parse(date.Substring(0, 2)) , int.Parse(date.Substring(2, 2)) , int.Parse(date.Substring(4, 2))); plandal.BaseSession = session; plan = new Entity.FIS.OrderPlan { CREATEDATE = DateTime.Now, COMPLETE_QTY = 0, CREATEUSER = "", MATERIAL_CODE = materialcode,////////////////// PID = Guid.NewGuid().ToString(), PLAN_DATE = plandate,//////////// PLAN_NO = orderno, PLAN_SEQ = seq,////////////////// PLAN_STATE = "1", PLANSOURCE = Regex.IsMatch(orderno, regexp_full)?"0":"1", QTY = 1, UPDATEUSER = "", UPDATEDATE = DateTime.Now, }; Pbom pbomcode = new PbomDAL().Get(new Pbom { MATERIAL_CODE = plan.MATERIAL_CODE }); if (pbomcode != null) { plan.PBOM_CODE = pbomcode.PBOM_CODE; } QMAPP.MD.Entity.ProcessRoute routecode = new QMAPP.MD.DAL.ProcessRouteDAL().RouteWithMaterial(plan.MATERIAL_CODE); if (routecode != null) { plan.ROUTE_CODE = routecode.ROUTE_CODE; } string workcentercode = new WorkCellDAL().GetWorkcenterWithMaterial(plan.MATERIAL_CODE); if (workcentercode != null) { plan.WORKCENTER_CODE = workcentercode; } //赋值新session后插入 zxd20171101 plandal.Insert(plan); } var wodDal = new WorkOrderDAL(); //List list = new WorkCellDAL().GetFirstWorkCell(plan.PBOM_CODE); wodDal.BaseSession = session; //DataRow workOrder = workOrderDt.NewRow(); order = new WorkOrder(); order.PID = Guid.NewGuid().ToString(); order.ORDERPLANID = plan.PID; order.ORDERPLAN_NO = plan.PLAN_NO; if (Regex.IsMatch(orderno, regexp_full)) order.ORDER_TYPE = EnumGeter.WORKORDERTYPE.FIS.GetHashCode().ToString(); else order.ORDER_TYPE = EnumGeter.WORKORDERTYPE.STOCK.GetHashCode().ToString(); order.SEQ = plan.PLAN_SEQ; order.MATERIAL_CODE = plan.MATERIAL_CODE; order.PBOM_CODE = plan.PBOM_CODE; order.QTY = 1; order.COMPLETE_QTY = 0; order.PLAN_DATE = plan.PLAN_DATE; order.SHIFT_CODE = plan.SHIFT_CODE; order.WORKCENTER_CODE = plan.WORKCENTER_CODE; //WorkCell workcellcode = new WorkCellDAL().Get(new WorkCell { WORKCENTER_CODE = info.WORKCENTER_CODE }); order.WORKCELL_CODE = product.WORKCELL_CODE; order.WORKLOC_CODE = ""; order.REMARK = product.PRODUCTCODE; order.EQPT_NAME = ""; order.EQPT_CODE = ""; order.STATE = EnumGeter.WORKPLANSTATE.READY.GetHashCode(); order.PRI = 1; //order.UPDATEDATE = DateTime.Now; order.PRINTED = "1"; wodDal.Insert(order); } else { order.WORKCELL_CODE = product.WORKCELL_CODE; order.REMARK = product.PRODUCTCODE; var wodDal = new WorkOrderDAL(); wodDal.BaseSession = session; wodDal.Update(order); } return order; } } }