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/JobAutoCreateFee/JobYt2D6Fee.cs

443 lines
22 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 log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Quartz;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
namespace JobCreateFee
{
public class JobYtD6Fee : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobYtD6Fee));
//private const string CfgFileName = "starttime.cfg";
//private static string CfgFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, CfgFileName);
public void Execute(IJobExecutionContext context)
{
log.Debug($"Execute开始");
try
{
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
string reqUrl = context.JobDetail.JobDataMap.GetString("YTReqUrl");
string YTUserName = context.JobDetail.JobDataMap.GetString("YTUserName");
string YTPassWord = context.JobDetail.JobDataMap.GetString("YTPassWord");
string CustName = context.JobDetail.JobDataMap.GetString("CustName");
string CustPsw = context.JobDetail.JobDataMap.GetString("CustPsw");
int reqTimeout = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("RequestTimeout"));
var yesterday = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
JsonYtSend reqObj = new JsonYtSend();
reqObj.custname = CustName;
reqObj.custpsw= CustPsw;
reqObj.username = YTUserName;
reqObj.password = YTPassWord;
reqObj.start_time = yesterday;
reqObj.end_time= yesterday;
var sendstr = JsonConvert.SerializeObject(reqObj);
log.Debug($"发送包:{sendstr}");
//发送请求数据
string rtn = WebRequestHelper.DoPost(reqUrl, sendstr, reqTimeout * 1000);
log.Debug($"数据返回:{rtn}");
//var objRtn = JsonConvert.DeserializeAnonymousType(rtn, new { status = "", message = "" });
var objRtn = JsonConvert.DeserializeObject<josnYtData>(rtn);
if (objRtn.status == "1")
{
//var parseJsonObj = JsonConvert.DeserializeObject<List<JsonYtFee>>(objRtn.message);
try
{
using (SqlConnection dbcon = new SqlConnection(connStr))
{
var FEELIST = new List<D6BS>();
dbcon.Open();
foreach (var returndata in objRtn.message)
{
if (returndata.fee == "" || returndata.fee == null) returndata.fee = "0";
if (returndata.ydFee == "" || returndata.ydFee == null) returndata.ydFee = "0";
if (returndata.secondPrintFee == "" || returndata.secondPrintFee == null) returndata.secondPrintFee = "0";
var D6BS = GETD6BS(returndata.bookingno, dbcon);
string sql = " INSERT INTO t_op_ytfee_log([bsno],[vessel],[voyage],[bookingno],[ctn_type],[ctn_no],[yard],[operatetime],[operatetype]";
sql = sql + ",[printType],[fee],[ydFee],[secondPrintFee],[applicant_code]) values ('" + D6BS.BSNO + "','" + returndata.vessel + "'";
sql = sql + ",'" + returndata.voyage + "','" + returndata.bookingno + "','" + returndata.ctn_type + "','" + returndata.ctn_no + "','" + returndata.yard + "'";
sql = sql + ",'" + returndata.operatetime + "','" + returndata.operatetype + "','" + returndata.printType + "','" + returndata.fee
+ "','" + returndata.ydFee + "','" + returndata.secondPrintFee + "','" + returndata.applicant_code + "')";
SqlCommand cmd = new SqlCommand(sql, dbcon);
cmd.ExecuteNonQuery();
if (!string.IsNullOrEmpty(D6BS.BSNO))
{
decimal txxpf = 0;
decimal dxf = 0;
if (Convert.ToDecimal(returndata.ydFee) != 0)
{
dxf = Convert.ToDecimal(returndata.ydFee);
var fee = FEELIST.Find(x => x.BSNO == D6BS.BSNO && x.FEETYPE == "调箱费");
if (fee != null)
{
fee.AMOUNT = fee.AMOUNT + dxf;
fee.QUANTITY = fee.QUANTITY + 1;
}
else
{
var newfee = new D6BS();
newfee.BSNO = D6BS.BSNO;
newfee.CUSTOMERNAME = D6BS.CUSTOMERNAME;
newfee.AMOUNT = dxf;
newfee.FEETYPE = "调箱费";
newfee.QUANTITY = 1;
FEELIST.Add(newfee);
}
}
if (Convert.ToDecimal(returndata.fee) != 0)
{
txxpf = Convert.ToDecimal(returndata.fee);
var fee = FEELIST.Find(x => x.BSNO == D6BS.BSNO && x.FEETYPE == "提箱小票费"&& x.ISDX ==false);
if (fee != null)
{
fee.AMOUNT = fee.AMOUNT + txxpf;
fee.QUANTITY = fee.QUANTITY +1;
}
else
{
var newfee = new D6BS();
newfee.BSNO = D6BS.BSNO;
newfee.CUSTOMERNAME = D6BS.CUSTOMERNAME;
newfee.AMOUNT = txxpf;
newfee.FEETYPE = "提箱小票费";
newfee.QUANTITY = 1;
newfee.ISDX = false;
FEELIST.Add(newfee);
}
}
if (Convert.ToDecimal(returndata.secondPrintFee) != 0)
{
txxpf = Convert.ToDecimal(returndata.secondPrintFee);
var fee = FEELIST.Find(x => x.BSNO == D6BS.BSNO && x.FEETYPE == "提箱小票费" && x.ISDX == true);
if (fee != null)
{
fee.AMOUNT = fee.AMOUNT + txxpf;
fee.QUANTITY = fee.QUANTITY + 1;
}
else
{
var newfee = new D6BS();
newfee.BSNO = D6BS.BSNO;
newfee.CUSTOMERNAME = D6BS.CUSTOMERNAME;
newfee.AMOUNT = txxpf;
newfee.FEETYPE = "提箱小票费";
newfee.ISDX = true;
newfee.QUANTITY = 1;
FEELIST.Add(newfee);
}
}
}
var headstr = "";
if (returndata.bookingno.Length > 3)
{
headstr = returndata.bookingno.Substring(0, 3);
}
if (string.IsNullOrEmpty(D6BS.BSNO) && (headstr == "QGD" || headstr == "AMQ" || headstr == "AMG" || headstr == "AYQ"))
{
var DELETBS = GETDELETED6BS(returndata.bookingno, dbcon);
SaveMail(dbcon, "CMABKG@SDSMARTLOGISTICS.COM", returndata.bookingno+ DELETBS .CUSTOMERNAME+ "此单号已退仓,但是系统检测到打印过小票" + returndata.printType + "金额:"+ (Convert.ToDecimal(returndata.ydFee)+Convert.ToDecimal(returndata.secondPrintFee) + Convert.ToDecimal(returndata.fee)).ToString() + ",请知悉,谢谢", returndata.bookingno + "此单号已退仓,但是系统检测到打印过小票" + returndata.printType + ",请知悉,谢谢", "1");
}
}
if (FEELIST != null && FEELIST.Count!=0) {
foreach(var FEE in FEELIST)
{
var DRAMOUNT = FEE.AMOUNT;
var CRCUST = "C亿通付费";
if (FEE.FEETYPE == "提箱小票费" && FEE.ISDX == false)
{
DRAMOUNT = FEE.AMOUNT * 5;
CRCUST = "亿通(付费)";
}
string Feesql = "INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
Feesql = Feesql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
Feesql = Feesql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
Feesql = Feesql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
Feesql = Feesql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
Feesql = Feesql + "('收','录入状态','" + FEE.BSNO + "','"+FEE.FEETYPE+"','委托单位','" + FEE.CUSTOMERNAME + "','单票'";
Feesql = Feesql + ","+ DRAMOUNT.ToString() + ",1," + DRAMOUNT.ToString() + ",'RMB',1,'" + FEE.QUANTITY.ToString() + "次',0,0";
Feesql = Feesql + ",'DEMO-SA',GETDATE(),0,100,0";
Feesql = Feesql + ",0,0,0,0,''";
Feesql = Feesql + ",0,0," + DRAMOUNT.ToString() + ",0,0,'易通小票费')";
Feesql = Feesql + " INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
Feesql = Feesql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
Feesql = Feesql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
Feesql = Feesql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
Feesql = Feesql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
Feesql = Feesql + "('付','审核通过','" + FEE.BSNO + "','"+ FEE.FEETYPE + "','代理','"+ CRCUST + "','单票'";
Feesql = Feesql + "," + FEE.AMOUNT.ToString() + ",1," + FEE.AMOUNT.ToString() + ",'RMB',1,'"+FEE.QUANTITY.ToString()+"次',0,0";
Feesql = Feesql + ",'DEMO-SA',GETDATE(),0,100,0";
Feesql = Feesql + ",0,0,0,0,''";
Feesql = Feesql + ",0,0," + FEE.AMOUNT.ToString() + ",0,0,'易通小票费')";
log.Debug($"费用语句-{Feesql}");
//dbcon.Open();
SqlCommand Feecmd = new SqlCommand(Feesql, dbcon);
Feecmd.ExecuteNonQuery();
//dbcon.Close();
//if (Convert.ToDecimal(returndata.ydFee) != 0)
//{
// string Feesql = "INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
// Feesql = Feesql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
// Feesql = Feesql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
// Feesql = Feesql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
// Feesql = Feesql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
// Feesql = Feesql + "('收','审核通过','" + D6BS.BSNO + "','调箱费','委托单位','" + D6BS.CUSTOMERNAME + "','单票'";
// Feesql = Feesql + "," + returndata.ydFee + ",1," + returndata.ydFee + ",'RMB',1,'',0,0";
// Feesql = Feesql + ",'DEMO-SA',GETDATE(),0,100,0";
// Feesql = Feesql + ",0,0,0,0,''";
// Feesql = Feesql + ",0,0," + returndata.ydFee + ",0,0,'易通小票费')";
// Feesql = Feesql + " INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
// Feesql = Feesql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
// Feesql = Feesql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
// Feesql = Feesql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
// Feesql = Feesql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
// Feesql = Feesql + "('付','审核通过','" + D6BS.BSNO + "','提箱小票费','代理','C亿通付费','单票'";
// Feesql = Feesql + "," + returndata.ydFee + ",1," + returndata.ydFee + ",'RMB',1,'',0,0";
// Feesql = Feesql + ",'DEMO-SA',GETDATE(),0,100,0";
// Feesql = Feesql + ",0,0,0,0,''";
// Feesql = Feesql + ",0,0," + returndata.ydFee + ",0,0,'易通小票费')";
// log.Debug($"费用语句-{Feesql}");
// //dbcon.Open();
// SqlCommand Feecmd = new SqlCommand(Feesql, dbcon);
// Feecmd.ExecuteNonQuery();
// //dbcon.Close();
//}
}
}
dbcon.Close();
}
}
catch (Exception e) {
log.Debug($"记录插入错误:{e.Message}");
}
}
else {
log.Debug($"数据返回错误:{objRtn.message}");
}
}
catch (Exception ex)
{
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
public static int SaveMail(SqlConnection dbcon, string sendto, string title, string body, string smtpid)
{
var sqlstr = $" INSERT INTO [Mail_Send] ([GID],[SendTo],[Title],[Body],[SendStatus],[TryCount],[CreateTime],[SmtpConfig],[Sender],[ShowName]) select newid(),'{sendto}','{title}','{body.Replace("'", "''")}','Create',0,GETDATE(),'{smtpid}','','' ";
SqlCommand cmd = new SqlCommand(sqlstr, dbcon);
return cmd.ExecuteNonQuery();
}
static public D6BS GETD6BS(string MBLNO, SqlConnection dbcon)
{
var newbs = new D6BS();
var strSql = new StringBuilder();
strSql.Append("SELECT TOP 1 编号 BSNO,委托单位 CUSTOMERNAME from t_op_seae where 主提单号 like '" + MBLNO + "%'");
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
DataTable table = new DataTable();
adapter.Fill(table);
var BSNO = "";
if (table.Rows.Count > 0)
{
foreach (DataRow row in table.Rows)
{
newbs.BSNO = row["BSNO"].ToString();
newbs.CUSTOMERNAME = row["CUSTOMERNAME"].ToString();
}
}
return newbs;
}
static public D6BS GETDELETED6BS(string MBLNO, SqlConnection dbcon)
{
var newbs = new D6BS();
var strSql = new StringBuilder();
strSql.Append("SELECT TOP 1 删除人 CUSTOMERNAME from t_op_delete where 主提单号='" + MBLNO + "'");
SqlDataAdapter adapter = new SqlDataAdapter(strSql.ToString(), dbcon);
DataTable table = new DataTable();
adapter.Fill(table);
var BSNO = "";
if (table.Rows.Count > 0)
{
foreach (DataRow row in table.Rows)
{
newbs.CUSTOMERNAME = row["CUSTOMERNAME"].ToString();
}
}
return newbs;
}
}
public class JsonYtSend
{
public string custname { get; set; }
public string custpsw { get; set; }
public string username { get; set; }
public string password { get; set; }
public string start_time { get; set; }
public string end_time { get; set; }
}
public class josnYtData
{
public string status { get; set; }
public List<JsonYtFee> message { get; set; }=new List<JsonYtFee>();
}
public class JsonYtFee
{
public string vessel { get; set; }
public string voyage { get; set; }
public string bookingno { get; set; }
public string ctn_type { get; set; }
public string ctn_no { get; set; }
public string yard { get; set; }
public string trans_port_code { get; set; }
public string operatetime { get; set; }
public string operatetype { get; set; }
public string printType { get; set; }
public string fee { get; set; }
public string ydFee { get; set; }
public string secondPrintFee { get; set; }
public string applicant_code { get; set; }
public string barcode { get; set; }
}
public class YTSumFee
{
public string MBLNO { get; set; }
public string BSNO { get; set; }
public int fee_count { get; set; } = 0;
public decimal fee_amount { get; set; } = 0;
public int ydFee1_count { get; set; } = 0;
public decimal ydFee1_amount { get; set; } = 0;
public int ydFee2_count { get; set; } = 0;
public decimal ydFee2_amount { get; set; } = 0;
public int secondPrintFee_count { get; set; } = 0;
public decimal secondPrintFee_amount { get; set; } = 0;
public YTSumFee() { }
public YTSumFee(JsonYtFee addrec) {
//this = AutoMapperHelper.MapTo<JsonYtFee, YTSumFee>(addrec);
MBLNO = addrec.bookingno;
if (!string.IsNullOrWhiteSpace(addrec.fee))
{
fee_count = 1;
fee_amount = Convert.ToDecimal(addrec.fee);
}
if (!string.IsNullOrWhiteSpace(addrec.ydFee))
{
var _amount= Convert.ToDecimal(addrec.ydFee);
if (_amount == 250) {
ydFee1_count = 1;
ydFee1_amount = _amount;
}
if (_amount == 350)
{
ydFee2_count = 1;
ydFee2_amount = _amount;
}
}
if (!string.IsNullOrWhiteSpace(addrec.secondPrintFee))
{
secondPrintFee_count = 1;
secondPrintFee_amount = Convert.ToDecimal(addrec.secondPrintFee);
}
}
public void addfee(JsonYtFee addrec)
{
if (MBLNO == addrec.ctn_no)
{
var newrec = new YTSumFee(addrec);
fee_count += newrec.fee_count;
fee_amount += newrec.fee_amount;
ydFee1_count += newrec.ydFee1_count;
ydFee1_amount += newrec.ydFee1_amount;
ydFee2_count += newrec.ydFee2_count;
ydFee2_amount += newrec.ydFee2_amount;
secondPrintFee_count += newrec.secondPrintFee_count;
secondPrintFee_amount += newrec.secondPrintFee_amount;
}
}
}
public class D6BS
{
public string BSNO { get; set; }
public string CUSTOMERNAME { get; set; }
public string FEETYPE { get; set; }
public bool ISDX { get; set; }
public decimal AMOUNT { get; set; }
public int QUANTITY { get; set; }
}
}