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.
690 lines
41 KiB
C#
690 lines
41 KiB
C#
using log4net;
|
|
using Newtonsoft.Json;
|
|
using Quartz;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using JobAutoCreateFee.Model;
|
|
|
|
|
|
namespace JobCreateFee
|
|
{
|
|
public class JobCreateFee : IJob
|
|
{
|
|
private ILog log = LogManager.GetLogger(typeof(JobCreateFee));
|
|
|
|
public void Execute(IJobExecutionContext context)
|
|
{
|
|
|
|
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
|
|
string reqUrl = context.JobDetail.JobDataMap.GetString("ReqUrl");
|
|
string companyCode = context.JobDetail.JobDataMap.GetString("CompanyCode");
|
|
string companySecret = context.JobDetail.JobDataMap.GetString("CompanySecret");
|
|
string querySql = context.JobDetail.JobDataMap.GetString("QuerySql");
|
|
string projectquerySql = context.JobDetail.JobDataMap.GetString("projectquerySql");
|
|
|
|
|
|
using (SqlConnection dbcon = new SqlConnection(connStr))
|
|
{
|
|
decimal usdexrate = GetUsdExrate(dbcon);
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("select * from t_ch_project_auto where (费用类别='场站' OR 费用类别='舱单' OR 费用类别='VGM' OR 费用类别='代理费' OR 费用类别='云港通VGM') and 开始日期<=GETDATE() AND (结束日期>=GETDATE() or isnull(结束日期,'')='') " + projectquerySql + " order by 默认方案,优先级 desc ");
|
|
|
|
|
|
SqlCommand cmd = new SqlCommand();
|
|
cmd.CommandText = strSql.ToString();
|
|
cmd.CommandTimeout = 120000; //要加这一句
|
|
cmd.Connection = dbcon;
|
|
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
|
|
DataTable table = new DataTable();
|
|
adapter.Fill(table);
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
var feeprojectlist = CreateFeeProjectList(table);
|
|
if (feeprojectlist != null)
|
|
{
|
|
foreach (var enumFeeproject in feeprojectlist)
|
|
{
|
|
log.Debug($"开始费用方案:{enumFeeproject.FADESCRIP}--{DateTime.Now.ToString()}");
|
|
var bsstr = CreateSql(enumFeeproject.FA_ID, dbcon);
|
|
var strSqlBs = new StringBuilder();
|
|
strSqlBs.Clear();
|
|
strSqlBs.Append("select B.编号,ISNULL(F.编号,'') FEE编号,B.主提单号,B.委托单位,B.船公司,B.货代公司,B.报关行,(select top 1 客户简称 from t_crm_client where EDI代码 IN (SELECT 船代 from t_op_seae_edi where 主提单号=B.主提单号)) 船代,B.场站,B.代理 ");
|
|
strSqlBs.Append(",ISNULL(F.[场站收费],0) 场站收费,ISNULL(F.[场站付费],0) 场站付费,ISNULL(F.[危险品申报收费],0) 危险品申报收费,");
|
|
strSqlBs.Append("ISNULL(F.[危险品申报付费],0) 危险品申报付费,ISNULL(F.[舱单收费],0) 舱单收费,ISNULL(F.[舱单付费],0) 舱单付费,");
|
|
strSqlBs.Append("ISNULL(F.[VGM收费],0) VGM收费,ISNULL(F.[VGM付费],0) VGM付费,ISNULL(F.[云港通VGM收费],0) 云港通VGM收费,ISNULL(F.[云港通VGM付费],0) 云港通VGM付费,ISNULL(F.[操作费收费],0) 操作费收费,ISNULL(F.[操作费付费],0) 操作费付费,ISNULL(F.[独立方案],'') 独立方案");
|
|
strSqlBs.Append(" from t_op_seae B left join t_op_seae_fee F ON (F.编号=B.编号) where B.业务类型='普通货' ");
|
|
//if (enumFeeproject.ISDEP)
|
|
//{
|
|
|
|
//}
|
|
//else
|
|
//{
|
|
if (enumFeeproject.PROJECTTYPE == "场站")
|
|
strSqlBs.Append(" and B.货物标识<>'D' and B.货物标识<>'T' and ISNULL(B.防伪,0)<>1 and B.委托单位 not in (select 委托单位 from t_ch_project_auto_cust) and B.装运方式='整箱' and (ISNULL(F.编号,'')='' or (isnull(F.场站收费,0)=0 or isnull(F.场站付费,0)=0)) ");
|
|
if (enumFeeproject.PROJECTTYPE == "舱单")
|
|
strSqlBs.Append(" and (ISNULL(F.编号,'')='' or (isnull(F.舱单收费,0)=0 or isnull(F.舱单付费,0)=0)) ");
|
|
if (enumFeeproject.PROJECTTYPE == "VGM")
|
|
strSqlBs.Append(" and B.委托单位 not in (select 委托单位 from t_ch_project_auto_cust) and B.装运方式='整箱' and (ISNULL(F.编号,'')='' or (isnull(F.VGM收费,0)=0 or isnull(F.VGM付费,0)=0)) AND ISNULL(B.VGM,0)=1 ");
|
|
if (enumFeeproject.PROJECTTYPE == "云港通VGM")
|
|
strSqlBs.Append(" and B.委托单位 not in (select 委托单位 from t_ch_project_auto_cust) and B.装运方式='整箱' and (ISNULL(F.编号,'')='' or (isnull(F.云港通VGM收费,0)=0 or isnull(F.云港通VGM付费,0)=0)) AND ISNULL(B.云港通VGM,0)=1 ");
|
|
|
|
|
|
if (enumFeeproject.PROJECTTYPE == "代理费")
|
|
strSqlBs.Append(" and B.货物标识<>'D' and B.货物标识<>'T' and B.委托单位 not in (select 委托单位 from t_ch_project_auto_cust) and B.装运方式='整箱' and (ISNULL(F.编号,'')='' or (isnull(F.操作费收费,0)=0 or isnull(F.操作费付费,0)=0)) ");
|
|
//}
|
|
if (querySql!="")
|
|
strSqlBs.Append(querySql);
|
|
|
|
strSqlBs.Append(bsstr);
|
|
log.Debug($"费用方案语句:{strSqlBs.ToString()}");
|
|
SqlCommand cmdBS = new SqlCommand();
|
|
cmdBS.CommandText = strSqlBs.ToString();
|
|
cmdBS.CommandTimeout = 120000; //要加这一句
|
|
cmdBS.Connection = dbcon;
|
|
|
|
SqlDataAdapter bsadapter = new SqlDataAdapter(cmdBS);
|
|
DataTable bstable = new DataTable();
|
|
bsadapter.Fill(bstable);
|
|
dbcon.Close();
|
|
if (bstable.Rows.Count > 0)
|
|
{
|
|
var OpSeaeList = CreateOpSeaList(bstable);
|
|
var FeeTemplateDetailList = GetFeeTemplate(enumFeeproject.FA_ID, dbcon);
|
|
try
|
|
{
|
|
insertFee(OpSeaeList, FeeTemplateDetailList, enumFeeproject, dbcon, usdexrate);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.Debug($"{enumFeeproject.FADESCRIP + " " + enumFeeproject.PROJECTTYPE}生成费用错误:{e.Message}");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
static public List<MsOpSeae> CreateOpSeaList(DataTable table)
|
|
{
|
|
var headList = new List<MsOpSeae>();
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
MsOpSeae data = new MsOpSeae();
|
|
data.BSNO = row["编号"].ToString();
|
|
data.ISBSNO = row["FEE编号"].ToString();
|
|
data.MBLNO= row["主提单号"].ToString();
|
|
data.CUSTOMERNAME = row["委托单位"].ToString();
|
|
data.CARRIER = row["船公司"].ToString();
|
|
data.FORWARDER = row["货代公司"].ToString();
|
|
data.CUSTOMSER = row["报关行"].ToString();
|
|
data.CUSTSERVICE = row["船代"].ToString();
|
|
data.YARD = row["场站"].ToString();
|
|
data.AGENTID = row["代理"].ToString();
|
|
data.ISYARDDR = Convert.ToBoolean(row["场站收费"].ToString());
|
|
data.ISYARDCR = Convert.ToBoolean(row["场站付费"].ToString());
|
|
data.ISDGDR = Convert.ToBoolean(row["危险品申报收费"].ToString());
|
|
data.ISDGCR = Convert.ToBoolean(row["危险品申报付费"].ToString());
|
|
data.ISCDDR = Convert.ToBoolean(row["舱单收费"].ToString());
|
|
data.ISCDCR = Convert.ToBoolean(row["舱单付费"].ToString());
|
|
data.ISVGMDR = Convert.ToBoolean(row["VGM收费"].ToString());
|
|
data.ISVGMCR = Convert.ToBoolean(row["VGM付费"].ToString());
|
|
data.ISYGTVGMDR = Convert.ToBoolean(row["云港通VGM收费"].ToString());
|
|
data.ISYGTVGMCR = Convert.ToBoolean(row["云港通VGM付费"].ToString());
|
|
data.ISCZFDR = Convert.ToBoolean(row["操作费收费"].ToString());
|
|
data.ISCZFCR = Convert.ToBoolean(row["操作费付费"].ToString());
|
|
data.DLFA = row["独立方案"].ToString();
|
|
headList.Add(data);
|
|
}
|
|
}
|
|
return headList;
|
|
|
|
}
|
|
|
|
static public List<MsFeeProject> CreateFeeProjectList(DataTable table)
|
|
{
|
|
var headList = new List<MsFeeProject>();
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
MsFeeProject data = new MsFeeProject();
|
|
data.FA_ID = row["方案代码"].ToString();
|
|
data.FADESCRIP = row["方案描述"].ToString();
|
|
data.PROJECTTYPE = row["费用类别"].ToString();
|
|
if (row["默认方案"] != DBNull.Value)
|
|
data.ISDEFAUT = Convert.ToBoolean(row["默认方案"].ToString());
|
|
if (row["独立方案"]!= DBNull.Value)
|
|
data.ISDEP = Convert.ToBoolean(row["独立方案"].ToString());
|
|
data.FEETYPE = row["收付类型"].ToString();
|
|
data.INPUTBY = row["录入人"].ToString();
|
|
headList.Add(data);
|
|
}
|
|
}
|
|
return headList;
|
|
|
|
}
|
|
|
|
private string insertFee(List<MsOpSeae> MsOpSeaeList, List<MsChFee> MsChFeeList, MsFeeProject feeProject, SqlConnection dbcon,decimal usdexrate)
|
|
{
|
|
if (MsOpSeaeList != null)
|
|
{
|
|
foreach (var enumValue in MsOpSeaeList)
|
|
{
|
|
|
|
try
|
|
{
|
|
if ((feeProject.PROJECTTYPE == "场站" && ((feeProject.FEETYPE == "全部" && !enumValue.ISYARDDR && !enumValue.ISYARDCR)
|
|
|| (feeProject.FEETYPE == "收费" && !enumValue.ISYARDDR) || (feeProject.FEETYPE == "付费" && !enumValue.ISYARDCR)))
|
|
|| (feeProject.PROJECTTYPE == "舱单" && ((feeProject.FEETYPE == "全部" && !enumValue.ISCDDR && !enumValue.ISCDCR)
|
|
|| (feeProject.FEETYPE == "收费" && !enumValue.ISCDDR) || (feeProject.FEETYPE == "付费" && !enumValue.ISCDCR)))
|
|
|| (feeProject.PROJECTTYPE == "VGM" && ((feeProject.FEETYPE == "全部" && !enumValue.ISVGMDR && !enumValue.ISVGMCR)
|
|
|| (feeProject.FEETYPE == "收费" && !enumValue.ISVGMDR) || (feeProject.FEETYPE == "付费" && !enumValue.ISVGMCR)))
|
|
|| (feeProject.PROJECTTYPE == "云港通VGM" && ((feeProject.FEETYPE == "全部" && !enumValue.ISYGTVGMDR && !enumValue.ISYGTVGMCR)
|
|
|| (feeProject.FEETYPE == "收费" && !enumValue.ISYGTVGMDR) || (feeProject.FEETYPE == "付费" && !enumValue.ISYGTVGMCR)))
|
|
|| (feeProject.PROJECTTYPE == "代理费" && ((feeProject.FEETYPE == "全部" && !enumValue.ISCZFDR && !enumValue.ISCZFCR)
|
|
|| (feeProject.FEETYPE == "收费" && !enumValue.ISCZFDR) || (feeProject.FEETYPE == "付费" && !enumValue.ISCZFCR))
|
|
|| (feeProject.ISDEP && enumValue.DLFA.IndexOf("(" + feeProject.FA_ID + ")") < 0))
|
|
)
|
|
{
|
|
log.Debug($"{enumValue.MBLNO}开始生成费用,方案:{feeProject.FADESCRIP}--{DateTime.Now.ToString()}");
|
|
var FeeUnitList = GetFeeUnit(enumValue.BSNO, dbcon);
|
|
if (MsChFeeList != null)
|
|
{
|
|
var iscreatefee = false;
|
|
foreach (var enumFeeValue in MsChFeeList)
|
|
{
|
|
decimal exrate = 1;
|
|
if (enumFeeValue.Currency == "USD") exrate = usdexrate;
|
|
decimal feequantity = 0;
|
|
decimal amount = 0;
|
|
decimal tax = 0;
|
|
if (enumFeeValue.Reason != "")
|
|
{
|
|
var formulastr = enumFeeValue.Reason;
|
|
FeeUnitList.ForEach(i =>
|
|
{
|
|
formulastr = formulastr.Replace("[" + i.FEEUNIT + "]", i.FEEQUANTITY.ToString());
|
|
});
|
|
|
|
;
|
|
try
|
|
{
|
|
DataTable dt = new DataTable();
|
|
if (dt.Compute(formulastr, "false") != DBNull.Value)
|
|
{
|
|
amount = Convert.ToDecimal(dt.Compute(formulastr, "false").ToString());
|
|
feequantity = 1;
|
|
enumFeeValue.UnitPrice = amount;
|
|
FeeUnitList.ForEach(i =>
|
|
{
|
|
if (i.FEEUNIT == enumFeeValue.Unit)
|
|
{
|
|
feequantity = i.FEEQUANTITY;
|
|
amount = feequantity * enumFeeValue.UnitPrice;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.Debug($"{enumValue.MBLNO}公式错误:{e.Message}");
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
FeeUnitList.ForEach(i =>
|
|
{
|
|
if (i.FEEUNIT == enumFeeValue.Unit)
|
|
{
|
|
feequantity = i.FEEQUANTITY;
|
|
amount = feequantity * enumFeeValue.UnitPrice;
|
|
}
|
|
});
|
|
}
|
|
tax = amount * enumFeeValue.TAXRATE;
|
|
var customername = GetClient(enumFeeValue.CustomerType, enumValue, enumFeeValue.CustomerName);
|
|
if (enumFeeValue.UnitPrice != 0 && amount != 0&& customername!="")
|
|
{
|
|
string sql = "INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
|
|
sql = sql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
|
|
sql = sql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
|
|
sql = sql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
|
|
sql = sql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
|
|
sql = sql + "('" + enumFeeValue.FeeType + "','审核通过','" + enumValue.BSNO + "','" + enumFeeValue.FeeName + "','" + enumFeeValue.CustomerType + "','" + customername+ "','" + enumFeeValue.Unit.Replace("'", "''") + "'";
|
|
sql = sql + "," + enumFeeValue.UnitPrice + "," + feequantity.ToString() + "," + amount.ToString() + ",'" + enumFeeValue.Currency + "'," + exrate.ToString() + ",'" + enumFeeValue.Remark + "',0,0";
|
|
sql = sql + ",'DEMO-SA',GETDATE(),0," + enumFeeValue.Sort + ",0";
|
|
sql = sql + ",0,0,0,0,'"+enumFeeValue.FeeEName + "'";
|
|
sql = sql + ",0,0," + enumFeeValue.UnitPrice + "," + enumFeeValue.TAXRATE + "," + tax.ToString() + ",'" + enumFeeValue.FA_ID + "')";
|
|
|
|
log.Debug($"{enumValue.MBLNO},方案:{feeProject.FADESCRIP}-费用语句-{sql}");
|
|
dbcon.Open();
|
|
SqlCommand cmd = new SqlCommand(sql, dbcon);
|
|
cmd.ExecuteNonQuery();
|
|
dbcon.Close();
|
|
iscreatefee = true;
|
|
}
|
|
if (enumFeeValue.UnitPrice == 0) iscreatefee = true;
|
|
}
|
|
if (enumValue.ISBSNO == "" && iscreatefee)
|
|
{
|
|
string sqlexe = "INSERT INTO [t_op_seae_fee] ([编号],[场站收费],[场站付费],[危险品申报收费],[危险品申报付费],[舱单收费],[舱单付费],[VGM收费],[VGM付费],[操作费收费],[操作费付费],[云港通VGM收费],[云港通VGM付费])";
|
|
sqlexe = sqlexe + "VALUES";
|
|
sqlexe = sqlexe + "('" + enumValue.BSNO + "',0,0,0,0,0,0,0,0,0,0,0,0)";
|
|
dbcon.Open();
|
|
SqlCommand cmdexe = new SqlCommand(sqlexe, dbcon);
|
|
cmdexe.ExecuteNonQuery();
|
|
dbcon.Close();
|
|
enumValue.ISBSNO = enumValue.BSNO;
|
|
log.Debug($"{enumValue.MBLNO + ",方案 " + feeProject.FADESCRIP}生成费用");
|
|
}
|
|
if (iscreatefee)
|
|
{
|
|
string sqlupdate = "UPDATE [t_op_seae_fee] set 编号=编号 ";
|
|
|
|
if (feeProject.ISDEP)
|
|
{
|
|
sqlupdate = sqlupdate + " ,独立方案=ISNULL(独立方案,'')+'(" + feeProject.FA_ID + ")'";
|
|
enumValue.DLFA = enumValue.DLFA + "(" + feeProject.FA_ID + ")";
|
|
}
|
|
else
|
|
{
|
|
if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "场站")
|
|
{
|
|
sqlupdate = sqlupdate + " ,场站收费=1,场站付费=1 ";
|
|
enumValue.ISYARDDR = true;
|
|
enumValue.ISYARDCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "场站")
|
|
{
|
|
sqlupdate = sqlupdate + " ,场站收费=1 ";
|
|
enumValue.ISYARDDR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "场站")
|
|
{
|
|
sqlupdate = sqlupdate + " ,场站付费=1 ";
|
|
enumValue.ISYARDCR = true;
|
|
}
|
|
//if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "危险品申报")
|
|
// sqlupdate = sqlupdate + " ,危险品申报收费=1,危险品申报付费=1 ";
|
|
//if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "危险品申报")
|
|
// sqlupdate = sqlupdate + " ,危险品申报收费=1 ";
|
|
//if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "危险品申报")
|
|
// sqlupdate = sqlupdate + " ,危险品申报付费=1 ";
|
|
if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "舱单")
|
|
{
|
|
sqlupdate = sqlupdate + " ,舱单收费=1,舱单付费=1 ";
|
|
enumValue.ISCDDR = true;
|
|
enumValue.ISCDCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "舱单")
|
|
{
|
|
sqlupdate = sqlupdate + " ,舱单收费=1 ";
|
|
enumValue.ISCDDR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "舱单")
|
|
{
|
|
sqlupdate = sqlupdate + " ,舱单付费=1 ";
|
|
enumValue.ISCDCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,VGM收费=1,VGM付费=1 ";
|
|
enumValue.ISVGMDR = true;
|
|
enumValue.ISVGMCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,VGM收费=1 ";
|
|
enumValue.ISVGMDR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,VGM付费=1 ";
|
|
enumValue.ISVGMCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "云港通VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,云港通VGM收费=1,云港通VGM付费=1 ";
|
|
enumValue.ISVGMDR = true;
|
|
enumValue.ISVGMCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "云港通VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,云港通VGM收费=1 ";
|
|
enumValue.ISVGMDR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "云港通VGM")
|
|
{
|
|
sqlupdate = sqlupdate + " ,云港通VGM付费=1 ";
|
|
enumValue.ISVGMCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "全部" && feeProject.PROJECTTYPE == "代理费")
|
|
{
|
|
sqlupdate = sqlupdate + " ,操作费收费=1,操作费付费=1 ";
|
|
enumValue.ISCZFDR = true;
|
|
enumValue.ISCZFCR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "收费" && feeProject.PROJECTTYPE == "代理费")
|
|
{
|
|
sqlupdate = sqlupdate + " ,操作费收费=1 ";
|
|
enumValue.ISCZFDR = true;
|
|
}
|
|
if (feeProject.FEETYPE == "付费" && feeProject.PROJECTTYPE == "代理费")
|
|
{
|
|
sqlupdate = sqlupdate + " ,操作费付费=1 ";
|
|
enumValue.ISCZFCR = true;
|
|
}
|
|
}
|
|
dbcon.Open();
|
|
sqlupdate = sqlupdate + " WHERE 编号='" + enumValue.BSNO + "'";
|
|
SqlCommand cmdupdate = new SqlCommand(sqlupdate, dbcon);
|
|
cmdupdate.ExecuteNonQuery();
|
|
if(feeProject.PROJECTTYPE == "舱单"){
|
|
sqlupdate = "UPDATE t_op_seae_edi set 生成费用=1 WHERE 主提单号='" + enumValue.MBLNO + "'";
|
|
cmdupdate = new SqlCommand(sqlupdate, dbcon);
|
|
cmdupdate.ExecuteNonQuery();
|
|
}
|
|
|
|
|
|
dbcon.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch {
|
|
log.Debug($"{enumValue.MBLNO},方案:{feeProject.FADESCRIP}-生成费用出错!-{DateTime.Now.ToString()}");
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
static public string CreateSql(string FA_ID, SqlConnection dbcon)
|
|
{
|
|
var str = " and 1=1 ";
|
|
var headList = new List<MsChFee>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT *");
|
|
strSql.Append(" from t_ch_project_Condition where 方案代码=" + FA_ID);
|
|
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
|
|
DataTable table = new DataTable();
|
|
adapter.Fill(table);
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
if (row["条件名称"].ToString() == "车船直装货物"|| row["条件名称"].ToString() == "是否自有箱")
|
|
{
|
|
str = str + " AND ISNULL(" + row["条件名称"].ToString()+",0)";
|
|
|
|
if (row["条件关系"].ToString() == "等于") str = str + "=" + row["条件值"].ToString().Replace("是", "1").Replace("否", "0") + "";
|
|
if (row["条件关系"].ToString() == "不等于") str = str + "<>" + row["条件值"].ToString().Replace("是", "1").Replace("否", "0") + "";
|
|
}
|
|
else if (row["条件名称"].ToString() == "船代")
|
|
{
|
|
str = str + " AND 主提单号 in (select 主提单号 from t_op_seae_edi where " + row["条件名称"].ToString();
|
|
if (row["条件关系"].ToString() == "等于") str = str + "='" + row["条件值"].ToString() + "'";
|
|
if (row["条件关系"].ToString() == "不等于") str = str + "<>'" + row["条件值"].ToString() + "'";
|
|
str = str+")";
|
|
}
|
|
else
|
|
{
|
|
str = str + " AND " + row["条件名称"].ToString();
|
|
if (row["条件关系"].ToString() == "等于") str = str + "='" + row["条件值"].ToString() + "'";
|
|
if (row["条件关系"].ToString() == "不等于") str = str + "<>'" + row["条件值"].ToString() + "'";
|
|
if (row["条件关系"].ToString() == "模糊") str = str + " like '%" + row["条件值"].ToString() + "%'";
|
|
if (row["条件关系"].ToString() == "不包含") str = str + " not like '%" + row["条件值"].ToString() + "%'";
|
|
if (row["条件关系"].ToString() == "大于") str = str + ">='" + row["条件值"].ToString() + "'";
|
|
if (row["条件关系"].ToString() == "小于") str = str + "<='" + row["条件值"].ToString() + "'";
|
|
}
|
|
}
|
|
}
|
|
|
|
return str;
|
|
}
|
|
static public List<MsChFee> GetFeeTemplate(string FA_ID, SqlConnection dbcon)
|
|
{
|
|
|
|
var headList = new List<MsChFee>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT [DE_ID],[方案代码],[类型],[费用名称],[结算单位],[客户名称],[币别],[汇率],[标准],[单价],[费用备注],ISNULL([顺序],0) 顺序,ISNULL([税率],0) 税率,[单价公式],[费用英文名称]");
|
|
strSql.Append(" from t_ch_project_auto_fee where 方案代码="+FA_ID);
|
|
|
|
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
|
|
DataTable table = new DataTable();
|
|
adapter.Fill(table);
|
|
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
var Feedata = new MsChFee();
|
|
Feedata.DE_ID = row["DE_ID"].ToString();
|
|
Feedata.FA_ID =row["方案代码"].ToString();
|
|
Feedata.FeeType = row["类型"].ToString();
|
|
Feedata.FeeName = row["费用名称"].ToString();
|
|
Feedata.CustomerType = row["结算单位"].ToString();
|
|
Feedata.CustomerName = row["客户名称"].ToString();
|
|
Feedata.Currency = row["币别"].ToString();
|
|
if (row["汇率"] != DBNull.Value)
|
|
Feedata.ExChangerate= Convert.ToDecimal(row["汇率"].ToString());
|
|
if (row["单价"] != DBNull.Value)
|
|
Feedata.UnitPrice = Convert.ToDecimal(row["单价"].ToString());
|
|
if (row["税率"] != DBNull.Value)
|
|
Feedata.TAXRATE = Convert.ToDecimal(row["税率"].ToString());
|
|
Feedata.Unit =row["标准"].ToString();
|
|
// Feedata. = row["税率"].ToString();
|
|
Feedata.Remark = row["费用备注"].ToString();
|
|
Feedata.Reason = row["单价公式"].ToString();
|
|
Feedata.Sort= row["顺序"].ToString();
|
|
Feedata.FeeEName = row["费用英文名称"].ToString();
|
|
headList.Add(Feedata);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return headList;
|
|
}
|
|
|
|
static public List<MsFeeUnit> GetFeeUnit(string BSNO, SqlConnection dbcon)
|
|
{
|
|
decimal TEUNUM;
|
|
TEUNUM = 0;
|
|
decimal PKGS;
|
|
PKGS = 0;
|
|
decimal KGS;
|
|
KGS = 0;
|
|
decimal CBM;
|
|
CBM = 0;
|
|
decimal NETWEIGHT = 0;
|
|
decimal CTNNUM;
|
|
CTNNUM = 0;
|
|
|
|
var headList = new List<MsFeeUnit>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT NO,PKGS,KGS,CBM,NETWEIGHT,CDP,FCDP,CTNALL,CTNNUM,TEU,提箱小票数");
|
|
|
|
strSql.Append(",(CASE WHEN 提箱小票数=0 THEN 0 ELSE CASE WHEN 提箱小票数>总箱数 THEN 提箱小票数-总箱数 ELSE 0 END END) 超额小票数");
|
|
strSql.Append(",(CASE WHEN 提箱小票数=0 THEN 0 ELSE CASE WHEN 提箱小票数>总箱数 THEN 总箱数 ELSE 提箱小票数 END END) 不超额小票数 FROM (");
|
|
|
|
strSql.Append("SELECT '1' as NO,件数 PKGS,重量 KGS,尺码 CBM,重量 AS NETWEIGHT,ISNULL((select COUNT(*) FROM t_op_seae_edi WHERE 船代<>'更改' and 主提单号=t_op_seae.主提单号 and isnull(订舱号码,'')<>''),0) CDP,");
|
|
strSql.Append("ISNULL((select COUNT(*) FROM t_op_seae_edi WHERE 船代<>'更改' and 主提单号=t_op_seae.主提单号 AND ISNULL(分提单号,'')<>'' and isnull(订舱号码,'')<>''),0) FCDP,");
|
|
strSql.Append("'' as CTNALL,0 AS CTNNUM,0 AS TEU,isnull((select sum(ctnrCount) from t_op_txxp_log where 编号=t_op_seae.编号),0) 提箱小票数 ");
|
|
strSql.Append(",isnull((select sum(数量) from t_op_ctn where 编号=t_op_seae.编号),0) 总箱数 ");
|
|
// strSql.Append(",isnull((select sum(ctnrCount) from t_op_txxp_log where 编号=t_op_seae.编号),0)-isnull((select sum(数量) from t_op_ctn where 编号=t_op_seae.编号),0) 超额小票数 ");
|
|
|
|
strSql.Append(" from t_op_seae ");
|
|
strSql.Append(" where 编号='"+BSNO+"'");
|
|
strSql.Append(") AS T ");
|
|
|
|
|
|
strSql.Append(" union ");
|
|
strSql.Append("SELECT '2' AS NO,0 AS PKGS,0 AS KGS,0 AS CBM,0 AS NETWEIGHT,0 AS CDP,0 AS FCDP,");
|
|
strSql.Append("P.表现形式 CTNALL,SUM(P.数量) AS CTNNUM,SUM(P.TEU) AS TEU,0 提箱小票数,0 超额小票数,0 不超额小票数");
|
|
strSql.Append(" from t_op_ctn P ");
|
|
strSql.Append(" where p.编号='"+BSNO+"'");
|
|
strSql.Append(" GROUP BY P.表现形式 order by PKGS desc");
|
|
|
|
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
|
|
DataTable table = new DataTable();
|
|
adapter.Fill(table);
|
|
|
|
var isfirst = 0;
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
if (row["NO"].ToString() == "1") {
|
|
var data = new MsFeeUnit();
|
|
data.FEEUNIT = "单票";
|
|
data.FEEQUANTITY = 1;
|
|
headList.Add(data);
|
|
if (!string.IsNullOrEmpty(row["PKGS"].ToString()))
|
|
PKGS = Convert.ToDecimal(row["PKGS"].ToString());
|
|
if (!string.IsNullOrEmpty(row["KGS"].ToString()))
|
|
KGS = Convert.ToDecimal(row["KGS"].ToString());
|
|
if (!string.IsNullOrEmpty(row["CBM"].ToString()))
|
|
CBM = Convert.ToDecimal(row["CBM"].ToString());
|
|
if (!string.IsNullOrEmpty(row["NETWEIGHT"].ToString()))
|
|
NETWEIGHT = Convert.ToDecimal(row["NETWEIGHT"].ToString());
|
|
var data2 = new MsFeeUnit();
|
|
data2.FEEUNIT = "重量";
|
|
data2.FEEQUANTITY = KGS;
|
|
headList.Add(data2);
|
|
var data3 = new MsFeeUnit();
|
|
data3.FEEUNIT = "尺码";
|
|
data3.FEEQUANTITY = CBM;
|
|
headList.Add(data3);
|
|
var data4 = new MsFeeUnit();
|
|
data4.FEEUNIT = "件数";
|
|
data4.FEEQUANTITY = PKGS;
|
|
headList.Add(data4);
|
|
var data5 = new MsFeeUnit();
|
|
data5.FEEUNIT = "舱单票数";
|
|
data5.FEEQUANTITY = Convert.ToInt32(row["CDP"].ToString());
|
|
headList.Add(data5);
|
|
var data6 = new MsFeeUnit();
|
|
data6.FEEUNIT = "舱单分票";
|
|
data6.FEEQUANTITY = Convert.ToInt32(row["FCDP"].ToString());
|
|
headList.Add(data6);
|
|
var txxpdata = new MsFeeUnit();
|
|
txxpdata.FEEUNIT = "提箱小票数";
|
|
txxpdata.FEEQUANTITY = Convert.ToInt32(row["提箱小票数"].ToString());
|
|
headList.Add(txxpdata);
|
|
var txxpdata2 = new MsFeeUnit();
|
|
txxpdata2.FEEUNIT = "超额小票数";
|
|
txxpdata2.FEEQUANTITY = Convert.ToInt32(row["超额小票数"].ToString());
|
|
headList.Add(txxpdata2);
|
|
if (Convert.ToInt32(row["不超额小票数"].ToString()) > 0)
|
|
{
|
|
var txxpdata3 = new MsFeeUnit();
|
|
txxpdata3.FEEUNIT = "不超额小票数";
|
|
txxpdata3.FEEQUANTITY = Convert.ToInt32(row["不超额小票数"].ToString());
|
|
headList.Add(txxpdata3);
|
|
}
|
|
else {
|
|
//var txxpdata3 = new MsFeeUnit();
|
|
//txxpdata3.FEEUNIT = "不超额小票数";
|
|
//txxpdata3.FEEQUANTITY = Convert.ToInt32(row["不超额小票数"].ToString());
|
|
//headList.Add(txxpdata3);
|
|
|
|
}
|
|
}
|
|
if (row["CTNALL"].ToString()!="") {
|
|
var ctndata = new MsFeeUnit();
|
|
ctndata.FEEUNIT = row["CTNALL"].ToString();
|
|
if (!string.IsNullOrEmpty(row["CTNNUM"].ToString()))
|
|
ctndata.FEEQUANTITY= Convert.ToDecimal(row["CTNNUM"].ToString());
|
|
CTNNUM = CTNNUM + ctndata.FEEQUANTITY;
|
|
if (!string.IsNullOrEmpty(row["TEU"].ToString()))
|
|
TEUNUM = TEUNUM + Convert.ToDecimal(row["TEU"].ToString());
|
|
headList.Add(ctndata);
|
|
}
|
|
isfirst = 1;
|
|
}
|
|
var teudata = new MsFeeUnit();
|
|
teudata.FEEUNIT = "TEU";
|
|
teudata.FEEQUANTITY = TEUNUM;
|
|
headList.Add(teudata);
|
|
var ctnalldata = new MsFeeUnit();
|
|
ctnalldata.FEEUNIT = "箱数";
|
|
ctnalldata.FEEQUANTITY = CTNNUM;
|
|
headList.Add(ctnalldata);
|
|
|
|
}
|
|
|
|
return headList;
|
|
}
|
|
|
|
static public string GetClient(string custtype, MsOpSeae opSeae,string cust)
|
|
{
|
|
if (cust != "") return cust;
|
|
|
|
var custname = "";
|
|
if (custtype == "委托单位") custname = opSeae.CUSTOMERNAME;
|
|
if (custtype == "船公司") custname = opSeae.CARRIER;
|
|
if (custtype == "货代公司") custname = opSeae.FORWARDER;
|
|
if (custtype == "报关行") custname = opSeae.CUSTOMSER;
|
|
if (custtype == "船代") custname = opSeae.CUSTSERVICE;
|
|
if (custtype == "场站") custname = opSeae.YARD;
|
|
if (custtype == "代理") custname = opSeae.AGENTID;
|
|
|
|
return custname;
|
|
}
|
|
|
|
|
|
|
|
static public decimal GetUsdExrate(SqlConnection dbcon)
|
|
{
|
|
decimal usdexrate = 0;
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("select 汇率 from t_code_usdexrate where 开始日期<=GETDATE() and 结束日期>=GETDATE()");
|
|
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
|
|
DataTable table = new DataTable();
|
|
adapter.Fill(table);
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
usdexrate= Convert.ToDecimal(row["汇率"].ToString());
|
|
}
|
|
}
|
|
if (usdexrate == 0) {
|
|
SqlDataAdapter adapter2 = new SqlDataAdapter("select 汇率 from t_code_currency where 币别='USD'", dbcon);
|
|
DataTable table2 = new DataTable();
|
|
adapter2.Fill(table2);
|
|
if (table2.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in table2.Rows)
|
|
{
|
|
usdexrate = Convert.ToDecimal(row["汇率"].ToString());
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return usdexrate;
|
|
}
|
|
|
|
|
|
}
|
|
}
|