您的位置:首页 > 其它

WCF广州本田整车销售系统技术解析(三) 订单新增功能实现分析

2015-05-31 20:57 603 查看
订单新增功能实现分析
订单新增功能主要是录入一条新的订单数据以及订单的明细。订单编号、订单号、发票号自动生成。在司机姓名改变的时候联系电话会随着司机姓名改变而改变,打开货物列表,选择需要哪些车辆双击就可以添加到订单明细列表,填写其它的订单信息之后 ,点击保存就可以完成订单的新增操作!

新增订单如图(图7)所示



(图7)

从界面上可以看到我们这里用到的控件有

控件名称
说明
日期控件(DateTimePicker)

控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。

下拉框(ComboBox)

文本(TextBox)

按钮(Button)

表格(DataGridView)

菜单控件(toolStrip)

表与关系如图(图8)所示



(图8)

表1:FreightInvoicesList(货运单表)

PrimaryKey(s): FreightInvoicesID

Field

Type

Nulls?

说明

FreightInvoicesID

int - Identity

No

货运单ID

FreightInvoicesNumber

nchar (60)

Yes

货运单编号

IssueCarStaffID

int

Yes

发车员ID

ForWardingdate

datetime

Yes

发运日期

TransportCompanyID

int

Yes

承运方ID

TrafficCarID

int

Yes

运输车ID

TrafficDriverID

int

Yes

运输司机ID

PassManageerID

int

Yes

经办人ID

Sum

decimal (18, 3)

Yes

总价

PlanHandCarDate

datetime

Yes

计划交车日期

OrderNumber

nchar (20)

Yes

订单号

InvoiceNumber

nchar (20)

Yes

发票号

Remark

nchar (100)

Yes

备注

WhetherFinishConnectCar

bit

Yes

是否完成接车

WhetherExamineaAndVerify

bit

Yes

审核否

WhetherConnectCar

bit

Yes

是否接车

表2:FreightInvoicesDetailList(货运单明细表)

PrimaryKey(s): FreightInvoicesDetailID

Field

Type

Nulls?

说明

FreightInvoicesDetailID

int - Identity

No

货运单明细ID

FreightInvoicesID

int

Yes

货运单ID

CommodityCarID

int

Yes

货物车辆ID

Quantity

int

Yes

数量

WhetherStraightMelt

bit

Yes

直销车否

表3:CarList(车辆表)

Primary Key(s): CarID

Field

Type

Nulls?

说明

CarID

int - Identity

No

车辆ID

FreightInvoicesDetailID

int

Yes

货运单明细ID

CarTypeID

int

Yes

车辆类型ID

CarFrameNumber

nchar (60)

Yes

车架号

CarEngineNumber

nchar (60)

Yes

发动机号

CarKindID

int

Yes

车种ID

CarMondelID

int

Yes

车型ID

CarBodyColorID

int

Yes

车身颜色ID

CarUnderOrnamentsColorID

int

Yes

内饰颜色ID

CarTransmissionID

int

Yes

变速箱ID

CarKeyNumber

nchar (20)

Yes

钥匙号

CarStockPrice

decimal (18, 3)

Yes

进货价格

ProductionManufacturersID

int

Yes

生产厂家ID

CarPDIWhetherDetection

bit

Yes

PDI检查否

CarStatusID

int

Yes

车辆状态ID

OldCarID

int

Yes

原车辆ID

OutSurveyCommodityCarID

int

Yes

外调商品车ID

WhetherSchedule

bit

Yes

是否预定

ThoughtCarPDIWhetherDetection

bit

Yes

通过PDI检查否

WhetherStraightMelt

bit

Yes

直销车否

WhetherConnectCar

bit

Yes

是否接车

一、订单编号、订单号、发票号自动生成实现

订单编号、订单号、发票号自动生成如图(图9)



(图9)

1、数据库的存储过程

--查询最大单据数
if(@Type='frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu')
begin
BEGINTRAN
UPDATEMaxNumberStatisticsList --修该MaxNumberStatisticsList
SETNumbers=Numbers+1  --设置Numbers+1
SELECTNumbers    --把修改后的Numbers查询出来
FROMMaxNumberStatisticsList   --从MaxNumberStatisticsList查询
COMMITTRAN
End


