天津投入产出系统后端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2624 lines
106 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QM.Account;
using DCS.Common;
using Model;
using QM.Assist;
using DCS.Place;
using QMAPP.FJC.Entity.Operation;
using QMAPP.Entity;
using QMAPP.MD.Entity;
using QMAPP.FJC.Entity.Basic;
namespace QMAPP.WinForm.Forms.DisPatch
{
/// <summary>
/// 工位终端FIS发货效验功能
/// 创建时间:2012-11-12
/// 创 建 人:pxbibm
/// H1:modified by sun g.q. on 20130330
/// 1)隐藏了rb_hx 和rb_dx,全部根据pFisType判断,生产线的设置使用按钮进行设置;
/// 2)增加 CreatePastecardNo(String lineNo)代替CreatePastecardNo(),贴车单流水号,根据生产线代码生成;
/// 3)校准功能进行了bug修改;
/// 4)20190325移植了成都DCS发运功能,同时保留原有发运,校验信息通过零件规则表判断//gzf。
/// 5)20190325成都存在东西厂情况,且未来要货可能都混线生产,现场操作者要讲求快速切换发货,将单选按钮恢复,且用此过滤发货计划。--gzf
/// </summary>
public partial class FrmPlace : Form
{
#region 常量
private const string DISPLAY_NAME = "工位终端";
private DataTable dt = null;
private DataTable dtmat = null;
private DataTable dtpro = null;
private BindingSource bs;
private bool setRedBackgroudFlag = false;//设置第一次设置背景颜色校验标识
//获取服务代理
QMAPP.ServicesAgent.ServiceAgent _agent = ClientContext.GetServiceAgent();
List<BarcodeRules> _barcodeRules = null;
public delegate void myMethodDelegate();
#endregion
#region 变量
public string a = "1";
DateTime _dt = DateTime.Now;
//2016-01-07 增加车架的1号位置的扫描校验
private string placeFirstPosition = ""; //1号码标识
private DateTime placeFirstPositionTime = DateTime.MinValue;//获取1号码的时间
int BarcodeTime = 10000;
/// <summary>
/// 指令二次确认
/// </summary>
string _CMDConfirm = "";
public string WORKCENTER_CODE = "";//工作重心参数
public string ProMaterial = "";//扫描产品物料信息
#endregion
#region 界面初始化
public FrmPlace()
{
InitializeComponent();
_barcodeRules = _agent.InvokeServiceFunction<List<BarcodeRules>>("BarcodeRulesBLL_GetListForSend");
}
#endregion
#region 绑定DataGridView
/// <summary>
/// 绑定DataGridView
/// </summary>
private DataTable BindDataGridView()
{
#region
return null;
#endregion
}
#endregion
#region 字段
//主键
private string strFiskey;
//大众顺序号
private string strvwseq;
//车身号
private string strkin;
//底盘号
private string strvin;
//零件号
private string strprodno;
//总成描述
private string strcarsetdesc_cn;
//上线时间
private string strcp5a;
//车型
private string strlineno;
//扫描状态
private string strscanstat;
int nfindex = 0;
//int ncsindex = 0;
//int rowindex = 0;
/// <summary>
/// NF贴车单明细列表
/// </summary>
List<EPasteDetailsCard> nflist = null;
/// <summary>
/// NCS贴车单明细列表
/// </summary>
List<EPasteDetailsCard> ncslist = null;
/// <summary>
/// NF贴车单主键
/// </summary>
string nfpastcardkey = "";
/// <summary>
/// 当前guidview行号
/// </summary>
int dgvrowindex = 0;
/// <summary>
/// 正确的声音文件路径
/// </summary>
private string okSoundPath = null;
public string pFisType = "";
/// <summary>
/// 错误的声音文件路径
/// </summary>
private string errorSoundPath = null;
#endregion
#region FIS数据列Post
/// <summary>
/// FIS数据列Post
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvMATChange_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
#region
try
{
if (dgvMATChange.Rows.Count > 0)
{
e.Graphics.DrawString((e.RowIndex + 1).ToString(), dgvMATChange.RowHeadersDefaultCellStyle.Font,
new SolidBrush(dgvMATChange.RowHeadersDefaultCellStyle.ForeColor),
e.RowBounds.Location.X + 15, e.RowBounds.Y + 5);
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lberror.Text = ex.Message;
}
#endregion
}
#endregion
#region 获取混线,单线FIS数据
/// <summary>
/// 获取混线,单线FIS数据
/// </summary>
/// <param name="pFisType"></param>
public void GetInitData()
{
#region
try
{
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetList.ToString(), pFisType, WORKCENTER_CODE);
//tbl.Columns["PRODNO"].SetOrdinal(5);
tbl.Columns["VIN"].SetOrdinal(3);
tbl.AcceptChanges();
if (tbl.Rows.Count <= 0)
{
DataTable dt = (DataTable)dgvMATChange.DataSource;
if (dt != null)
{
dt.Rows.Clear();
}
}
else
{
dgvMATChange.DataSource = tbl;
}
setRedBackgroudFlag = false;
SetRowColor();
computenfncs();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lberror.Text = ex.Message;
}
finally
{
}
#endregion
}
#endregion
#region 获取EPasteDetailsCard数据
/// <summary>
///
/// </summary>
public void GetInitData2()
{
try
{
dgvNF.DataSource = new List<EPasteDetailsCard>();
nfpastecard = null;
nflist = null;
nfindex = 0;
dgvrowindex = 0;
setRedBackgroudFlag = false;
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lberror.Text = ex.Message;
}
finally
{
}
}
#endregion
#region 设置FIS数据颜色
/// <summary>
/// 设置FIS数据颜色
/// </summary>
private void SetRowColor()
{
if (setRedBackgroudFlag == true)
{
//return;
}
//底盘号
int vinNumber = 0;
int lastVinNumber = 0;
int num = 0;
int defaultNum = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["ShowDataCount", "4"]);
for (int i = 0; i < this.dgvMATChange.Rows.Count; i++)
{
// vinNumber = Convert.ToInt32(dgvMATChange.Rows[i].Cells["VIN"].Value.ToString().Substring(10, 7));
vinNumber = Convert.ToInt32(dgvMATChange.Rows[i].Cells["REQUESTID"].Value.ToString());
//2016-01-21 wangqingnan 如果行变色则不重新刷颜色
var fispid=dgvMATChange.Rows[i].Cells[PID.Name].Value.ToString();
if (nflist != null && nflist.Exists(p => p.FIS_KEY == fispid))
{
this.dgvMATChange.Rows[i].Cells[clscanstate.Name].Value = "1";
}
if (this.dgvMATChange.Rows[i].Cells[clscanstate.Name].Value.ToString() == "1")
{
this.dgvMATChange.Rows[i].DefaultCellStyle.BackColor = Color.White;
continue;
}
//2016-01-21 wangqingnan 如果行变色则不重新刷颜色
//int defaultNum = Convert.ToInt32(QM.Config.CustomConfig.GetItem("ShowDataCount"));
if (num == 0)
{
this.dgvMATChange.Rows[i].DefaultCellStyle.BackColor = Color.Yellow;
if ((i + 1) % defaultNum == 0)
{
num = 1;
}
}
else
{
this.dgvMATChange.Rows[i].DefaultCellStyle.BackColor = Color.YellowGreen;
if ((i + 1) % defaultNum == 0)
{
num = 0;
}
}
//2016-10-31 闫永刚 如果出现该底盘号与上一条底盘号间断的情况,
//设置当前底盘号的颜色为红色
if (lastVinNumber > 0)
{
//if ((vinNumber - lastVinNumber) > 1)
//DQZhang 优化FIS断号颜色显示9999-0001
if (Math.Abs(vinNumber - lastVinNumber) > 1 && Math.Abs(vinNumber - lastVinNumber) != 9998)
{
this.dgvMATChange.Rows[i - 1].DefaultCellStyle.BackColor = Color.Red;
this.dgvMATChange.Rows[i].DefaultCellStyle.BackColor = Color.Red;
setRedBackgroudFlag = true;
}
}
lastVinNumber = vinNumber;
}
if (dgvMATChange.RowCount > 0)
{
dgvMATChange.FirstDisplayedScrollingRowIndex = nfindex - nfindex % 4;
}
dgvMATChange.Refresh();
dgvMATChange.ClearSelection();
txtCode.Focus();
}
#endregion
#region 设置版面的显示与隐藏(无用)
/// <summary>
/// 设置版面的显示与隐藏
/// </summary>
private void SetShowData()
{
//"隐藏了rb_hx 和rb_dx,全部根据pFisType判断,生产线的设置使用按钮进行设置"
//02为单线
if (pFisType == "02")
{
//gbGeneralData.Visible = false;
}
else
{
//gbGeneralData.Visible = true;
//gbGeneralData.Dock = DockStyle.Bottom;
}
}
#endregion
#region 处理扫描条码框设置焦点
/// <summary>
/// 处理扫描条码框设置焦点
/// </summary>
private void ArragetxtCode()
{
txtCode.Text = string.Empty;
//Activates the control.
txtCode.Select();
//Sets input focus to the control.
txtCode.Focus();
}
#endregion
#region 加载画面
/// <summary>
/// 加载画面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmElevateRequest_Load(object sender, EventArgs e)
{
try
{
timeRefew.Enabled = true;
//UserBuffer.Interval = CtlApp.GetInterval(QM.Config.CustomConfig.GetItem("RefreshTime"));
UserBuffer.Interval = CtlApp.GetInterval(QMAPP.WinForm.Common.LocalSetting.Settings["RefreshTime","20"]);
timeRefew.Interval = UserBuffer.Interval;
//BarcodeTime = int.Parse(QM.Config.CustomConfig.GetItem("BarcodeTime"));
//BarcodeTime = int.Parse(QMAPP.WinForm.Common.LocalSetting.Settings["BarcodeTime","1"]);
okSoundPath = System.Configuration.ConfigurationManager.AppSettings["SaveFilePath"] + "Sound\\" + PlaySoundConst.strSoundOk;
errorSoundPath = System.Configuration.ConfigurationManager.AppSettings["SaveFilePath"] + "Sound\\" + PlaySoundConst.strSoundNg;
//隐藏了rb_hx 和rb_dx,全部根据pFisType判断,生产线的设置使用按钮进行设置;
//pFisType = "01";
//pFisType = QM.Config.CustomConfig.GetItem("FlashProCode");
//pFisType = QMAPP.WinForm.Common.LocalSetting.Settings["FlashProCode","01"];
pFisType = QMAPP.WinForm.Common.LocalSetting.Settings["FlashProCode", ""];
if (!string.IsNullOrEmpty(pFisType))
{
if (pFisType.Equals("01"))
{
rb_dx.Checked = true;
}
else
{
rb_dx.Checked = true;
}
}
//发运信息直接用单选按钮过滤,工作中心字段用作打印功能格式使用
//WORKCENTER_CODE = QMAPP.WinForm.Common.LocalSetting.Settings["PlantNameConfig", ""];
WORKCENTER_CODE = "IPFY" + pFisType;
//发运框设置
InitContainer();
GetInitData();
SetShowData();
//computenfncs();//lable1原有copy代码 这个功能注释掉了 崔法宝-20170905调整
dgvMATChange.ClearSelection();
dgvNF.AutoGenerateColumns = false;
SetPastNOConfirm(0);
GetLastPastCard();
//lblLastPastNO.Text = "";
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lberror.Text = ex.Message;
}
finally
{
ArragetxtCode();
dgvMATChange.ClearSelection();
}
}
#endregion
#region 获取上一条发运单信息
/// <summary>
/// 获取上一条发运单信息
/// </summary>
private void GetLastPastCard()
{
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
var lastpastcard= agent.InvokeServiceFunction<FJC.Entity.SendManage.PastCard>("FrmPlaceBLL_GetLastPastCard", WORKCENTER_CODE);
if (lastpastcard != null)
{
lblLastPastNO.Text = lastpastcard.PASTECARDNO;
}
}
#endregion
#region 设置贴车单确认状态
/// <summary>
/// 设置贴车单确认状态
/// </summary>
/// <param name="state">0:未确认 1:确认OK 2:确认失败</param>
private void SetPastNOConfirm(int state)
{
switch (state)
{
case 0:
{
pbPastNoConfirmed.Enabled = false;
pbPastNoConfirmed.Image = global::QMAPP.WinForm.Resource1.help;
break;
}
case 1:
{
pbPastNoConfirmed.Enabled = true;
pbPastNoConfirmed.Image = global::QMAPP.WinForm.Resource1.ok;
break;
}
case 2:
{
pbPastNoConfirmed.Enabled = false;
pbPastNoConfirmed.Image = global::QMAPP.WinForm.Resource1.cancel;
break;
}
default:
{
pbPastNoConfirmed.Enabled = false;
pbPastNoConfirmed.Image = global::QMAPP.WinForm.Resource1.stop;
break;
}
}
}
#endregion
#region 贴车单查询功能
/// <summary>
/// 贴车单查询功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSearch_Click(object sender, EventArgs e)
{
FrmItemList frm = new FrmItemList();
frm.ShowDialog();
txtCode.Focus();
}
#endregion
#region 实现效验功能
/// <summary>
/// 实现效验功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnJZ_Click(object sender, EventArgs e)
{
try
{
if (MessageBox.Show("您确实要做FIS校准跳过功能吗?", "校准提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (nfindex > 0)
{
MessageBox.Show("发运已开始扫描无法进行FIS校准!", "校准提示");
return;
}
if (dgvMATChange.Rows.Count > 0)
{
int i = dgvMATChange.CurrentRow.Index;
string strvwseq = dgvMATChange.Rows[i].Cells["REQUESTID"].Value.ToString();
//上线时间
string strCP5A = dgvMATChange.Rows[i].Cells["CP5A"].Value.ToString();
//BllFisOrder bllFisOrder = new BllFisOrder();
//bllFisOrder.UpdateFisOrder(strvwseq, strCP5A);
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
agent.InvokeServiceFunction(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_UpdateFisOrder.ToString(), strvwseq, strCP5A, WORKCENTER_CODE);
GetInitData();
}
}
}
catch (Exception ex)
{
}
finally
{
txtCode.Focus();
}
}
#endregion
#region 获取FIS数据
/// <summary>
/// 获取FIS数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetFisData_Click(object sender, EventArgs e)
{
if (dgvNF.Rows.Count == 0)
{
GetInitData();
//computenfncs();
}
}
#endregion
#region 手动刷新
/// <summary>
/// 手动刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRef_Click(object sender, EventArgs e)
{
GetInitData();
}
#endregion
#region 创建贴车单号
//EPasteCard nfpastecard = null;
/// <summary>
/// 创建贴车单号
/// 贴车单号的规则生成贴车单号,格式为“FB”(2位)+日期(8位,20121008)+流水号(4位);
/// </summary>
/// <returns></returns>
private string CreatePastecardNo()
{
#region
//BllFisOrder bllFisOrder = new BllFisOrder();
string strdate = DateTime.Now.ToString("yyyyMMdd");
// DataTable tbl = bllFisOrder.GetPastecardNo(DateTime.Now.ToShortDateString());
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetPastecardNo.ToString(), DateTime.Now.ToShortDateString());
string strindex = tbl.Rows[0][0].ToString().PadLeft(4, '0');
string pastecardno = string.Format("FB{0}{1}", strdate, strindex);
return pastecardno;
#endregion
}
#endregion
#region 创建贴车单号(外来)
/// <summary>
/// 创建贴车单号
/// 贴车单号的规则生成贴车单号,格式为“生产线代码”(2位)+日期(8位,20121008)+流水号(4位);
/// 20190329--贴车单号的规则生成贴车单号,格式为“生产线代码”(工作中心)+日期(8位,20121008)+流水号(4位)
/// </summary>
/// <returns></returns>
private string CreatePastecardNo(String lineNo)
{
#region
String prefix = lineNo;
//BllFisOrder bllFisOrder = new BllFisOrder();
//2016-10-30闫永刚获取贴车单号修改
// DataTable dt = bllFisOrder.GetPastecardIndex();
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
//DataTable dt = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetPastecardIndex.ToString());
DataTable dt = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetDaspssteCarIndexByPlanName.ToString(), prefix);
string PASTECARDNO = "";
string OLD_PASTECARDNO = "";
string NEW_PASTECARDNO = "";
if (dt.Rows.Count == 0)
{
PASTECARDNO =lineNo+ DateTime.Now.ToString("yyyyMMdd") + "0001";
nfpastecard.PASTECARDNO = PASTECARDNO;
int delResult = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_InsertDaspssteCarIndexByPlanName.ToString(), nfpastecard);
}
else
{
foreach (DataRow dr in dt.Rows)
{
//OLD_PASTECARDNO = dr["PASTECARDNO"].ToString();
//int Addvalue = Convert.ToInt32(OLD_PASTECARDNO.Substring(OLD_PASTECARDNO.Length - 1, 1)) + 1;
//NEW_PASTECARDNO = OLD_PASTECARDNO.Substring(lineNo.Length, OLD_PASTECARDNO.Length - lineNo.Length - 1) + Addvalue.ToString();
//20190314
PASTECARDNO = dr["PASTECARDNO"].ToString();
if ((Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length < 4)
{
int num = 4 - (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length;
string value = (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
string sumValue = "";
for (var i = 0; i < num; i++)
{
sumValue = sumValue + "0";
}
if (PASTECARDNO.Substring(lineNo.Length, PASTECARDNO.Length - lineNo.Length - 4).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(lineNo.Length, PASTECARDNO.Length - lineNo.Length - 4) + sumValue + value;
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
else
{
if (PASTECARDNO.Substring(lineNo.Length, 8).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(lineNo.Length, PASTECARDNO.Length - lineNo.Length - 2) + (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
//nfpastecard.PASTECARDNO = PASTECARDNO;
//nfpastecard.OPERATOR = ClientContext.LoginInfo.UserName.ToString();
}
PASTECARDNO = lineNo + PASTECARDNO;
}
return PASTECARDNO;
#region XXX
//string pasteCardIndex = "";
//DateTime updateTime;
//foreach (DataRow dr in dt.Rows)
//{
// string lineNoRow = dr["PASTECARDNO"].ToString().Substring(0, 2);
// if (lineNo == lineNoRow)
// {
// pasteCardIndex = dr["PASTECARDNO"].ToString();
// updateTime = Convert.ToDateTime(dr["PASTECARDDATE"]);
// }
//}
//string strdate = DateTime.Now.ToString("yyyyMMdd");
//string strindex = "";
//if (pasteCardIndex.Substring(2, 8) == strdate)
//{
// strindex = (Convert.ToInt32(pasteCardIndex.Substring(10, 4)) + 1).ToString().PadLeft(4, '0');
//}
//else
//{
// strindex = "0001";
//}
//原来获取贴车单方式
//string strdate = DateTime.Now.ToString("yyyyMMdd");
//DataTable tbl = bllFisOrder.GetPastecardNo(DateTime.Now.ToShortDateString(), prefix);
//string strindex = tbl.Rows[0][0].ToString().PadLeft(4, '0');
//string pastecardno = string.Format("{0}{1}{2}", prefix, strdate, strindex);
//return pastecardno;
#endregion
#endregion
}
#endregion
#region 删除已经打印过的贴车单FIS列表
/// <summary>
/// 删除已经打印过的贴车单FIS列表
/// </summary>
/// <param name="pnflist"></param>
/// <param name="pnflist2"></param>
private void DGVRemoveRow(List<EPasteDetailsCard> pnflist, ref List<EPasteDetailsCard> pnflist2)
{
#region
if (pnflist2 != null)
{
for (int rowindex = 0; rowindex < pnflist2.Count; rowindex++)
{
string tempfiskey2 = pnflist2[rowindex].FIS_KEY;
for (int rowindex1 = 0; rowindex1 < dgvMATChange.Rows.Count; rowindex1++)
{
string tempFiskey1 = dgvMATChange.Rows[rowindex1].Cells["clFiskey"].Value.ToString();
if (tempFiskey1 == tempfiskey2)
{
DataGridViewCellStyle ds = new DataGridViewCellStyle();
ds.BackColor = Color.Green;
this.dgvMATChange.Rows[rowindex1].DefaultCellStyle = ds;
//当删除了满6个的记录后,另一个数据集的行号需要重新排列。
dgvMATChange.Rows[rowindex1].Cells[clscanstate.Name].Value = "1";
pnflist2[rowindex].DGVROWINDEX = rowindex1;
break;
}
}
}
}
#endregion
}
#endregion
#region NF贴车单手动打印功能
/// <summary>
/// NF贴车单手动打印功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrint_NF_Click(object sender, EventArgs e)
{
#region
bool isprint = false;
try
{
if (nflist != null)
{
if (MessageBox.Show("您确定要提交并且打印数据吗?", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//当点击了确定,则会执行删除操作
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetDaspssteCarIndexByPlanName.ToString(), nfpastecard.PLANTNAME.ToString());
if (tbl.Rows.Count > 0)
{
nfpastecard.PASTECARDNO = tbl.Rows[0][0].ToString();
}
else
{
MessageBox.Show("无法打印!");
}
EFailLog log = new EFailLog();
log.TID = Guid.NewGuid().ToString();
log.FCT_DATE = DateTime.Now;
log.FCT_NO = nfpastecard.PASTE_CARD_KEY;
log.FCT_OPER = UserBuffer.UserCode;
log.FCT_OPERTYPE = 1;
log.FCT_REASON = "NF手动打印贴车单操作";
nfpastecard.FailLog = log;
string strprodtype = "";
//#region "隐藏了rb_hx 和rb_dx,全部根据pFisType判断,生产线的设置使用按钮进行设置"
if (pFisType == "01")
{
strprodtype = "( 混 )";
}
else if (pFisType == "02")
{
strprodtype = "( 单 )";
}
//提交数据处理
foreach (DataRow dr in tbl.Rows)
{
string PASTECARDNO = dr["PASTECARDNO"].ToString();
if (PASTECARDNO.Substring(2, 8).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
if ((Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length < 4)
{
int num = 4 - (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length;
string value = (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
string sumValue = "";
for (var i = 0; i < num; i++)
{
sumValue = sumValue + "0";
}
if (PASTECARDNO.Substring(2, PASTECARDNO.Length - 6).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(2, PASTECARDNO.Length - 6) + sumValue + value;
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
else
{
if (PASTECARDNO.Substring(2, PASTECARDNO.Length - 6).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(2, PASTECARDNO.Length - 6) + (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
nfpastecard.PASTECARDNO = PASTECARDNO;
nfpastecard.OPERATOR = ClientContext.LoginInfo.UserName.ToString();
// nfpastecard.
}
int rowindex = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_AddNewPasteCard.ToString(), nfpastecard);
// 打印处理
FrmCarCardPrintShow frm = new FrmCarCardPrintShow(nfpastecard, strprodtype, "手动");
frm.Owner = this;
frm.ShowDialog();
isprint = frm.isprint;
}
//if (isprint)
//{
// nfpastecard.DetailsCardlist = nflist;
// nfindex = 0;
// // BllFisOrder bllFisOrder = new BllFisOrder();
// //int strindex = bllFisOrder.AddPasteCard(nfpastecard);
// //QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
// int strindex = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_AddNewPasteCard.ToString(), nfpastecard);
// PrintPasteCard prin = new PrintPasteCard();
// prin.Print(strindex, nfpastecard, strprodtype);
// GetInitData();
// DGVRemoveRow(nflist, ref ncslist);
// nflist = new List<EPasteDetailsCard>();
// dgvNF.DataMember = null;
// dgvNF.DataSource = nflist;
// //computenfncs();
//}
}
else
{
MessageBox.Show("无打印数据!");
}
}
catch (Exception ex)
{
}
finally
{
if (isprint)
{
nflist = null;
txtCode.Focus();
//2016-01-07 增加1号位校验 - 清空1号位
this.placeFirstPosition = "";
this.placeFirstPositionTime = DateTime.MinValue;
//2016-01-07 增加1号位校验
}
}
#endregion
}
#endregion
#region 打印1号位的条码
/// <summary>
/// 打印1号位的条码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFirstPlace_Click(object sender, EventArgs e)
{
this.dgvMATChange.Rows[0].DefaultCellStyle.BackColor = Color.White;
#region 打印
DCS.Common.PrintCode printFun = new DCS.Common.PrintCode();
//执行打印
printFun.PinrtFirstPlaceHU();
#endregion
}
#endregion
#region 判断当前扫描过的数据集合中是否有相同条码
EPasteCard ncspastecard = null;
/// <summary>
/// 判断当前扫描过的数据集合中是否有相同条码
/// 与右侧列表中校验,条码是否扫描过
/// </summary>
/// <param name="strbarcode">扫描的条码</param>
private bool CheckDataSet(string strbarcode)
{
String teshucode = getTeShuBarcode(barcodeidentification);
if (nfpastecard != null)
{
foreach (EPasteDetailsCard pe in nfpastecard.DetailsCardlist)
{
if (teshucode == strbarcode)
{
continue;
}
if (strbarcode == pe.SANBARCODE)
{
Alert("条码重复:已扫描过的条码,不可以重复扫描。");
ArragetxtCode();
return false;
}
}
}
if (ncspastecard != null)
{
foreach (EPasteDetailsCard pe2 in ncspastecard.DetailsCardlist)
{
if (teshucode == strbarcode)
{
continue;
}
if (strbarcode == pe2.SANBARCODE)
{
Alert("条码重复:已扫描过的条码,不可以重复扫描。");
ArragetxtCode();
return false;
}
}
}
return true;
}
#endregion
#region 创建NF的贴车单以及明细(外来件)
/// <summary>
/// 创建NF的贴车单以及明细(NF开头)
/// </summary>
private void CreateNFPaste__()
{
#region
if (nfindex == 0)
{
nflist = new List<EPasteDetailsCard>();
nfpastcardkey = Guid.NewGuid().ToString();
nfpastecard = new EPasteCard();
nfpastecard.DetailsCardlist = new List<EPasteDetailsCard>();
nfpastecard.PASTE_CARD_KEY = nfpastcardkey;
nfpastecard.PLANTNAME = WORKCENTER_CODE.ToString();
nfpastecard.PASTECARDNO = "";
nfpastecard.PRODUCTIONNAME = pFisType;
nfpastecard.PASTECARDDATE = DateTime.Now.ToString();
nfpastecard.OPERATOR = UserBuffer.UserCode;
nfpastecard.CREATETIME = DateTime.Now.ToString();
}
EPasteDetailsCard pastdetail = new EPasteDetailsCard();
pastdetail.PASTEDETAILED_CARD_KEY = Guid.NewGuid().ToString();
pastdetail.FIS_KEY = strFiskey;
pastdetail.PASTE_CARD_KEY = nfpastcardkey;
pastdetail.SANBARCODE = txtCode.Text.ToString();
pastdetail.SCANDATE = DateTime.Now.ToString();
pastdetail.PRODNO = strprodno;
pastdetail.CARSETDESC_CN = strcarsetdesc_cn;
pastdetail.VIN = strvin;
pastdetail.VWSEQ = strvwseq;
pastdetail.CP5A = strcp5a;
pastdetail.DGVROWINDEX = dgvrowindex;
pastdetail.LINENO = strlineno;
nfpastecard.DetailsCardlist.Add(pastdetail);
nflist.Add(pastdetail);
dgvNF.DataMember = null;
dgvNF.DataSource = nflist;
strprodno = "";
nfindex++;
int setdefaultSum = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["ShowDataCount", ""]);
if (nfindex == setdefaultSum)
{
EFailLog log = new EFailLog();
log.TID = Guid.NewGuid().ToString();
log.FCT_DATE = DateTime.Now;
log.FCT_NO = nfpastecard.PASTE_CARD_KEY;
log.FCT_OPER = UserBuffer.UserCode;
log.FCT_OPERTYPE = 1;
log.FCT_REASON = "NF贴车单自动打印操作";
//nfpastecard.PLANTNAME = WORKCENTER_CODE.ToString();
nfpastecard.OPERATOR = ClientContext.LoginInfo.UserName.ToString();
nfpastecard.PASTECARDNO = CreatePastecardNo(WORKCENTER_CODE.ToString());
nfpastecard.DetailsCardlist = nflist;
nfpastecard.FailLog = log;
nfindex = 0;
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
int rowindex = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_AddPasteCard.ToString(), nfpastecard);
//BllFisOrder bllFisOrder = new BllFisOrder();
//int rowindex = bllFisOrder.AddPasteCard(nfpastecard);
PrintPasteCard prin = new PrintPasteCard();
string strprodtype = "";
//#region "隐藏了rb_hx 和rb_dx,全部根据pFisType判断,生产线的设置使用按钮进行设置"
if (pFisType == "01")
{
strprodtype = "( 混 )";
}
else if (pFisType == "02")
{
strprodtype = "( 单 )";
}
prin.Print(rowindex, nfpastecard, strprodtype);
ClearContainer();
GetInitData();
DGVRemoveRow(nflist, ref ncslist);
dgvNF.DataSource = new List<EPasteDetailsCard>();
nfpastecard = null;
nflist = null;
nfindex = 0;
dgvrowindex = 0;
computenfncs();
GetLastPastCard();
SetPastNOConfirm(0);
//2016-01-07 增加1号位校验 - 清空1号位
this.placeFirstPosition = "";
this.placeFirstPositionTime = DateTime.MinValue;
//2016-01-07 增加1号位校验
}
#endregion
}
#endregion
#region 计算NF,NCS数量
/// <summary>
/// 计算NF,NCS数量
/// </summary>
private void computenfncs()
{
//BindingSource bin = (BindingSource)dgvMATChange.DataSource;
//DataTable tbl = (DataTable)dgvMATChange.DataSource;
//DataRow[] nfrows = tbl.Select("LINENO='NF'");
//DataRow[] ncsrows = tbl.Select("LINENO='NCS'");
//DataRow[] ncsnfrows = tbl.Select("LINENO='NCSNF'");
//DataRow[] ncsgprows = tbl.Select("LINENO='NCSGP'");
//lblCount.Text = "NCS: " + ncsrows.Length + " NF: " + nfrows.Length + " NCSNF: " + ncsnfrows.Length + " NCSGP: " + ncsgprows.Length;
DataTable tbl = (DataTable)dgvMATChange.DataSource;
DataRow[] nfrows = tbl.Select("LINENO='NCSNFPA'");
DataRow[] ncsrows = tbl.Select("LINENO='PA311'");
DataRow[] ncsnfrows = tbl.Select("LINENO='A SUV'");
//DataRow[] ncsgprows = tbl.Select("LINENO='NCSGP'");
lblCount.Text = "NCSNFPA: " + nfrows.Length + " " + " PA311: " + ncsrows.Length + " " + " A SUV: " + ncsnfrows.Length;
}
#endregion
#region NF仪表板校验
/// <summary>
/// NF仪表板校验
/// </summary>
/// <param name="scanbarcode"></param>
/// <returns></returns>
private bool CheckRule(string scanbarcode)
{
try
{
int temprowindex = 0;
int nflistCount = 0;
if (nflist != null && nflist.Count > 0)
{
nflistCount = nflist.Count;
}
int ncslistCount = 0;
if (ncslist != null && ncslist.Count > 0)
{
ncslistCount = ncslist.Count;
}
temprowindex = nflistCount + ncslistCount;
strprodno = dgvMATChange.Rows[temprowindex].Cells["PRODNO"].Value.ToString();
DataTable tbl = GetSparepartsinfo(scanbarcode);
if (tbl.Rows.Count > 0)
{
barcodeidentification = tbl.Rows[0]["BARCODEIDENTIFICATION"].ToString();
}
else
{
Alert("条码错误:无法根据条码识别零件号");
}
if (tbl.Rows.Count > 0)
{
//零件号
string strkhprodno = tbl.Rows[0]["CUSTOMERSPAREPARTS"].ToString();
string templineno = tbl.Rows[0]["CODENAME"].ToString();
if (strkhprodno.ToUpper().Replace(" ", "").Contains(strprodno.ToUpper().Replace(" ", "")))
{
DGVCurrontRow(strprodno, "NF", temprowindex);
return true;
}
else
{
Alert("条码错误:扫描的条码与FIS中的零件不符。");
return false;
}
}
else
{
Alert("条码错误:无法根据条码识别零件号。");
return false;
}
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable dtother = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetOhterCode.ToString(), scanbarcode);
DataTable dtrule = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetRule.ToString(), strprodno, scanbarcode.Substring(0, 3));
if (dtother.Rows.Count <= 0)
{
Alert("条码匹配错误:该下护板在上工位未进行绑定扫描!");
ArragetxtCode();
return false;
}
int sended = Convert.ToInt32(dtother.Rows[0]["SENDED"]);
if (sended == 1)
{
Alert("该下护板已经发货!");
ArragetxtCode();
return false;
}
if (dtrule.Rows.Count <= 0)
{
Alert("条码匹配错误:车型校验规则不存在。");
ArragetxtCode();
return false;
}
List<string> barCodeList = new List<string>();
string[] listother = dtother.Rows[0][0].ToString().Split(' ');
for (int i = 0; i < listother.Length; i++)
{
if (string.IsNullOrEmpty(listother[i]) == false)
{
barCodeList.Add(listother[i]);
}
}
barCodeList.Add(scanbarcode.Substring(0, 3));
//获取所有的规则条码
List<string> ruleList = new List<string>();
foreach (DataRow dr in dtrule.Rows)
{
ruleList.Add(dr["OTHERCODE"].ToString());
}
bool checkResult = true;
string errorBarcode = "";
foreach (string str in barCodeList)
{
if (ruleList.Contains(str) == false)
{
checkResult = false;
errorBarcode = str;
break;
}
}
if (checkResult == false)
{
Alert(errorBarcode + "与零件号" + strprodno + "的类型不匹配!");
ArragetxtCode();
return false;
}
DGVCurrontRow(strprodno, "NF", temprowindex);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
private void Alert(string message, bool openConfirmDialog = true)
{
PlaySound.PlaySounds.Play(@errorSoundPath);
lberror.Text = message;
if (openConfirmDialog
&& string.Equals(QMAPP.WinForm.Common.LocalSetting.Settings["AlertConfirmEnable", "0"], "1"))
{
Common.frmAlertConfirm alertconfirm = new Common.frmAlertConfirm(message, "CD85010800");
alertconfirm.StartPosition = FormStartPosition.CenterScreen;
alertconfirm.ShowDialog();
}
}
#endregion
#region 与FIS数据匹配
/// <summary>
/// 与FIS数据匹配
/// </summary>
private void FISDataCompare(string Code,Product product)
{
int temprowindex = 0;
int nflistCount = 0;
if (nflist != null && nflist.Count > 0)
{
nflistCount = nflist.Count;
}
int ncslistCount = 0;
if (ncslist != null && ncslist.Count > 0)
{
ncslistCount = ncslist.Count;
}
temprowindex = nflistCount + ncslistCount;
strprodno = dgvMATChange.Rows[temprowindex].Cells["PRODNO"].Value.ToString();
string pstrprodcno = strprodno;
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
//2.判断成品
//Product statusRuslt = agent.InvokeServiceFunction<Product>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetProductByAssembleCode.ToString(), Code);
if (product.MATERIAL_CODE != pstrprodcno)
{
SetContainerItem(nfindex, false);
Alert("扫描的成品零件号与FIS零件号不符!");
txtCode.Text = "";
txtCode.Focus();
return;
}
DataTable tblbarcode = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_ExistBarcode.ToString(), BarcodeTime, Code);
if (tblbarcode.Rows.Count == 0)
{
for (; temprowindex < dgvMATChange.Rows.Count; temprowindex++)
{
//主键
strFiskey = dgvMATChange.Rows[temprowindex].Cells["PID"].Value.ToString();
//大众顺序号
strvwseq = dgvMATChange.Rows[temprowindex].Cells["REQUESTID"].Value.ToString();
//零件号
strprodno = dgvMATChange.Rows[temprowindex].Cells["PRODNO"].Value.ToString();
//总成描述
strcarsetdesc_cn = dgvMATChange.Rows[temprowindex].Cells["CARSETDESC_CN"].Value.ToString();
//上线时间
strcp5a = dgvMATChange.Rows[temprowindex].Cells["CP5A"].Value.ToString();
//车型
strlineno = dgvMATChange.Rows[temprowindex].Cells["LINENO"].Value.ToString();
//车身号
strkin = dgvMATChange.Rows[temprowindex].Cells["KIN"].Value.ToString();
//底盘号
strvin = dgvMATChange.Rows[temprowindex].Cells["VIN"].Value.ToString();
//工作中心
WORKCENTER_CODE = dgvMATChange.Rows[temprowindex].Cells[dgvWorkcenter.Name].Value.ToString();
//扫描状态
strscanstat = dgvMATChange.Rows[temprowindex].Cells[clscanstate.Name].Value.ToString();
dgvrowindex = temprowindex;
if (strscanstat == "0")
{
strprodno = strprodno.ToString().Trim();
pstrprodcno = pstrprodcno.ToString().Trim();
//if (strprodno == pstrprodcno)
if (pstrprodcno.ToUpper().Replace(".", "").Contains(strprodno.ToUpper().Replace(".", "")))
{
this.dgvMATChange.Rows[temprowindex].DefaultCellStyle.BackColor = Color.White;
dgvMATChange.Rows[temprowindex].Cells[clscanstate.Name].Value = "1";
break;
}
else
{
SetContainerItem(nfindex, false);
Alert("条码错误:条码的零件号与FIS队列零件号不符合。");
break;
}
}
else
{
SetContainerItem(nfindex, false);
Alert("条码错误:条码已扫描或车型不符合。");
break;
}
}
}
else
{
Alert("扫描条码重复,请重新扫描。");
}
SetContainerItem(nfindex, true);
CreateNFPaste(Code,product);
if (dgvMATChange.RowCount > 0)
{
dgvMATChange.FirstDisplayedScrollingRowIndex = nfindex - nfindex % 4;
}
lberror.Text = "";
}
#endregion
#region 扫描条码时触发事件
///// <summary>
///// 扫描条码时触发事件
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param> 崔法宝20170906
private void txtCode_KeyDown(object sender, KeyEventArgs e)
{
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
string inputstring = "";
try
{
if (e.KeyCode != Keys.Enter)
{
return;
}
inputstring = txtCode.Text.ToUpper();
this.lberror.Text = null;
#region 使用登录码快速切换用户
//使用登录码快速切换用户
if (System.Text.RegularExpressions.Regex.IsMatch(txtCode.Text, "^<\\w+::\\w+>$"))
{
var ret = ClientContext.CodeLogin(txtCode.Text);
if (string.Equals(ret, "登录成功!"))
{
ClientContext.SetUserAuth(this);
}
lberror.Text = ret;
ArragetxtCode();
return;
}
if (System.Text.RegularExpressions.Regex.IsMatch(txtCode.Text.ToUpper(), "^>CMD:\\w+$"))//扫描输入为指令码
{
ExcuteCMDCode();
txtCode.Text = "";
txtCode.Focus();
return;
}
_CMDConfirm = "";
#endregion
#region 原校验
string PastNOConfirmEnable = QMAPP.WinForm.Common.LocalSetting.Settings["PastNOConfirmEnable", "0"];
if (System.Text.RegularExpressions.Regex.IsMatch(txtCode.Text.ToUpper(), "^" + WORKCENTER_CODE + "\\w+$"))//扫描输入为贴车单号
{
if (string.Equals("1", PastNOConfirmEnable)) //贴车单确认功能开启
{
GetLastPastCard();
if (string.Equals(txtCode.Text.ToUpper(), lblLastPastNO.Text.ToUpper()))
{
lberror.Text = "前车贴车单号确认完成!";
SetPastNOConfirm(1);
ArragetxtCode();
return;
}
else
{
lberror.Text = "前车贴车单号确认失败!";
SetPastNOConfirm(2);
ArragetxtCode();
return;
}
}
else
{
lberror.Text = "贴车单号确认功能未开启,无需扫描贴车单号!";
SetPastNOConfirm(0);
ArragetxtCode();
return;
}
}
if (string.Equals("1", PastNOConfirmEnable)) //贴车单确认功能开启
{
if (!pbPastNoConfirmed.Enabled)
{
Alert("请先扫描前车贴车单号进行贴车单确认!");
ArragetxtCode();
return;
}
}
#endregion
#region fis区是否有记录
if (dgvMATChange.Rows.Count == 0)
{
Alert("FIS区域没有数据,请获取数据后再扫描!");
ArragetxtCode();
return;
}
#endregion
#region 一号位校验是否扫描校验
//2016-01-07 增加1号位校验
if (this.dgvNF.Rows.Count == 0) //第一个码必须先扫描1号位
{
string placeCode = txtCode.Text.Trim();
if (placeCode.Equals(System.Configuration.ConfigurationManager.AppSettings["PlaceFirstPositionCode"].ToString()))
{
this.placeFirstPosition = placeCode;
this.placeFirstPositionTime = DateTime.Now;
this.txtCode.Text = "";
//处理条码扫描文本框
ArragetxtCode();
return;
}
}
#endregion
#region 一号位时间校验
if (this.dgvNF.Rows.Count == 0 && !string.IsNullOrEmpty(this.placeFirstPosition))//超时判断
{
double timeOutSecond = 0;
//获取超时时间设定值
//DataTable dtTimeOut = new BllTimeOutSet().GetList();
DataTable dtTimeOut = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetTimeOutSet.ToString());
if (dtTimeOut.Rows.Count > 0)
{
timeOutSecond = Convert.ToDouble(dtTimeOut.Rows[0]["TIMEOUT_VALUE"].ToString());
}
//获取超时时间设定值
if (timeOutSecond > 0)
{
TimeSpan ts = DateTime.Now - this.placeFirstPositionTime;
if (ts.TotalSeconds > timeOutSecond)
{
this.placeFirstPosition = "";
this.txtCode.Text = "";
this.placeFirstPositionTime = DateTime.MinValue;
lberror.Text = "扫描本体件超时,请重新扫描1号位!";
//处理条码扫描文本框
ArragetxtCode();
return;
}
}
}
#endregion
#region 请先扫描1号位
if (string.IsNullOrEmpty(this.placeFirstPosition))
{
this.placeFirstPosition = "";
this.txtCode.Text = "";
lberror.Text = "请先扫描1号位!";
return;
}
#endregion
#region FIS区域数据全部扫描完成,请获取数据后再扫描
if (dgvNF.Rows.Count >= dgvMATChange.Rows.Count)
{
Alert("FIS区域数据全部扫描完成,请获取数据后再扫描!");
ArragetxtCode();
return;
}
#endregion
#region 长度校验
//string pp = System.Configuration.ConfigurationManager.AppSettings["UpperBarcodeLen"].ToString();
Int32 ul = int.Parse(System.Configuration.ConfigurationManager.AppSettings["UpperBarcodeLen"].ToString());
Int32 ll = int.Parse(System.Configuration.ConfigurationManager.AppSettings["LowerBarcodeLen"].ToString());
if (txtCode.Text.Length <= ll || txtCode.Text.Length >= ul)
{
Alert("条码错误:条码长度不符合要求(" + ll.ToString() + "-" + ul.ToString() + ")。");
ArragetxtCode();
return;
}
#endregion
#region 校验位计算
if (txtCode.Text.StartsWith("052"))
{
string codepart = txtCode.Text.Substring(0, txtCode.Text.Length - 1).ToUpper();
string checksum = txtCode.Text.Substring(txtCode.Text.Length-1,1).ToUpper();
if (!string.Equals(checksum, CalculateChecksum(codepart)))
{
Alert("条码错误:总成条码校验位错误!");
ArragetxtCode();
return;
}
}
#endregion
#region 判断扫描条形码是否存在 获取扫描条码
string Code = txtCode.Text.Trim().ToUpper();
#region 校验是否有重复的扫过的条码
if (dgvNF.Rows.Count > 0)
{
for (var i = 0; i < dgvNF.Rows.Count; i++)
{
if (dgvNF.Rows[i].Cells[CODE_NF.Name].Value.ToString().ToUpper() == Code)
{
SetContainerItem(nfindex, false);
Alert("该条码已扫描!");
txtCode.Text = "";
txtCode.Focus();
return;
}
}
}
#endregion
//规则
bool signal = false;
string outSourceProduct = "";
foreach (var rule in _barcodeRules)
{
if (System.Text.RegularExpressions.Regex.IsMatch(Code, rule.REGEX))
{
signal = true;
ProMaterial = rule.MATERIAL_CODE;
outSourceProduct = rule.DATA_TYPE;
if (rule.REMARK == "NFPD")
{
Alert("该产品为NF产品,请扫描下护板条码。");
ArragetxtCode();
return;
}
}
}
if (signal == false)
{
//规则表里没有则去数据库里查找是否存在(VW371 bc316产品)
if (System.Text.RegularExpressions.Regex.IsMatch(Code, "^DP\\w+(-\\w+)?-DF[LR][FR]\\w+$"))//扫描输入为门板计划标签
{
//从计划标签中截取产品码
Code = Code.Substring(Code.LastIndexOf('-') + 1);
}
#region 去数据库查询相关产品信息,外来零件忽略此步骤
9 months ago
Product product = null;
if (System.Text.RegularExpressions.Regex.IsMatch(Code, "^BCP"))
{
//BCP开头的是BC316-MP4的包覆件
9 months ago
9 months ago
}
else
{
product = agent.InvokeServiceFunction<Product>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetProductByAssembleCode.ToString(), Code);
}
if (product != null)
{
Code = string.IsNullOrEmpty(product.MAINCODE) ? product.PRODUCTCODE : product.MAINCODE;
}
else
{
9 months ago
product = agent.InvokeServiceFunction<Product>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetProductByAssembleCodeMP4.ToString(), Code);
if (product != null)
{
Code = string.IsNullOrEmpty(product.MAINCODE) ? product.PRODUCTCODE : product.MAINCODE;
}
else
{
Alert("未查询到该产品零件信息:" + Code + "。");
//清理文本框
ArragetxtCode();
return;
}
}
#region 校验是否有重复的扫过的条码
//------------------校验是否有重复的扫过的条码------
if (dgvNF.Rows.Count > 0 && product != null)
{
for (var i = 0; i < dgvNF.Rows.Count; i++)
{
if (dgvNF.Rows[i].Cells[CODE_NF.Name].Value.ToString() == Code)
{
SetContainerItem(nfindex, false);
Alert("该条码已扫描!");
txtCode.Text = "";
txtCode.Focus();
return;
}
}
}
//-------------------------End-----------
#endregion
//int ExitResult = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetExitsCode.ToString(), Code);
if ((product == null || string.IsNullOrEmpty(product.PID)))
{
SetContainerItem(nfindex, false);
Alert("扫描的产品条码不存在,请重新扫描!");
txtCode.Text = "";
txtCode.Focus();
return;
}
//Object statusRuslt = agent.InvokeServiceFunction<object>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetExitsStatus.ToString(), Code);
#region 2.判断成品
if (product.STATUS != "0")
{
SetContainerItem(nfindex, false);
Alert("扫描的不是合格成品,不能进行发运!");
txtCode.Text = "";
txtCode.Focus();
return;
}
if (product.OUTFLAG != "0")
{
SetContainerItem(nfindex, false);
Alert("扫描产品已出库,不能进行发运操作!");
txtCode.Text = "";
txtCode.Focus();
return;
}
var StorageTimeLimit=0d;
double.TryParse(QMAPP.WinForm.Common.LocalSetting.Settings["StorageTimeLimit", "24"],out StorageTimeLimit);
if ((DateTime.Now - product.CREATEDATE).TotalHours < StorageTimeLimit)
{
SetContainerItem(nfindex, false);
Alert("扫描产品下线时间不足"+StorageTimeLimit+"小时!,不能进行发运操作!");
txtCode.Text = "";
txtCode.Focus();
return;
}
9 months ago
var mcresult = agent.InvokeServiceFunction<DataResult<MaterialClass>>("MaterialClassBLL_Get", new MaterialClass { MATERIAL_TYPE_CODE = product.MATERIAL_TYPE });
9 months ago
if (System.Text.RegularExpressions.Regex.IsMatch(product.PRODUCTCODE, "^BCP"))
{
mcresult = agent.InvokeServiceFunction<DataResult<MaterialClass>>("MaterialClassBLL_GetMP4", new MaterialClass { MATERIAL_TYPE_CODE = product.MATERIAL_TYPE });
}
var mc = mcresult.IsSuccess ? mcresult.Result : new MaterialClass { };
if (!string.Equals(mc.MATERIAL_ATTRIBUTE, "2"))
{
SetContainerItem(nfindex, false);
Alert("扫描产品不是总成件!,不能进行发运操作!");
txtCode.Text = "";
txtCode.Focus();
return;
}
FJC.Entity.ProductIn.ProductIn inrecord = agent.InvokeServiceFunction<FJC.Entity.ProductIn.ProductIn>("ProductInBLL_GetInRecord", Code);
9 months ago
if (System.Text.RegularExpressions.Regex.IsMatch(product.PRODUCTCODE, "^BCP"))
{
inrecord = agent.InvokeServiceFunction<FJC.Entity.ProductIn.ProductIn>("ProductInBLL_GetInRecordmp4", Code);
}
if (inrecord != null)
{
SetContainerItem(nfindex, false);
Alert("此产品为退返件,请更换总成标签后再发运!");
txtCode.Text = "";
txtCode.Focus();
return;
}
#endregion
#region 4.与FIS数据匹配
//4.与FIS数据匹配
FISDataCompare(Code, product);
#endregion
#endregion
}
#endregion
#region 底盘号间隔校验
//2016-10-31 闫永刚
int scanSum = dgvNF.Rows.Count;
int lastvinNumber = 0;
int vinNumber = 0;
if (scanSum > 0)
{
//lastvinNumber = Convert.ToInt32(dgvMATChange.Rows[scanSum - 1].Cells["VIN"].Value.ToString().Substring(10, 7));
//vinNumber = Convert.ToInt32(dgvMATChange.Rows[scanSum].Cells["VIN"].Value.ToString().Substring(10, 7));
lastvinNumber = Convert.ToInt32(dgvMATChange.Rows[scanSum - 1].Cells["REQUESTID"].Value.ToString());
vinNumber = Convert.ToInt32(dgvMATChange.Rows[scanSum].Cells["REQUESTID"].Value.ToString());
}
if ((vinNumber - lastvinNumber) > 1)
{
var dresult = MessageBox.Show("出现顺序号间隔,是否继续发货?", "提示", MessageBoxButtons.YesNo);
if (dresult == DialogResult.No)
{
ArragetxtCode();
return;
}
}
#endregion
#region 判断当前扫描过的数据集合中是否有相同条码
//判断当前扫描过的数据集合中是否有相同条码
if (outSourceProduct == "OP")
{
//CheckDataSet(Code) &&
////判断数据库中是否有相同的条码
//if (Code.Substring(0, 2) != "NF")
//{
// CheckDataBase(Code);
//}
//else //2016-07-29 董阳 新增其他校验规则校验
//{
// if (CheckRule(Code))
// {
// CreateNFPaste();
// }
//}
CheckDataBase(Code);
}
#endregion
#region 处理条码扫描文本框
ArragetxtCode();
#endregion
txtCode.Text = "";
txtCode.Focus();
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
lberror.Text = ex.Message;
}
finally
{
if (!string.IsNullOrWhiteSpace(inputstring))
WriteLog.WriteShipmentLog(string.Format("{0}\t{1}\t{2}", DateTime.Now, inputstring, lberror.Text));
dgvMATChange.ClearSelection();
}
}
#endregion
#region 执行CMD码
/// <summary>
/// 执行CMD码
/// </summary>
private void ExcuteCMDCode()
{
string cmd = txtCode.Text.Trim().Split(':')[1];
switch (cmd)
{
case "CLOSECART"://强制提交
{
CloseCart(cmd);
break;
}
case "RESETCART"://重扫器具
{
ResetCart();
break;
}
case "FORCESCAN"://强制扫描
{
ForceScan(cmd);
break;
}
default:
{
Alert("未知指令!",false);
_CMDConfirm = "";
break;
}
}
}
#endregion
#region 强制扫描 将下一次扫描的物料验证
/// <summary>
/// 强制扫描 将下一次扫描的物料验证
/// </summary>
/// <param name="cmd"></param>
private void ForceScan(string cmd)
{
if (_CMDConfirm == cmd)//指令二次确认
{
//CreatePaste();
lberror.Text = "";
_CMDConfirm = "";
}
else
{
Alert("确定要提交此贴车单?请再次扫描指令码确认。");
_CMDConfirm = cmd;
}
}
#endregion
#region 手动提交贴车单-在器具未满情况下使用
/// <summary>
/// 手动提交贴车单-在器具未满情况下使用
/// </summary>
/// <param name="cmd"></param>
private void CloseCart(string cmd)
{
if (!btnCloseCart.Enabled)
{
Alert("您没有进行此操作的权限!", false);
_CMDConfirm = "";
return;
}
if (nflist == null)
{
Alert("需要至少扫描一件产品才能提交贴车单!",false);
_CMDConfirm = "";
return;
}
if (_CMDConfirm == cmd)//指令二次确认
{
lberror.Text = "";
_CMDConfirm = "";
CreatePaste();
}
else
{
Alert("确定要提交此贴车单?请再次扫描指令码确认。",false);
_CMDConfirm = cmd;
}
}
#endregion
#region 根据条码标识查询零件信息(无用)
/// <summary>
/// 根据条码标识查询零件信息
/// </summary>
/// <param name="strbarcode"></param>
private DataTable GetSparepartsinfo(string strbarcode)
{
//根据条码前3位去零件表查询条码标识查找零件号。包括的数据有052、NF1、NF2、NF3、NF4。车型,指NF或NCS。
// BllFisOrder bllFisOrder = new BllFisOrder();
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
//----------2015-02-10 王丹丹 修改(条码规则变更,所以查询零件号的条件也变更)----------------
if (strbarcode.Substring(0, 3) != "052")
{
//如果前3位不是"052",截取条码前3位进行查询
//return bllFisOrder.GetSparepartsinfo(strbarcode.Substring(0, 3));
return agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetSparepartsinfo.ToString(), strbarcode.Substring(0, 3));
}
else
{
//如果前3位是"052",截取条码前8位进行查询
//return bllFisOrder.GetSparepartsinfo(strbarcode.Substring(0, 8));
return agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetSparepartsinfo.ToString(), strbarcode.Substring(0, 8));
}
//--------------------------------------------------------------------------------------------
}
#endregion
#region 判断数据库中是否有相同的条码
//条码标识
string barcodeidentification = "";
/// <summary>
/// 判断数据库中是否有相同的条码
/// </summary>
/// <param name="strbarcode">扫描条码</param>
private void CheckDataBase(string strbarcode)
{
barcodeidentification = "";
//特殊条码,当丢失条码或者条码损坏时,扫描一个特殊条码
string specialbarcode = "";
// BllFisOrder bllFisOrder = new BllFisOrder();
//根据条码标识获取零件信息
//DataTable tbl = GetSparepartsinfo(strbarcode);
//if (tbl.Rows.Count > 0)
//{
// barcodeidentification = tbl.Rows[0]["BARCODEIDENTIFICATION"].ToString();
//}
//else
//{
// PlaySound.PlaySounds.Play(@errorSoundPath);
// lberror.Text = "条码错误:无法根据条码识别零件号";
//}
//if (getTeShuBarcode(barcodeidentification) == strbarcode)
//{
// specialbarcode = "SPECIALBARCODE";
//}
//DataTable tblbarcode = bllFisOrder.ExistBarcode(BarcodeTime, strbarcode);
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tblbarcode = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_ExistBarcode.ToString(), BarcodeTime, strbarcode);
if (tblbarcode.Rows.Count == 0 || specialbarcode == "SPECIALBARCODE")
{
//d.AddDays(-40)+"00:00:00";
#region "校验:根据条码获取零件号"
//if (tbl.Rows.Count > 0)
//{
//零件号
//string strkhprodno = tbl.Rows[0]["CUSTOMERSPAREPARTS"].ToString();
string strkhprodno = ProMaterial;
//01,02
//string templineno = tbl.Rows[0]["CODENAME"].ToString();
string templineno = "02";
//车型
//string vehicletype = tbl.Rows[0][1].ToString();
GetCruentFisData(strbarcode, strkhprodno, templineno, nfpastecard, ncspastecard);
//判断当前FIS队列中的零件号,是否等于条码标识获取的零件号。
//if (strkhprodno == strprodno)
if (strkhprodno.ToUpper().Replace(".", "").Contains(strprodno.ToUpper().Replace(".", "")))
{
SetContainerItem(nfindex, true);
CreateNFPaste(strbarcode, new Product());
}
else
{
Alert("条码错误:扫描的条码与FIS中的零件不符。");
}
//}
//else
//{
// PlaySound.PlaySounds.Play(@errorSoundPath);
// lberror.Text = "条码错误:无法根据条码识别零件号。";
//}
#endregion
}
else
{
Alert("扫描条码重复,请重新扫描。");
}
}
#endregion
#region 光标聚焦
/// <summary>
/// 光标聚焦
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtCode_Leave(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtCode.Text))
{
txtCode.Focus();
}
}
#endregion
#region 获取FIS发货数据的当前行
/// <summary>
/// 获取FIS发货数据的当前行
/// </summary>
private void GetCruentFisData(string pstrbarcode, string pstrprodcno, string ptemplineno, EPasteCard pnfpascard, EPasteCard pncspascard)
{
#region
if (dgvMATChange.Rows.Count != 0)
{
//if (ptemplineno == "NCS")
//{
// if (ncslist == null)
// {
// DGVCurrontRow(pstrprodcno, ptemplineno, 0);
// }
// else
// {
// int rowcount = ncslist.Count;
// int temprowindex = ncslist[rowcount - 1].DGVROWINDEX + 1;
// DGVCurrontRow(pstrprodcno, ptemplineno, temprowindex);
// }
//}
//if (ptemplineno == "NF")
//{
// if (nflist == null)
// {
// DGVCurrontRow(pstrprodcno, ptemplineno, 0);
// }
// else
// {
// int rowcount = nflist.Count;
// int temprowindex = nflist[rowcount - 1].DGVROWINDEX + 1;
// DGVCurrontRow(pstrprodcno, ptemplineno, temprowindex);
// }
//}
if (nflist == null)
{
DGVCurrontRow(pstrprodcno, ptemplineno, 0);
}
else
{
int rowcount = nflist.Count;
int temprowindex = nflist[rowcount - 1].DGVROWINDEX + 1;
DGVCurrontRow(pstrprodcno, ptemplineno, temprowindex);
}
}
#endregion
}
#endregion
#region 根据零件号,车型获取当前要发货的FIS信息(外来件)
/// <summary>
/// 根据零件号,车型获取当前要发货的FIS信息
/// </summary>
/// <param name="pstrprodcno"></param>
/// <param name="ptemplineno"></param>
/// <param name="rowindex"></param>
private void DGVCurrontRow(string pstrprodcno, string ptemplineno, int rowindex)
{
#region
for (; rowindex < dgvMATChange.Rows.Count; rowindex++)
{
//主键
//strFiskey = dgvMATChange.Rows[rowindex].Cells["clFiskey"].Value.ToString();
strFiskey = dgvMATChange.Rows[rowindex].Cells["PID"].Value.ToString();
//大众顺序号
strvwseq = dgvMATChange.Rows[rowindex].Cells["REQUESTID"].Value.ToString();
//零件号
strprodno = dgvMATChange.Rows[rowindex].Cells["PRODNO"].Value.ToString();
//总成描述
strcarsetdesc_cn = dgvMATChange.Rows[rowindex].Cells["CARSETDESC_CN"].Value.ToString();
//上线时间
strcp5a = dgvMATChange.Rows[rowindex].Cells["CP5A"].Value.ToString();
//车型
strlineno = dgvMATChange.Rows[rowindex].Cells["LINENO"].Value.ToString();
//车身号
strkin = dgvMATChange.Rows[rowindex].Cells["KIN"].Value.ToString();
//底盘号
strvin = dgvMATChange.Rows[rowindex].Cells["VIN"].Value.ToString();
//扫描状态
strscanstat = dgvMATChange.Rows[rowindex].Cells[clscanstate.Name].Value.ToString();
dgvrowindex = rowindex;
if (strscanstat == "0" )//&& strlineno == ptemplineno
{
strprodno = strprodno.ToString().Trim();
pstrprodcno = pstrprodcno.ToString().Trim();
//if (strprodno == pstrprodcno)
if (pstrprodcno.ToUpper().Replace(".", "").Contains(strprodno.ToUpper().Replace(".", "")))
{
//2016-01-21 wangqingnan 如果行变色则不重新刷颜色
//DataGridViewCellStyle ds = new DataGridViewCellStyle();
//ds.BackColor = Color.White;
//this.dgvMATChange.Rows[rowindex].DefaultCellStyle = ds;
this.dgvMATChange.Rows[rowindex].DefaultCellStyle.BackColor = Color.White;
//2016-01-21 wangqingnan 如果行变色则不重新刷颜色
dgvMATChange.Rows[rowindex].Cells[clscanstate.Name].Value = "1";
break;
}
else
{
Alert("条码错误:条码的零件号与FIS队列零件号不符合。");
break;
}
}
else
{
Alert("条码错误:条码已扫描或车型不符合。");
break;
}
}
#endregion
}
#endregion
#region 创建NF的贴车单以及明细(vw371)
EPasteCard nfpastecard = null;
/// <summary>
/// 创建NF的贴车单以及明细
/// </summary>
private void CreateNFPaste(string barcode,Product product)
{
#region
if (nfindex == 0)
{
nflist = new List<EPasteDetailsCard>();
nfpastcardkey = Guid.NewGuid().ToString();
nfpastecard = new EPasteCard();
nfpastecard.DetailsCardlist = new List<EPasteDetailsCard>();
nfpastecard.PASTE_CARD_KEY = nfpastcardkey;
nfpastecard.PASTECARDNO = "";
nfpastecard.PRODUCTIONNAME = pFisType;
nfpastecard.PASTECARDDATE = DateTime.Now.ToString();
nfpastecard.OPERATOR = UserBuffer.UserCode;
nfpastecard.CREATETIME = DateTime.Now.ToString();
nfpastecard.PLANTNAME = WORKCENTER_CODE.ToString();
}
EPasteDetailsCard pastdetail = new EPasteDetailsCard();
pastdetail.PASTEDETAILED_CARD_KEY = Guid.NewGuid().ToString();
pastdetail.FIS_KEY = strFiskey;
pastdetail.PASTE_CARD_KEY = nfpastcardkey;
//为扫描记录关联产品主键 张鹏 2018-3-8
pastdetail.SANBARCODE = barcode;// txtCode.Text.ToString();
pastdetail.PRODUCT_PID = product.PID;
pastdetail.SCANDATE = DateTime.Now.ToString();
pastdetail.PRODNO = strprodno;
pastdetail.CARSETDESC_CN = strcarsetdesc_cn;
pastdetail.VIN = strvin;
pastdetail.VWSEQ = strvwseq;
pastdetail.CP5A = strcp5a;
pastdetail.KIN = strkin;
pastdetail.DGVROWINDEX = dgvrowindex;
pastdetail.LINENO = strlineno;
nfpastecard.DetailsCardlist.Add(pastdetail);
nflist.Add(pastdetail);
dgvNF.DataMember = null;
dgvNF.DataSource = nflist;
strprodno = "";
nfindex++;
//int setdefaultSum = Convert.ToInt32(QM.Config.CustomConfig.GetItem("ShowDataCount"));
int setdefaultSum = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["ShowDataCount",""]);
if (nfindex == setdefaultSum)
{
EFailLog log = new EFailLog();
log.TID = Guid.NewGuid().ToString();
log.FCT_DATE = DateTime.Now;
log.FCT_NO = nfpastecard.PASTE_CARD_KEY;
log.FCT_OPER = UserBuffer.UserCode;
log.FCT_OPERTYPE = 1;
log.FCT_REASON = "NF贴车单自动打印操作";
nfpastecard.DetailsCardlist = nflist;
nfpastecard.FailLog = log;
nfindex = 0;
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetDaspssteCarIndexByPlanName.ToString(), nfpastecard.PLANTNAME.ToString());
if (tbl.Rows.Count == 0)
{
nfpastecard.PASTECARDNO = WORKCENTER_CODE + DateTime.Now.ToString("yyyyMMdd") + "0001";
int delResult = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_InsertDaspssteCarIndexByPlanName.ToString(), nfpastecard);
}
else
{
foreach (DataRow dr in tbl.Rows)
{
string PASTECARDNO = dr["PASTECARDNO"].ToString();
string PLANTNAME = dr["PLANTNAME"].ToString();
if ((Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length < 4)
{
int num = 4 - (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length;
string value = (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
string sumValue = "";
for (var i = 0; i < num; i++)
{
sumValue = sumValue + "0";
}
if (PASTECARDNO.Substring(PLANTNAME.Length, PASTECARDNO.Length - PLANTNAME.Length - 4).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(PLANTNAME.Length, PASTECARDNO.Length - PLANTNAME.Length - 4) + sumValue + value;
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
else
{
if (PASTECARDNO.Substring(PLANTNAME.Length, PASTECARDNO.Length - PLANTNAME.Length - 4).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(PLANTNAME.Length, PASTECARDNO.Length - PLANTNAME.Length - 4) + (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
nfpastecard.PASTECARDNO = PLANTNAME + PASTECARDNO;
nfpastecard.OPERATOR = ClientContext.LoginInfo.UserName.ToString();
}
}
int rowindex = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_AddNewPasteCard.ToString(), nfpastecard);
Print();//手动提交打印功能
ClearContainer();
GetInitData();
DGVRemoveRow(nflist, ref ncslist);
dgvNF.DataSource = new List<EPasteDetailsCard>();
nfpastecard = null;
nflist = null;
nfindex = 0;
dgvrowindex = 0;
//computenfncs();
//2016-01-07 增加1号位校验 - 清空1号位
//this.placeFirstPosition = "";
//this.placeFirstPositionTime = DateTime.MinValue;
//2016-01-07 增加1号位校验
GetLastPastCard();
SetPastNOConfirm(0);
}
#endregion
}
#endregion
#region 创建贴车单(不满车提交)
/// <summary>
/// 创建贴车单(不满车提交)
/// </summary>
private void CreatePaste()
{
if (nflist == null)
{
Alert("无数据,请先按FIS顺序扫描产品!",false);
return;
}
EFailLog log = new EFailLog();
log.TID = Guid.NewGuid().ToString();
log.FCT_DATE = DateTime.Now;
log.FCT_NO = nfpastecard.PASTE_CARD_KEY;
log.FCT_OPER = UserBuffer.UserCode;
log.FCT_OPERTYPE = 1;
log.FCT_REASON = "NF贴车单自动打印操作";
nfpastecard.DetailsCardlist = nflist;
nfpastecard.FailLog = log;
nfindex = 0;
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetDaspssteCarIndexByPlanName.ToString(), nfpastecard.PLANTNAME.ToString());
if (tbl.Rows.Count == 0)
{
nfpastecard.PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
int delResult = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_InsertDaspssteCarIndexByPlanName.ToString(), nfpastecard);
}
else
{
foreach (DataRow dr in tbl.Rows)
{
string PASTECARDNO = dr["PASTECARDNO"].ToString();
string PLANTNAME = dr["PLANTNAME"].ToString();
if ((Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length < 4)
{
int num = 4 - (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString().Length;
string value = (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
string sumValue = "";
for (var i = 0; i < num; i++)
{
sumValue = sumValue + "0";
}
string ii = PASTECARDNO.Substring(PLANTNAME.Length, 8).ToString();
if (PASTECARDNO.Substring(PLANTNAME.Length, 8).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PLANTNAME + PASTECARDNO.Substring(PLANTNAME.Length - PLANTNAME.Length, 6) + sumValue + value;
}
else
{
PASTECARDNO = PLANTNAME + DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
else
{
if (PASTECARDNO.Substring(2, PASTECARDNO.Length - 6).ToString() == DateTime.Now.ToString("yyyyMMdd"))
{
PASTECARDNO = PASTECARDNO.Substring(2, PASTECARDNO.Length - 6) + (Convert.ToInt32(PASTECARDNO.Substring(PASTECARDNO.Length - 4, 4)) + 1).ToString();
}
else
{
PASTECARDNO = DateTime.Now.ToString("yyyyMMdd") + "0001";
}
}
nfpastecard.PASTECARDNO = PASTECARDNO;
nfpastecard.OPERATOR = ClientContext.LoginInfo.UserName.ToString();
}
}
int rowindex = agent.InvokeServiceFunction<int>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_AddNewPasteCard.ToString(), nfpastecard);
Print();//手动提交打印功能
ClearContainer();
GetInitData();
DGVRemoveRow(nflist, ref ncslist);
dgvNF.DataSource = new List<EPasteDetailsCard>();
nfpastecard = null;
nflist = null;
nfindex = 0;
dgvrowindex = 0;
GetLastPastCard();
SetPastNOConfirm(0);
}
#endregion
#region 打印功能
/// <summary>
/// 打印功能
/// </summary>
private void Print()
{
int PrintDisable = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["PrintDisable", "1"]);
if (PrintDisable == 1)
{
lberror.Text = "贴车单打印已禁用!";
return;
}
PrintPasteCard prin = new PrintPasteCard();
string strprodtype = "";
if (pFisType == "01")
{
strprodtype = "( 混 )";
}
else if (pFisType == "02")
{
strprodtype = "( 单 )";
}
DataTable dt = new DataTable();
dt.Columns.Add("ROWINDEX");
dt.Columns.Add("VWSEQ");
dt.Columns.Add("VIN");
dt.Columns.Add("PRODNO");
dt.Columns.Add("CARSETDESCCN");
dt.Columns.Add("CP5A");
dt.Columns.Add("PASTECARDNO");
dt.Columns.Add("SCANDATE");
dt.Columns.Add("PRODUCTIONNAME");
dt.Columns.Add("LINENO");
int index = 1;
QMAPP.ServicesAgent.ServiceAgent agent = ClientContext.GetServiceAgent();
//DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetPastecardDeatis.ToString());
DataTable tbl = agent.InvokeServiceFunction<DataTable>(QMAPP.ServicesAgent.FrmPlaceManage.FrmPlaceBLL_GetPascardDetailsByPid.ToString(), nfpastecard.PASTE_CARD_KEY);
//index = Convert.ToInt32(tbl.Rows[0][0].ToString());
for (var i = 0; i < tbl.Rows.Count; i++)
{
DataRow ncsdr = dt.NewRow();
ncsdr["ROWINDEX"] = index.ToString(); ;
ncsdr["VWSEQ"] = tbl.Rows[i]["VWSEQ"].ToString();
ncsdr["VIN"] = tbl.Rows[i]["VIN"].ToString();
ncsdr["PRODNO"] = tbl.Rows[i]["PRODNO"].ToString();
ncsdr["CARSETDESCCN"] = tbl.Rows[i]["CARSETDESC_CN"].ToString();
ncsdr["CP5A"] = tbl.Rows[i]["CP5A"].ToString();
ncsdr["PASTECARDNO"] = tbl.Rows[i]["PASTECARDNO"].ToString();;
ncsdr["SCANDATE"] = DateTime.Now.ToString();
ncsdr["PRODUCTIONNAME"] = strprodtype;
ncsdr["LINENO"] = tbl.Rows[i]["LINENO"].ToString();
dt.Rows.Add(ncsdr);
index++;
}
prin.Print(dt);
//MessageBox.Show("打印成功!");
lberror.Text = "贴车单已打印";
}
#endregion
#region 定时刷新数据
/// <summary>
/// 定时刷新数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timeRefew_Tick(object sender, EventArgs e)
{
//if (dgvNF.Rows.Count == 0)
//{
GetInitData();
//}
}
#endregion
#region 扫描件状态框动作
/// <summary>
///
/// </summary>
public void InitContainer()
{
tpContainer.Controls.Clear();
tpContainer.RowStyles.Clear();
tpContainer.ColumnStyles.Clear();
int defaultNum = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["ShowDataCount", "6"]);
int rowcount = Convert.ToInt32(QMAPP.WinForm.Common.LocalSetting.Settings["RowCount", "2"]);
tpContainer.RowCount = rowcount;
tpContainer.ColumnCount = defaultNum / rowcount + (defaultNum % rowcount > 0 ? 1 : 0);
for (int i = 0; i < tpContainer.RowCount; i++)
{
if (i == 0)
{
tpContainer.RowStyles.Add(new RowStyle(SizeType.Percent, 50));
}
else
{
tpContainer.RowStyles.Add(new RowStyle(SizeType.Percent, 50));
}
}
for (int i = 0; i < tpContainer.ColumnCount; i++)
{
//tpContainer.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, tpContainer.ColumnCount > 8 ? 60 : 90));
tpContainer.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
//Label lblno = new Label();
//lblno.Text = (i + 1).ToString();
//lblno.Font = new Font("微软雅黑", 20, FontStyle.Bold);
//lblno.Dock = DockStyle.Fill;
//lblno.TextAlign = ContentAlignment.MiddleCenter;
//tpContainer.Controls.Add(lblno, i, 0);
for (int j = 0; j < tpContainer.RowCount; j++)
{
Label lblItem = new Label();
lblItem.Text = (i*rowcount+j+ 1).ToString();
lblItem.Font = new Font("微软雅黑", 24, FontStyle.Bold);
lblItem.Dock = DockStyle.Fill;
lblItem.TextAlign = ContentAlignment.MiddleCenter;
tpContainer.Controls.Add(lblItem, i, j);
}
}
//tpContainer.Height = tpContainer.RowCount * (3 + (tpContainer.ColumnCount > 8 ? 60 : 90));
for (int i = 0; i < nfindex; i++)
{
SetContainerItem(i, true);
}
}
/// <summary>
///
/// </summary>
/// <param name="itemindex"></param>
/// <param name="result"></param>
public void SetContainerItem(int itemindex, bool result)
{
var columnindex = itemindex / (tpContainer.RowCount);
var rowindex = itemindex % (tpContainer.RowCount) ;
var label = tpContainer.GetControlFromPosition(columnindex, rowindex) as Label;
if (label != null)
{
label.BackColor = result ? Color.Lime : Color.Red;
}
}
/// <summary>
///
/// </summary>
public void ClearContainer()
{
foreach (var ctrl in tpContainer.Controls)
{
var label = ctrl as Label;
if (label != null)
{
label.BackColor = tpContainer.BackColor;
}
}
}
#endregion
#region 重新扫描
/// <summary>
/// 重新扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnResetCart_Click(object sender, EventArgs e)
{
ResetCart();
}
private void ResetCart()
{
if (!btnResetCart.Enabled)
{
lberror.Text = "您无权执行此操作!";
}
nflist = null;
nfindex = 0;
ClearContainer();
GetInitData();
//DGVRemoveRow(nflist, ref ncslist);
dgvNF.DataSource = new List<EPasteDetailsCard>();
nfpastecard = null;
dgvrowindex = 0;
if (dgvMATChange.RowCount > 0)
{
dgvMATChange.FirstDisplayedScrollingRowIndex = nfindex - nfindex % 4;
}
}
#endregion
#region 混线单选按钮
/// <summary>
/// 混线单选按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
int signal = 0;
private void rb_hx_CheckedChanged(object sender, EventArgs e)
{
if (dgvNF.Rows.Count > 0)
{
if (rb_hx.Checked == true && signal == 0)
{
signal++;
rb_dx.Checked = true;
}
else if (rb_dx.Checked == true && signal == 0)
{
signal++;
rb_hx.Checked = true;
}
lberror.Text = "已扫描数据区不为空,重置或者扫描整车后才能切换生产线!";
signal = 0;
return;
}
lberror.Text = "";
QMAPP.WinForm.Common.LocalSetting.Settings["FlashProCode"] = rb_hx.Checked ? "01" : "02";
if (this.rb_hx.Checked == true)
{
//混
pFisType = "01";
WORKCENTER_CODE = "IPFY01";
}
else
{ //单
pFisType = "02";
WORKCENTER_CODE = "IPFY02";
}
GetInitData();
}
#endregion
#region 工作中心设置按钮
/// <summary>
/// 工作中心设置按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLineSetting_Click(object sender, EventArgs e)
{
frmLineSetting frm = new frmLineSetting();
frm.Owner = this;
frm.ShowDialog();
txtCode.Focus();
}
#endregion
#region 贴车单顺序校正按钮
/// <summary>
/// 贴车单顺序校正按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnResetIndex_Click(object sender, EventArgs e)
{
ResetSendIndexForm form = new ResetSendIndexForm();
form.ShowDialog();
txtCode.Focus();
}
#endregion
#region 设置容器容量
/// <summary>
/// 设置容器容量
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSetDatagroupType_Click(object sender, EventArgs e)
{
DefaultDataSetNum window = new DefaultDataSetNum();
window.Owner = this;
window.Show();
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmPlace_Activated(object sender, EventArgs e)
{
SetRowColor();
}
/// <summary>
///
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string getTeShuBarcode(String str)
{
return str + " 4XR#" + DateTime.Now.ToString("MMddHH") + "#";
}
#region 不满车打印贴车单
/// <summary>
/// 不满车打印贴车单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCloseCart_Click(object sender, EventArgs e)
{
lberror.Text = "";
_CMDConfirm = "";
CreatePaste();
}
#endregion
public static string CalculateChecksum(string barcode)
{
string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
int sum = 0;
foreach (var c in barcode)
{
sum += chars.IndexOf(c);
}
int rem = sum % chars.Length;
return chars[rem].ToString();
}
}
}