using System; using System.Collections.Generic; using System.Linq; using System.Text; using QMFrameWork.Data; using QMAPP.FJC.Entity.ProductionPlan; using System.Data; using QMAPP.Entity; using QMAPP.DAL; using QMFrameWork.Log; using QMAPP.FJC.Entity.FIS; namespace QMAPP.FJC.DAL.ProductionPlan { /// <summary> /// 模块名称:派工单 /// 作 者:张鹏 /// 编写日期:2017年10月24日 /// </summary> public class WorkOrderDAL : BaseDAL { #region 获取信息 /// <summary> /// 获取信息 /// </summary> /// <param name="">条件</param> /// <returns>*信息</returns> public WorkOrder Get(WorkOrder info) { try { using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 info = session.Get<WorkOrder>(info); } return info; } catch (Exception ex) { throw ex; } } public WorkOrder GetOne(string ORDERPLANID) { string sql = "SELECT * FROM [T_PP_WORKORDER] WITH(NOLOCK) where [ORDERPLANID]='" + ORDERPLANID + "'"; List<DataParameter> parameters = new List<DataParameter>(); try { if (BaseSession != null) { return BaseSession.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } using (IDataSession session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } } catch (Exception ex) { throw ex; } } public WorkOrder GetOneByID(string id) { string sql = "SELECT * FROM [T_PP_WORKORDER] WITH(NOLOCK) where [PID]='" + id + "'"; List<DataParameter> parameters = new List<DataParameter>(); try { if (BaseSession != null) { return BaseSession.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } using (IDataSession session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } } catch (Exception ex) { throw ex; } } public WorkOrder GetOneByOrderNO(string ORDERPLANNO) { string sql = "SELECT * FROM [T_PP_WORKORDER] WITH(NOLOCK) where [ORDERPLAN_NO]='" + ORDERPLANNO + "'"; List<DataParameter> parameters = new List<DataParameter>(); try { if (BaseSession != null) { return BaseSession.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } using (IDataSession session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } } catch (Exception ex) { throw ex; } } public WorkOrder GetOneByProduct(string productCode) { string sql = "SELECT * FROM [T_PP_WORKORDER] WITH(NOLOCK) where [REMARK]='" + productCode + "'"; List<DataParameter> parameters = new List<DataParameter>(); try { if (BaseSession != null) { return BaseSession.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } using (IDataSession session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql, parameters.ToArray()).FirstOrDefault(); } } catch (Exception ex) { throw ex; } } /// <summary> /// 获取计划单号下所有派工单信息 /// </summary> /// <param name="ORDERPLANID"></param> /// <returns></returns> public int GetAllWorkOrder(string ORDERPLANID) { int count = 0; string sql = "SELECT COUNT(1) FROM [T_PP_WORKORDER] WITH(NOLOCK) where [ORDERPLANID]='" + ORDERPLANID + "' AND STATE<>0"; List<DataParameter> parameters = new List<DataParameter>(); try { using (IDataSession session = AppDataFactory.CreateMainSession()) { count =Convert.ToInt32(session.ExecuteSqlScalar(sql, parameters.ToArray())); } } catch (Exception ex) { throw ex; } return count; } #endregion #region 获取列表 /// <summary> /// 获取列表 /// </summary> /// <param name="condition">条件</param> /// <param name="page">数据页</param> /// <returns>数据页</returns> public DataPage GetList(WorkOrder condition, DataPage page) { string sql = null; List<DataParameter> parameters = new List<DataParameter>(); try { sql = this.GetQuerySql(condition, ref parameters); //分页关键字段及排序 page.KeyName = "PID"; if (string.IsNullOrEmpty(page.SortExpression)) page.SortExpression = "UPDATEDATE DESC"; using (IDataSession session = AppDataFactory.CreateMainSession()) { page = session.GetDataPage<WorkOrder>(sql, parameters.ToArray(), page); } return page; } catch (Exception ex) { throw ex; } } public List<WorkOrder> GetList(WorkOrder condition) { List<WorkOrder> workOrderList = new List<WorkOrder>(); string sql = "select * from T_PP_WORKORDER WITH(NOLOCK) t where 1=1 "; if (string.IsNullOrEmpty(condition.ORDERPLANID) == false) { sql += string.Format(" and ORDERPLANID='{0}'",condition.ORDERPLANID); } using (IDataSession session = AppDataFactory.CreateMainSession()) { workOrderList = session.GetList<WorkOrder>(sql, new List<DataParameter>().ToArray()).ToList<WorkOrder>(); } return workOrderList; } public List<WorkOrder> GetWorkOrderInfo(string planno) { try { StringBuilder sql = new StringBuilder(); sql.AppendFormat("SELECT W.[PID]"); sql.AppendFormat(" ,W.[ORDERPLANID] "); sql.AppendFormat(" ,W.[ORDERPLAN_NO] "); sql.AppendFormat(" ,W.[ORDER_TYPE] "); sql.AppendFormat(" ,W.[SEQ] "); sql.AppendFormat(" ,W.[MATERIAL_CODE] "); sql.AppendFormat(" ,M.[MATERIAL_NAME] "); sql.AppendFormat(" ,W.[PBOM_CODE] "); sql.AppendFormat(" ,W.[QTY] "); sql.AppendFormat(" ,W.[COMPLETE_QTY] "); sql.AppendFormat(" ,W.[PLAN_DATE] "); sql.AppendFormat(" ,W.[SHIFT_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_NAME] "); sql.AppendFormat(" ,W.[WORKCELL_CODE] "); sql.AppendFormat(" ,W.[WORKCELL_NAME] "); sql.AppendFormat(" ,W.[WORKLOC_CODE] "); sql.AppendFormat(" ,W.[REMARK] "); sql.AppendFormat(" ,W.[EQPT_NAME] "); sql.AppendFormat(" ,W.[EQPT_CODE] "); sql.AppendFormat(" ,W.[STATE] "); sql.AppendFormat(" ,W.[MOULD_CODE] "); sql.AppendFormat(" ,W.[PRI] "); sql.AppendFormat(" ,W.[UPDATEDATE] "); sql.AppendFormat(" ,W.[PRINTED] "); sql.AppendFormat(" ,P.[IGNORE_FISBREAK] "); sql.AppendFormat(" ,P.[FIS_ASMSETCODE] "); sql.AppendFormat(" FROM [T_PP_WORKORDER] AS W WITH(NOLOCK) "); sql.AppendFormat(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendFormat(" ON P.[PID]=W.[ORDERPLANID] "); sql.AppendFormat(" LEFT JOIN [T_MD_MATERIAL] AS M WITH(NOLOCK) "); sql.AppendFormat(" ON W.[MATERIAL_CODE]=M.[MATERIAL_CODE] "); sql.AppendFormat(" WHERE P.[PLAN_NO]=@planno "); sql.AppendFormat(" ORDER BY W.[UPDATEDATE],W.[PRI],W.[PLAN_DATE],P.PLAN_SEQ,W.[SEQ],W.[MATERIAL_CODE] "); List<DataParameter> parameters = new List<DataParameter>(); parameters.Add(new DataParameter("planno", planno)); using (var session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql.ToString(), parameters.ToArray()).ToList(); } } catch (Exception ex) { throw ex; } } /// <summary> /// 获取指定工序的生产计划清单 /// </summary> /// <param name="workcellcode">工序编码</param> /// <param name="count">数量</param> /// <param name="filter">过滤选项:0全部;1隐藏挂起;2只看挂起</param> /// <returns></returns> public List<WorkOrder> GetOrderInCell(string workcellcode,int filter=0, int count = 20) { try { StringBuilder sql = new StringBuilder(); sql.AppendFormat("SELECT TOP {0} W.[PID]\r\n", count); sql.AppendFormat(" ,W.[ORDERPLANID] "); sql.AppendFormat(" ,W.[ORDERPLAN_NO] "); sql.AppendFormat(" ,W.[ORDER_TYPE] "); sql.AppendFormat(" ,W.[SEQ] "); sql.AppendFormat(" ,W.[MATERIAL_CODE] "); sql.AppendFormat(" ,M.[MATERIAL_NAME] "); sql.AppendFormat(" ,W.[PBOM_CODE] "); sql.AppendFormat(" ,W.[QTY] "); sql.AppendFormat(" ,W.[COMPLETE_QTY] "); sql.AppendFormat(" ,W.[PLAN_DATE] "); sql.AppendFormat(" ,W.[SHIFT_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_NAME] "); sql.AppendFormat(" ,W.[WORKCELL_CODE] "); sql.AppendFormat(" ,W.[WORKCELL_NAME] "); sql.AppendFormat(" ,W.[WORKLOC_CODE] "); sql.AppendFormat(" ,W.[REMARK] "); sql.AppendFormat(" ,W.[EQPT_NAME] "); sql.AppendFormat(" ,W.[EQPT_CODE] "); sql.AppendFormat(" ,W.[STATE] "); sql.AppendFormat(" ,W.[MOULD_CODE] "); sql.AppendFormat(" ,W.[PRI] "); sql.AppendFormat(" ,W.[UPDATEDATE] "); sql.AppendFormat(" ,P.[IGNORE_FISBREAK] "); sql.AppendFormat(" ,P.[FIS_ASMSETCODE] "); sql.AppendFormat(" FROM [T_PP_WORKORDER] AS W WITH(NOLOCK) "); sql.AppendFormat(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendFormat(" ON P.[PID]=W.[ORDERPLANID] "); sql.AppendFormat(" LEFT JOIN [T_MD_MATERIAL] AS M WITH(NOLOCK)"); sql.AppendFormat(" ON W.[MATERIAL_CODE]=M.[MATERIAL_CODE] "); sql.AppendFormat(" WHERE W.[WORKCELL_CODE]=@workcellcode "); switch (filter) { case 1: { sql.AppendFormat(" AND W.[STATE]<>4 "); break; } case 2: { sql.AppendFormat(" AND W.[STATE]=4 "); break; } } sql.AppendFormat(" ORDER BY W.[UPDATEDATE],W.[PRI],W.[PLAN_DATE],P.PLAN_SEQ,W.[SEQ],W.[MATERIAL_CODE] "); List<DataParameter> parameters = new List<DataParameter>(); parameters.Add(new DataParameter("workcellcode", workcellcode)); using (var session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql.ToString(), parameters.ToArray()).ToList(); } } catch(Exception ex) { throw ex; } } /// <summary> /// 获取指定工序的生产计划清单 /// </summary> /// <param name="workcellcode">工序编码</param> /// <param name="count">数量</param> /// <param name="filter">过滤选项:0全部;1隐藏挂起;2只看挂起</param> /// <returns></returns> public List<WorkOrder> GetOrderUnPrinted(string routecode, int filter = 0, int count = 20) { try { StringBuilder sql = new StringBuilder(); sql.AppendFormat("SELECT TOP {0} W.[PID]\r\n", count); sql.AppendFormat(" ,W.[ORDERPLANID] "); sql.AppendFormat(" ,W.[ORDERPLAN_NO] "); sql.AppendFormat(" ,W.[ORDER_TYPE] "); sql.AppendFormat(" ,W.[SEQ] "); sql.AppendFormat(" ,W.[MATERIAL_CODE] "); sql.AppendFormat(" ,M.[MATERIAL_NAME] "); sql.AppendFormat(" ,W.[PBOM_CODE] "); sql.AppendFormat(" ,W.[QTY] "); sql.AppendFormat(" ,W.[COMPLETE_QTY] "); sql.AppendFormat(" ,W.[PLAN_DATE] "); sql.AppendFormat(" ,W.[SHIFT_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_CODE] "); sql.AppendFormat(" ,W.[WORKCENTER_NAME] "); sql.AppendFormat(" ,W.[WORKCELL_CODE] "); sql.AppendFormat(" ,W.[WORKCELL_NAME] "); sql.AppendFormat(" ,W.[WORKLOC_CODE] "); sql.AppendFormat(" ,W.[REMARK] "); sql.AppendFormat(" ,W.[EQPT_NAME] "); sql.AppendFormat(" ,W.[EQPT_CODE] "); sql.AppendFormat(" ,W.[STATE] "); sql.AppendFormat(" ,W.[MOULD_CODE] "); sql.AppendFormat(" ,W.[PRI] "); sql.AppendFormat(" ,W.[UPDATEDATE] "); sql.AppendFormat(" ,W.[PRINTED] "); sql.AppendFormat(" ,P.[IGNORE_FISBREAK] "); sql.AppendFormat(" ,P.[FIS_ASMSETCODE] "); sql.AppendFormat(" FROM [T_PP_WORKORDER] AS W WITH(NOLOCK) "); sql.AppendFormat(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendFormat(" ON P.[PID]=W.[ORDERPLANID] "); sql.AppendFormat(" LEFT JOIN [T_MD_MATERIAL] AS M WITH(NOLOCK) "); sql.AppendFormat(" ON W.[MATERIAL_CODE]=M.[MATERIAL_CODE] "); sql.AppendFormat(" WHERE P.[ROUTE_CODE]=@routecode "); sql.AppendFormat(" AND W.[PRINTED]='0' "); switch (filter) { case 1: { sql.AppendFormat(" AND W.[STATE]<>4 "); break; } case 2: { sql.AppendFormat(" AND W.[STATE]=4 "); break; } } sql.AppendFormat(" ORDER BY W.[UPDATEDATE],W.[PRI],W.[PLAN_DATE],P.PLAN_SEQ,W.[SEQ],W.[MATERIAL_CODE] "); List<DataParameter> parameters = new List<DataParameter>(); parameters.Add(new DataParameter("routecode", routecode)); using (var session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql.ToString(), parameters.ToArray()).ToList(); } } catch (Exception ex) { throw ex; } } /// <summary> /// 获取指定工序的待完成计划数量 /// </summary> /// <param name="workcellcode">工序编码</param> /// <param name="shift">不指定班次则查询全部计划</param> /// <param name="date">不指定班次则无需输入日期</param> /// <returns></returns> public int GetOrderCountInCell(string workcellcode,string shift,DateTime date) { try { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendFormat("SELECT COUNT(*) "); sql.AppendFormat(" FROM [T_PP_WORKORDER] WITH(NOLOCK) "); sql.AppendFormat(" WHERE [WORKCELL_CODE]=@workcellcode "); sql.AppendFormat(" AND [STATE]<>4"); if (!string.IsNullOrWhiteSpace(shift)) { sql.AppendFormat(" AND [SHIFT_CODE]=@shift"); parameters.Add(new DataParameter("shift", shift)); //sql.AppendFormat(" AND DATEDIFF(DAY,[PLAN_DATE],@date)=0"); //parameters.Add(new DataParameter("date", date)); sql.AppendFormat(" AND [PLAN_DATE] BETWEEN @date1 AND @date2"); parameters.Add(new DataParameter("date1", date.Date)); parameters.Add(new DataParameter("date2", date.Date.AddDays(1))); } parameters.Add(new DataParameter("workcellcode", workcellcode)); using (var session = AppDataFactory.CreateMainSession()) { return (int)session.ExecuteSqlScalar(sql.ToString(), parameters.ToArray()); } } catch (Exception ex) { throw ex; } } #endregion #region 获取查询语句 /// <summary> /// 获取查询语句 /// </summary> /// <param name="user">查询条件</param> /// <param name="parameters">参数</param> /// <returns>查询语句</returns> private string GetQuerySql(WorkOrder condition, ref List<DataParameter> parameters) { StringBuilder sqlBuilder = new StringBuilder(); StringBuilder whereBuilder = new StringBuilder(); try { //构成查询语句 sqlBuilder.Append("SELECT PID,ORDERPLANID,ORDERPLAN_NO,ORDER_TYPE,SEQ,MATERIAL_CODE,PBOM_CODE,QTY,COMPLETE_QTY,PLAN_DATE,SHIFT_CODE,WORKCENTER_CODE,WORKCENTER_NAME,WORKCELL_CODE,WORKCELL_NAME,WORKLOC_CODE,REMARK,EQPT_NAME,EQPT_CODE,STATE "); sqlBuilder.Append("FROM T_PP_WORKORDER WITH(NOLOCK) "); whereBuilder.Append(" AND FLGDEL<> '1' "); //查询条件 if (whereBuilder.Length > 0) { sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4)); } return sqlBuilder.ToString(); } catch (Exception ex) { throw ex; } } #endregion #region 获取导出的数据 /// <summary> /// 获取导出的数据 /// </summary> /// <param name="user">查询条件</param> /// <returns>数据</returns> public DataTable GetExportData(WorkOrder info) { DataTable dt = null; string sql = null; List<DataParameter> parameters = new List<DataParameter>(); try { //构成查询语句 sql = this.GetQuerySql(info, ref parameters); using (IDataSession session = AppDataFactory.CreateMainSession()) { dt = session.GetTable(sql, parameters.ToArray()); dt.TableName = "WorkOrder"; } return dt; } catch (Exception ex) { throw ex; } } #endregion #region 信息是否重复 /// <summary> /// 判断名称是否存在 /// </summary> /// <param name="info"></param> /// <returns>true:已存在;fasel:不存在。</returns> public bool Exists(WorkOrder info) { StringBuilder sqlBuilder = new StringBuilder(); StringBuilder whereBuilder = new StringBuilder(); List<DataParameter> parameters = new List<DataParameter>(); int count = 0; try { sqlBuilder.Append("SELECT COUNT(0) FROM T_PP_WORKORDER WITH(NOLOCK) "); if (info.PID == null) { info.PID = ""; } whereBuilder.Append(" AND PID <> @PID "); parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = info.PID }); //添加进行无重复字段判断代码 if (whereBuilder.Length > 0) { sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4)); } using (IDataSession session = AppDataFactory.CreateMainSession()) { count = Convert.ToInt32(session.ExecuteSqlScalar(sqlBuilder.ToString(), parameters.ToArray())); } return count > 0; } catch (Exception ex) { throw ex; } } #endregion #region 插入信息 /// <summary> /// 插入信息(单表) /// </summary> /// <param name="">信息</param> /// <returns>插入行数</returns> public int Insert(WorkOrder info) { try { if (BaseSession != null) { return BaseSession.Insert<WorkOrder>(info); } using (IDataSession session = AppDataFactory.CreateMainSession()) { //插入基本信息 return session.Insert<WorkOrder>(info); } } catch (Exception ex) { throw ex; } } #endregion #region 更新信息 /// <summary> /// 更新信息 /// </summary> /// <param name=""></param> /// <returns>更新行数</returns> public int Update(WorkOrder info) { int count = 0; try { using (IDataSession session = AppDataFactory.CreateMainSession()) { //更新基本信息 count = session.Update<WorkOrder>(info); } return count; } catch (Exception ex) { throw ex; } } #endregion #region 逻辑删除 /// <summary> /// 逻辑删除信息 /// </summary> /// <param name=""></param> /// <returns>删除个数</returns> public int Delete(WorkOrder info) { StringBuilder sqlBuilder = new StringBuilder(); List<DataParameter> parameters = new List<DataParameter>(); int count = 0; try { using (IDataSession session = AppDataFactory.CreateMainSession()) { //删除基本信息 sqlBuilder.Append("UPDATE T_PP_WORKORDER "); sqlBuilder.Append("SET FLGDEL = '1' "); sqlBuilder.Append("WHERE PID = @PID "); parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = info.PID }); count = session.ExecuteSql(sqlBuilder.ToString(), parameters.ToArray()); } return count; } catch (Exception ex) { throw ex; } } #endregion /// <summary> /// 删除派工单 /// </summary> /// <param name="entity"></param> public void BatchDeleteByOrderPlan(WorkOrder entity) { try { string deleteSql = string.Format("delete from T_PP_WORKORDER where ORDERPLANID='{0}' ", entity.ORDERPLANID); this.BaseSession.ExecuteSql(deleteSql, new List<DataParameter>().ToArray()); } catch (Exception ex) { throw ex; } } #region 导入 public ImportMessage GetImportData(List<WorkOrder> list) { ImportMessage em = new ImportMessage(); List<DataParameter> parameters = new List<DataParameter>(); try { using (IDataSession session = AppDataFactory.CreateMainSession()) { //设置祖先对象数据会话 session.OpenTs(); foreach (WorkOrder info in list) { if (info.IsNewInfo) { //插入信息 int count = session.Insert<WorkOrder>(info); em.insertNum++; } else { //更新信息 int count = session.Update<WorkOrder>(info); em.updateNum++; } } session.CommitTs(); } } catch (Exception ex) { throw ex; } return em; } #endregion /// <summary> /// 获取指定工位正在执行的派工单 /// </summary> /// <param name="workloccode"></param> /// <returns></returns> public WorkOrder GetWorkingOrderInLoc(string workloccode,string mouldcode) { try { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT O.* "); sql.AppendLine(" ,P.[IGNORE_FISBREAK] "); sql.AppendLine(" ,P.[FIS_ASMSETCODE] "); sql.AppendLine(" FROM [T_PP_WORKORDER] AS O WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendLine(" ON P.[PID]=O.[ORDERPLANID] "); sql.AppendLine(" WHERE O.[WORKLOC_CODE]=@workloccode "); sql.AppendLine(" AND O.[MOULD_CODE]=@mouldcode "); sql.AppendLine(" AND O.[STATE]='2' "); //工单状态为执行中 parameters.Add(new DataParameter("workloccode", workloccode)); parameters.Add(new DataParameter("mouldcode", mouldcode)); using (var session = AppDataFactory.CreateMainSession()) { return session.Get<WorkOrder>(sql.ToString(), parameters.ToArray()); } } catch (Exception ex) { throw ex; } } /// <summary> /// 获取第一条匹配的派工单 /// </summary> /// <param name="workcellcode">工序</param> /// <param name="productmaterial">产品物料号</param> /// <returns></returns> public WorkOrder GetFirstMatchOrder(string workcellcode, string productmaterial,string planpid="") { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT TOP 1 O.* "); sql.AppendLine(" ,P.[IGNORE_FISBREAK] "); sql.AppendLine(" ,P.[FIS_ASMSETCODE] "); sql.AppendLine(" FROM [T_PP_WORKORDER] AS O WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendLine(" ON P.[PID]=O.[ORDERPLANID] "); sql.AppendLine(" WHERE O.[WORKCELL_CODE]=@workcellcode "); if (!string.IsNullOrWhiteSpace(planpid)) { sql.AppendLine(" AND O.[ORDERPLANID]=@planpid"); parameters.Add(new DataParameter("planpid", planpid)); } sql.AppendLine(" AND (EXISTS (SELECT 1 "); sql.AppendLine(" FROM T_MD_PBOM_ITEM AS I "); sql.AppendLine(" WHERE O.PBOM_CODE = I.PBOM_CODE "); sql.AppendLine(" AND I.FLGDEL = '0' "); sql.AppendLine(" AND I.MATERIAL_CODE = @materialcode) "); sql.AppendLine(" OR O.[MATERIAL_CODE]=@materialcode) "); sql.AppendLine(" AND (O.[STATE]='0' OR O.[STATE]='1') "); sql.AppendLine(" ORDER BY O.UPDATEDATE,O.PRI,O.PLAN_DATE,P.PLAN_SEQ,SEQ "); //排序为 FIS优先、日期正序、顺序号正序 parameters.Add(new DataParameter("workcellcode", workcellcode)); parameters.Add(new DataParameter("materialcode", productmaterial)); using (var session = AppDataFactory.CreateMainSession()) { return session.Get<WorkOrder>(sql.ToString(), parameters.ToArray()); } } /// <summary> /// 获取工序下匹配的派工单 /// </summary> /// <param name="workcellcode">工序</param> /// <returns></returns> public List<WorkOrder> GetMatchOrders(string workcellcode,string planpid="") { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT W.* "); sql.AppendLine(" ,P.[IGNORE_FISBREAK] "); sql.AppendLine(" ,P.[FIS_ASMSETCODE] "); sql.AppendLine(" FROM [T_PP_WORKORDER] AS W WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendLine(" ON P.[PID]=W.[ORDERPLANID] "); sql.AppendLine(" WHERE W.SEQ = (SELECT TOP 1 SEQ "); sql.AppendLine(" FROM [T_PP_WORKORDER] AS O WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P1 WITH(NOLOCK) "); sql.AppendLine(" ON P1.[PID]=O.[ORDERPLANID] "); sql.AppendLine(" WHERE O.[WORKCELL_CODE]=@workcellcode "); sql.AppendLine(" AND (O.[STATE]='0' OR O.[STATE]='1') "); if (!string.IsNullOrWhiteSpace(planpid)) { sql.AppendLine(" AND O.[ORDERPLANID]=@planpid"); } sql.AppendLine(" ORDER BY O.UPDATEDATE,O.PRI,O.PLAN_DATE,P1.PLAN_SEQ,SEQ) ");//排序为 FIS优先、日期正序、计划顺序号、工单顺序号正序 sql.AppendLine(" AND W.[WORKCELL_CODE]=@workcellcode "); sql.AppendLine(" AND (W.[STATE]='0' OR W.[STATE]='1') "); if (!string.IsNullOrWhiteSpace(planpid)) { sql.AppendLine(" AND W.[ORDERPLANID]=@planpid"); parameters.Add(new DataParameter("planpid", planpid)); } parameters.Add(new DataParameter("workcellcode", workcellcode)); using (var session = AppDataFactory.CreateMainSession()) { return session.GetList<WorkOrder>(sql.ToString(), parameters.ToArray()).ToList(); } } #region 改变派工单 /// <summary> /// 改变派工单 /// </summary> /// <param name="entity"></param> public void ChangeByOrderPlan(WorkOrder entity) { if (this.BaseSession != null) { this.BaseSession.Update<WorkOrder>(entity); } else { using (IDataSession session = AppDataFactory.CreateMainSession()) { session.Update<WorkOrder>(entity); } } } #endregion /// <summary> /// 获取派工单 /// </summary> /// <param name="model"></param> /// <returns></returns> public WorkOrder GetworkOrderInfo(WorkOrder model) { string sql = null; List<DataParameter> parameters = new List<DataParameter>(); try { sql = "SELECT TOP 1 * FROM T_PP_WORKORDER WITH(NOLOCK) WHERE STATE=0 "; if (string.IsNullOrEmpty(model.ORDERPLANID) == false) { sql += " AND ORDERPLANID = @ORDERPLANID"; parameters.Add(new DataParameter("ORDERPLANID", model.ORDERPLANID)); } if (BaseSession != null) { //获取信息 model = BaseSession.Get<WorkOrder>(sql, parameters.ToArray()); } else { using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 model = session.Get<WorkOrder>(sql, parameters.ToArray()); } } return model; } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "信息数据层-获取信息" }); throw; } } /// <summary> /// 获取指定日期前的FIS计划顺序号 /// </summary> /// <param name="plandate"></param> /// <param name="workcentercode"></param> /// <returns></returns> public string GetLastFISSEQ(DateTime plandate, string workcentercode) { StringBuilder sql = new StringBuilder() ; List<DataParameter> parameters = new List<DataParameter>(); try { sql.AppendLine("SELECT TOP 1 [PLAN_SEQ] "); sql.AppendLine(" FROM [T_PP_ORDERPLAN] WITH(NOLOCK) "); sql.AppendLine(" WHERE [PLANSOURCE]='0' "); sql.AppendLine(" AND [PLAN_DATE]<@plandate "); sql.AppendLine(" AND [WORKCENTER_CODE]=@workcentercode "); sql.AppendLine(" ORDER BY [PLAN_DATE] DESC "); parameters.Add(new DataParameter("plandate", plandate)); parameters.Add(new DataParameter("workcentercode", workcentercode)); using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 var ret= session.ExecuteSqlScalar(sql.ToString(), parameters.ToArray()); if (ret != null) { return ret.ToString(); } else { return ""; } } } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "信息数据层-获取信息" }); throw; } } /// <summary> /// 根据模架搜索工单 /// </summary> /// <param name="mouldcode"></param> /// <param name="workcellcode"></param> public WorkOrder SearchByMould(string mouldcode, string workcellcode) { try { StringBuilder sql = new StringBuilder(); List<DataParameter> parameters = new List<DataParameter>(); sql.AppendLine("SELECT TOP 1 W.* "); sql.AppendLine(" FROM T_PP_WORKORDER AS W WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendLine(" ON P.[PID]=W.[ORDERPLANID] "); sql.AppendLine(" LEFT JOIN T_MD_MATERIAL AS M WITH(NOLOCK) "); sql.AppendLine(" ON M.MATERIAL_CODE=W.MATERIAL_CODE "); sql.AppendLine(" LEFT JOIN T_QT_MATERIAL_BINDING AS MB WITH(NOLOCK) "); sql.AppendLine(" ON MB.MATERIAL_CODE=M.MATERIAL_TYPE_CODE "); sql.AppendLine(" AND MB.BINDING_TYPE='ASSY' "); sql.AppendLine(" WHERE MB.TARGET_CODE=@mouldcode "); sql.AppendLine(" AND W.WORKCELL_CODE=@workcellcode "); sql.AppendLine(" AND (W.STATE='1' OR W.STATE='0') "); sql.AppendLine(" ORDER BY W.UPDATEDATE,W.PRI,w.PLAN_DATE,P.PLAN_SEQ,W.SEQ "); parameters.Add(new DataParameter("mouldcode", mouldcode)); parameters.Add(new DataParameter("workcellcode", workcellcode)); using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 return session.Get<WorkOrder>(sql.ToString(), parameters.ToArray()); } } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "信息数据层-获取信息" }); throw; } } public List<WorkOrder> GetListByID(string[] orderid) { try { StringBuilder sql = new StringBuilder(); List<DataParameter> parameters = new List<DataParameter>(); string ids = string.Join("','", orderid); sql.AppendFormat("SELECT * FROM T_PP_WORKORDER WITH(NOLOCK) WHERE PID IN ('{0}')", ids); using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 return session.GetList<WorkOrder>(sql.ToString(), parameters.ToArray()).ToList(); } } catch (Exception ex) { LogManager.LogHelper.Error(new LogInfo() { ErrorInfo = ex, Tag = ex.StackTrace, Info = "信息数据层-获取信息GetListByID" }); throw; } } /// <summary> /// 批量更新 /// </summary> /// <param name="orders"></param> /// <returns></returns> public int Update(List<WorkOrder> orders) { using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 return session.Update(orders); } } /// <summary> /// 批量删除 /// </summary> /// <param name="orders"></param> /// <returns></returns> public int Delete(List<WorkOrder> orders) { using (IDataSession session = AppDataFactory.CreateMainSession()) { //获取信息 return session.Delete(orders); } } public WorkOrder GetWorkingOrderWithProduct(string workcellcode, string productcode, string planpid = "") { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT TOP 1 O.* "); sql.AppendLine(" ,P.[IGNORE_FISBREAK] "); sql.AppendLine(" ,P.[FIS_ASMSETCODE] "); sql.AppendLine(" FROM [T_PP_WORKORDER] AS O WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN [T_PP_ORDERPLAN] AS P WITH(NOLOCK) "); sql.AppendLine(" ON P.[PID]=O.[ORDERPLANID] "); sql.AppendLine(" WHERE O.[WORKCELL_CODE]=@workcellcode "); if (!string.IsNullOrWhiteSpace(planpid)) { sql.AppendLine(" AND O.[ORDERPLANID]=@planpid"); parameters.Add(new DataParameter("planpid", planpid)); } sql.AppendLine(" AND O.[REMARK]=@productcode"); sql.AppendLine(" AND (O.[STATE]='0' OR O.[STATE]='1') "); sql.AppendLine(" ORDER BY O.UPDATEDATE,O.PRI,O.PLAN_DATE,P.PLAN_SEQ,SEQ "); //排序为 FIS优先、日期正序、顺序号正序 parameters.Add(new DataParameter("workcellcode", workcellcode)); parameters.Add(new DataParameter("productcode", productcode)); using (var session = AppDataFactory.CreateMainSession()) { return session.Get<WorkOrder>(sql.ToString(), parameters.ToArray()); } } public int GetDayPlanCount(string workcentercode, DateTime date) { try { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT ISNULL(SUM(QTY),0) "); sql.AppendLine(" FROM T_PP_ORDERPLAN WITH(NOLOCK) "); sql.AppendLine(" WHERE WORKCENTER_CODE=@workcentercode "); //sql.AppendLine(" AND DATEDIFF(DAY,PLAN_DATE,@date)=0 "); sql.AppendFormat(" AND [PLAN_DATE] BETWEEN @date1 AND @date2"); parameters.Add(new DataParameter("date1", date.Date)); parameters.Add(new DataParameter("date2", date.Date.AddDays(1))); parameters.Add(new DataParameter("workcentercode", workcentercode)); //parameters.Add(new DataParameter("date", date)); using (var session = AppDataFactory.CreateMainSession()) { return (int)session.ExecuteSqlScalar(sql.ToString(), parameters.ToArray()); } } catch (Exception ex) { throw ex; } } public int SetOrderPrinted(string orderpid) { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("UPDATE T_PP_WORKORDER SET PRINTED='1' WHERE PID=@orderpid"); parameters.Add(new DataParameter("orderpid", orderpid)); using (var session = AppDataFactory.CreateMainSession()) { return session.ExecuteSql(sql.ToString(), parameters.ToArray()); } } public List<OrderPlan> GetLastFISPlan(string workcellcode, string routecode) { List<DataParameter> parameters = new List<DataParameter>(); StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT TOP 2 P.* "); sql.AppendLine(" FROM T_PP_ORDERPLAN AS P WITH(NOLOCK) "); sql.AppendLine(" LEFT JOIN T_PP_WORKORDER AS W WITH(NOLOCK) "); sql.AppendLine(" ON W.ORDERPLAN_NO=P.PLAN_NO "); sql.AppendLine(" WHERE P.PLANSOURCE='0' "); sql.AppendLine(" AND P.ROUTE_CODE=@routecode "); sql.AppendLine(" AND ((W.WORKCELL_CODE=@workcellcode "); sql.AppendLine(" AND W.STATE='4') "); sql.AppendLine(" OR W.WORKCELL_CODE<>@workcellcode) "); sql.AppendLine(" ORDER BY P.PLAN_DATE DESC,P.PLAN_SEQ DESC,P.PLAN_NO DESC"); parameters.Add(new DataParameter("workcellcode", workcellcode)); parameters.Add(new DataParameter("routecode", routecode)); using (var session = AppDataFactory.CreateMainSession()) { return session.GetList<OrderPlan>(sql.ToString(), parameters.ToArray()).ToList(); } } } }