using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Estsh.Web.Service;
using System.Collections;
using Estsh.Web.Util;
using System.Data;
using NPOIReport;
using System.IO;
using NPOI.HSSF.UserModel;
namespace Estsh.Core.Web.Controllers
{
public class CheckStockPrintController : Controller
{
/***************************************************************************************************
*
* 作者:张茂忠
* 创建时间:2013.04.17
* 描述:盘点单打印模块Controller层
* 修改日志:
*
*
* *************************************************************************************************/
CheckStockPrintService service = new CheckStockPrintService();
public ActionResult Index()
{
return View();
}
///
/// 获取库区
///
///
public ActionResult GetFactoryListData()
{
Hashtable resault = new Hashtable();
ArrayList FactoryList = service.GetFactoryListData();
resault.Add("list", FactoryList);
return Json(resault, JsonRequestBehavior.AllowGet);
}
///
/// 获取大库位
///
///
///
public ActionResult GetWarehouseListData()
{
Hashtable resault = new Hashtable();
ArrayList WareHouseList = service.GetWarehouseListData(Request["parentid"].ToString());
resault.Add("list", WareHouseList);
return Json(resault, JsonRequestBehavior.AllowGet);
}
///
/// 生成盘点单
///
///
public ActionResult GenCSOrder(string pdline_id, string modelType, string serchFilter, int totalRows)
{
if (string.IsNullOrEmpty(pdline_id) && string.IsNullOrEmpty(modelType) && string.IsNullOrEmpty(serchFilter))
{
return null;
}
string wheres = InitWhereStr(pdline_id, modelType, serchFilter);
Hashtable result = service.GenCSOrder(wheres, totalRows);
return Json(result, JsonRequestBehavior.AllowGet);
//Hashtable resault = new Hashtable();
//int count = 0;
//if (service.GenCSOrder((DataTable)Session["table"]))
//{
// count = 1;
//}
//resault.Add("status", count);
//return Json(resault);
}
///
/// 打印盘点单
///
///
public ActionResult OnPrint()
{
#if(false)
Hashtable resault = new Hashtable();
_dt = (DataTable)Session["table"];
// 如果没有数据就直接返回
if (_dt == null || _dt.Rows.Count <= 0)
{
resault.Add("status", "-1");
return Json(resault);
}
if (_dt.Rows[0]["order_no1"].ToString() == "")
{
resault.Add("status", "-2");
return Json(resault);
}
//if (string.IsNullOrEmpty(_dt.Rows[0]["order_no"].ToString()))
//{
// MessageBox.Show("盘点单号不能为空,请先生成盘点单");
// return;
//}
// 模板文件的路径
string TemplateFile =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Template\CheckStockOrder.xls");
// 输出文件的路径
string TempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
string.Format(@"Temp\CheckStockOrder_{0}.xls", DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")));
NPOIReporter Reporter = new NPOIReporter(TemplateFile, TempFile);
Hashtable Variables = new Hashtable();
// 添加报表中使用的变量
Variables.Add("OrderNo", _dt.Rows[0]["order_no"].ToString());
Variables.Add("CreateDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// 生成报表
if (Reporter.GeneratorReport("CheckStockOrder", Variables, _dt))
{
// 打印到默认打印机
MeExcel.Print(TempFile);
}
resault.Add("status", "1");
return Json(resault);
//#elseif (false)
Hashtable resault = new Hashtable();
_dt = (DataTable)Session["table"];
// 如果没有数据就直接返回
if (_dt == null || _dt.Rows.Count==0)
return null;
//if (string.IsNullOrEmpty(_dt.Rows[0]["order_no"].ToString()))
//{
// MessageBox.Show("盘点单号不能为空,请先生成盘点单");
// return;
//}
// 模板文件的路径
string TemplateFile =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Template\CheckStockOrder.xls");
// 输出文件的路径
string TempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
string.Format(@"Temp\CheckStockOrder_{0}.xls", DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")));
NPOIReporter Reporter = new NPOIReporter(TemplateFile, TempFile);
Hashtable Variables = new Hashtable();
// 添加报表中使用的变量
Variables.Add("OrderNo", _dt.Rows[0]["order_no"].ToString());
Variables.Add("CreateDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// 生成报表
if (Reporter.GeneratorReport("CheckStockOrder", Variables, _dt))
{
// 打印到默认打印机
MyExcel.Print(TempFile);
}
resault.Add("status", "1");
return Json(resault);
#endif
return null;
}
#region jerome
///
/// 获取产线名称
///
///
public ActionResult GetPdLineName()
{
Hashtable resault = new Hashtable();
ArrayList pdlineList = service.GetPdLineName();
resault.Add("list", pdlineList);
return Json(resault, JsonRequestBehavior.AllowGet);
}
///
/// 获取项目
///
///
public ActionResult GetModelTypeNameList()
{
Hashtable resault = new Hashtable();
ArrayList pdlineList = service.GetModelTypeNameList();
resault.Add("list", pdlineList);
return Json(resault, JsonRequestBehavior.AllowGet);
}
private string InitWhereStr(string pdline_id, string modelType, string serchFilter)
{
string wheres = string.Empty;
string pdlineStr = string.Empty;
string[] pdLineArr = pdline_id.Split(',');
foreach (string str in pdLineArr)
{
pdlineStr += " '" + str + "' ,";
}
pdlineStr = pdlineStr.Substring(0, pdlineStr.Length - 2);
wheres += string.Format(" AND ( a.pdline_id IN ({0}))", pdlineStr);
if (!string.IsNullOrEmpty(modelType))
{
string modelTypeStr = string.Empty;
string[] modelTypeArr = modelType.Split(',');
foreach (string str in modelTypeArr)
{
modelTypeStr += " '" + str + "' ,";
}
modelTypeStr = modelTypeStr.Substring(0, modelTypeStr.Length - 1);
wheres += string.Format(" AND (type_name in ({0}))", modelTypeStr);
}
if (!string.IsNullOrEmpty(serchFilter))
{
string[] filterArr = serchFilter.Split(',');
#region 良品还是全部产品(包含良品及不良品) current_status
///返回参数中:1、只盘点不良品;2、包含在制品;3、包含不良品;4、包含没有生产线的总成;5、包含没有配置的总成
int index = Array.FindIndex(filterArr, str => str.Equals("1"));
if (index >= 0)//如果为【只盘点不良品】
{
wheres += " AND current_status in (1) ";
}
else
{
index = Array.FindIndex(filterArr, str => str.Equals("3"));
if (index >= 0)//如果为【包含不良品】
{
wheres += " AND current_status in (0,1) ";
}
else
{
wheres += " AND current_status in (0) ";
}
}
#endregion
#region 是否包含在制品 work_flag in (0,1) or work_falg in (1)
index = Array.FindIndex(filterArr, str => str.Equals("2"));
if (index >= 0)
{
wheres += " AND work_flag in (0,1) ";
}
else
{
wheres += " AND work_flag in (1) ";
}
#endregion
}
return wheres;
}
///
/// 根据用户选择的条件查找盘点数据
///
/// 筛选条件
/// 盘点数据
public ActionResult GetCheckStockWhere(string pdline_id, string modelType, string serchFilter,Pager pager)
{
if (string.IsNullOrEmpty(pdline_id) && string.IsNullOrEmpty(modelType) && string.IsNullOrEmpty(serchFilter))
{
return null;
}
string wheres = InitWhereStr(pdline_id, modelType, serchFilter);
Hashtable result = new Hashtable();
result.Add("pager.pageNo", pager.pageNo);
Hashtable dataHt = service.GetCheckStockWhere(wheres, pager);
result.Add("rows", dataHt["dataList"]);
result.Add("pager.totalRows", dataHt["totalCount"]);
return Json(result);
}
public ActionResult ExportData(string order_no, string pdline_id, string modelType, string serchFilter, Pager pager)
{
if (string.IsNullOrEmpty(pdline_id) && string.IsNullOrEmpty(modelType) && string.IsNullOrEmpty(serchFilter))
{
return null;
}
#if(false)
string wheres = InitWhereStr(pdline_id, modelType, serchFilter);
//Hashtable result = new Hashtable();
Hashtable dataHt = service.GetCheckStockWhere(wheres, pager);
if (dataHt.ContainsKey("dataList"))
{
//FileStream SourceStream = new FileStream(@"Template\CheckStockOrder.xls", FileMode.Open);
HSSFWorkbook workbook = new HSSFWorkbook();
Stream outputStream = Response.OutputStream;
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("盘点单");
try
{
if (workbook != null)
{
HSSFRow headRow = (HSSFRow)sheet.CreateRow(0);
headRow.CreateCell(0).SetCellValue("产线");
headRow.CreateCell(1).SetCellValue("库区");
headRow.CreateCell(2).SetCellValue("配置");
headRow.CreateCell(3).SetCellValue("零件号");
headRow.CreateCell(4).SetCellValue("零件描述");
headRow.CreateCell(5).SetCellValue("条码");
headRow.CreateCell(6).SetCellValue("车号");
headRow.CreateCell(7).SetCellValue("状态1");
headRow.CreateCell(8).SetCellValue("状态2");
headRow.CreateCell(9).SetCellValue("上线时间");
headRow.CreateCell(10).SetCellValue("下线时间");
headRow.CreateCell(11).SetCellValue("盘点单");
}
ArrayList arr = dataHt["dataList"] as ArrayList;
for (int i = 0; i < arr.Count; i++)
{
Hashtable dtRow = arr[i] as Hashtable;
int row = i + 1;
HSSFRow dataRow = (HSSFRow)sheet.CreateRow(row);
dataRow.CreateCell(0).SetCellValue(dtRow["pdline_name"].ToString());
dataRow.CreateCell(1).SetCellValue(dtRow["fg_wh_code"].ToString());
dataRow.CreateCell(2).SetCellValue(dtRow["model_name"].ToString());
dataRow.CreateCell(3).SetCellValue(dtRow["part_no"].ToString());
dataRow.CreateCell(4).SetCellValue(dtRow["part_spec"].ToString());
dataRow.CreateCell(5).SetCellValue(dtRow["serial_number"].ToString());
dataRow.CreateCell(6).SetCellValue(dtRow["car_no"].ToString());
dataRow.CreateCell(7).SetCellValue(dtRow["work_flag"].ToString());
dataRow.CreateCell(8).SetCellValue(dtRow["current_status"].ToString());
dataRow.CreateCell(9).SetCellValue(dtRow["in_pdline_time"].ToString());
dataRow.CreateCell(10).SetCellValue(dtRow["out_pdline_time"].ToString());
dataRow.CreateCell(11).SetCellValue(order_no);
}
Response.Clear();
workbook.Write(outputStream);
Response.Buffer = true;
Response.AppendHeader("Content-Disposition", "attachment;filename=盘点明细.xls");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/vnd.ms-excel";
Response.Flush();
}
catch (Exception e)
{
}
finally
{
workbook = null;
}
}
return null;
#else
string wheres = InitWhereStr(pdline_id, modelType, serchFilter);
Hashtable dataHt = service.GetCheckStockWhere(wheres, pager);
if (dataHt.ContainsKey("dataList"))
{
// 模板文件的路径
string TemplateFile =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Template\CheckStockOrder.xls");
FileStream SourceStream = new FileStream(TemplateFile, FileMode.Open);
HSSFWorkbook workbook = new HSSFWorkbook(SourceStream);
Stream outputStream = Response.OutputStream;
HSSFSheet sheet = workbook.GetSheetAt(0) as HSSFSheet;
try
{
ArrayList arr = dataHt["dataList"] as ArrayList;
sheet.GetRow(1).Cells[1].SetCellValue(order_no);
sheet.GetRow(2).Cells[1].SetCellValue(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
string AbsolutePath= Request.UrlReferrer.AbsolutePath;
string url = AbsolutePath.Remove(0, Request.ApplicationPath.Length);
GridColumnService colService = new GridColumnService();
Models.SysWebGridColumn[] gridItems = colService.GetColumnByUrl(url);
#region 数据
for (int i = 0; i < arr.Count; i++)
{
Hashtable dtRow = arr[i] as Hashtable;
int row = i + 5;
HSSFRow dataRow = (HSSFRow)sheet.CreateRow(row);
for (int idx = 0; idx < gridItems.Length; idx++)
{
if (gridItems[idx].export)
{
string key = gridItems[idx].name;
if (dtRow.ContainsKey(key))
{
object obj = dtRow[key];
if (obj != null && obj != DBNull.Value)
{
dataRow.CreateCell(idx).SetCellValue(obj.ToString());
}
}
}
}
}
#endregion
#region 样式
HSSFCellStyle style = workbook.CreateCellStyle() as HSSFCellStyle;
style.BorderBottom = NPOI.SS.UserModel.CellBorderType.HAIR;
//设置字体;
HSSFFont font = workbook.CreateFont() as HSSFFont;
//设置字体大小;
font.FontHeightInPoints = 8;
style.SetFont(font);
#endregion
Response.Clear();
workbook.Write(outputStream);
Response.Buffer = true;
if (Request.Browser.Type.ToUpper().IndexOf("IE") >= 0)
{
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("盘点单" + order_no + ".xls", System.Text.Encoding.UTF8));
}
else
{
Response.AppendHeader("Content-Disposition", "attachment;filename=盘点单" + order_no + ".xls");
}
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/vnd.ms-excel";
Response.Flush();
}
catch (Exception e)
{
}
finally
{
workbook = null;
}
}
return null;
#endif
}
#endregion
}
}