2、逻辑层(BLL)


#region查询最大单号数
[OperationContract]//行为标签,WCF配置
publicDataSet frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu()
{
SqlParameter[] mySqlParameters = {
newSqlParameter("@Type",SqlDbType.Char),
};
mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu";
DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters);
DataSet ds = newDataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion


[b][b]3、界面层(UIL)[/b][/b]



#region生成货运单号
DateTime dt = DateTime.Now;//获取系统的当前时间
string strDanShu;//声明变量单数
string DingDanBianHao;//声明变量订单编号
strDanShu = myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu().Tables[0].Rows[0][0].ToString().Trim();//查询最大单数
//switch语句,判断当前单数的长度
switch (strDanShu.Length)
{
//当单数的长度为1的时候(也是个位数1-9的时候)
case 1:
strDanShu = "000" + strDanShu; break;//在单数前面加上三个0
case 2:
strDanShu = "00" + strDanShu; break;//在单数前面加上二个0
case 3:
strDanShu = "0" + strDanShu; break;//在单数前面加上一个0
default:
break;
}

DingDanBianHao = ShengChengDanHao(strDanShu);//调用ShengChengDanHao()方法
txtFreightInvoicesNumber.Text = "DD" + DingDanBianHao;//赋值给txtFreightInvoicesNumber
txtOrderNumber.Text = "XDD" + strDanShu;
txtInvoiceNumber.Text = "FP" + strDanShu;
#endregion

//自定义生成单号的方法
publicstring ShengChengDanHao(string strDanShu)
{
DateTime dt = DateTime.Now;//获取系统的当前时间
string strYear = dt.Year.ToString().Trim();//提取年
string strMonth = dt.Month.ToString().Trim();//提取月
//三目运算符
strMonth = (strMonth.Length == 1 ? "0" + strMonth : strMonth);//当月的长度等于1的时候,执行?后面的"0"+strMonth,即在strMonth加个0,不等1的时候直接返回
string strDay = dt.Day.ToString().Trim();//获取天
strDay = (strDay.Length == 1 ? "0" + strDay : strDay);//同上
return strYear + strMonth + strDay + strDanShu;//返回一个年+月+日+单数的字符串
}


二、司机改变,电话号码随之改变

司机改变,电话号码随之改变如图(图10)所示



(图10)

[b][b][b]1、数据库的存储过程[/b][/b][/b]

[b][/b]

--(6)司机名称改变绑定电话号码
if(@Type='Select_CboSiJiXingMingChange_BangDingShouJiHaoMa')
begin
-- LTRIM()、RTRIM()是左右去空格的意思
SELECTLTRIM(RTRIM(TrafficDriverID))asTrafficDriverID,LTRIM(RTRIM(TrafficDriverName))asTrafficDriverName,LTRIM(RTRIM(CallPhoneNumber))asCallPhoneNumber
FROMTrafficDriverList
--Where 是条件
whereTrafficDriverList.TrafficDriverID=@TrafficDriverID
end


[b][b][b]2、逻辑层(BLL)[/b][/b][/b]

[b][/b]

