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.

308 lines
14 KiB
C#

using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;
using DSWeb.Areas.CommMng.Models;
using DSWeb.Areas.Dispatch.Models;
namespace DSWeb.Dispatch.DAL
{
public class MsOpSeaeDAL
{
#region 查询
static public List<OpSeaeModel> GetSaleDataList(string shortName, string condition = null, string sort = null, string order = null, bool hasNoFee = true)
{
var strSql = new StringBuilder();
strSql.AppendLine("SELECT BSNO,VESSEL,VOYNO,MBLNO,INVNO,ETD,ATD,CNTRTOTAL,KGS,YARD,CNTRSEALNO,CUSTOMNO,ETA,SERVICECONTRACTNO,");
strSql.AppendLine("ISNULL((SELECT TOP 1 FACTRYNAME FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE),'') FACTORYADDR,");
strSql.AppendLine("ISNULL((SELECT TOP 1 CARGODATE FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE),'') CARGODATE,");
strSql.AppendLine("(SELECT COMPTIME FROM OP_STATUS WHERE BSNO=S.BSNO AND ISCOMP=1 and [status]='重箱返场') STA_ZXFC,");
strSql.AppendLine("(SELECT COMPTIME FROM OP_STATUS WHERE BSNO=S.BSNO AND ISCOMP=1 and [status]='海关放行') STA_HGFX,");
strSql.AppendLine("(SELECT SUM(AMOUNT) FROM CH_FEE WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME=S.CUSTOMERNAME AND BSNO=S.BSNO AND CURRENCY='RMB') AMOUNT_RMB,");
strSql.AppendLine("(SELECT SUM(AMOUNT) FROM CH_FEE WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME=S.CUSTOMERNAME AND BSNO=S.BSNO AND CURRENCY='USD') AMOUNT_USD,");
strSql.AppendLine("(select TOP 1 STATUS from OP_STATUS WHERE BSNO=S.BSNO ORDER BY INPUTTIME DESC) LAST_STATUS,");
strSql.AppendLine("ISNULL((SELECT TOP 1 COMPTIME from OP_STATUS WHERE BSNO=S.BSNO AND STATUS='装船出运'),ETD) KaiChuanRi");
strSql.AppendLine("FROM OP_SEAE S");
strSql.AppendLine($"WHERE CUSTOMERNAME='{shortName}'");
if (!hasNoFee)
{
strSql.AppendLine("AND (SELECT COUNT(1) FROM CH_FEE WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME=S.CUSTOMERNAME AND BSNO=S.BSNO)>0");
}
if (!string.IsNullOrWhiteSpace(condition))
{
var obj = new { VESSEL = "", VOYNO = "", MBLNO = "", INVNO = "", BSNO = "" };
var jsonObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(condition, obj);
if (!string.IsNullOrWhiteSpace(jsonObj.VESSEL))
{
strSql.Append($" and VESSEL like '%{jsonObj.VESSEL.Replace("'", "")}%'");
}
if (!string.IsNullOrWhiteSpace(jsonObj.VOYNO))
{
strSql.Append($" and VOYNO like '%{jsonObj.VOYNO.Replace("'", "")}%'");
}
if (!string.IsNullOrWhiteSpace(jsonObj.MBLNO))
{
strSql.Append($" and MBLNO='{jsonObj.MBLNO.Replace("'", "")}'");
}
if (!string.IsNullOrWhiteSpace(jsonObj.INVNO))
{
strSql.Append($" and INVNO='{jsonObj.INVNO.Replace("'", "")}'");
}
if (!string.IsNullOrWhiteSpace(jsonObj.BSNO))
{
strSql.Append($" and BSNO='{jsonObj.BSNO.Replace("'", "")}'");
}
}
if (!string.IsNullOrEmpty(sort))
{
strSql.AppendLine($" order by {sort} {(string.IsNullOrWhiteSpace(order) ? string.Empty : order)}");
}
else
{
strSql.AppendLine(" order by KaiChuanRi desc");
}
return SetData(strSql);
}
private static List<OpSeaeModel> SetData(StringBuilder strSql)
{
var headList = new List<OpSeaeModel>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
OpSeaeModel data = new OpSeaeModel();
#region Set DB data to Object
data.BSNO = Convert.ToString(reader["BSNO"]);
data.VESSEL = Convert.ToString(reader["VESSEL"]);
data.VOYNO = Convert.ToString(reader["VOYNO"]);
data.MBLNO = Convert.ToString(reader["MBLNO"]);
data.INVNO = Convert.ToString(reader["INVNO"]);
data.CNTRTOTAL = Convert.ToString(reader["CNTRTOTAL"]);
data.KGS = Convert.ToString(reader["KGS"]);
data.YARD = Convert.ToString(reader["YARD"]);
data.CNTRSEALNO = Convert.ToString(reader["CNTRSEALNO"]);
data.CUSTOMNO = Convert.ToString(reader["CUSTOMNO"]);
data.FACTORYADDR = Convert.ToString(reader["FACTORYADDR"]);
data.CARGODATE = Convert.ToString(reader["CARGODATE"]);
data.SERVICECONTRACTNO = Convert.ToString(reader["SERVICECONTRACTNO"]);
data.LAST_STATUS = Convert.ToString(reader["LAST_STATUS"]);
if (reader["STA_ZXFC"] != DBNull.Value)
data.STA_ZXFC = Convert.ToString(reader["STA_ZXFC"]);
if (reader["STA_HGFX"] != DBNull.Value)
data.STA_HGFX = Convert.ToString(reader["STA_HGFX"]);
if (reader["ETD"] != DBNull.Value)
data.ETD = Convert.ToDateTime(reader["ETD"]).ToString("yyyy-MM-dd");
if (reader["ATD"] != DBNull.Value)
data.ATD = Convert.ToDateTime(reader["ATD"]).ToString("yyyy-MM-dd");
if (reader["ETA"] != DBNull.Value)
data.ETA = Convert.ToDateTime(reader["ETA"]).ToString("yyyy-MM-dd");
if (reader["AMOUNT_RMB"] != DBNull.Value)
data.AMOUNT_RMB = Convert.ToDecimal(reader["AMOUNT_RMB"]);
if (reader["AMOUNT_USD"] != DBNull.Value)
data.AMOUNT_USD = Convert.ToDecimal(reader["AMOUNT_USD"]);
if (reader["KaiChuanRi"] != DBNull.Value)
data.KaiChuanRi = Convert.ToDateTime(reader["KaiChuanRi"]).ToString("yyyy-MM-dd");
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#endregion
#region 查询-报表
static public List<OpSeaeReportModel> GetReportDataList(string shortName, string condition = null, string sort = null, string order = null)
{
var strSql = new StringBuilder();
strSql.AppendLine("SELECT BSNO,MBLNO,INVNO,CNTRTOTAL,ACCDATE,");
strSql.AppendLine("ISNULL((SELECT TOP 1 FACTRYTIME FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE),'') FACTRYTIME,");
strSql.AppendLine("(SELECT SUM(AMOUNT) FROM CH_FEE WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME=S.CUSTOMERNAME AND BSNO=S.BSNO AND CURRENCY='RMB') AMOUNT_RMB,");
strSql.AppendLine("(SELECT SUM(AMOUNT) FROM CH_FEE WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME=S.CUSTOMERNAME AND BSNO=S.BSNO AND CURRENCY='USD') AMOUNT_USD,");
strSql.AppendLine("ISNULL((SELECT TOP 1 COMPTIME from OP_STATUS WHERE BSNO=S.BSNO AND STATUS='装船出运'),ETD) KaiChuanRi");
strSql.AppendLine("FROM OP_SEAE S");
strSql.AppendLine($"WHERE CUSTOMERNAME='{shortName}'");
if (!string.IsNullOrWhiteSpace(condition))
{
DateTime? dtDef = DateTime.MinValue;
var obj = new
{
ACCDATE_START = "",
KaiChuanRi_START = dtDef,
FACTRYTIME_START = dtDef,
ACCDATE_END = "",
KaiChuanRi_END = dtDef,
FACTRYTIME_END = dtDef
};
var jsonObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(condition, obj);
if (!string.IsNullOrEmpty(jsonObj.ACCDATE_START))
{
strSql.Append($" and ACCDATE >= '{jsonObj.ACCDATE_START}'");
}
if (!string.IsNullOrEmpty(jsonObj.ACCDATE_END))
{
strSql.Append($" and ACCDATE <= '{jsonObj.ACCDATE_END}'");
}
//查询结果中,开船日可能是实际开船日,也可能是录入的开船日期,条件筛选时,只按照实际开船日期筛选
if (jsonObj.KaiChuanRi_START.HasValue && jsonObj.KaiChuanRi_START != DateTime.MinValue)
{
strSql.Append($" and (SELECT TOP 1 COMPTIME from OP_STATUS WHERE BSNO=S.BSNO AND STATUS='装船出运') >= '{jsonObj.KaiChuanRi_START.Value.ToString("yyyy-MM-dd")}'");
}
if (jsonObj.KaiChuanRi_END.HasValue && jsonObj.KaiChuanRi_END != DateTime.MinValue)
{
strSql.Append($" and (SELECT TOP 1 COMPTIME from OP_STATUS WHERE BSNO=S.BSNO AND STATUS='装船出运') < '{jsonObj.KaiChuanRi_END.Value.AddDays(1).ToString("yyyy-MM-dd")}'");
}
if (jsonObj.FACTRYTIME_START.HasValue && jsonObj.FACTRYTIME_START != DateTime.MinValue)
{
strSql.Append($" and (SELECT TOP 1 FACTRYTIME FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE) >= '{jsonObj.FACTRYTIME_START.Value.ToString("yyyy-MM-dd")}'");
}
if (jsonObj.FACTRYTIME_END.HasValue && jsonObj.FACTRYTIME_END != DateTime.MinValue)
{
strSql.Append($" and (SELECT TOP 1 FACTRYTIME FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE) < '{jsonObj.FACTRYTIME_END.Value.AddDays(1).ToString("yyyy-MM-dd")}'");
}
}
if (!string.IsNullOrEmpty(sort))
{
strSql.AppendLine($" order by {sort} {(string.IsNullOrWhiteSpace(order) ? string.Empty : order)}");
}
else
{
strSql.AppendLine(" order by KaiChuanRi desc");
}
return SetDataReport(strSql, shortName);
}
private static List<OpSeaeReportModel> SetDataReport(StringBuilder strSql, string shortName)
{
var headList = new List<OpSeaeReportModel>();
Database db = DatabaseFactory.CreateDatabase();
var dsOpSeae = db.ExecuteDataSet(CommandType.Text, strSql.ToString());
foreach (DataRow dr in dsOpSeae.Tables[0].Rows)
{
OpSeaeReportModel data = new OpSeaeReportModel();
#region Set DB data to Object
data.BSNO = Convert.ToString(dr["BSNO"]);
data.MBLNO = Convert.ToString(dr["MBLNO"]);
data.INVNO = Convert.ToString(dr["INVNO"]);
data.CNTRTOTAL = Convert.ToString(dr["CNTRTOTAL"]);
data.ACCDATE = Convert.ToString(dr["ACCDATE"]);
if (dr["AMOUNT_RMB"] != DBNull.Value)
data.AMOUNT_RMB = Convert.ToDecimal(dr["AMOUNT_RMB"]);
if (dr["AMOUNT_USD"] != DBNull.Value)
data.AMOUNT_USD = Convert.ToDecimal(dr["AMOUNT_USD"]);
if (dr["KaiChuanRi"] != DBNull.Value)
data.KaiChuanRi = Convert.ToDateTime(dr["KaiChuanRi"]).ToString("yyyy-MM-dd");
if (dr["FACTRYTIME"] != DBNull.Value && !string.IsNullOrEmpty(dr["FACTRYTIME"].ToString()))
data.FACTRYTIME = Convert.ToDateTime(dr["FACTRYTIME"]).ToString("yyyy-MM-dd");
#endregion
headList.Add(data);
data.FeeList = GetReportFeeList(shortName, data.BSNO);
}
return headList;
}
#region 查询费用数据
public static List<ChFeeModel> GetReportFeeList(string shortName, string BSNO)
{
var strSql = new StringBuilder();
strSql.AppendLine("SELECT FEENAME,UNIT,UNITPRICE,QUANTITY,AMOUNT,CURRENCY,EXCHANGERATE");
strSql.AppendLine("FROM CH_FEE");
strSql.AppendLine($"WHERE FEETYPE=1 AND FEESTATUS IN (0,8,9) AND CUSTOMERNAME='{shortName}' AND BSNO='{BSNO}'");
strSql.AppendLine(" ORDER BY SORT,LINENUM ");
return SetDataFee(strSql);
}
private static List<ChFeeModel> SetDataFee(StringBuilder strSql)
{
var bodyList = new List<ChFeeModel>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
ChFeeModel data = new ChFeeModel();
#region Set DB data to Object
data.FeeName = Convert.ToString(reader["FeeName"]);
data.Unit = Convert.ToString(reader["Unit"]);
data.UnitPrice = Convert.ToString(reader["UnitPrice"]);
data.Quantity = Convert.ToString(reader["Quantity"]);
data.Amount = Convert.ToString(reader["Amount"]);
data.Currency = Convert.ToString(reader["Currency"]);
data.ExChangerate = Convert.ToString(reader["ExChangerate"]);
#endregion
bodyList.Add(data);
}
reader.Close();
}
return bodyList;
}
#endregion
#endregion
public static OpSeaeModel GetOneByBSNO(string bsno)
{
var strSql = new StringBuilder();
strSql.AppendLine("SELECT BSNO,VESSEL,VOYNO,MBLNO,INVNO,ETD,ATD,CNTRTOTAL,KGS,YARD,CNTRSEALNO,CUSTOMNO,");
strSql.AppendLine("(SELECT dbo.Fun_JoinFactoryAddr(S.BSNO)) FACTORYADDR,");
strSql.AppendLine("ISNULL((SELECT TOP 1 CARGODATE FROM OP_LETTER_TRUCK WHERE BSNO=S.BSNO ORDER BY TRUCKDATE DESC),'') CARGODATE,");
strSql.AppendLine("(SELECT COMPTIME FROM OP_STATUS WHERE BSNO=S.BSNO AND ISCOMP=1 and [status]='重箱返场') STA_ZXFC,");
strSql.AppendLine("(SELECT COMPTIME FROM OP_STATUS WHERE BSNO=S.BSNO AND ISCOMP=1 and [status]='海关放行') STA_HGFX");
strSql.AppendLine("FROM OP_SEAE S");
strSql.AppendLine($"WHERE BSNO='{bsno}'");
var list = SetData(strSql);
if (list.Count > 0)
{
return list[0];
}
return null;
}
}
}