经过几个月的开发终于完成的跨境电商统一申报开发
这里把一些代码分享给大家:
#region 发送到总署申报
/// <summary>
/// 发送到总署申报
/// </summary>
public void SendReceivedDeclare()
{
if (Grid_GoodsMainDeclare.CurrentRow == null)
return;
if (BaseInterfaceLogic.CheckInputSelectAnyTwo(Grid_GoodsMainDeclare, "ColSelected"))
{
int itemCount = 0;
int itemErrcount = 0;
ProgressForm progress = new ProgressForm(this);
string statusCode = string.Empty;
string statusMessage = string.Empty;
progress.Show();
try
{
#region 批量提交申报
for (int i = 0; i < GetSelecteIds().Length; i++)
{
progress.SetProgressValue(1);
string Id = string.Empty;
string FileName = string.Empty;
string CurrentOrderNo = string.Empty;
string XmlFileName = string.Empty;
string OrderXml = string.Empty;
string orderStatusCode = string.Empty;
string ShopNameId = string.Empty;
bool returnValueMsg = false;
//过滤表获得当前选中行的记录
string businessType = "PERSONAL_GOODS_DECLAR";//业务类型//运单信息
string sourceType = chkbusinessType.Checked == true ? "1" : "2";//申报类型//1新增 2修改
DataTable GoodsMainDeclaredtXml = new DataTable();
Id = GetSelecteIds()[i].ToString();
string Condition = string.Format("Id='{0}'", Id);
GoodsMainDeclaredtXml = BLLFactory<BLL.A8ERP_Customs_GoodsMainDeclare>.Instance.GetDataTable(Condition);
if (GoodsMainDeclaredtXml.Rows.Count == 0)
continue;
string AuditState = string.Empty;
for (int K = 0; K < GoodsMainDeclaredtXml.Rows.Count; K++)
{
CurrentOrderNo = GoodsMainDeclaredtXml.Rows[K]["OrderNo"].ToString();
ShopNameId = GoodsMainDeclaredtXml.Rows[K]["ShopNameId"].ToString();
AuditState = GoodsMainDeclaredtXml.Rows[K]["AuditState"].ToString();
}
#region 订单状态是否 已申报 已申报//已出库//海关入库
if ((AuditState == "30") || (AuditState == "40") || (AuditState == "120"))
{
progress.SetStatusInfo.Text = "订单已进入出货流程不能再申报...";
continue;
}
#endregion
#region 签名信息
string conditionSign = string.Format("ShopNameId='{0}' and BusinessType='{1}'", ShopNameId, businessType);
DataTable SignTableXml = new DataTable();
SignTableXml = BLLFactory<BLL.A8ERP_Customs_JkfSign>.Instance.GetDataTable(conditionSign);
if (SignTableXml.Rows.Count == 0)
{
MessageUtil.ShowTips("签名信息不存在!");
continue;
}
for (int j = 0; j < SignTableXml.Rows.Count; j++)
{
SignTableXml.Rows[j]["businessNo"] = CurrentOrderNo;
SignTableXml.Rows[j]["BusinessType"] = businessType;
}
#endregion
#region 申报明细表
DataTable GoodsDetaildt = new DataTable(A8ERP_Customs_GoodsDeclareDetailInfo.TableName);//个人申报明细表
string condition = string.Format("FId='{0}'", Id);
GoodsDetaildt = BLLFactory<BLL.A8ERP_Customs_GoodsDeclareDetail>.Instance.GetDataTable(condition);
#endregion
#region 开始申报
FileName = WebServiceXMLHelper.CareateXMLFileName(sourceType, businessType, CurrentOrderNo);//创建Xml文件名发送文件CurrentHeadOrderNo
XmlFileName = WebServiceXMLHelper.CareateXml(FileName);//创建并返回路径
OrderXml = OrderDelareUtilities.GetCreateGoodsDeclare(SignTableXml, GoodsMainDeclaredtXml, GoodsDetaildt, XmlFileName, businessType);//写入Xml文件
string ResultstatusMessage = WebServiceSend.OrderXmlSend(OrderXml, businessType, sourceType);
returnValueMsg = XmlOperation.MessageResultXml(ResultstatusMessage, CurrentOrderNo, out statusMessage);
if (returnValueMsg)
{
orderStatusCode = CustomsOrderState.Declaration.ToString();//申报中
if (BLLFactory<A8ERP_Customs_GoodsMainDeclare>.Instance.UPOrderAuditState(UserInfo, Id, orderStatusCode))
{
statusMessage = string.Format(A8AppMessage.MSG, A8AppMessage.MSG99999);
itemCount++;
}
#region 记录操作日志
if (returnValueMsg)
{
A8ERP_WMS_OperationRecordsInfo OperationRecordsEntity = new A8ERP_WMS_OperationRecordsInfo();
A8ERP_Customs_OrderDeclareParameterInfo PersonalSingleEntity = new A8ERP_Customs_OrderDeclareParameterInfo();
string PersonalSingleSql = string.Format("ShopNameId='{0}'", ShopNameId);
PersonalSingleEntity = BLLFactory<BLL.A8ERP_Customs_OrderDeclareParameter>.Instance.FindSingle(PersonalSingleSql);
OperationRecordsEntity.CustomsField = PersonalSingleEntity.CustomsField;//路由产生地点
OperationRecordsEntity.ProcessId = CurrentOrderNo;//服务Id
OperationRecordsEntity.ProcessName = "总署清单申报";//服务名称
OperationRecordsEntity.OperationName = "总署清单申报";//操作名称
OperationRecordsEntity.OrderState = "30";//状态
OperationRecordsEntity.Operation = UserInfo.RealName;//操作人
OperationRecordsEntity.Description = string.Format("单号:{0} 清单申报成功", CurrentOrderNo);//描述
OperationRecordsEntity.CreateBy = UserInfo.UserName;//用户名称
OperationRecordsEntity.CreateUserId = UserInfo.Id;//用户Id
OperationRecordsEntity.OrgId = UserInfo.SubCompanyId;//机构Id
OperationRecordsEntity.OrgName = UserInfo.SubCompanyName;//机构名称
BLLFactory<BLL.A8ERP_WMS_OperationRecords>.Instance.Add(UserInfo, OperationRecordsEntity, out statusCode, out statusMessage);
}
#endregion
progress.SetStatusInfo.Text = "已申报: " + itemCount + " 条" + "错误:" + itemErrcount + "条";
}
else
{
itemErrcount++;
statusMessage = string.Format(A8AppMessage.MSG, statusMessage);
DevExpress.XtraEditors.XtraMessageBox.Show(statusMessage, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion
progress.SetProgressValue(100);
}
#endregion
}
catch (Exception ex)
{
MessageUtil.ShowTips(ex.Message);
}
finally
{
progress.SetProgressValue(100);
progress.SetStatusInfo.Text = "查找完毕...";
progress.Close();
statusMessage = string.Format("申报{0}:{1}条 " + "错误:{2} 条", statusMessage, itemCount, itemErrcount);
DevExpress.XtraEditors.XtraMessageBox.Show(statusMessage, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
//FormOnLoad();
}
}
}
#endregion
跨境监管仓库软件,跟申报一起
/// <summary>
/// 杭州版申报发送
/// </summary>
public override void RundeclareVoid()
{
if (Grid_GoodsMainDeclare.CurrentRow == null)
return;
if (BaseInterfaceLogic.CheckInputSelectAnyTwo(Grid_GoodsMainDeclare, "ColSelected"))
{
int itemCount = 0;
int itemErrcount = 0;
ProgressForm progress = new ProgressForm(this);
string statusCode = string.Empty;
string statusMessage = string.Empty;
progress.Show();
try
{
#region 批量提交申报
for (int i = 0; i < GetSelecteIds().Length; i++)
{
progress.SetProgressValue(1);
string Id = string.Empty;
string FileName = string.Empty;
string CurrentOrderNo = string.Empty;
string XmlFileName = string.Empty;
string OrderXml = string.Empty;
string orderStatusCode = string.Empty;
string ShopNameId = string.Empty;
bool returnValueMsg = false;
//过滤表获得当前选中行的记录
string businessType = "PERSONAL_GOODS_DECLAR";//业务类型//运单信息
string sourceType = chkbusinessType.Checked == true ? "1" : "2";//申报类型//1新增 2修改
DataTable GoodsMainDeclaredtXml = new DataTable();
Id = GetSelecteIds()[i].ToString();
string Condition = string.Format("Id='{0}'", Id);
GoodsMainDeclaredtXml = BLLFactory<BLL.A8ERP_Customs_GoodsMainDeclare>.Instance.GetDataTable(Condition);
for (int K = 0; K < GoodsMainDeclaredtXml.Rows.Count; K++)
{
CurrentOrderNo = GoodsMainDeclaredtXml.Rows[K]["OrderNo"].ToString();
ShopNameId = GoodsMainDeclaredtXml.Rows[K]["ShopNameId"].ToString();
}
#region 订单状态是否已申报
int OrderAuditState = BLLFactory<BLL.A8ERP_Customs_GoodsMainDeclare>.Instance.GetOrderAuditState(CurrentOrderNo);
if (OrderAuditState >= 30)
{
statusMessage = "订单已进入出货流程不能再申报...";
progress.SetStatusInfo.Text = statusMessage;
DevExpress.XtraEditors.XtraMessageBox.Show(AppMessage.Format(statusMessage, BaseInterfaceLogic.TargetNode.Text), AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
continue;
}
#endregion
#region 签名信息
string conditionSign = string.Format("ShopNameId='{0}' and BusinessType='{1}'", ShopNameId, businessType);
DataTable SignTableXml = new DataTable();
SignTableXml = BLLFactory<BLL.A8ERP_Customs_JkfSign>.Instance.GetDataTable(conditionSign);
if (SignTableXml.Rows.Count == 0)
{
MessageUtil.ShowTips("签名信息不存在!");
continue;
}
for (int j = 0; j < SignTableXml.Rows.Count; j++)
{
SignTableXml.Rows[j]["businessNo"] = CurrentOrderNo;
SignTableXml.Rows[j]["BusinessType"] = businessType;
}
#endregion
#region 申报明细表
DataTable GoodsDetaildt = new DataTable(A8ERP_Customs_GoodsDeclareDetailInfo.TableName);//个人申报明细表
string condition = string.Format("FId='{0}'", Id);
GoodsDetaildt = BLLFactory<BLL.A8ERP_Customs_GoodsDeclareDetail>.Instance.GetDataTable(condition);
#endregion
#region 开始申报
FileName = WebServiceXMLHelper.CareateXMLFileName(sourceType, businessType, CurrentOrderNo);//创建Xml文件名发送文件CurrentHeadOrderNo
XmlFileName = WebServiceXMLHelper.CareateXml(FileName);//创建并返回路径
OrderXml = XmlOperation.CreateGoodsDeclare(SignTableXml, GoodsMainDeclaredtXml, GoodsDetaildt, XmlFileName, businessType);//写入Xml文件
string ResultstatusMessage = WebServiceSend.OrderXmlSend(OrderXml, businessType, sourceType);
returnValueMsg = XmlOperation.MessageResultXml(ResultstatusMessage, CurrentOrderNo, out statusMessage);
if (returnValueMsg)
{
orderStatusCode = CustomsOrderState.Declaration.ToString();//申报中
if (BLLFactory<A8ERP_Customs_GoodsMainDeclare>.Instance.UPOrderAuditState(UserInfo, Id, orderStatusCode))
{
statusMessage = string.Format(A8AppMessage.MSG, A8AppMessage.MSG99999);
itemCount++;
}
#region 记录操作日志
if (returnValueMsg)
{
A8ERP_WMS_OperationRecordsInfo OperationRecordsEntity = new A8ERP_WMS_OperationRecordsInfo();
A8ERP_Customs_OrderDeclareParameterInfo PersonalSingleEntity = new A8ERP_Customs_OrderDeclareParameterInfo();
string PersonalSingleSql = string.Format("ShopNameId='{0}'", ShopNameId);
PersonalSingleEntity = BLLFactory<BLL.A8ERP_Customs_OrderDeclareParameter>.Instance.FindSingle(PersonalSingleSql);
OperationRecordsEntity.CustomsField = PersonalSingleEntity.CustomsField;//路由产生地点
OperationRecordsEntity.ProcessId = CurrentOrderNo;//服务Id
OperationRecordsEntity.ProcessName = "清单申报";//服务名称
OperationRecordsEntity.OperationName = "清单申报";//操作名称
OperationRecordsEntity.OrderState = "30";//状态
OperationRecordsEntity.Operation = UserInfo.RealName;//操作人
OperationRecordsEntity.Description = string.Format("单号:{0} 清单申报成功", CurrentOrderNo);//描述
OperationRecordsEntity.CreateBy = UserInfo.UserName;//用户名称
OperationRecordsEntity.CreateUserId = UserInfo.Id;//用户Id
OperationRecordsEntity.OrgId = UserInfo.SubCompanyId;//机构Id
OperationRecordsEntity.OrgName = UserInfo.SubCompanyName;//机构名称
BLLFactory<BLL.A8ERP_WMS_OperationRecords>.Instance.Add(UserInfo, OperationRecordsEntity, out statusCode, out statusMessage);
}
#endregion
progress.SetStatusInfo.Text = "已申报: " + itemCount + " 条" + "错误:" + itemErrcount + "条";
}
else
{
itemErrcount++;
statusMessage = string.Format(A8AppMessage.MSG, statusMessage);
MessageUtil.ShowTips(statusMessage);
}
#endregion
progress.SetProgressValue(100);
}
#endregion
}
catch (Exception ex)
{
MessageUtil.ShowTips(ex.Message);
}
finally
{
progress.SetProgressValue(100);
progress.SetStatusInfo.Text = "查找完毕...";
progress.Close();
MessageUtil.ShowTips(string.Format("申报{0}:{1}条 " + "错误:{2} 条", statusMessage, itemCount, itemErrcount));
this.FormOnLoad();
}
}
}