#region绑定司机姓名改变号码
[OperationContract]
publicDataSet Select_CboSiJiXingMingChange_BangDingShouJiHaoMa(int TrafficDriverID)
{
SqlParameter[] mySqlParameters = {
newSqlParameter("@Type",SqlDbType.Char),
newSqlParameter("@TrafficDriverID",SqlDbType.Int)
};
mySqlParameters[0].Value = "Select_CboSiJiXingMingChange_BangDingShouJiHaoMa";
mySqlParameters[1].Value = TrafficDriverID;
DataTable dt = myDALMethod.QueryDataTable("公共方法_Combox绑定", mySqlParameters);
DataSet ds = newDataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion


[b][b][b]3、界面层(UIL)[/b][/b][/b]

[b][/b]

///<summary>
///下拉框选择值改变
///</summary>
privatevoid cboSiJiXingMing_SelectedValueChanged(object sender, EventArgs e)
{
if (KaiGuan == true)//判断下拉框在Load事件中加载完毕之后执行以下代码,不加这句会出错。作用防止报错
{
txtLinkPhone.Text = "";//清空txtLinkPhone联系电话
int intSiJiID = Convert.ToInt32(cboTrafficDriver.SelectedValue);//获取司机下拉框的司机ID值
DataTable dtSiJiXingMingChange = my公共方法_Combox绑定Client.Select_CboSiJiXingMingChange_BangDingShouJiHaoMa(intSiJiID).Tables[0];//查询电话号码
txtLinkPhone.Text = dtSiJiXingMingChange.Rows[0]["CallPhoneNumber"].ToString().Trim();//绑定到txtLinkPhone
//Trim()是去空格的意思
}
}


三、两个dgv之间的传值实现

两个dgv之间的传值如图(图11)所示



(图11)

[b][b][b]1、界面层(UIL)[/b][/b][/b]

第一步:双击打开货物dgvCommodity

///<summary>
/// dgvHuoWuList_CellMouseDoubleClick事件
///</summary>
privatevoid dgvHuoWuList_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex != 0)//判断当前列索引是否为0,不为0执行
{
if (dgvCommodity.Visible == false)//判断dgvCommodity的可见属性为false的时候
{
dgvCommodity.Visible = true;//设置为true
}
else
{
dgvCommodity.Visible = false;//设置为false
}
}
}


第二步:双击dgvCommodity某一行赋值给dgvHuoWuList

///<summary>
/// dgvHuoWu_CellMouseDoubleClick双击事件
///</summary>
privatevoid dgvHuoWu_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
#region声明变量并获取dgvCommodity当前行的对应单元格值
if (e.RowIndex >= 0)//判断选择的行索引是否大于或等于0
{
int intCheLiangID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车辆ID"].Value);
string strCheXing = dgvCommodity.CurrentRow.Cells["货物_车型"].Value.ToString().Trim();
int intCheXingID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车型ID"].Value);
string strCheZhong = dgvCommodity.CurrentRow.Cells["货物_车种"].Value.ToString().Trim();
int intCheZhongID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车种ID"].Value);
string strJiaGe = dgvCommodity.CurrentRow.Cells["货物_价格"].Value.ToString().Trim();
string strCheShengYanSe = dgvCommodity.CurrentRow.Cells["货物_车身颜色"].Value.ToString().Trim();
int intCheShenYanSeID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_车身颜色ID"].Value);
string strShengChanChangJia = dgvCommodity.CurrentRow.Cells["货物_生产厂家"].Value.ToString().Trim();
int intShengChangChangJiaID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_生产厂家ID"].Value);
string strNeiSeYanSe = dgvCommodity.CurrentRow.Cells["货物_内饰颜色"].Value.ToString().Trim();
int intNeiShiYanSeID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_内饰颜色ID"].Value);
string strBianSuXiang = dgvCommodity.CurrentRow.Cells["货物_变速箱"].Value.ToString().Trim();
int intBianSuXiangID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells["货物_变速箱ID"].Value);

for (int i = 0; i < dgvCommodityList.Rows.Count; i++)//循环dgvCommodityList
{
if (Convert.ToInt32(dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value) == intCheLiangID)//判断dgvCommodityList里面的货物车辆ID的值是否等于intCheLiangID,相等就返回
{
MessageBox.Show("该车辆已经存在!!!");
dgvCommodity.Visible = false;
return;
}
}

