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/JobDjyD6Xf.cs

232 lines
10 KiB
C#

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 JobDjyD6Xf : IJob
{
private ILog log = LogManager.GetLogger(typeof(JobDjyD6Xf));
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("DjyReqUrl");
string companyCode = context.JobDetail.JobDataMap.GetString("DjyCompanyCode");
string companyName = context.JobDetail.JobDataMap.GetString("DjyCompanyName");
string FeeName = context.JobDetail.JobDataMap.GetString("FeeName");
string CustName = context.JobDetail.JobDataMap.GetString("CustName");
string companySecret = context.JobDetail.JobDataMap.GetString("DjyCompanySecret");
string bsType = context.JobDetail.JobDataMap.GetString("DjybsType");
int reqTimeout = Convert.ToInt32(context.JobDetail.JobDataMap.GetString("RequestTimeout"));
long ts = DataTableToJsonHelper.ConvertDateTimeToInt(DateTime.Now);
JsonD6XFSend reqObj = new JsonD6XFSend();
var runid = Guid.NewGuid().ToString();
reqObj.runid = runid;
reqObj.userId = companyCode;
reqObj.module = "expendlist";
reqObj.bsType = bsType;
reqObj.sendType = "0";
reqObj.timestamp = ts;
var md5str = DataTableToJsonHelper.MD5Encrypt32(runid + companyCode + "expendlist" + bsType + "0" + ts.ToString() + companySecret);
reqObj.md5 = md5str;
//JArray jarrTemps = new JArray();
JsonD6XFData jobjTemp = new JsonD6XFData();
jobjTemp.page = 1;
jobjTemp.limit = 10000;
jobjTemp.BsType =5;
jobjTemp.Name = companyName;
var starttimestr = File.ReadAllText(CfgFilePath);
if (!string.IsNullOrEmpty(starttimestr)) {
long startts = DataTableToJsonHelper.ConvertDateTimeToInt(Convert.ToDateTime(starttimestr));
jobjTemp.starttime = startts;
}
var endtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
long endts = DataTableToJsonHelper.ConvertDateTimeToInt(Convert.ToDateTime(endtime));
jobjTemp.endtime = endts;
reqObj.data = jobjTemp;
var sendstr = JsonConvert.SerializeObject(reqObj);
log.Debug($"发送包:{sendstr}");
//发送请求数据
string rtn = WebRequestHelper.DoPost(reqUrl, sendstr, reqTimeout * 1000);
//var objRtn = JsonConvert.DeserializeAnonymousType(rtn, new { status = "", message = "" });
log.Debug($"数据返回:{rtn}");
var parseJsonObj = JsonConvert.DeserializeObject<JsonXFResponse>(rtn);
if (parseJsonObj.status)
{
var returnlist = parseJsonObj.data;
try
{
using (SqlConnection dbcon = new SqlConnection(connStr))
{
dbcon.Open();
foreach (var returndata in returnlist)
{
var BS = GETBSNO(returndata.mblno, dbcon);
if (returndata.price == "" || returndata.price == null) returndata.price = "0";
if (returndata.ctnrCount == "" || returndata.ctnrCount == null) returndata.ctnrCount = "0";
string sql = " if (select GID from t_op_txxp_log where GID='" + returndata.gid + "') is null INSERT INTO t_op_txxp_log([编号],[GID],[beizhu],[mblno],[bsstatus],[bstype],[createtime]";
sql = sql + ",[price],[sendtype],[ctnrCount],[ctnrInfo]) values ('" + BS.BSNO + "','" + returndata.gid + "'";
sql = sql + ",'" + returndata.beizhu + "','" + returndata.mblno + "','" + returndata.bsstatus + "','" + returndata.bstype + "','" + returndata.createtime + "'";
sql = sql + "," + returndata.price + ",'" + returndata.sendtype + "'," + returndata.ctnrCount + ",'" + returndata.ctnrInfo + "')";
SqlCommand cmd = new SqlCommand(sql, dbcon);
cmd.ExecuteNonQuery();
if (BS.BSNO != "" && BS.FEESTATUS != "提交财务" && BS.FEESTATUS != "费用封帐" && BS.BSSTATUS != "应付完毕")
{
if (Convert.ToDecimal(returndata.price) != 0 && !string.IsNullOrEmpty(CustName) && !string.IsNullOrEmpty(FeeName))
{
sql = "INSERT INTO [t_ch_fee] ([类型],[费用状态],[编号],[费用名称],[结算单位],[客户名称],[标准]";
sql = sql + ",[单价],[数量],[金额],[币别],[汇率],[备注],[结算金额],[开票金额]";
sql = sql + ",[录入人],[录入日期],[是否对帐],[顺序],[冲抵金额]";
sql = sql + ",[机密],[是否垫付],[申请金额],[不开发票],[费用英文名称]";
sql = sql + ",[申请开票],[提交],[不含税价],[税率],[税额],PROJECTFEEID) VALUES ";
sql = sql + "('付','审核通过','" + BS.BSNO + "','" + FeeName + "','','" + CustName + "','票'";
sql = sql + "," + returndata.price + ",1," + returndata.price + ",'RMB',1,'',0,0";
sql = sql + ",'DEMO-SA',GETDATE(),0,0,0";
sql = sql + ",0,0,0,0,'" + FeeName + "'";
sql = sql + ",0,0," + returndata.price + ",0,0,'" + returndata.gid + "')";
log.Debug($"{returndata.mblno},-费用语句-{sql}");
dbcon.Open();
SqlCommand cmd2 = new SqlCommand(sql, dbcon);
cmd2.ExecuteNonQuery();
dbcon.Close();
}
}
}
dbcon.Close();
}
}
catch (Exception e) {
log.Debug($"记录插入错误:{e.Message}");
}
File.WriteAllText(CfgFilePath, endtime);
}
else {
log.Debug($"数据返回错误:{parseJsonObj.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 OPSEAE GETBSNO(string MBLNO, SqlConnection dbcon)
{
var OPSEAE = new OPSEAE();
var strSql = new StringBuilder();
strSql.Append("SELECT 编号,费用状态,业务状态 from t_op_seae 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)
{
OPSEAE.BSNO = row["编号"].ToString();
OPSEAE.FEESTATUS = row["费用状态"].ToString();
OPSEAE.BSSTATUS = row["业务状态"].ToString();
}
}
return OPSEAE;
}
}
public class JsonD6XFSend
{
public string runid { get; set; }
public string userId { get; set; }
public string module { get; set; }
public string bsType { get; set; }
public string sendType { get; set; }
public long timestamp { get; set; }
public string md5 { get; set; }
public JsonD6XFData data { get; set; }
}
public class JsonD6XFData
{
public int page { get; set; }
public int limit { get; set; }
public int BsType { get; set; }
public long starttime { get; set; }
public long endtime { get; set; }
public string Name { get; set; }
}
public class JsonD6XFResponse
{
public bool status { get; set; }
public string message { get; set; }
public string code { get; set; }
public string count { get; set; }
public List<D6XFData> data { get; set; }
}
public class D6XFData
{
public string gid { get; set; }
public string beizhu { get; set; }
public string bsno { get; set; }
public string mblno { get; set; }
public string bsstatus { get; set; }
public string bstype { get; set; }
public string createtime { get; set; }
public string price { get; set; }
public string sendtype { get; set; }
public string sendcom { get; set; }
public string ctnrCount { get; set; }
public string ctnrInfo { get; set; }
}
}