using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ICSSoft.Frame.User.BLL;
using ICSSoft.Base.Language.Tool;
using ICSSoft.Base.UserControl.MessageControl;
using System.Data.SqlClient;
using ICSSoft.Base.Config.AppConfig;
using ICSSoft.Base.Report.Filter;
using ICSSoft.Base.Config.DBHelper;
using ICSSoft.Base.UserControl.FormControl;
using ICSSoft.Base.ReferForm.AppReferForm;
using ICSSoft.Base.Lable.PrintTool;
using ICSSoft.Frame.Data.DAL;
using ICSSoft.Frame.Data.BLL;
using ICSSoft.Frame.Data.Entity;
using System.Text.RegularExpressions;
namespace ICSSoft.Frame.APP
{
public partial class FormICSProjectReports1 : DevExpress.XtraEditors.XtraForm
{
private string sqltxt = "";
private string sqlconn = "";
DataTable dt;
string opcodes = "";
string vencode = "";
string pocode = "";
Color color ;
private DataTable dataSource = null;
DataTable Color_table = null;
#region 构造函数
public FormICSProjectReports1()
{
InitializeComponent();
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
button7.BackColor = Color.FromArgb(254, 177, 95);
checkDate.Checked = true;
txtStartDate.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
txtEndDate.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1);
Search();
}
#endregion
private void Search()
{
string sql = @"select * from dbo.ICSLOTONWIP order by MTIME desc";
sql = string.Format(sql);
dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
}
#region 移动窗体
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;
//首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
//系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
//假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
//同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
//重写窗体,使窗体可以不通过自带标题栏实现移动
protected override void WndProc(ref Message m)
{
//当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
//当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
//这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
//注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
switch (m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
if ((int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
return;
}
//拦截双击标题栏、移动窗体的系统消息
if (m.Msg != 0xA3)
{
base.WndProc(ref m);
}
}
#endregion
#region 权限
///
/// 操作权限
///
///
public DataTable RightOfExute()
{
DataTable rData = new DataTable();
rData.Columns.Add("BtnName");
rData.Columns.Add("ActionName");
//查看权限(必须有)
DataRow seeRow = rData.NewRow();
seeRow["BtnName"] = "see";
seeRow["ActionName"] = "查看";
rData.Rows.Add(seeRow);
//List ControlList = new List();
//foreach (Control ctr in ControlList)
//{
// if (ctr.GetType() == typeof(SimpleButton))
// {
// DataRow dr = rData.NewRow();
// dr["BtnName"] = ctr.Name;
// dr["ActionName"] = ctr.Text;
// rData.Rows.Add(dr);
// }
//}
rData.AcceptChanges();
return rData;
}
///
/// 数据权限
///
///
public DataTable RightOfData()
{
DataTable rData = new DataTable();
rData.Columns.Add("BodyName");
rData.Columns.Add("ControlName");
rData.Columns.Add("ControlCaption");
rData.AcceptChanges();
return rData;
}
#endregion
#region 退出
private void btnClose_Click(object sender, EventArgs e)
{
AppConfig.CloseFormShow(this.Text);
this.Close();
}
private void btnExit_Click(object sender, EventArgs e)
{
AppConfig.CloseFormShow(this.Text);
this.Close();
}
#endregion
#region 拼接查询条件
private string getWhere()
{
string where = "1=1";
if (!string.IsNullOrEmpty(txtMoCodeS.Text)) {
where += " and c.transno like '"+txtMoCodeS.Text+"' ";
}
//if (!string.IsNullOrEmpty(txtStartDate.Text.Trim()))
//{
// where += " and c.transno like '" + txtMoCodeS.Text + "' ";
//}
if (!string.IsNullOrEmpty(txtLotNOS.Text)) {
where += " and c.lotno like '"+txtLotNOS.Text+"'";
}
if (!string.IsNullOrEmpty(MDeptCode.Text))
{
where += " and MDeptCode like '" + MDeptCode.Text + "'";
}
if (!string.IsNullOrEmpty(txtOrderNo.Text.Trim()))
{
where += " and d.OrderNO like '%" + txtOrderNo.Text.Trim() + "%'";
}
#region 预计完工时间
if (checkDate.Checked)
{
where += " and d.MOPLANENDDATE BETWEEN " + "'" + Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd") + "'" + " AND " + "'" + Convert.ToDateTime(txtEndDate.Text).ToString("yyyy-MM-dd") + "'";
}
#endregion
return where;
}
#endregion
#region 拼接查询条件
private string getWhere2()
{
string where = "1=1";
if (!string.IsNullOrEmpty(txtMoCodeS.Text))
{
where += " and a.mocode like ''" + txtMoCodeS.Text + "'' ";
}
if (!string.IsNullOrEmpty(txtLotNOS.Text))
{
where += " and b.lotno like ''" + txtLotNOS.Text + "''";
}
if (!string.IsNullOrEmpty(MDeptCode.Text))
{
where += " and MDeptCode like ''" + MDeptCode.Text + "''";
}
if (!string.IsNullOrEmpty(txtOrderNo.Text.Trim()))
{
where += " and A.OrderNO like ''%" + txtOrderNo.Text.Trim() + "%''";
}
#region 预计完工时间
if (checkDate.Checked)
{
where += " and a.MOPLANENDDATE BETWEEN " + "''" + Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd") + "''" + " AND " + "''" + Convert.ToDateTime(txtEndDate.Text).ToString("yyyy-MM-dd") + "''";
}
#endregion
return where;
}
#endregion
#region 查询
private void btnFilter_Click(object sender, EventArgs e)
{
grvDetail.Columns.Clear();
grdDetail.DataSource = null;
DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
try
{
_wait.Show();
string sql = @"SELECT DISTINCT
lot.LOTNO,
mo2user.id,
a.OPCODE,
b.Result,
a.ACTIONRESULT,
ncr.ID
FROM
icsitemlot lot WITH(nolock)
inner join icsmo mo WITH(nolock) on mo.mocode=lot.transno and mo.moseq=lot.transline
left join icsmo2user mo2user on mo2user.lotno=lot.lotno
left join ICSLOTONWIP a WITH(nolock) on a.lotno=lot.lotno and a.opcode=mo2user.opcode
LEFT JOIN ICSLOTONWIPCheck b WITH(nolock) ON a.ID=b.ONWIPID
LEFT JOIN ICSLOTSIMULATION c WITH(nolock) ON a.MOCODE=c.MOCODE AND a.MOSEQ=c.MOSEQ AND a.LOTNO=c.LOTNO
LEFT JOIN ICSNCRDoc ncr on ncr.LOTNO=A.LotNO and ncr.OPCode=A.OPCODE and ncr.ErrorType='自检'
WHERE (a.EATTRIBUTE1 is null OR a.EATTRIBUTE1 <>'转移') ";
Color_table = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
dataSource = null;
#region 查询sql
sqltxt = @"if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#TEMP1') and type='U')
DROP TABLE #TEMP1
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#tempopname') and type='U')
DROP TABLE #tempopname
if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..##tempmain') and type='U')
DROP TABLE ##tempmain
select a.lotno,opcode,'工序'+CONVERT(NVARCHAR(20),opseq) AS 工序,opseq INTO #TEMP1 from (select a.lotno,a.OPCODE+':'+b.OPNAME as opcode,ROW_NUMBER() OVER( PARTITION BY a.LOTNO ORDER BY a.LOTNO,OPSEQ) AS opseq from ICSITEMROUTE2OPLot a
left join ICSOP b on b.OPCODE=a.OPCODE
inner join ICSITEMLot c on c.lotno=a.LotNo
inner join icsmo d on d.mocode=c.transno and d.moseq=c.transline
where d.mostatus<>'关单' and {0}
)a
if @@ROWCOUNT=0
raiserror('该工单行未生成条码或已关闭!',16,1)
select distinct 工序,opseq into #tempopname from #TEMP1
order by opseq
declare @sqlopname nvarchar(100)=''
select @sqlopname= STUFF((select ','+工序 from #tempopname
FOR XML PATH('')),1,1,'')
declare @sql nvarchar(max)='select * into ##tempmain from (select a.MOCODE as 工单号,a.MOSEQ as 工单行号,a.MOPLANQTY as 工单行数量,a.MOPLANSTARTDATE as 计划开工日期,a.MOPLANENDDATE as 计划完工日期,b.LotNO as 产品跟踪码,convert(decimal(18,2),b.LOTQTY) as 跟踪单数量 ,a.ITEMCODE as 物料编码,c.invname as 物料名称,A.ORDERNO AS 项目号,d.opcode,d.工序,E.工序数,A.eattribute4 AS 生产部门,
CASE WHEN h.ISCOM=1 THEN h.MTIME WHEN h.ISCOM=0 THEN null END AS 完工日期,
CASE WHEN ISNULL(B.ISCOM,'''')=''1'' THEN ''是'' else ''否'' end as 是否入库,b.storageMUser as 入库人,B.STORAGEDATE AS 入库时间
from ICSMO a
inner join ICSITEMLot b on a.MOCODE=b.TransNO and a.MOSEQ=b.TransLine
left join ICSINVENTORY c on c.INVCODE=a.ITEMCODE
LEFT JOIN ICSLOTSIMULATION h with(nolock) ON h.LOTNO=b.LOTNO
left join #TEMP1 d on d.lotno=b.LotNO
left join (
select lotno,count(*) as 工序数 from ICSITEMROUTE2OPLot group by lotno
)E ON E.LOTNO=B.LOTNO
where {1}
)a
pivot(
max(opcode)
FOR a.工序 IN ('+@sqlopname+')
)b
select * from ##tempmain
'
exec(@sql)";
string where = getWhere();
string where1 = getWhere2();
//if (!string.IsNullOrWhiteSpace(where))
//{
// sqltxt += where;
//}
//sqltxt += " ORDER BY a.MOVER,a.MOCODE,g.LOTNO";
#endregion
sqltxt = string.Format(sqltxt, where, where1);
DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqltxt).Tables[0];
grdDetail.DataSource = dt;
grvDetail.BestFitColumns();
rptPage.PageSize = 100;
rptPage.PageIndex = 1;
rptPage.ReLoad();
_wait.Close();
}
catch (Exception ex)
{
//MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
ICSBaseSimpleCode.AppshowMessageBox("异常:" + ex.Message);
grdDetail.DataSource = null;
_wait.Close();
}
}
#endregion
#region 分页
private void rptPage_PageIndexChanged(object Sender, EventArgs e)
{
DataTable data = AppConfig.GetPageData(dataSource, rptPage.PageIndex, rptPage.PageSize).Copy();
//DataTable data = AppConfig.GetPageDataByDb(tempTableName, "pagerowindex", rptPage.PageSize, rptPage.PageIndex, dataSource.Rows.Count);
grdDetail.DataSource = data;
}
#endregion
#region 列表
private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
}
#endregion
#region 加载
private void FormICSFACTORY_Load(object sender, EventArgs e)
{
}
#endregion
#region 导出
private void btnOutPut_Click(object sender, EventArgs e)
{
FormOutExcel foe = new FormOutExcel();
if (foe.ShowDialog() == DialogResult.OK)
{
try
{
string outtype = foe._OutType;
string exceltype = foe._ExcelType;
string filename = foe._FileName;
string url = foe._Url;
string sheetname = foe._SheetName;
string name = "";
if (outtype.ToLower() == "excel")
{
DevExpress.XtraPrinting.XlsExportOptions op = new DevExpress.XtraPrinting.XlsExportOptions();
op.SheetName = sheetname;
grdDetail.MainView.ExportToXls((url + "\\" + filename + (exceltype == "2003" ? ".xls" : ".xlsx")), op);
name = url + "\\" + filename + (exceltype == "2003" ? ".xls" : ".xlsx");
}
else
{
grdDetail.MainView.ExportToPdf(url + "\\" + filename + ".pdf");
name = url + "\\" + filename + ".pdf";
}
DialogResult result = MessageBox.Show("导出成功,是否打开此文件?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(name))
{
System.Diagnostics.Process.Start(name);
}
}
catch (Exception ex)
{
MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
#endregion
private void chkMO2UserDate_CheckedChanged(object sender, EventArgs e)
{
//if (chkMO2UserDate.Checked)
//{
// dtpMO2UserDateS.Enabled = true;
// dtpMO2UserDateE.Enabled = true;
//}
//else
//{
// dtpMO2UserDateS.Enabled = false;
// dtpMO2UserDateE.Enabled = false;
//}
}
private void chkLotBeginDate_CheckedChanged(object sender, EventArgs e)
{
//if (chkLotBeginDate.Checked)
//{
// dtpLotBeginDateS.Enabled = true;
// dtpLotBeginDateE.Enabled = true;
//}
//else
//{
// dtpLotBeginDateS.Enabled = false;
// dtpLotBeginDateE.Enabled = false;
//}
}
#region 单元格背景色设置
private void grvDetail_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
#region 现逻辑
//单元格
if (e != null && e.RowHandle >= 0 && e.Column.FieldName.Contains("工序") && grvDetail.GetRowCellValue(e.RowHandle, e.Column.FieldName) != null && e.Column.FieldName != "工序数")
{
string oppcode = "";
string oppcodes = "";
string opcode = grvDetail.GetRowCellValue(e.RowHandle, e.Column.FieldName).ToString();
string lotno = grvDetail.GetRowCellValue(e.RowHandle, "产品跟踪码").ToString();
string[] opArray = opcode.Split(':');
if (opArray.Length == 3)
{
oppcode = opArray[1];
}
else
{
oppcode = opArray[0];
}
DataTable dt = Color_table.AsEnumerable().Where(a => a["LOTNO"].ToString()== lotno && a["OPCODE"].ToString()== oppcode).AsDataView().ToTable();
//未派工
if ((dt.Rows.Count<=0|| string.IsNullOrEmpty(dt.Rows[0]["id"].ToString()))&&oppcode!="")
{
e.Appearance.BackColor = Color.Blue;
}
//派工,未开工
else if (dt != null && dt.Rows.Count > 0 && string.IsNullOrEmpty(dt.Rows[0]["id"].ToString()) == false && string.IsNullOrEmpty(dt.Rows[0]["OPCODE"].ToString()))
{
e.Appearance.BackColor = Color.Aqua;
}
//完工、检验合格
else if (dt != null && dt.Rows.Count > 0 && dt.Rows[0]["Result"].ToString() == "合格" && dt.Rows[0]["ACTIONRESULT"].ToString() == "COLLECT_END")
{
e.Appearance.BackColor = Color.Green;
color = Color.Green;
}
//完工、检验不合格
else if (dt != null && dt.Rows.Count > 0 && dt.Rows[0]["Result"].ToString() == "不合格" && dt.Rows[0]["ACTIONRESULT"].ToString() == "COLLECT_END")
{
e.Appearance.BackColor = Color.Red;
color = Color.Red;
}
//完工、自检不合格
else if (dt != null && dt.Rows.Count > 0 && (dt.Rows[0]["Result"].ToString() == "") && dt.Rows[0]["ACTIONRESULT"].ToString() == "COLLECT_END" && !String.IsNullOrEmpty(dt.Rows[0]["ID"].ToString()))
{
e.Appearance.BackColor = Color.FromArgb(254, 177, 95);
color = Color.FromArgb(254, 177, 95);
}
//完工、未检验
else if (dt != null && dt.Rows.Count > 0 && (dt.Rows[0]["Result"].ToString() == "" || dt.Rows[0]["Result"].ToString() == "待检") && dt.Rows[0]["ACTIONRESULT"].ToString() == "COLLECT_END")
{
e.Appearance.BackColor = Color.GreenYellow;
color = Color.GreenYellow;
}
//开工、未完工
else if (dt != null && dt.Rows.Count > 0 && dt.Rows[0]["ACTIONRESULT"].ToString() == "COLLECT_BEGIN" && dt.Rows[0]["ACTIONRESULT"].ToString() != "COLLECT_END")
{
e.Appearance.BackColor = Color.Yellow;
color = Color.Yellow;
}
}
#endregion
}
#endregion
#region 单元格背景色设置
private void grdView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
}
#endregion
private void rptPage_Load(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void MDeptCode_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
ButtonEdit btn = (ButtonEdit)sender;
string sql = @"select distinct MDeptCode from icsmo";
//object obj = AppConfig.InvokeWebservice(AppConfig.BaseServiceUri, "WebBaseService", "BaseService", "GetHuaRongErpConnectString", new object[] { });
//if (obj == null)
//{
// ICSBaseSimpleCode.AppshowMessageBox(1, "ERP数据库连接取得失败!");
//}
DataTable data = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
FormDataRefer reForm = new FormDataRefer();
reForm.FormTitle = "生产部门";
DataTable menuData = data;
reForm.DataSource = menuData;
reForm.MSelectFlag = false;
reForm.RowIndexWidth = 35;
reForm.FormWidth = 500;
reForm.FormHeight = 500;
//reForm.FilterKey = btn.Text;
//grvDetail.GetRowCellValue(grvDetail.FocusedRowHandle, grvDetail.FocusedColumn).ToString().Trim();
if (reForm.ShowDialog() == DialogResult.OK)
{
DataTable retData = reForm.ReturnData;
string type = "";
foreach (DataRow dr in retData.Rows)
{
MDeptCode.Text = dr["MDeptCode"].ToString();
}
}
}
private void simpleButton1_Click(object sender, EventArgs e)
{
FormOutExcel foe = new FormOutExcel();
if (foe.ShowDialog() == DialogResult.OK)
{
try
{
string outtype = foe._OutType;
string exceltype = foe._ExcelType;
string filename = foe._FileName;
string url = foe._Url;
string sheetname = foe._SheetName;
if (outtype.ToLower() == "excel")
{
DevExpress.XtraPrinting.XlsExportOptions op = new DevExpress.XtraPrinting.XlsExportOptions();
op.SheetName = sheetname;
grdDetail.MainView.ExportToXls((url + "\\" + filename + (exceltype == "2003" ? ".xls" : ".xlsx")), op);
}
else
{
grdDetail.MainView.ExportToPdf(url + "\\" + filename + ".pdf");
}
MessageBox.Show("导出成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}