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.
224 lines
10 KiB
C#
224 lines
10 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 JobHCStlDate : IJob
|
|
{
|
|
private ILog log = LogManager.GetLogger(typeof(JobHCStlDate));
|
|
|
|
public void Execute(IJobExecutionContext context)
|
|
{
|
|
|
|
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
|
|
|
|
using (SqlConnection dbcon = new SqlConnection(connStr))
|
|
{
|
|
|
|
var sql = new StringBuilder();
|
|
sql.Append("Update t_crm_client set 帐龄状态='' where isnull(帐龄状态,'')<>'' ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec = new SqlCommand(sql.ToString(), dbcon);
|
|
cmdexec.ExecuteNonQuery();
|
|
|
|
var sql2 = new StringBuilder();
|
|
sql2.Append("Update t_crm_client_sales set 帐龄状态='' where isnull(帐龄状态,'')<>'' ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec2 = new SqlCommand(sql2.ToString(), dbcon);
|
|
cmdexec2.ExecuteNonQuery();
|
|
|
|
var sql3 = new StringBuilder();
|
|
sql3.Append("Update t_op_seae set 扣单状态='自动放单',扣单原因=CASE WHEN 扣单原因='超出限额' THEN '未超出限额' ELSE CASE WHEN 扣单原因='超出账期' THEN '未超出账期' ELSE '' END END where 扣单状态='自动扣单' ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec3 = new SqlCommand(sql3.ToString(), dbcon);
|
|
cmdexec3.ExecuteNonQuery();
|
|
log.Debug($"开始更新帐龄...");
|
|
var clientnolist = CreateClientNoTtlList(dbcon);
|
|
try
|
|
{
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("select distinct t_crm_client_sales.客户简称,t_crm_client_sales.揽货人,t_crm_client.结费优惠期限,t_crm_client_sales.结费金额 ");
|
|
strSql.Append("from t_crm_client_sales ");
|
|
strSql.Append("inner join t_crm_client on t_crm_client_sales.客户简称=t_crm_client.客户简称 ");
|
|
strSql.Append("where t_crm_client_sales.结束日期>=GetDate() and t_crm_client_sales.结费类型 in ('约定时间','约定天数') and t_crm_client_sales.状态='审核' ");
|
|
strSql.Append("and t_crm_client_sales.客户简称 in (select distinct 委托单位 from v_op_seae_protocol) ");
|
|
strSql.Append("order by t_crm_client_sales.客户简称 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 = CreateClientList(table);
|
|
if (feeprojectlist != null)
|
|
{
|
|
foreach (var enumFeeproject in feeprojectlist)
|
|
{
|
|
log.Debug($"开始更新帐龄客户{enumFeeproject.CUSTNAME},揽货人{enumFeeproject.SALE}...");
|
|
bool b_cx = false;
|
|
bool b_cq = false;
|
|
//bool b_nocq = false;
|
|
var clientno = clientnolist.Find(x=>x.CUSTNAME== enumFeeproject.CUSTNAME&&x.SALE== enumFeeproject.SALE);
|
|
if (clientno != null) {
|
|
|
|
|
|
if (clientno.TTLNO > enumFeeproject.AMT) {
|
|
b_cx= true;
|
|
}
|
|
if (GetNoCt(dbcon, enumFeeproject.CUSTNAME, enumFeeproject.SALE) > 0) {
|
|
b_cq = true;
|
|
}
|
|
if (b_cx && b_cq) {
|
|
updateZq(dbcon, "超期超限", enumFeeproject.CUSTNAME, enumFeeproject.SALE);
|
|
} else if (b_cx)
|
|
{
|
|
updateZq(dbcon, "超限", enumFeeproject.CUSTNAME, enumFeeproject.SALE);
|
|
}
|
|
else if (b_cq)
|
|
{
|
|
updateZq(dbcon, "超期", enumFeeproject.CUSTNAME, enumFeeproject.SALE);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.Error($"超期超限错误:{e.Message}");
|
|
}
|
|
|
|
try
|
|
{
|
|
|
|
var sql4 = new StringBuilder();
|
|
sql4.Append("Update t_op_seae set 扣单状态='自动扣单',扣单原因='有提单号未归档费用确认',扣放单操作人='系统',扣放单操作时间=GETDATE() from t_op_seae b left join t_op_gain g on g.编号=b.编号 ");
|
|
sql4.Append(" where b.扣单状态<>'自动扣单' and b.扣单状态<>'扣单' ");
|
|
sql4.Append("and g.合计已收<>g.合计应收 and 预抵日期 is not null and 预抵日期<=GETDATE() ");
|
|
sql4.Append("AND NOT EXISTS (SELECT BSNO FROM Receipt_Doc D LEFT JOIN t_code_filetype T ON (T.文件类型=D.RECEIPTTYPE) WHERE B.业务编号=D.BSNO AND T.是否必须=1 ) ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec4 = new SqlCommand(sql4.ToString(), dbcon);
|
|
cmdexec3.ExecuteNonQuery();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.Error($"自动扣单错误:{e.Message}");
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
static public List<MsClient> CreateClientList(DataTable table)
|
|
{
|
|
var headList = new List<MsClient>();
|
|
if (table.Rows.Count > 0)
|
|
{
|
|
|
|
foreach (DataRow row in table.Rows)
|
|
{
|
|
MsClient data = new MsClient();
|
|
data.CUSTNAME = row["客户简称"].ToString();
|
|
data.SALE = row["揽货人"].ToString();
|
|
if (row["结费优惠期限"] != DBNull.Value)
|
|
data.DAYS = Convert.ToInt32(row["结费优惠期限"].ToString());
|
|
if (row["结费金额"] != DBNull.Value)
|
|
data.AMT = Convert.ToDecimal(row["结费金额"].ToString());
|
|
data.AMT = data.AMT + 5000;
|
|
headList.Add(data);
|
|
}
|
|
}
|
|
return headList;
|
|
|
|
}
|
|
|
|
|
|
static public List<MsClient> CreateClientNoTtlList(SqlConnection dbcon)
|
|
{
|
|
var headList = new List<MsClient>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("select 委托单位,揽货人,sum(未收合计) 未收合计 from v_op_seae_protocol ");
|
|
strSql.Append(" group by 委托单位,揽货人 ");
|
|
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)
|
|
{
|
|
MsClient data = new MsClient();
|
|
data.CUSTNAME = row["委托单位"].ToString();
|
|
data.SALE = row["揽货人"].ToString();
|
|
if (row["未收合计"] != DBNull.Value)
|
|
data.TTLNO= Convert.ToDecimal(row["未收合计"].ToString());
|
|
headList.Add(data);
|
|
}
|
|
}
|
|
return headList;
|
|
|
|
}
|
|
|
|
|
|
static public bool updateZq(SqlConnection dbcon, string zqstatus,string custname, string sale)
|
|
{
|
|
var sql = new StringBuilder();
|
|
sql.Append("Update t_crm_client set 帐龄状态='"+ zqstatus + "' where 客户简称='"+custname+"' ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec = new SqlCommand(sql.ToString(), dbcon);
|
|
cmdexec.ExecuteNonQuery();
|
|
|
|
var sql2 = new StringBuilder();
|
|
sql2.Append("Update t_crm_client_sales set 帐龄状态='" + zqstatus + "' where 客户简称='" + custname + "' and 揽货人='"+ sale + "' ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec2 = new SqlCommand(sql2.ToString(), dbcon);
|
|
cmdexec2.ExecuteNonQuery();
|
|
|
|
var sql3 = new StringBuilder();
|
|
sql3.Append("Update t_op_seae set 扣单状态='自动扣单',扣单原因='"+ zqstatus + "',扣放单操作人='系统',扣放单操作时间=GETDATE() from t_op_seae b left join t_op_gain g on g.编号=b.编号 ");
|
|
sql3.Append(" where b.委托单位='"+ custname + "' and b.揽货人='"+ sale + "' and g.合计已收<>g.合计应收 ");
|
|
if (dbcon.State == 0) dbcon.Open();
|
|
SqlCommand cmdexec3 = new SqlCommand(sql3.ToString(), dbcon);
|
|
cmdexec3.ExecuteNonQuery();
|
|
return true;
|
|
}
|
|
|
|
static public int GetNoCt(SqlConnection dbcon,string custname,string sale)
|
|
{
|
|
int usdexrate = 0;
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("select count(*) ct from v_op_seae_protocol where 委托单位='"+ custname + "' and 揽货人='"+sale+"' 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.ToInt32(row["ct"].ToString());
|
|
}
|
|
}
|
|
|
|
return usdexrate;
|
|
}
|
|
|
|
|
|
}
|
|
}
|