You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

387 lines
21 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<Model.Ex.g_check_stockEx> dalBase = new ExpressDAL.ExpressDAO<Model.Ex.g_check_stockEx>(_remotingProxy, Model.Ex.g_check_stockEx._tableName);
// return dalBase.Query();
//}
/// <summary>
/// 获取库区
/// </summary>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取大库位
/// </summary>
/// <param name="factoryCode"></param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 根据用户选择的条件查找盘点数据
/// </summary>
/// <param name="wheres">筛选条件</param>
/// <returns>盘点数据</returns>
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;
}
}
/// <summary>
/// 生成盘点单
/// </summary>
/// <param name="factoryCode">库区</param>
/// <param name="warehouseName">大库位</param>
/// <param name="partNo">零件号</param>
/// <param name="startLocate">开始库位</param>
/// <param name="endLocate">结束库位</param>
/// <param name="csType">盘点类型</param>
/// <param name="showQty">PDA盘点时是否显示库存数量</param>
/// <param name="data">盘点明细数据</param>
/// <returns>是否成功</returns>
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
/// <summary>
/// 获取产线
/// </summary>
/// <returns></returns>
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;
}
}
}
/// <summary>
/// 获取项目
/// </summary>
/// <returns></returns>
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;
}
}
}
/// <summary>
/// 根据用户选择的条件查找盘点数据
/// </summary>
/// <param name="wheres">筛选条件</param>
/// <returns>盘点数据</returns>
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<StoreProcedureParameter> parameters = new List<StoreProcedureParameter>();
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;
}
}
/// <summary>
/// 生成盘点单
/// </summary>
/// <param name="data">盘点明细数据</param>
/// <param name="OrderNo">盘点单号</param>
/// <returns>是否成功</returns>
public Hashtable GenCSOrder(string wheres, int totalRows)
{
lock (_remotingProxy)
{
//Hashtable result = new Hashtable();
List<StoreProcedureParameter> parameters = new List<StoreProcedureParameter>();
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
}
}