|
|
|
|
using System;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using Microsoft.Practices.EnterpriseLibrary.Data;
|
|
|
|
|
using DSWeb.Areas.CommMng.Models;
|
|
|
|
|
using HcUtility.Comm;
|
|
|
|
|
using DSWeb.Areas.CommMng.DAL;
|
|
|
|
|
using DSWeb.MvcShipping.Helper;
|
|
|
|
|
using DSWeb.MvcShipping.Models.MsStevedores;
|
|
|
|
|
using System.Transactions;
|
|
|
|
|
using System.Data.SqlClient;
|
|
|
|
|
using DSWeb.DataAccess;
|
|
|
|
|
using DSWeb.Areas.MvcShipping.Models.MsOpCtnFeeSearch;
|
|
|
|
|
using DSWeb.MvcShipping.Models.MsOpCtnStatus;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using DSWeb.Areas.MvcShipping.Models.MsOpCtnFeeModelModel;
|
|
|
|
|
using DSWeb.Areas.MvcShipping.DAL.MsOpCtnFeeModelDAL;
|
|
|
|
|
|
|
|
|
|
namespace DSWeb.Areas.MvcShipping.DAL.MsOpCtnFeeSearchDAL
|
|
|
|
|
{
|
|
|
|
|
public class MsOpCtnFeeSearchDAL
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public static List<MsOpCtnFee> GetFeeDataList ( string condition )
|
|
|
|
|
{
|
|
|
|
|
string sql = @" select *,MBLNO= (
|
|
|
|
|
STUFF(
|
|
|
|
|
(SELECT '/' + MBLNO
|
|
|
|
|
FROM Op_Ctn_FeeDetails
|
|
|
|
|
WHERE FeeNo = Op_Ctn_Fee.FeeNo
|
|
|
|
|
FOR xml path('')
|
|
|
|
|
),1,1,''
|
|
|
|
|
)
|
|
|
|
|
) from Op_Ctn_Fee where 1=1 ";
|
|
|
|
|
if (condition != "" && condition != null)
|
|
|
|
|
{
|
|
|
|
|
sql = sql + " and " + condition;
|
|
|
|
|
}
|
|
|
|
|
List<MsOpCtnFee> list = new List<MsOpCtnFee>();
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql.ToString()))
|
|
|
|
|
{
|
|
|
|
|
while (reader.Read())
|
|
|
|
|
{
|
|
|
|
|
MsOpCtnFee f = new MsOpCtnFee();
|
|
|
|
|
f.FeeNo = reader["FeeNo"].ToString();
|
|
|
|
|
f.Amount = reader["Amount"].ToString();
|
|
|
|
|
f.GID = reader["GID"].ToString();
|
|
|
|
|
f.MBLNO = reader["MBLNO"].ToString();
|
|
|
|
|
f.PayCust = reader["PayCust"].ToString();
|
|
|
|
|
list.Add(f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static List<MsOpCtnFeeSearch> GetDataList ( string condition )
|
|
|
|
|
{
|
|
|
|
|
List<MsCtnStatus> listStatus = MsOpCtnStatusDAL.GetDataStatusList(condition,"order by blno,box_no,cctime,jctime");
|
|
|
|
|
List<MsOpCtnFeeSearch> list = new List<MsOpCtnFeeSearch>();
|
|
|
|
|
string blnotemp = "";
|
|
|
|
|
foreach (var item in listStatus)
|
|
|
|
|
{
|
|
|
|
|
//提单号
|
|
|
|
|
if (blnotemp!=item.blno)
|
|
|
|
|
{
|
|
|
|
|
blnotemp = item.blno;
|
|
|
|
|
//箱号
|
|
|
|
|
string xianghaotemp = "";
|
|
|
|
|
foreach (var item2 in listStatus.FindAll(s=>s.blno==blnotemp))
|
|
|
|
|
{
|
|
|
|
|
if (xianghaotemp!=item2.box_no)
|
|
|
|
|
{
|
|
|
|
|
xianghaotemp = item2.box_no;
|
|
|
|
|
|
|
|
|
|
//遍历同提单号、同箱号的数据
|
|
|
|
|
//获取最大的时间cctime
|
|
|
|
|
DateTime cctimetemp = DateTime.MinValue;
|
|
|
|
|
string cctimestr = "";
|
|
|
|
|
foreach (var item3 in listStatus.FindAll(s=>s.blno==blnotemp&&s.box_no==xianghaotemp))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (item3.cctime=="")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
var cctime = DateTime.Parse(item3.cctime);
|
|
|
|
|
if (cctime>=cctimetemp)
|
|
|
|
|
{
|
|
|
|
|
cctimestr = item3.cctime;
|
|
|
|
|
cctimetemp = cctime;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//遍历同提单号、同箱号的数据
|
|
|
|
|
//获取最大的时间cctime
|
|
|
|
|
DateTime jctimetemp = DateTime.MinValue;
|
|
|
|
|
string jctimestr = "";
|
|
|
|
|
foreach (var item3 in listStatus.FindAll(s => s.blno == blnotemp && s.box_no == xianghaotemp))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (item3.jctime == "")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
var jctime = DateTime.Parse(item3.jctime);
|
|
|
|
|
if (jctime >= jctimetemp)
|
|
|
|
|
{
|
|
|
|
|
jctimestr = item3.jctime;
|
|
|
|
|
jctimetemp = jctime;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//如果进场时间jctime>出场时间cctime
|
|
|
|
|
//则去进场时间的最大的那一条数据
|
|
|
|
|
if (jctimetemp>cctimetemp)
|
|
|
|
|
{
|
|
|
|
|
var temp4 = listStatus.Find(s => s.blno == blnotemp && s.box_no == xianghaotemp && s.jctime == jctimestr);
|
|
|
|
|
|
|
|
|
|
MsOpCtnFeeSearch ms = new MsOpCtnFeeSearch();
|
|
|
|
|
ms.MBLNO = temp4.blno;
|
|
|
|
|
ms.XiangHao = temp4.box_no;
|
|
|
|
|
ms.ZhuangTai = temp4.jcyy;
|
|
|
|
|
ms.Time = temp4.jctime;
|
|
|
|
|
ms.HangCi = temp4.voyage;
|
|
|
|
|
ms.ChuanMing = temp4.vessel;
|
|
|
|
|
ms.ZhuangTai = temp4.jcyy;
|
|
|
|
|
ms.DuiChangMaTou = temp4.cz;
|
|
|
|
|
ms.XiangXing = temp4.cntrsize;
|
|
|
|
|
list.Add(ms);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var temp4 = listStatus.Find(s => s.blno == blnotemp && s.box_no == xianghaotemp && s.cctime == cctimestr);
|
|
|
|
|
|
|
|
|
|
MsOpCtnFeeSearch ms = new MsOpCtnFeeSearch();
|
|
|
|
|
ms.MBLNO = temp4.blno;
|
|
|
|
|
ms.XiangHao = temp4.box_no;
|
|
|
|
|
ms.ZhuangTai = temp4.jcyy;
|
|
|
|
|
ms.Time = temp4.cctime;
|
|
|
|
|
ms.HangCi = temp4.voyage;
|
|
|
|
|
ms.ChuanMing = temp4.vessel;
|
|
|
|
|
ms.ZhuangTai = temp4.jcyy;
|
|
|
|
|
ms.DuiChangMaTou = temp4.cz;
|
|
|
|
|
ms.XiangXing = temp4.cntrsize;
|
|
|
|
|
list.Add(ms);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//GetCtnDataList
|
|
|
|
|
public static List<MsOpCtnFeeSearch> GetCtnDataList ( string condition ="")
|
|
|
|
|
{
|
|
|
|
|
string sql = "SELECT DISTINCT blno,box_no,vessel,voyage from container_business where 1=1 ";
|
|
|
|
|
if (condition!=""&&condition!=null)
|
|
|
|
|
{
|
|
|
|
|
sql = sql + " " + condition;
|
|
|
|
|
}
|
|
|
|
|
List<MsOpCtnFeeSearch> list = new List<MsOpCtnFeeSearch>();
|
|
|
|
|
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql.ToString()))
|
|
|
|
|
{
|
|
|
|
|
while (reader.Read())
|
|
|
|
|
{
|
|
|
|
|
MsOpCtnFeeSearch f = new MsOpCtnFeeSearch();
|
|
|
|
|
f.MBLNO = reader["blno"].ToString();
|
|
|
|
|
f.XiangHao = reader["box_no"].ToString();
|
|
|
|
|
f.ChuanMing = reader["vessel"].ToString();
|
|
|
|
|
f.HangCi = reader["voyage"].ToString();
|
|
|
|
|
List<MsOpCtnFeeSearchDetails> listtemp = GetDetailsWithMBLNOAndXiangHao(f.MBLNO,f.XiangHao);
|
|
|
|
|
f.Amount = listtemp.FindAll(l=>l.DuiZhangRiQi==null || l.DuiZhangRiQi=="").Sum(s=>float.Parse(s.FeiYong)).ToString();
|
|
|
|
|
var duizhangriqiFrom = listtemp.Find(l => l.ZhuangTai == "空箱出场");
|
|
|
|
|
|
|
|
|
|
if (duizhangriqiFrom!=null&&duizhangriqiFrom.ToString()!="")
|
|
|
|
|
{
|
|
|
|
|
f.DuiZhangRiQiFrom = duizhangriqiFrom.Time;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
f.DuiZhangRiQiFrom = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
list.Add(f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static List<MsOpCtnFeeSearchDetails> GetDetailsWithMBLNOAndXiangHao (string mblno,string xianghao) {
|
|
|
|
|
string sql = "select (select cntype from container_info where cntrno=container_business.box_no) xiangxing,* from container_business where blno = '" + mblno + "' and box_no = '" + xianghao + "' order by opertime";
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
List<MsOpCtnFeeSearch> listMain = new List<MsOpCtnFeeSearch>();
|
|
|
|
|
using (IDataReader reader = db.ExecuteReader(CommandType.Text, sql.ToString()))
|
|
|
|
|
{
|
|
|
|
|
while (reader.Read())
|
|
|
|
|
{
|
|
|
|
|
MsOpCtnFeeSearch f = new MsOpCtnFeeSearch();
|
|
|
|
|
f.MBLNO = reader["blno"].ToString();
|
|
|
|
|
f.XiangHao = reader["box_no"].ToString();
|
|
|
|
|
f.ChuanMing = reader["vessel"].ToString();
|
|
|
|
|
f.HangCi = reader["voyage"].ToString();
|
|
|
|
|
f.ZhuangTai = reader["jcyy"].ToString();
|
|
|
|
|
f.CcTime = reader["cctime"].ToString();
|
|
|
|
|
f.JcTime = reader["jctime"].ToString();
|
|
|
|
|
f.DuiChangMaTou = reader["cz"].ToString();
|
|
|
|
|
f.XiangXing = reader["xiangxing"].ToString();
|
|
|
|
|
f.KaiHangRi = reader["etd"].ToString();
|
|
|
|
|
f.DaoGangRi = reader["reachtime"].ToString();
|
|
|
|
|
f.DuiZhangRiQi = reader["duizhangriqi"].ToString();
|
|
|
|
|
listMain.Add(f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<MsOpCtnFeeSearchDetails> list = new List<MsOpCtnFeeSearchDetails>();
|
|
|
|
|
foreach (var item in listMain)
|
|
|
|
|
{
|
|
|
|
|
MsOpCtnFeeSearchDetails d = new MsOpCtnFeeSearchDetails();
|
|
|
|
|
d.ZhuangTai = item.ZhuangTai;
|
|
|
|
|
string time = "";
|
|
|
|
|
if (item.CcTime==""||item.CcTime==null)
|
|
|
|
|
{
|
|
|
|
|
time = item.JcTime;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
time = item.CcTime;
|
|
|
|
|
}
|
|
|
|
|
d.MBLNO = item.MBLNO;
|
|
|
|
|
d.XiangHao = item.XiangHao;
|
|
|
|
|
d.Time = time;
|
|
|
|
|
d.DiDian = item.DuiChangMaTou;
|
|
|
|
|
d.XiangXing = item.XiangXing;
|
|
|
|
|
d.FeiYong = calcFee(d,listMain).ToString();
|
|
|
|
|
d.YongXiangTianShu = calcDays(d,listMain).ToString();
|
|
|
|
|
d.DuiZhangRiQi = item.DuiZhangRiQi;
|
|
|
|
|
list.Add(d);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 计算费用
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private static float calcFee ( MsOpCtnFeeSearchDetails d, List<MsOpCtnFeeSearch> m )
|
|
|
|
|
{
|
|
|
|
|
string code = "";
|
|
|
|
|
//获取费率模板
|
|
|
|
|
//如果是空箱还场、则取卸船码头的费用模板
|
|
|
|
|
if (d.ZhuangTai=="空箱还场")
|
|
|
|
|
{
|
|
|
|
|
var port = m.Find(f=>f.ZhuangTai=="卸船");
|
|
|
|
|
if (port!=null)
|
|
|
|
|
{
|
|
|
|
|
code = port.DuiChangMaTou;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
code = GetDiDianCodeWithDiDian(d.DiDian);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string wheresql = @" MainGID = (select GID from Op_Ctn_FEEMODEL where PortAndYardCode = '" + code + "') and XiangXing = '"+d.XiangXing+"'";
|
|
|
|
|
|
|
|
|
|
List<MsOpCtnFeeDetailsModel> modelList = MsOpCtnFeeModelDAL.MsOpCtnFeeModelDAL.GetDataDetailsList(wheresql);
|
|
|
|
|
//用箱天数
|
|
|
|
|
int days = calcDays(d, m);
|
|
|
|
|
//箱使费
|
|
|
|
|
bool isFreeDayCalc =false;
|
|
|
|
|
switch (d.ZhuangTai)
|
|
|
|
|
{
|
|
|
|
|
case "卸船":
|
|
|
|
|
isFreeDayCalc=true;
|
|
|
|
|
break;
|
|
|
|
|
case "出闸口":
|
|
|
|
|
isFreeDayCalc=true;
|
|
|
|
|
break;
|
|
|
|
|
case "空箱还场":
|
|
|
|
|
isFreeDayCalc=true;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
float fee = GetFeeWithTimeDiffAndFeeModels(days,modelList,isFreeDayCalc,d.ZhuangTai,d.MBLNO);
|
|
|
|
|
|
|
|
|
|
return fee;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 计算用箱天数
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="d"></param>
|
|
|
|
|
/// <param name="m"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private static int calcDays ( MsOpCtnFeeSearchDetails d, List<MsOpCtnFeeSearch> m )
|
|
|
|
|
{
|
|
|
|
|
int days = 0;
|
|
|
|
|
string time1 = "";
|
|
|
|
|
string time2 = "";
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
switch (d.ZhuangTai)
|
|
|
|
|
{
|
|
|
|
|
case "空箱出场":
|
|
|
|
|
break;
|
|
|
|
|
case "装船":
|
|
|
|
|
//空箱出场-装船 天数差
|
|
|
|
|
time1 = m.Find(f => f.ZhuangTai == "空箱出场").CcTime.ToString();
|
|
|
|
|
time2 = m.Find(f => f.ZhuangTai == "装船").JcTime.ToString();
|
|
|
|
|
days = GetTimeDiff(time1, time2);
|
|
|
|
|
break;
|
|
|
|
|
case "卸船":
|
|
|
|
|
break;
|
|
|
|
|
case "出闸口":
|
|
|
|
|
time1 = m.Find(f => f.ZhuangTai == "卸船").JcTime.ToString();
|
|
|
|
|
time2 = m.Find(f => f.ZhuangTai == "出闸口").CcTime.ToString();
|
|
|
|
|
days = GetTimeDiff(time1, time2);
|
|
|
|
|
break;
|
|
|
|
|
case "空箱还场":
|
|
|
|
|
var temp = m.Find(f => f.ZhuangTai == "出闸口");
|
|
|
|
|
if (temp == null)
|
|
|
|
|
{
|
|
|
|
|
//无闸口信息
|
|
|
|
|
time1 = m.Find(f => f.ZhuangTai == "卸船").JcTime.ToString();
|
|
|
|
|
time2 = m.Find(f => f.ZhuangTai == "空箱还场").JcTime.ToString();
|
|
|
|
|
days = GetTimeDiff(time1, time2);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//有闸口信息
|
|
|
|
|
time1 = m.Find(f => f.ZhuangTai == "出闸口").CcTime.ToString();
|
|
|
|
|
time2 = m.Find(f => f.ZhuangTai == "空箱还场").JcTime.ToString();
|
|
|
|
|
days = GetTimeDiff(time1, time2);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
days = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return days;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static string GetDiDianCodeWithDiDian ( string d)
|
|
|
|
|
{
|
|
|
|
|
//场站
|
|
|
|
|
|
|
|
|
|
string sql1 = "select codename from info_client where shortname = '"+d+"' ";
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
var code = db.ExecuteScalar(CommandType.Text,sql1);
|
|
|
|
|
if (code==null||code.ToString()=="")
|
|
|
|
|
{
|
|
|
|
|
//港口
|
|
|
|
|
return d;
|
|
|
|
|
}
|
|
|
|
|
return code.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取天数差
|
|
|
|
|
private static int GetTimeDiff (string d1str,string d2str) {
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
DateTime d1 = DateTime.Parse(d1str);
|
|
|
|
|
DateTime d2 = DateTime.Parse(d2str);
|
|
|
|
|
TimeSpan ts1 = new TimeSpan(d1.Ticks);
|
|
|
|
|
TimeSpan ts2 = new TimeSpan(d2.Ticks);
|
|
|
|
|
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
|
|
|
|
|
return Convert.ToInt32(ts3.TotalDays);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据模板、提单号、天数获取费用
|
|
|
|
|
private static float GetFeeWithTimeDiffAndFeeModels ( int timeDiff, List<MsOpCtnFeeDetailsModel> modelList,bool checkShipingBoxFreeDays,string StatusStr,string blno="")
|
|
|
|
|
{
|
|
|
|
|
//剩余的天数
|
|
|
|
|
int residueDays = timeDiff;
|
|
|
|
|
float fee = 0f;
|
|
|
|
|
//查询shippingbox订舱时填写的免箱期
|
|
|
|
|
int FreeDays2 = 0;
|
|
|
|
|
int FreeDays1 = GetFreeDaysWithBLNO(blno,out FreeDays2);
|
|
|
|
|
|
|
|
|
|
foreach (var item in modelList)
|
|
|
|
|
{
|
|
|
|
|
if (checkShipingBoxFreeDays)
|
|
|
|
|
{
|
|
|
|
|
if (item.JiFeiDengJi == "1")
|
|
|
|
|
{
|
|
|
|
|
if (StatusStr=="卸船")
|
|
|
|
|
{
|
|
|
|
|
if (FreeDays1 > Convert.ToInt32(item.JiFeiQuJian))
|
|
|
|
|
{
|
|
|
|
|
residueDays -= (FreeDays1 - Convert.ToInt32(item.JiFeiQuJian));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (StatusStr=="出闸口")
|
|
|
|
|
{
|
|
|
|
|
if (FreeDays2 > Convert.ToInt32(item.JiFeiQuJian))
|
|
|
|
|
{
|
|
|
|
|
residueDays -= (FreeDays2 - Convert.ToInt32(item.JiFeiQuJian));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (residueDays<Convert.ToInt32(item.JiFeiQuJian))
|
|
|
|
|
{
|
|
|
|
|
fee += float.Parse(item.JiFeiDanJia) * (Math.Abs(residueDays));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
residueDays = residueDays - Convert.ToInt32(item.JiFeiQuJian);
|
|
|
|
|
fee += float.Parse(item.JiFeiDanJia) * Convert.ToInt32(item.JiFeiQuJian);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return fee;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool Save ( MsOpCtnFee fee,List<MsOpCtnFeeSearch> detailsList, string duizhangriqi, string opstatus )
|
|
|
|
|
{
|
|
|
|
|
if (fee.GID == "" || fee.GID == null || opstatus=="add")
|
|
|
|
|
{
|
|
|
|
|
//新建
|
|
|
|
|
if (true)
|
|
|
|
|
{
|
|
|
|
|
string newguid = Guid.NewGuid().ToString();
|
|
|
|
|
string feeno = GetFeeNo();
|
|
|
|
|
StringBuilder sbmain = new StringBuilder();
|
|
|
|
|
sbmain.Append("insert into Op_Ctn_Fee values(");
|
|
|
|
|
sbmain.Append("'" + newguid + "','" + feeno + "',0,'"+fee.PayCust+"')");
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
db.ExecuteNonQuery(CommandType.Text,sbmain.ToString());
|
|
|
|
|
//更新集装箱动态表
|
|
|
|
|
string mblnos = "";
|
|
|
|
|
string xianghaos = "";
|
|
|
|
|
foreach (var item in detailsList)
|
|
|
|
|
{
|
|
|
|
|
mblnos += "'" + item.MBLNO + "',";
|
|
|
|
|
xianghaos += "'"+item.XiangHao+"',";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mblnos=mblnos.Length>0?mblnos.Substring(0,mblnos.Length-1):"";
|
|
|
|
|
xianghaos = xianghaos.Length > 0 ? xianghaos.Substring(0, xianghaos.Length - 1) : "";
|
|
|
|
|
if (mblnos==""||xianghaos=="")
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StringBuilder sbDetails = new StringBuilder();
|
|
|
|
|
sbDetails.Append("update container_business ");
|
|
|
|
|
sbDetails.Append("set duizhangriqi = '" + duizhangriqi + "'");
|
|
|
|
|
sbDetails.Append(" where blno in (" + mblnos + ") and box_no in (" + xianghaos + ") and (cctime<'" + duizhangriqi + "' or jctime < '"+duizhangriqi+"')");
|
|
|
|
|
bool rst = db.ExecuteNonQuery(CommandType.Text,sbDetails.ToString())>0;
|
|
|
|
|
return rst;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string[] codename = fee.PayCust.Split('-');
|
|
|
|
|
string code = "";
|
|
|
|
|
if (codename.Length > 1)
|
|
|
|
|
{
|
|
|
|
|
code = codename[0];
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
code = fee.PayCust;
|
|
|
|
|
}
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
sb.Append("update Op_Ctn_Fee ");
|
|
|
|
|
sb.Append("set PayCust = '" + code + "',");
|
|
|
|
|
sb.Append(" FeeNo = '" + fee.FeeNo + "'");
|
|
|
|
|
sb.Append("where GID = '" + fee.GID + "'");
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
bool rst = db.ExecuteNonQuery(CommandType.Text,sb.ToString())>0;
|
|
|
|
|
return rst;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static string GetFeeNo ( ) {
|
|
|
|
|
DateTime now = DateTime.Now;
|
|
|
|
|
string name = "CTNDZ" + now.Year.ToString() + now.Month.ToString() + now.Day
|
|
|
|
|
+ now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString();
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static int GetFreeDaysWithBLNO (string BLNO,out int FreeDays2)
|
|
|
|
|
{
|
|
|
|
|
FreeDays2 = 0;
|
|
|
|
|
if (BLNO=="")
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase("SHIPPINGBOX");
|
|
|
|
|
string sql = "select FREEDAYS1 from BookingCargoSpace where MBLNO = '" + BLNO + "'";
|
|
|
|
|
int freedays1 = Convert.ToInt32(db.ExecuteScalar(CommandType.Text, sql));
|
|
|
|
|
string sql2 = "select FREEDAYS2 from BookingCargoSpace where MBLNO = '" + BLNO + "'";
|
|
|
|
|
int freedays2 = Convert.ToInt32(db.ExecuteScalar(CommandType.Text, sql2));
|
|
|
|
|
FreeDays2 = freedays2;
|
|
|
|
|
return freedays1;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static float GetTotalRealWithMsOpCtnFeeSearchList (List<MsOpCtnFeeSearch> list)
|
|
|
|
|
{
|
|
|
|
|
float total = 0f;
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
{
|
|
|
|
|
float c = GetRealFeeWithMBLNOAndXiangHao(item.MBLNO, item.XiangHao);
|
|
|
|
|
total += c;
|
|
|
|
|
}
|
|
|
|
|
return total;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 根据时间、提单号、箱号,获取实际入账的费用
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="timePoint"></param>
|
|
|
|
|
/// <param name="MBLNO"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static float GetRealFeeWithMBLNOAndXiangHao (string MBLNO,string XiangHao )
|
|
|
|
|
{
|
|
|
|
|
string timeStr = DateTime.Now.ToString("yyyy-MM-dd");
|
|
|
|
|
List<MsOpCtnFeeSearchDetails> detailList = GetDetailsWithMBLNOAndXiangHao(MBLNO, XiangHao);
|
|
|
|
|
|
|
|
|
|
float sum = detailList.Sum(d => float.Parse(d.FeiYong));
|
|
|
|
|
float lastTotal = 0f;
|
|
|
|
|
foreach (var item in detailList)
|
|
|
|
|
{
|
|
|
|
|
lastTotal += GetTotalFeeDetails(item, timeStr);
|
|
|
|
|
}
|
|
|
|
|
return sum-lastTotal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static float GetTotalFeeDetails (MsOpCtnFeeSearchDetails d,string timeStr) {
|
|
|
|
|
//获取已经对账的数额
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
sb.Append("select sum(duizhangjine) from Op_Ctn_FeeDuiZhuang ");
|
|
|
|
|
sb.Append(" where ");
|
|
|
|
|
sb.Append(" duizhangtime < '" + timeStr + "'");
|
|
|
|
|
sb.Append("and mblno = '"+d.MBLNO+"' ");
|
|
|
|
|
sb.Append("and xianghao = '"+d.XiangHao+"'");
|
|
|
|
|
Database db = DatabaseFactory.CreateDatabase();
|
|
|
|
|
var rst = db.ExecuteScalar(CommandType.Text, sb.ToString());
|
|
|
|
|
float total = float.Parse(rst==DBNull.Value?"0":rst.ToString());
|
|
|
|
|
return total;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|