using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Text; using System.Collections; using ApServerProvider; using Estsh.Web.Util; using DbCommon; namespace Estsh.Core.Repositories { public class CheckStockPrint : BaseApp { /*************************************************************************************************** * * 作者:张茂忠 * 创建时间:2013.04.17 * 描述:盘点单打印模块Dal层 * 修改日志: * * * *************************************************************************************************/ public CheckStockPrint(RemotingProxy remotingProxy) : base(remotingProxy) { } //public Model.Ex.g_check_stockEx[] Query() //{ // Estsh.ExpressDAL.ExpressDAO dalBase = new ExpressDAL.ExpressDAO(_remotingProxy, Model.Ex.g_check_stockEx._tableName); // return dalBase.Query(); //} /// /// 获取库区 /// /// public DataTable GetFactoryListData() { lock (_remotingProxy) { string SqlString = "select factory_code as [value],factory_code as [key] from dbo.sys_factory where enabled='Y'"; return _remotingProxy.GetDataTable(SqlString); } } /// /// 获取大库位 /// /// /// public DataTable GetWarehouseListData(string factoryCode) { lock (_remotingProxy) { StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT warehouse_name as [value],warehouse_name as [key]"); SqlStringBuilder.Append("FROM dbo.sys_warehouse a "); SqlStringBuilder.Append(" LEFT JOIN dbo.sys_factory b ON a.factory_id = b.factory_id "); SqlStringBuilder.Append("WHERE a.enabled = 'Y' "); SqlStringBuilder.Append(" AND b.enabled = 'Y' "); SqlStringBuilder.Append(" AND b.factory_code = @factory_code "); Hashtable Params = new Hashtable(1); Params.Add("@factory_code", factoryCode); return _remotingProxy.GetDataTable(SqlStringBuilder.ToString(), Params); } } /// /// 根据用户选择的条件查找盘点数据 /// /// 筛选条件 /// 盘点数据 public DataTable GetWhere(string wheres) { lock (_remotingProxy) { StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT a.order_no , "); SqlStringBuilder.Append(" a.carton_no, "); SqlStringBuilder.Append(" a.lot_no, "); SqlStringBuilder.Append(" a.qty, "); SqlStringBuilder.Append(" d.factory_name, "); SqlStringBuilder.Append(" e.part_no, "); SqlStringBuilder.Append(" e.part_spec, "); SqlStringBuilder.Append(" b.locate_name , "); SqlStringBuilder.Append(" b.locate_id , "); SqlStringBuilder.Append(" c.warehouse_name , "); SqlStringBuilder.Append(" d.factory_code, "); SqlStringBuilder.Append(" '' as order_no1 "); SqlStringBuilder.Append("FROM dbo.sys_stock a "); SqlStringBuilder.Append(" LEFT JOIN dbo.sys_locate b ON a.locate_id = b.locate_id "); SqlStringBuilder.Append(" LEFT JOIN dbo.sys_warehouse c ON b.warehouse_id = c.warehouse_id "); SqlStringBuilder.Append(" LEFT JOIN dbo.sys_factory d ON c.factory_id = d.factory_id "); SqlStringBuilder.Append(" left join dbo.sys_part e on a.part_id=e.part_id "); SqlStringBuilder.Append("WHERE a.enabled = 'Y' "); SqlStringBuilder.Append(" AND b.enabled = 'Y' "); SqlStringBuilder.Append(" AND c.enabled = 'Y' "); SqlStringBuilder.Append(" AND d.enabled = 'Y' "); SqlStringBuilder.Append(wheres); SqlStringBuilder.Append(" ORDER BY a.order_no , "); SqlStringBuilder.Append(" a.carton_no, "); SqlStringBuilder.Append(" d.factory_name, "); SqlStringBuilder.Append(" e.part_no, "); SqlStringBuilder.Append(" e.part_spec, "); SqlStringBuilder.Append(" b.locate_name , "); SqlStringBuilder.Append(" c.warehouse_name , "); SqlStringBuilder.Append(" d.factory_code "); DataTable dt = _remotingProxy.GetDataTable(SqlStringBuilder.ToString()); return dt; } } /// /// 生成盘点单 /// /// 库区 /// 大库位 /// 零件号 /// 开始库位 /// 结束库位 /// 盘点类型 /// PDA盘点时是否显示库存数量 /// 盘点明细数据 /// 是否成功 public bool GenCSOrder(string factoryCode, string warehouseName, string partNo, string startLocate, string endLocate, string csType, string showQty, DataTable data) { lock (_remotingProxy) { if (data == null) return false; if (data.Rows.Count == 0) return false; ArrayList SqlStrings = new ArrayList(); Hashtable Values = new Hashtable(); // 产生盘点单号 string OrderNo = "C" + _remotingProxy.GetServerTime().ToString("yyMMddHHmmss"); Values.Add("order_no", OrderNo); Values.Add("cs_type", csType); Values.Add("factory_code", factoryCode); Values.Add("warehouse_name", warehouseName); Values.Add("start_locate_name", startLocate); Values.Add("end_locate_name", endLocate); Values.Add("part_no", partNo); //Values.Add("show_qty", showQty); // 生成盘点单表头的 SQL SqlStrings.Add(_remotingProxy.Insert("dbo.g_check_stock", Values, false)); // 生产盘点单明细表的 SQL foreach (DataRow dr in data.Rows) { // 把生成的盘点单号写入数据表,用于显示 dr["order_no1"] = OrderNo; Values.Clear(); Values.Add("order_no", OrderNo); Values.Add("part_no", dr["part_no"].ToString()); Values.Add("carton_no", dr["carton_no"].ToString()); Values.Add("qty", Convert.ToDecimal(dr["qty"])); Values.Add("locate_id", Convert.ToInt32(dr["locate_id"])); SqlStrings.Add(_remotingProxy.Insert("dbo.g_check_stock_list", Values, false)); } // 以事务类型执行一组 SQL return _remotingProxy.ExecuteSqlTransaction(SqlStrings); } } #region jerome /// /// 获取产线 /// /// public DataTable GetPdLineName() { lock (_remotingProxy) { string SqlString = "SELECT pdline_id as [value],pdline_name,pdline_desc as [key] FROM sys_pdline WHERE enabled='Y'"; try { return _remotingProxy.GetDataTable(SqlString); } catch { return null; } } } /// /// 获取项目 /// /// public DataTable GetModelTypeNameList() { lock (_remotingProxy) { string SqlString = " SELECT type_id as [value],type_name as [key] FROM sys_model_type WHERE enabled='Y' "; try { return _remotingProxy.GetDataTable(SqlString); } catch { return null; } } } /// /// 根据用户选择的条件查找盘点数据 /// /// 筛选条件 /// 盘点数据 public Hashtable GetCheckStockWhere(string wheres, Pager pager) { lock (_remotingProxy) { #if(false) StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.AppendLine("SELECT "); SqlStringBuilder.AppendLine(" c.pdline_name, c.fg_wh_code, d.model_name, "); SqlStringBuilder.AppendLine(" b.part_no,b.part_spec, "); SqlStringBuilder.AppendLine(" a.serial_number,a.car_no, "); SqlStringBuilder.AppendLine(" CASE a.work_flag WHEN 1 THEN '已下线' WHEN 0 THEN '已上线' WHEN -1 THEN '未上线' WHEN 2 THEN '已发运' "); SqlStringBuilder.AppendLine(" WHEN 3 THEN '已领用' ELSE CAST(a.work_flag AS VARCHAR(2)) END AS work_flag "); SqlStringBuilder.AppendLine(" ,CASE a.current_status WHEN 0 THEN '良品' WHEN 1 THEN '不良品' WHEN -1 THEN '报废品' "); SqlStringBuilder.AppendLine(" WHEN -2 THEN '已拆解' ELSE CAST(a.current_status AS VARCHAR(2)) + ' 未知' END AS current_status "); SqlStringBuilder.AppendLine(" ,CONVERT(VARCHAR(25),a.in_pdline_time,120) AS in_pdline_time "); SqlStringBuilder.AppendLine(" ,CONVERT(VARCHAR(25),a.Out_pdline_time,120) AS out_pdline_time "); SqlStringBuilder.AppendLine("FROM dbo.g_sn_status a "); SqlStringBuilder.AppendLine(" left join dbo.sys_part b on a.part_id=b.part_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_pdline c on a.pdline_id=c.pdline_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_model d on a.model_id=d.model_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_model_type e on e.type_id = d.model_type_id "); SqlStringBuilder.AppendLine("WHERE a.enabled='Y' AND a.prod_type NOT IN ('C','K')" + wheres); // pord_type: C: 充料, K: 删除的指令 SqlStringBuilder.AppendLine("ORDER BY a.out_pdline_time "); return _remotingProxy.GetDataTable(SqlStringBuilder.ToString()); //#else StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.AppendLine("SELECT "); SqlStringBuilder.AppendLine(" ' ' as order_no,c.pdline_name,d.model_name, "); SqlStringBuilder.AppendLine(" b.part_no,b.part_spec, "); SqlStringBuilder.AppendLine(" a.serial_number,CONVERT(VARCHAR(25),a.Out_pdline_time,120) AS out_pdline_time "); SqlStringBuilder.AppendLine(" ,CONVERT(VARCHAR(25),a.in_pdline_time,120) AS in_pdline_time, c.fg_wh_code "); SqlStringBuilder.AppendLine(" ,CASE a.current_status WHEN 0 THEN '良品' WHEN 1 THEN '不良品' WHEN -1 THEN '报废品' "); SqlStringBuilder.AppendLine(" WHEN -2 THEN '已拆解' ELSE CAST(a.current_status AS VARCHAR(2)) + ' 未知' END AS current_status "); SqlStringBuilder.AppendLine(" ,CASE a.work_flag WHEN 1 THEN '已下线' WHEN 0 THEN '已上线' WHEN -1 THEN '未上线' WHEN 2 THEN '已发运' "); SqlStringBuilder.AppendLine(" WHEN 3 THEN '已领用' ELSE CAST(a.work_flag AS VARCHAR(2)) END AS work_flag "); SqlStringBuilder.AppendLine(" ,a.car_no "); SqlStringBuilder.AppendLine("FROM dbo.g_sn_status a "); SqlStringBuilder.AppendLine(" left join dbo.sys_part b on a.part_id=b.part_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_pdline c on a.pdline_id=c.pdline_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_model d on a.model_id=d.model_id "); SqlStringBuilder.AppendLine(" left join dbo.sys_model_type e on e.type_id = d.model_type_id "); SqlStringBuilder.AppendLine("WHERE a.enabled='Y' AND a.prod_type NOT IN ('C','K')" + wheres); // pord_type: C: 充料, K: 删除的指令 SqlStringBuilder.AppendLine("ORDER BY a.out_pdline_time "); return _remotingProxy.GetDataTable(SqlStringBuilder.ToString()); #endif Hashtable result = new Hashtable(); List parameters = new List(); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Output, "@TotalCount", 100)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Output, "@TotalPage", 100)); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Table", "dbo.g_sn_status a left join dbo.sys_part b on a.part_id=b.part_id left join dbo.sys_pdline c on a.pdline_id=c.pdline_id left join dbo.sys_model d on a.model_id=d.model_id left join dbo.sys_model_type e on e.type_id = d.model_type_id ")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Column", "' ' as order_no,c.pdline_name,d.model_name,b.part_no,b.part_spec,a.serial_number,CONVERT(VARCHAR(25),a.Out_pdline_time,120) AS out_pdline_time,CONVERT(VARCHAR(25),a.in_pdline_time,120) AS in_pdline_time, c.fg_wh_code,CASE a.current_status WHEN 0 THEN '良品' WHEN 1 THEN '不良品' WHEN -1 THEN '报废品' WHEN -2 THEN '已拆解' ELSE CAST(a.current_status AS VARCHAR(2)) + ' 未知' END AS current_status ,CASE a.work_flag WHEN 1 THEN '已下线' WHEN 0 THEN '已上线' WHEN -1 THEN '未上线' WHEN 2 THEN '已发运' WHEN 3 THEN '已领用' ELSE CAST(a.work_flag AS VARCHAR(2)) END AS work_flag ,a.car_no")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@OrderColumn", "a.out_pdline_time")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@GroupColumn", "")); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@PageSize", pager.pageSize)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@CurrentPage", pager.pageNo)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@Group", 0)); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.AppendLine(" a.enabled='Y' AND a.prod_type NOT IN ('C','K')" + wheres); // pord_type: C: 充料, K: 删除的指令 parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Condition", SqlStringBuilder.ToString())); Hashtable values = new Hashtable(2); DataTable dt = new DataTable(); dt = _remotingProxy.ExecuteSotreProcedure("Com_Pagination", parameters, ref values); ArrayList dataList = DataTypeConvert.NewObject.DataTableToArrayList(dt); result.Add("dataList", dataList); result.Add("totalCount", values["@TotalCount"].ToString()); return result; } } /// /// 生成盘点单 /// /// 盘点明细数据 /// 盘点单号 /// 是否成功 public Hashtable GenCSOrder(string wheres, int totalRows) { lock (_remotingProxy) { //Hashtable result = new Hashtable(); List parameters = new List(); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Output, "@TotalCount", 100)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Output, "@TotalPage", 100)); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Table", "dbo.g_sn_status a left join dbo.sys_part b on a.part_id=b.part_id left join dbo.sys_pdline c on a.pdline_id=c.pdline_id left join dbo.sys_model d on a.model_id=d.model_id left join dbo.sys_model_type e on e.type_id = d.model_type_id ")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Column", "' ' as order_no,c.pdline_name,d.model_name,b.part_no,b.part_spec,a.serial_number,CONVERT(VARCHAR(25),a.Out_pdline_time,120) AS out_pdline_time,CONVERT(VARCHAR(25),a.in_pdline_time,120) AS in_pdline_time, c.fg_wh_code,CASE a.current_status WHEN 0 THEN '良品' WHEN 1 THEN '不良品' WHEN -1 THEN '报废品' WHEN -2 THEN '已拆解' ELSE CAST(a.current_status AS VARCHAR(2)) + ' 未知' END AS current_status ,CASE a.work_flag WHEN 1 THEN '已下线' WHEN 0 THEN '已上线' WHEN -1 THEN '未上线' WHEN 2 THEN '已发运' WHEN 3 THEN '已领用' ELSE CAST(a.work_flag AS VARCHAR(2)) END AS work_flag ,a.car_no")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@OrderColumn", "a.out_pdline_time")); parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@GroupColumn", "")); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@PageSize", totalRows)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@CurrentPage", 1)); parameters.Add(new StoreProcedureParameter(DbType.Int32, ParameterDirection.Input, "@Group", 0)); StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.AppendLine(" a.enabled='Y' AND a.prod_type NOT IN ('C','K')" + wheres); // pord_type: C: 充料, K: 删除的指令 parameters.Add(new StoreProcedureParameter(DbType.String, ParameterDirection.Input, "@Condition", SqlStringBuilder.ToString())); Hashtable values = new Hashtable(2); DataTable data = new DataTable(); data = _remotingProxy.ExecuteSotreProcedure("Com_Pagination", parameters, ref values); Hashtable result = new Hashtable(); result.Add("result", false); result.Add("order_no", string.Empty); result.Add("msg", "没有查询到数据!"); if (data == null) return result; if (data.Rows.Count == 0) return result; //data.Columns.Add("order_no"); string OrderNo = "C" + _remotingProxy.GetServerTime().ToString("yyMMddHHmmss"); result["order_no"] = OrderNo; result["msg"] = string.Empty; ArrayList SqlStrings = new ArrayList(); Hashtable Values = new Hashtable(); // 产生盘点单号 Values.Add("order_no", OrderNo); Values.Add("cs_type", "0"); Values.Add("factory_code", "0"); Values.Add("warehouse_name", "0"); Values.Add("start_locate_name", "0"); Values.Add("end_locate_name", "0"); Values.Add("part_no", "0"); // 生成盘点单表头的 SQL SqlStrings.Add(_remotingProxy.Insert("dbo.g_check_stock", Values, false)); // 生产盘点单明细表的 SQL foreach (DataRow dr in data.Rows) { // 把生成的盘点单号写入数据表,用于显示 dr["order_no"] = OrderNo; Values.Clear(); Values.Add("order_no", OrderNo); Values.Add("part_no", dr["part_no"].ToString()); Values.Add("carton_no", dr["serial_number"].ToString()); Values.Add("qty", "0"); Values.Add("locate_id", "0"); SqlStrings.Add(_remotingProxy.Insert("dbo.g_check_stock_list", Values, false)); } // 以事务类型执行一组 SQL if (_remotingProxy.ExecuteSqlTransaction(SqlStrings)) { result["result"] = true; } return result; } } #endregion } }