//循环dgvCommodityList
for (int i = 0; i < dgvCommodityList.Rows.Count; i++)
{
//判断那一行货物车辆ID的单元格的值为null
if (dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value == null)
{
//为null就赋值给dgvCommodityList那一行的对应单元格的值
dgvCommodityList.Rows[i].Cells["货物车辆ID"].Value = intCheLiangID;
dgvCommodityList.Rows[i].Cells["车型"].Value = strCheXing;
dgvCommodityList.Rows[i].Cells["车种"].Value = strCheZhong;
dgvCommodityList.Rows[i].Cells["单价"].Value = strJiaGe;
dgvCommodityList.Rows[i].Cells["车身颜色"].Value = strCheShengYanSe;
dgvCommodityList.Rows[i].Cells["生产厂家"].Value = strShengChanChangJia;
dgvCommodityList.Rows[i].Cells["内饰颜色"].Value = strNeiSeYanSe;
dgvCommodityList.Rows[i].Cells["变速箱"].Value = strBianSuXiang;
dgvCommodityList.Rows[i].Cells["车型ID"].Value = intCheXingID;
dgvCommodityList.Rows[i].Cells["车种ID"].Value = intCheZhongID;
dgvCommodityList.Rows[i].Cells["车身颜色ID"].Value = intCheShenYanSeID;
dgvCommodityList.Rows[i].Cells["生产厂家ID"].Value = intShengChangChangJiaID;
dgvCommodityList.Rows[i].Cells["内饰颜色ID"].Value = intNeiShiYanSeID;
dgvCommodityList.Rows[i].Cells["变速箱ID"].Value = intBianSuXiangID;
dgvCommodity.Visible = false;
}
}
dgvCommodityList.Rows.Add();//增加一行
}
}


四、dgv中的计算,得出总价和dgv数量单元格中只能输入数字

dgv中的计算,得出总价和dgv数量单元格中只能输入数字如图(图12)所示



(图12)

[b][b]1、dgv中的计算、得出总价[/b][/b]



///<summary>
///自定义计算方法
///</summary>
publicvoid JiSuanFangFa()
{
try
{
decimal decZongJia = 0;//声明一个浮点型的变量,并初始化
foreach (DataGridViewRow dgvr in dgvCommodityList.Rows)//遍历dgvCommodityList
{
int intindex = dgvr.Index;//获取当前索引
//当前行的【单价】单元格的值乘【数量】的值
//decZongJia叠加
decZongJia += Convert.ToDecimal(dgvCommodityList.Rows[intindex].Cells["单价"].Value) * Convert.ToInt32(dgvCommodityList.Rows[intindex].Cells["数量"].Value);
}
txtSum.Text = decZongJia.ToString();//赋值给txtSum
}
catch
{
MessageBox.Show("你输入格式错误,请重新输入!!");
dgvCommodityList.CurrentRow.Cells["数量"].Value = null;//当前数量单元格的值清空
}
}

privatevoid dgvHuoWuList_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
JiSuanFangFa();
}


[b][b][b]2、dgv中数量单元格只能输入数字[/b][/b][/b]



///<summary>
/// DGV编辑文本框--承载与DGV文本框
///</summary>
publicstaticDataGridViewTextBoxEditingControl dgvCompile_Text = newDataGridViewTextBoxEditingControl();//实例化一个可以承载dgv文本框的对象
privatevoid dgvCommodityList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
try
{
dgvCompile_Text = (DataGridViewTextBoxEditingControl)e.Control; //获取dgv编辑单元格的数据
dgvCompile_Text.KeyPress += dgvCompile_KeyPress;//委托生成KeyPress事件
}
catch { }
}

privatevoid dgvCompile_KeyPress(object sender, KeyPressEventArgs e)
{
dgvCompile_keyChanged(dgvCompile_Text); //为dgv文本框添加 keychanged 事件
dgvCompile_KeyPress(e,dgvCompile_Text);//为dgv文本框添加 keypress 事件
}

///<summary>
///
///</summary>
///<param name="dgvTxt">单元格的数据</param>
privatevoid dgvCompile_keyChanged(DataGridViewTextBoxEditingControl dgvTxt)
{
try
{
dgvTxt.Text = Convert.ToInt32(dgvTxt.Text).ToString().Trim();
}
catch { }
dgvTxt.SelectionStart = dgvTxt.Text.Length;            //光标放在最后一个数字上
}

