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.
276 lines
12 KiB
C#
276 lines
12 KiB
C#
using log4net;
|
|
using Newtonsoft.Json;
|
|
using Quartz;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Text;
|
|
|
|
|
|
namespace JobCreateFee
|
|
{
|
|
public class JobCreateTask : IJob
|
|
{
|
|
private ILog log = LogManager.GetLogger(typeof(JobCreateTask));
|
|
|
|
public void Execute(IJobExecutionContext context)
|
|
{
|
|
log.Debug($"Execute开始");
|
|
try
|
|
{
|
|
string connStr = context.JobDetail.JobDataMap.GetString("ConnectString");
|
|
string Admin = context.JobDetail.JobDataMap.GetString("Admin");
|
|
using (SqlConnection dbcon = new SqlConnection(connStr))
|
|
{
|
|
log.Debug($"清空未开票任务");
|
|
|
|
dbcon.Open();
|
|
var sql = "DELETE FROM op_task where TASKTYPE='未开票' and TASKSTATUS='未开始'";
|
|
SqlCommand cmd = new SqlCommand(sql, dbcon);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
log.Debug($"生成未开票任务");
|
|
|
|
var strSql = new StringBuilder();
|
|
strSql.Append(" F.FEETYPE=1 AND F.INVOICE<>F.AMOUNT AND DATEDIFF([day],GETDATE(),ISNULL(B.STLDATE,B.ETD))<=10 ");
|
|
var NoInvList = GetNoInv(strSql.ToString(),dbcon);
|
|
if (NoInvList != null && NoInvList.Count != 0) {
|
|
foreach (var NoInv in NoInvList)
|
|
{
|
|
insertTask(NoInv.BSNO, NoInv.MBLNO,NoInv.SALEDEPT+"_"+NoInv.OPLBNAME+"_"+NoInv.CUSTOMERNAME + "_RMB应收:" + NoInv.RMBDR + "_USD应收:" + NoInv.USDDR, "未开票",NoInv.OP,dbcon);
|
|
}
|
|
}
|
|
|
|
log.Debug($"更新欠费待收款任务");
|
|
|
|
|
|
var sql21 = "DELETE FROM op_task where TASKTYPE='欠费待收款' and TASKSTATUS='未开始' and EXISTS (select 1 from v_op_bs where op_task.BSNO=v_op_bs.BSNO AND DATEDIFF([day],GETDATE(),ISNULL(v_op_bs.STLDATE,v_op_bs.ETD))>7) ";
|
|
SqlCommand cmd21 = new SqlCommand(sql21, dbcon);
|
|
cmd21.ExecuteNonQuery();
|
|
|
|
var sql2 = "UPDATE op_task SET ISCOMPLETE=1,TASKSTATUS='已完成',COMPLETETYPE='自动',COMPLETETIME=GETDATE() where TASKTYPE='欠费待收款' and TASKSTATUS='未开始' and EXISTS (select 1 from v_op_gain_sum where op_task.BSNO=v_op_gain_sum.BSNO AND STLTTLDR=TTLDR and TTLDR<>0) ";
|
|
SqlCommand cmd2 = new SqlCommand(sql2, dbcon);
|
|
cmd2.ExecuteNonQuery();
|
|
|
|
|
|
var strSql2 = new StringBuilder();
|
|
strSql2.Append(" F.FEETYPE=1 AND F.SETTLEMENT<>F.AMOUNT AND DATEDIFF([day],GETDATE(),ISNULL(B.STLDATE,B.ETD))<=7 AND NOT EXISTS (SELECT 1 FROM op_task WHERE op_task.BSNO=B.BSNO AND TASKTYPE='欠费待收款' )");
|
|
var NoStlList = GetNoInv(strSql2.ToString(), dbcon);
|
|
if (NoStlList != null && NoStlList.Count != 0)
|
|
{
|
|
foreach (var NoInv in NoStlList)
|
|
{
|
|
insertTask(NoInv.BSNO, NoInv.MBLNO, NoInv.SALEDEPT + "_" + NoInv.OPLBNAME + "_RMB未收:" + NoInv.RMBDR + "_USD未收:" + NoInv.USDDR + "_RMB开票:" + NoInv.INVRMBDR + "_USD开票:" + NoInv.INVUSDDR, "欠费待收款", NoInv.OP, dbcon);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
log.Debug($"更新超额度欠费任务");
|
|
var sql3 = "DELETE FROM op_task where TASKTYPE='超额度欠费' and TASKSTATUS='未开始'";
|
|
SqlCommand cmd3 = new SqlCommand(sql3, dbcon);
|
|
cmd3.ExecuteNonQuery();
|
|
|
|
var NoCustStlList = GetCustNoStl( dbcon);
|
|
if (NoCustStlList != null && NoCustStlList.Count != 0)
|
|
{
|
|
foreach (var NoInv in NoCustStlList)
|
|
{
|
|
insertTask("","", NoInv.CUSTOMERNAME + "_" + NoInv.CUSTZQ + "_欠费额度:" + NoInv.ALLOWAMOUNT + "_总欠费:" + NoInv.NOSTLAMOUNT, "超额度欠费", Admin, dbcon);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error(ex.Message);
|
|
log.Error(ex.StackTrace);
|
|
}
|
|
}
|
|
|
|
static public List<MsOpSeaeFee> GetNoInv(string connStr, SqlConnection dbcon)
|
|
{
|
|
|
|
var headList = new List<MsOpSeaeFee>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT B.BSNO,B.SALE,B.OP,B.SALEDEPT,B.OPLBNAME,B.MBLNO,F.CUSTOMERNAME");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'RMB' THEN ISNULL(F.AMOUNT,0) ELSE 0 END) ELSE 0 END),0) AS RMBDR");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'USD' THEN ISNULL(F.AMOUNT,0) ELSE 0 END)ELSE 0 END),0) AS USDDR");
|
|
strSql.Append(" from CH_FEE F INNER JOIN V_OP_BILL B ON (F.BSNO=B.BSNO) where 1=1 AND " + connStr);
|
|
strSql.Append(" GROUP BY B.BSNO,B.SALE,B.OP,B.SALEDEPT,B.OPLBNAME,B.MBLNO,F.CUSTOMERNAME");
|
|
|
|
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 MsOpSeaeFee();
|
|
Feedata.BSNO = row["BSNO"].ToString();
|
|
Feedata.SALE = row["SALE"].ToString();
|
|
Feedata.OP = row["OP"].ToString();
|
|
Feedata.SALEDEPT = row["SALEDEPT"].ToString();
|
|
Feedata.OPLBNAME = row["OPLBNAME"].ToString();
|
|
Feedata.MBLNO = row["MBLNO"].ToString();
|
|
Feedata.CUSTOMERNAME = row["CUSTOMERNAME"].ToString();
|
|
if (row["RMBDR"] != DBNull.Value)
|
|
Feedata.RMBDR = Convert.ToDecimal(row["RMBDR"].ToString());
|
|
if (row["USDDR"] != DBNull.Value)
|
|
Feedata.USDDR = Convert.ToDecimal(row["USDDR"].ToString());
|
|
headList.Add(Feedata);
|
|
|
|
}
|
|
}
|
|
|
|
return headList;
|
|
}
|
|
|
|
static public List<MsOpSeaeFee> GetNoStl(string connStr, SqlConnection dbcon)
|
|
{
|
|
|
|
var headList = new List<MsOpSeaeFee>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT B.BSNO,B.SALE,B.OP,B.SALEDEPT,B.OPLBNAME,B.MBLNO,F.CUSTOMERNAME");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'RMB' THEN ISNULL(F.AMOUNT,0)-ISNULL(F.SETTLEMENT,0) ELSE 0 END) ELSE 0 END),0) AS RMBDR");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'USD' THEN ISNULL(F.AMOUNT,0)-ISNULL(F.SETTLEMENT,0) ELSE 0 END)ELSE 0 END),0) AS USDDR");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'RMB' THEN ISNULL(F.INVOICE,0) ELSE 0 END) ELSE 0 END),0) AS INVRMBDR");
|
|
strSql.Append(",isnull(SUM(CASE F.FEETYPE WHEN 1 THEN (CASE F.CURRENCY WHEN 'USD' THEN ISNULL(F.INVOICE,0) ELSE 0 END)ELSE 0 END),0) AS INVUSDDR");
|
|
strSql.Append(" from CH_FEE F INNER JOIN V_OP_BILL B ON (F.BSNO=B.BSNO) where 1=1 AND " + connStr);
|
|
strSql.Append(" GROUP BY B.BSNO,B.SALE,B.OP,B.SALEDEPT,B.OPLBNAME,B.MBLNO,F.CUSTOMERNAME");
|
|
|
|
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 MsOpSeaeFee();
|
|
Feedata.BSNO = row["BSNO"].ToString();
|
|
Feedata.SALE = row["SALE"].ToString();
|
|
Feedata.OP = row["OP"].ToString();
|
|
Feedata.SALEDEPT = row["SALEDEPT"].ToString();
|
|
Feedata.OPLBNAME = row["OPLBNAME"].ToString();
|
|
Feedata.MBLNO = row["MBLNO"].ToString();
|
|
Feedata.CUSTOMERNAME = row["CUSTOMERNAME"].ToString();
|
|
if (row["RMBDR"] != DBNull.Value)
|
|
Feedata.RMBDR = Convert.ToDecimal(row["RMBDR"].ToString());
|
|
if (row["USDDR"] != DBNull.Value)
|
|
Feedata.USDDR = Convert.ToDecimal(row["USDDR"].ToString());
|
|
if (row["INVRMBDR"] != DBNull.Value)
|
|
Feedata.INVRMBDR = Convert.ToDecimal(row["INVRMBDR"].ToString());
|
|
if (row["INVUSDDR"] != DBNull.Value)
|
|
Feedata.INVUSDDR = Convert.ToDecimal(row["INVUSDDR"].ToString());
|
|
headList.Add(Feedata);
|
|
|
|
}
|
|
}
|
|
|
|
return headList;
|
|
}
|
|
|
|
static public List<MsCustNoStlFee> GetCustNoStl(SqlConnection dbcon)
|
|
{
|
|
|
|
var headList = new List<MsCustNoStlFee>();
|
|
var strSql = new StringBuilder();
|
|
strSql.Append("SELECT * FROM (");
|
|
strSql.Append("SELECT A.ALLOWAMOUNT,C.SHORTNAME,[dbo].[GetCustZq](C.SHORTNAME) ZQ,ISNULL((SELECT SUM((AMOUNT-SETTLEMENT)*EXCHANGERATE) FROM CH_FEE WHERE FEETYPE=1 AND CUSTOMERNAME=C.SHORTNAME),0) NOSTLAMOUNT");
|
|
strSql.Append(" FROM Info_Client_ACCDATE A ");
|
|
strSql.Append(" left join info_client C ON C.GID=A.LINKGID");
|
|
strSql.Append(" WHERE ISNULL(ALLOWAMOUNT,0)>0");
|
|
strSql.Append(" ) AS T WHERE NOSTLAMOUNT>ALLOWAMOUNT ");
|
|
|
|
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 MsCustNoStlFee();
|
|
Feedata.CUSTOMERNAME = row["SHORTNAME"].ToString();
|
|
Feedata.CUSTZQ = row["ZQ"].ToString();
|
|
|
|
if (row["ALLOWAMOUNT"] != DBNull.Value)
|
|
Feedata.ALLOWAMOUNT = Convert.ToDecimal(row["ALLOWAMOUNT"].ToString());
|
|
if (row["NOSTLAMOUNT"] != DBNull.Value)
|
|
Feedata.NOSTLAMOUNT = Convert.ToDecimal(row["NOSTLAMOUNT"].ToString());
|
|
headList.Add(Feedata);
|
|
|
|
}
|
|
}
|
|
|
|
return headList;
|
|
}
|
|
|
|
|
|
|
|
|
|
private string insertTask(string BSNO,string MBLNO,string TASKTITLE,string TASKTYPE,string OP, SqlConnection dbcon)
|
|
{
|
|
string sql = " INSERT INTO [op_task] (GID,[TASKNO] ,[PTASKNO],[TASKTYPE],[TASKSOURCE],[TASKSTATUS],[TASKTITLE] ";
|
|
sql = sql + ",[CREATEUSER] ,[CREATETIME] ,[TASKBEGINDATE] ,[COMPLETETYPE] ,[COMPLETETIME] ,[KPI],[MBLNO],[FILENO],[MAILNO],[FILEPATH],[ISPUBLIC],[OP],[BSNO],ISCOMPLETE)";
|
|
sql = sql + " SELECT NEWID(),NEWID(),null, '"+ TASKTYPE + "', '任务生成', '未开始' as [任务状态], '" + TASKTITLE + "' as [任务说明],";
|
|
sql = sql + "'DEMO-SA' as [发起人],GETDATE() as [录入日期],GETDATE() as[任务开始时间], '手动' as [完成方式],null as [完成时间] ,null as [KPI值] , '" + MBLNO + "' as [提单号], ";
|
|
sql = sql + " null as [文件编号], '' as [邮件编号], '' as [电子档案路径], 0 as 是否公共,'"+ OP + "','" + BSNO + "' as 编号,0";
|
|
|
|
// log.Debug($"插入语句:{sql}");
|
|
SqlCommand cmd = new SqlCommand(sql, dbcon);
|
|
cmd.ExecuteNonQuery();
|
|
return "";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
[JsonObject]
|
|
public class MsOpSeaeFee
|
|
{
|
|
public string BSNO { get; set; }
|
|
public string SALE { get; set; }
|
|
public string OP { get; set; }
|
|
|
|
public string SALEDEPT { get; set; }
|
|
public string OPLBNAME { get; set; }
|
|
public string MBLNO { get; set; }
|
|
public string CUSTOMERNAME { get; set; }
|
|
|
|
public decimal RMBDR { get; set; }
|
|
public decimal USDDR { get; set; }
|
|
public decimal INVRMBDR { get; set; }
|
|
public decimal INVUSDDR { get; set; }
|
|
public decimal INVAMOUNT { get; set; }
|
|
|
|
}
|
|
|
|
[JsonObject]
|
|
public class MsCustNoStlFee
|
|
{
|
|
public string CUSTOMERNAME { get; set; }
|
|
public string CUSTZQ { get; set; }
|
|
|
|
public decimal ALLOWAMOUNT { get; set; }
|
|
public decimal NOSTLAMOUNT { get; set; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|