You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/MvcShipping/DAL/Message/MSGDAL_HCHX_DATA2.cs

204 lines
8.0 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Text;
using DSWeb.Areas.MvcShipping.Models.Message;
using DSWeb.Areas.MvcShipping.Models.Message.HCHX_DATA;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
using DSWeb.Areas.MvcShipping.Comm;
using System.Data.SqlClient;
using System.Messaging;
using System.Text.RegularExpressions;
namespace DSWeb.Areas.MvcShipping.DAL.Message
{
/// <summary>
/// 出库入库报文
/// </summary>
public static class MSGDAL_HCHX_DATA2
{
/// <summary>
/// 根据入出库单号获取报文
/// </summary>
/// <param name="wmsno">出入库单号</param>
/// <param name="userid">用户id</param>
/// <param name="type">类型0:入库 1出库</param>
/// <returns></returns>
public static string GetXMLMessageWithWMSBSNO ( string wmsbsnos, string userid,out string msg,string trade_code,string unit,string ip,int type =0)
{
//签名
TRANSMIT t = new TRANSMIT();
t.BOXTYPE = "4001";
//库存信息
List<STORE_TRANS> storelist = new List<STORE_TRANS>();
StringBuilder sb = new StringBuilder();
sb.Append(@"SELECT
w.BZTCHNO AS EMS_NO,");
if (type==0)
{
sb.Append(@"(SELECT WMSNO from wms WHERE WMSNO=w.WMSNO) AS IO_NO,");
sb.Append(@" CONVERT(varchar(100), w.WMSDATE, 23) AS IO_DATE,");
sb.Append(@"(SELECT goodno FROM code_goods WHERE GID=(SELECT TOP 1 GOODSNAMEID FROM wms_in WHERE ASSOCIATEDNO=w.GID)) AS COP_G_NO,");
sb.Append("'I0001' AS [TYPE],");
sb.Append("(SELECT SUM(GOODSPACK) FROM wms_in WHERE ASSOCIATEDNO = w.GID) AS QTY,");
}
else
{
sb.Append(@"(SELECT BSNO from wms_out WHERE BSNO=w.BSNO) AS IO_NO,");
sb.Append(@" CONVERT(varchar(100), w.DODATE, 23) AS IO_DATE,");
sb.Append(@"(SELECT goodno FROM code_goods WHERE GID=(SELECT TOP 1 GOODSNAMEID FROM wms_out_detail WHERE OUTBSNO=w.BSNO)) AS COP_G_NO,");
sb.Append("'E0002' AS [TYPE],");
sb.Append(" (0-(SELECT SUM(GOODSPACKPFSL) FROM wms_out_detail WHERE OUTBSNO = w.BSNO)) AS QTY,");
}
sb.Append(@" (select c.TRADE_CODE from user_company uc JOIN company c on c.GID = uc.COMPANYID where uc.USERID = @userid) AS TRADE_CODE,");
sb.Append(@"(select c.UNIT from user_company uc JOIN company c on c.GID = uc.COMPANYID where uc.USERID =@userid) AS UNIT,
WHS_CODE AS WHS_CODE,
AREANAME AS LOCATION_CODE ");
if (type==0)
{
sb.Append(@" FROM WMS w
WHERE WMSNO in (" + wmsbsnos + ") ");
}
else
{
sb.Append(@" FROM WMS_OUT w
WHERE BSNO in (" + wmsbsnos + ") ");
}
SqlCommand com = new SqlCommand(sb.ToString());
SqlParameter sp = new SqlParameter("@userid", userid);
com.Parameters.Add(sp);
Database db = DatabaseFactory.CreateDatabase();
string TRADE_CODE = trade_code;
string UNIT = unit;
string EMS_NO = "";
using (IDataReader reader = db.ExecuteReader(com))
{
while (reader.Read())
{
EMS_NO = reader["EMS_NO"].ToString();
STORE_TRANS si = new STORE_TRANS();
si.EMS_NO = reader["EMS_NO"].ToString();
si.COP_G_NO = reader["COP_G_NO"].ToString();
si.TYPE = reader["TYPE"].ToString();
si.QTY = reader["QTY"].ToString();
si.UNIT = UNIT;
si.IO_DATE = reader["IO_DATE"].ToString();
si.IO_NO = reader["IO_NO"].ToString();
si.WHS_CODE = reader["WHS_CODE"].ToString();
si.LOCATION_CODE = reader["LOCATION_CODE"].ToString();
storelist.Add(si);
}
}
t.EMS_NO = EMS_NO;
t.TRADE_CODE = TRADE_CODE;
//序列化XML
HCHX_DATA hd = new HCHX_DATA();
hd.TRANSMIT = t;
hd.STORE_TRANS = storelist;
string xml = XmlHelper.XmlSerialize(hd, Encoding.UTF8, "HCHX_DATA",ip);
//正则过滤
var reg = new Regex(@"<STORE_TRANS>(\r\n)*\s*(?=<STORE_TRANS>)|(?<=</STORE_TRANS>)(\r\n)*\s*</STORE_TRANS>");
xml = reg.Replace(xml, "");
string message = checkNullAndEmpty(hd);
msg = message;
if (SendMessage(xml))
{
msg = "";
}
else
{
msg = "发送失败";
}
return xml;
}
private static string checkNullAndEmpty (HCHX_DATA data) {
string msg = "";
if (data.TRANSMIT.EMS_NO==null||data.TRANSMIT.EMS_NO=="")
{
msg += "EMS_NO(电子账册号),";
}
if (data.TRANSMIT.TRADE_CODE == null || data.TRANSMIT.TRADE_CODE == "")
{
msg += "TRADE_CODE(企业编码),";
}
if (data.TRANSMIT.BOXTYPE == null || data.TRANSMIT.BOXTYPE == "")
{
msg += "BOXTYPE(业务类型),";
}
var list = data.STORE_TRANS;
foreach (var si in list)
{
if (si.COP_G_NO == null || si.COP_G_NO == "")
{
msg += "COP_G_NO(料号)" + ",";
}
if (si.TYPE == null || si.TYPE == "")
{
msg += "TYPE(进出库类型)" + ",";
}
if (si.QTY == null || si.QTY == "")
{
msg += "QTY(期初数量)" + ",";
}
if (si.UNIT == null || si.UNIT == "")
{
msg += "UNIT(申报单位)" + ",";
}
if (si.IO_DATE == null || si.IO_DATE == "")
{
msg += "IO_DATE(出入库时间)" + ",";
}
if (si.IO_NO == null || si.IO_NO == "")
{
msg += "IO_NO(出入库单号)" + ",";
}
if (si.WHS_CODE == null || si.WHS_CODE == "")
{
msg += "WHS_CODE(库别)" + ",";
}
if (si.LOCATION_CODE == null || si.LOCATION_CODE == "")
{
msg += "LOCATION_CODE(储位)" + ",";
}
}
return msg;
}
public static bool SendMessage(string xml)
{
MessageQueue SmsQueue = new MessageQueue();
try
{
//string mqPath = "124.133.23.188\\Private$\\testjnzs";//给基站告警用的wz的程序
string mqPath = "124.133.23.188\\Private$\\zsplat2cust";//给基站告警用的wz的程序
mqPath = string.Format(@"FormatName:DIRECT=TCP:{0}", mqPath);
SmsQueue.MessageReadPropertyFilter.Body = true;
SmsQueue.MessageReadPropertyFilter.AppSpecific = true;
SmsQueue.MessageReadPropertyFilter.Priority = true;
SmsQueue.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
SmsQueue.Path = mqPath;
System.Messaging.Message msg = new System.Messaging.Message();
msg.Body = xml;
SmsQueue.Send(msg, MessageQueueTransactionType.Single);
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
SmsQueue.Close();
}
}
}
}