privatevoid dgvCompile_KeyPress(KeyPressEventArgs e, DataGridViewTextBoxEditingControl dgvTxt)
{
if ((char.IsNumber(e.KeyChar) || e.KeyChar == (char)Keys.Back))   //判断用户按下的是否数字和左删除键
{
try
{
string strNumber = null;       //实例化字符串保存当前按下的数字
string strCount = dgvTxt.Text; //实例化字符串保存当前dgv文本框的数
if (char.IsNumber(e.KeyChar))  //判断是否为数字
{
strNumber += e.KeyChar;
}
else
{
strCount = strCount.Remove(strCount.Length - 1);//strCount的长度减1
}
}
catch
{ }
}
else
{
e.Handled = true;   //按下按钮无效
}
}
[b][/b]

[b][b][b][b]五、新增保存[/b][/b][/b][/b]

新增保存如图(图13)所示



(图13)

[b][b][b][b][b]1、数据库的存储过程[/b][/b][/b][/b][/b]

第一步:新增一条订单,并立即获取新增那条货运单ID出来

--新增订单
if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan')
begin
BEGINTRAN
INSERTINTOFreightInvoicesList
(FreightInvoicesNumber,IssueCarStaffID,ForWardingdate,TransportCompanyID,TrafficCarID,TrafficDriverID,PassManageerID,Sum,PlanHandCarDate,OrderNumber,InvoiceNumber,Remark,
WhetherFinishConnectCar,WhetherExamineaAndVerify,WhetherConnectCar)
VALUES     (@FreightInvoicesNumber,@IssueCarStaffID,@ForWardingdate,@TransportCompanyID,@TrafficCarID,@TrafficDriverID,@PassManageerID,@Sum,@PlanHandCarDate,@OrderNumber,@InvoiceNumber,@Remark,
0, 0, 0)
SELECT@@IDENTITY--把刚刚新增的FreightInvoicesList表数据的主键货运单ID立即查询出来
COMMITTRAN
end


第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系

--新增订单明细
if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi')
begin
BEGINTRAN
INSERTINTOFreightInvoicesDetailList(FreightInvoicesID,CommodityCarID,Quantity,WhetherStraightMelt)
VALUES(@FreightInvoicesID,@CommodityCarID,@Quantity,@WhetherStraightMelt)
SELECT@@IDENTITY--把刚刚新增的FreightInvoicesDetailList表数据的主键货运单明细ID立即查询出来
COMMITTRAN
end


第三步:根据一条货运单明细的数量来生成车辆

--通过一条订单明细的数量,新增车辆到车辆表
if(@Type='frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi')
begin
INSERTINTOCarList
(FreightInvoicesDetailID,CarTypeID,CarFrameNumber,CarEngineNumber,CarKindID,CarMondelID,CarBodyColorID,CarUnderOrnamentsColorID,CarTransmissionID,CarKeyNumber,
CarStockPrice,ProductionManufacturersID,CarPDIWhetherDetection,CarStatusID,OldCarID,OutSurveyCommodityCarID,WhetherSchedule,ThoughtCarPDIWhetherDetection,WhetherStraightMelt,
WhetherConnectCar)
VALUES (@FreightInvoicesDetailID,34,@CarFrameNumber,@CarEngineNumber,@CarKindID,@CarMondelID,@CarBodyColorID,@CarUnderOrnamentsColorID,@CarTransmissionID,@CarKeyNumber,@CarStockPrice,@ProductionManufacturersID,
0, 144, 0, 0, 0, 0,@WhetherStraightMelt,0)
end


2、逻辑层(BLL)

第一步:新增一条订单,并立即获取新增那条货运单ID出来

#region新增货运单
[OperationContract]
publicDataSet frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan(string运单编号, int发车员ID, DateTime发运日期, int承运方ID, int运输车ID,
int运输司机ID, int经办人ID, decimal总价, DateTime计划交车日期, string订单号, string发票号, string备注)
{
SqlParameter[] mySqlParameters = {
newSqlParameter("@Type",SqlDbType.Char),
newSqlParameter("@FreightInvoicesNumber",SqlDbType.Char),
newSqlParameter("@IssueCarStaffID",SqlDbType.Int),
newSqlParameter("@ForWardingdate",SqlDbType.Char),
newSqlParameter("@TransportCompanyID",SqlDbType.Int),
newSqlParameter("@TrafficCarID",SqlDbType.Int),
newSqlParameter("@TrafficDriverID",SqlDbType.Int),
newSqlParameter("@PassManageerID",SqlDbType.Int),
newSqlParameter("@Sum",SqlDbType.Decimal),
newSqlParameter("@PlanHandCarDate",SqlDbType.DateTime),
newSqlParameter("@OrderNumber",SqlDbType.Char),
newSqlParameter("@InvoiceNumber",SqlDbType.Char),
newSqlParameter("@Remark",SqlDbType.Char)

};
mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan";
mySqlParameters[1].Value =运单编号;
mySqlParameters[2].Value =发车员ID;
mySqlParameters[3].Value =发运日期;
mySqlParameters[4].Value =承运方ID;
mySqlParameters[5].Value =运输车ID;
mySqlParameters[6].Value =运输司机ID;
mySqlParameters[7].Value =经办人ID;
mySqlParameters[8].Value =总价;
mySqlParameters[9].Value =计划交车日期;
mySqlParameters[10].Value =订单号;
mySqlParameters[11].Value =发票号;
mySqlParameters[12].Value =备注;

DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters);
DataSet ds = newDataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion


第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系

#region新增货运单明细表
[OperationContract]
publicDataSet frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi(int货运单ID, int货物_车辆ID, decimal数量,bool直销车否)
{
SqlParameter[] mySqlParameters = {
newSqlParameter("@Type",SqlDbType.Char),
newSqlParameter("@FreightInvoicesID",SqlDbType.Int),
newSqlParameter("@CommodityCarID",SqlDbType.Int),
newSqlParameter("@Quantity",SqlDbType.Decimal),
newSqlParameter("@WhetherStraightMelt",SqlDbType.Bit)
};
mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi";
mySqlParameters[1].Value = 货运单ID;
mySqlParameters[2].Value = 货物_车辆ID;
mySqlParameters[3].Value = 数量;
mySqlParameters[4].Value = 直销车否;
DataTable dt = myDALMethod.QueryDataTable("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters);
DataSet ds = newDataSet();
ds.Tables.Add(dt);
return ds;
}
#endregion


第三步:根据一条货运单明细的数量来生成车辆

#region通过一条订单明细的数量,新增车辆到车辆表
[OperationContract]
publicint frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi(int FreightInvoicesDetailID, string CarFrameNumber, string CarEngineNumber, int CarKindID, int CarMondelID
, int CarBodyColorID, int CarTransmissionID, decimal CarStockPrice, int ProductionManufacturersID, string CarKeyNumber, int CarUnderOrnamentsColorID, bool WhetherStraightMelt)
{
SqlParameter[] mySqlParameters = {
newSqlParameter("@Type",SqlDbType.Char),
newSqlParameter("@FreightInvoicesDetailID",SqlDbType.Int),
newSqlParameter("@CarFrameNumber",SqlDbType.Char),
newSqlParameter("@CarEngineNumber",SqlDbType.Char),
newSqlParameter("@CarKindID",SqlDbType.Int),
newSqlParameter("@CarMondelID",SqlDbType.Int),
newSqlParameter("@CarBodyColorID",SqlDbType.Int),
newSqlParameter("@CarTransmissionID",SqlDbType.Int),
newSqlParameter("@CarStockPrice",SqlDbType.Decimal),
newSqlParameter("@ProductionManufacturersID",SqlDbType.Int),
newSqlParameter("@CarKeyNumber",SqlDbType.Char),
newSqlParameter("@CarUnderOrnamentsColorID",SqlDbType.Int),
newSqlParameter("@WhetherStraightMelt",SqlDbType.Bit),
};
mySqlParameters[0].Value = "frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi";
mySqlParameters[1].Value = FreightInvoicesDetailID;
mySqlParameters[2].Value = CarFrameNumber;
mySqlParameters[3].Value = CarEngineNumber;
mySqlParameters[4].Value = CarKindID;
mySqlParameters[5].Value = CarMondelID;
mySqlParameters[6].Value = CarBodyColorID;
mySqlParameters[7].Value = CarTransmissionID;
mySqlParameters[8].Value = CarStockPrice;
mySqlParameters[9].Value = ProductionManufacturersID;
mySqlParameters[10].Value = CarKeyNumber;
mySqlParameters[11].Value = CarUnderOrnamentsColorID;
mySqlParameters[12].Value = WhetherStraightMelt;
return myDALMethod.UpdateData("订单管理_frm_DingDanGuanLi_DingDanGuanLi_Insert", mySqlParameters);
}
#endregion


3、界面层(UIL)

第一步:新增一条订单,并立即获取新增那条货运单ID出来

#region 获取控件值
//从TextBox控件上获取值
string strDingDanBianHao = txtFreightInvoicesNumber.Text.ToString().Trim();//获取订单编号
string strDingDanHao = txtOrderNumber.Text.ToString().Trim();//获取订单号
string strFaPiaoHao = txtInvoiceNumber.Text.ToString().Trim();//获取发票号
DateTime FaYunRiQi = dtpForWardingdate.Value;//获取发运日期
DateTime JiHuaJiaoCheRiQi = dtpPlanHandCarDate.Value;//获取计划交车车日期
int intChengYunFangID = Convert.ToInt32(cboTransportCompany.SelectedValue);//获取承运方ID
int intYunShuCheID = Convert.ToInt32(cboTrafficCar.SelectedValue);//获取运输车ID
int intSiJiID = Convert.ToInt32(cboTrafficDriver.SelectedValue);//获取司机ID
int intFaCheYuanID = Convert.ToInt32(cboIssueCarStaff.SelectedValue);//获取发车员ID
int intJingBanRenID = Convert.ToInt32(cboPassManageer.SelectedValue);//获取经办人ID
decimal decZongJia = Convert.ToDecimal(txtSum.Text);//获取总价
string strBeiZhu = txtRemark.Text.ToString().Trim();//获取备注
#endregion

#region 声明字段
int intWeiTianJiaShu = 0;//判断是否填写完整订单信息
int intHuoYunDanID = 0;//声明一个变量,货运单ID
int intYanZheng = 0;//验证
int intHuoWuCheLiangID = 0;//货物车辆ID
int intChengGongTianJia = 0;//成功添加
int intCheLiangShuLiang = 0;//车辆数量
bool ZhiXiaoCheFou;//直销车否
int intHuoYunDanMingXiID;//获取货运明细ID
int intCheZhongID;//车种ID
int intCheXingID;//车型ID
int intCheShengYanSeID;//车身颜色ID
int intNeiShiYanSeID;//内饰颜色ID
int intBianSuXiangID;//变速箱ID
decimal decJinHuoJiaGe;//进货价格
int intShengChangChangJiaID;//生产厂家ID
#endregion

//遍历dgvCommodityList
foreach (DataGridViewRow dr in dgvCommodityList.Rows)//判断一些值是否为空
{
if (dr.Cells["车型"].Value == null || dr.Cells["车种"].Value == null || dr.Cells["单价"].Value == null || dr.Cells["数量"].Value == null
|| dr.Cells["车身颜色"].Value == null || dr.Cells["内饰颜色"].Value == null || dr.Cells["生产厂家"].Value == null || dr.Cells["变速箱"].Value == null)
{
if (dr.Cells["车型"].Value == null && dr.Cells["车种"].Value == null && dr.Cells["单价"].Value == null && dr.Cells["数量"].Value == null
&& dr.Cells["车身颜色"].Value == null && dr.Cells["内饰颜色"].Value == null && dr.Cells["生产厂家"].Value == null && dr.Cells["变速箱"].Value == null)
{ }
else
{
intWeiTianJiaShu++;//未添加数
}
}

}
//如果当未添加数大于0,提示还有货物信息未填,请输入完整后再保存的信息
if (intWeiTianJiaShu > 0)
{
MessageBox.Show("还有货物信息未填,请输入完整后再保存!!!");
return;//返回
}
//判断dgvCommodityList是否大于2,小于2提示目前您还没有添加商品车辆,请您添加车辆后再保存
if (dgvCommodityList.Rows.Count < 2)
{
MessageBox.Show("目前您还没有添加商品车辆,请您添加车辆后再保存!!!!!");
return;//返回
}
else
{
//新增货运单
intHuoYunDanID = Convert.ToInt32(myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDan(DingDanBianHao, intFaCheYuanID,
FaYunRiQi,intChengYunFangID, intYunShuCheID, intSiJiID, intJingBanRenID, decZongJia, JiHuaJiaoCheRiQi, strDingDanBianHao, strFaPiaoHao, strBeiZhu).Tables [0].Rows[0][0]);
}


第二步:把查询出来货运单ID作为外键,新增货运单明细的时候,货运单ID作为外键,以一条货运单对多条货运单明细,把货运单ID插进货运单明细表里面。形成一对多的关系。第三步:根据一条货运单明细的数量来生成车辆。

if (intHuoYunDanID > 0)//判断刚刚新增的货运单ID是否大于0
{
//循环dgvCommodityList,新增货运单明细
for (int k = 0; k < dgvCommodityList.Rows.Count-1; k++)
{
intYanZheng++;//验证
intHuoWuCheLiangID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["货物车辆ID"].Value);//循环获取dgv货物车辆ID
intCheLiangShuLiang = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["数量"].Value);//获取数量
ZhiXiaoCheFou = Convert.ToBoolean(dgvCommodityList.Rows[k].Cells["直销车"].Value);//获取直销车
intCheXingID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车型ID"].Value);//获取车型ID
intCheZhongID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车种ID"].Value);//获取车种ID
intCheShengYanSeID = Convert.ToInt32(dgvCommodityList.Rows[k].Cells["车身颜色ID"].Value);//获取车身颜色ID
intNeiShiYanSeID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["内饰颜色ID"].Value);
intBianSuXiangID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["变速箱ID"].Value);
decJinHuoJiaGe = Convert.ToDecimal(dgvCommodityList.Rows[k].Cells["单价"].Value);
intShengChangChangJiaID=Convert.ToInt32(dgvCommodityList.Rows[k].Cells["生产厂家ID"].Value);
//获取新增的货运单明细ID
intHuoYunDanMingXiID = Convert.ToInt32(myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertDingDanMingXi(intHuoYunDanID, intHuoWuCheLiangID, intCheLiangShuLiang, ZhiXiaoCheFou).Tables[0].Rows[0][0]);
//遍历当前货运单明细的数量,新增车辆表
for (int i = 0; i < intCheLiangShuLiang; i++)
{
string strNumber;//生成发动机号/车架号/钥匙号
//获取单数
strDanShu = myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_SelectZuiDaDanHaoShu().Tables[0].Rows[0][0].ToString().Trim();
switch (strDanShu.Length)
{
case 1:
strDanShu = "000" + strDanShu; break;
case 2:
strDanShu = "00" + strDanShu; break;
case 3:
strDanShu = "0" + strDanShu; break;
default:
break;
}
//生成发动机号/车架号/钥匙号
strNumber = ShengChengDanHao(strDanShu);
string strFaDongJiHao = "FD" + strNumber;
string strCheJiaHao = "CJH" + strNumber;
string strYaoShiHao = "YS" + strDanShu;
//新增到车辆表
myfrm_DingDanGuanLi_DingDanGuanLi_InsertClient.frm_DingDanGuanLi_Insert_btnBaoCunClick_InsertCarXinXi(intHuoYunDanMingXiID, strCheJiaHao, strFaDongJiHao, intCheZhongID, intCheXingID, intCheShengYanSeID,
intBianSuXiangID, decJinHuoJiaGe, intShengChangChangJiaID, strYaoShiHao, intNeiShiYanSeID, ZhiXiaoCheFou);
}
intChengGongTianJia++;//成功添加,用于判断是否添加成功!!
}
}
else
{
MessageBox.Show("新增货运单失败!!!");
}
if(intYanZheng==intChengGongTianJia&&intChengGongTianJia>0)
{
MessageBox.Show("新增货运单成功!!!");
}
else
{
MessageBox.Show("新增货运单失败!!!");
}

}


本文仅供学习,禁止用于商业活动,否则后果自负!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: