edb57a5c84
SVN-Revision: r336
1223 lines
66 KiB
C#
1223 lines
66 KiB
C#
using Lskj.Business.Impl;
|
|
using Lskj.Control;
|
|
using Lskj.Control.BrowserSetting;
|
|
using Lskj.Control.Model;
|
|
using Lskj.Core;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Lskj.PubInvoiceOut
|
|
{
|
|
public partial class FrmMain : BaseForm
|
|
{
|
|
/// <summary>
|
|
/// 主表数据源sql
|
|
/// </summary>
|
|
public string MainSourceSql;
|
|
/// <summary>
|
|
/// 明细数据源sql
|
|
/// </summary>
|
|
public string DetailSourceSql;
|
|
/// <summary>
|
|
/// 发票主键值
|
|
/// </summary>
|
|
public string PrimaryValue;
|
|
/// <summary>
|
|
/// 红蓝标识
|
|
/// </summary>
|
|
public string InvoiceTag;
|
|
/// <summary>
|
|
/// 主表
|
|
/// </summary>
|
|
private DataTable MainDataTab = new DataTable();
|
|
/// <summary>
|
|
/// 明细表
|
|
/// </summary>
|
|
private DataTable DetailDataTab = new DataTable();
|
|
/// <summary>
|
|
/// 发票流水号
|
|
/// </summary>
|
|
private string InvoiceId = "";
|
|
/// <summary>
|
|
/// 二维码ID
|
|
/// </summary>
|
|
private string Rzid = "";
|
|
/// <summary>
|
|
/// 是否已经重新登录
|
|
/// </summary>
|
|
private bool AgainSendCode = false;
|
|
/// <summary>
|
|
/// 是否已经重新认证
|
|
/// </summary>
|
|
private bool AgainQrCode = false;
|
|
public FrmMain()
|
|
{
|
|
InitializeComponent();
|
|
this.Load += OnFrmMain_Load;
|
|
}
|
|
/// <summary>
|
|
/// 初始化时
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnFrmMain_Load(object sender, EventArgs e)
|
|
{
|
|
WaitForm.ShowForm();
|
|
try
|
|
{
|
|
if (!string.IsNullOrEmpty(MainSourceSql))
|
|
{
|
|
this.MainDataTab = MainImpl.GetDataTableResult(MainSourceSql);
|
|
}
|
|
if (!string.IsNullOrEmpty(DetailSourceSql))
|
|
{
|
|
this.DetailDataTab = MainImpl.GetDataTableResult(DetailSourceSql);
|
|
}
|
|
if (string.IsNullOrWhiteSpace(InvoiceTag) || !(InvoiceTag + "").Equals("1"))
|
|
{
|
|
MainMakeInvoice();
|
|
}
|
|
else
|
|
{
|
|
MainMakeRedInvoice();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageUtil.Show(ex.Message);
|
|
}
|
|
WaitForm.HideForm();
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
this.Dispose();
|
|
}
|
|
/// <summary>
|
|
/// 开蓝票整体方法
|
|
/// </summary>
|
|
private void MainMakeInvoice()
|
|
{
|
|
string token = string.Empty;
|
|
if (AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
}
|
|
ResultModel makeModel = new ResultModel();
|
|
if (MakeInvoice(ref makeModel, ref token) || makeModel.Message.Contains("开票中") || makeModel.Message.Contains("编号重复") || makeModel.Message.Contains("编号重复") || makeModel.Message.Contains("手动重推") || makeModel.Message.Contains("开票完成"))
|
|
{
|
|
bool isMake = false;
|
|
if (makeModel.Message.Contains("开票中") || makeModel.Message.Contains("编号重复") || makeModel.Message.Contains("手动重推"))
|
|
{
|
|
ResultModel refreshModel = new ResultModel();
|
|
RefreshInvoiceResponse(ref refreshModel, ref token, true);
|
|
if (refreshModel.State.Equals("22"))
|
|
{
|
|
ResultModel retryModel = new ResultModel();
|
|
RetryInvoice(ref retryModel, ref token, true);
|
|
|
|
if (retryModel.Code.Equals("9999"))
|
|
{
|
|
MessageUtil.Show($"发票重开失败,{retryModel.Message}");
|
|
return;
|
|
}
|
|
else if (AgainSendCode && (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && (refreshModel.Result.Contains("重新登录") || refreshModel.Result.Contains("重新登入"))))
|
|
{
|
|
string errReason = "";
|
|
try
|
|
{
|
|
JArray returnResult = (JArray)JsonConvert.DeserializeObject(refreshModel.Result);
|
|
errReason = returnResult[0]["errReason"] + "";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
errReason = refreshModel.Result;
|
|
}
|
|
MessageUtil.Show($"已重开发票\r\n请再次点击更新数据");
|
|
return;
|
|
}
|
|
else if (AgainQrCode && (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && (refreshModel.Result.Contains("重新认证") || refreshModel.Result.Contains("认证"))))
|
|
{
|
|
string errReason = "";
|
|
try
|
|
{
|
|
JArray returnResult = (JArray)JsonConvert.DeserializeObject(refreshModel.Result);
|
|
errReason = returnResult[0]["errReason"] + "";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
errReason = refreshModel.Result;
|
|
}
|
|
MessageUtil.Show($"已重开发票\r\n上次开票失败原因为:{errReason}\r\n请再次点击更新数据");
|
|
return;
|
|
}
|
|
}
|
|
//this.InvoiceId = MainDataTab.Columns.Contains("O_invoiceId") ? MainDataTab.Rows[0]["O_invoiceId"] + "" : SqlHelper.ExecuteScalar(string.Format("select O_invoiceId from Acc_InvoiceMaintab where XMid = '{0}'", PrimaryValue)) + "";
|
|
isMake = true;
|
|
}
|
|
while (true)
|
|
{
|
|
ResultModel refreshModel = new ResultModel();
|
|
RefreshInvoiceResponse(ref refreshModel, ref token);
|
|
if (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && refreshModel.Result.Contains("发票未生成"))
|
|
{
|
|
if (isMake)
|
|
{
|
|
MessageUtil.Show("发票未生成");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else if (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && (refreshModel.Result.Contains("重新登录") || refreshModel.Result.Contains("重新登入")))//如果需要验证码登录
|
|
{
|
|
WaitForm.HideForm();
|
|
FrmSendCode frmSendCode = new FrmSendCode();
|
|
frmSendCode.SendCodeCallback += (sender, e) =>
|
|
{
|
|
ResultModel sendModel = new ResultModel();
|
|
SendCode(sendModel, ref token);
|
|
e.Code = sendModel.Code;
|
|
e.Message = sendModel.Message;
|
|
};
|
|
frmSendCode.LoginCallback += (sender, e) =>
|
|
{
|
|
ResultModel sendModel = new ResultModel();
|
|
Login(sendModel, frmSendCode.SendCode, ref token);
|
|
if (sendModel.Code.Equals("0000"))
|
|
{
|
|
AgainSendCode = true;
|
|
}
|
|
e.Code = sendModel.Code;
|
|
e.Message = sendModel.Message;
|
|
};
|
|
DialogResult dialogResult = frmSendCode.ShowDialog();
|
|
if (dialogResult == DialogResult.OK)
|
|
{
|
|
WaitForm.ShowForm();
|
|
MainMakeInvoice();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show("验证失败");
|
|
return;
|
|
}
|
|
}
|
|
else if (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && (refreshModel.Result.Contains("重新认证") || refreshModel.Result.Contains("认证")))//如果需要扫码
|
|
{
|
|
WaitForm.HideForm();
|
|
FrmQrCode frmQrCode = new FrmQrCode();
|
|
frmQrCode.OnAttestationCallback += (sender, e) =>
|
|
{
|
|
ResultModel sendModel = new ResultModel();
|
|
Attestation(sendModel, ref token);
|
|
e.Code = sendModel.Code;
|
|
e.Message = sendModel.Message;
|
|
e.Result = sendModel.Result;
|
|
};
|
|
frmQrCode.OnVerifyQrCodeCallback += (sender, e) =>
|
|
{
|
|
ResultModel sendModel = new ResultModel();
|
|
VerifyQrCode(sendModel, ref token);
|
|
if (sendModel.Code.Equals("0000") && sendModel.Result.Equals("2"))
|
|
{
|
|
AgainQrCode = true;
|
|
}
|
|
e.Code = sendModel.Code;
|
|
e.Message = sendModel.Message;
|
|
e.Result = sendModel.Result;
|
|
};
|
|
DialogResult dialogResult = frmQrCode.ShowDialog();
|
|
if (dialogResult == DialogResult.OK)
|
|
{
|
|
WaitForm.ShowForm();
|
|
MainMakeInvoice();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show("验证失败");
|
|
return;
|
|
}
|
|
}
|
|
else if (refreshModel.Code.Equals("0000") && !refreshModel.State.Equals("2") && refreshModel.Message.Equals("获取成功") && refreshModel.Result.Contains("errReason"))
|
|
{
|
|
string errReason = "";
|
|
try
|
|
{
|
|
JArray returnResult = (JArray)JsonConvert.DeserializeObject(refreshModel.Result);
|
|
errReason = returnResult[0]["errReason"] + "";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
errReason = refreshModel.Result;
|
|
}
|
|
MessageUtil.Show(errReason);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show(refreshModel.Message);
|
|
return;
|
|
}
|
|
System.Threading.Thread.Sleep(500);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageUtil.Show(makeModel.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 开红票整体方法
|
|
/// </summary>
|
|
private void MainMakeRedInvoice()
|
|
{
|
|
string token = string.Empty;
|
|
if (AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
}
|
|
ResultModel initializeRedModel = new ResultModel();
|
|
if (InitializeRedConfirm(initializeRedModel, ref token))
|
|
{
|
|
ResultModel saveRedModel = new ResultModel();
|
|
saveRedModel.Result = initializeRedModel.Result;
|
|
if (SaveRedConfirm(saveRedModel, ref token))
|
|
{
|
|
ResultModel makeRedModel = new ResultModel();
|
|
makeRedModel.Result = saveRedModel.Result;
|
|
makeRedModel.JResult = saveRedModel.JResult;
|
|
if (MakeRedBill(makeRedModel, ref token))
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 修改表结构
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="colName"></param>
|
|
/// <param name="type"></param>
|
|
private bool AlterTable(string tableName, string colName, string colType)
|
|
{
|
|
bool isResult;
|
|
try
|
|
{
|
|
if (!BaseImpl.HasExistsColumn(tableName, colName))
|
|
{
|
|
SqlHelper.ExecuteNonQuery(string.Format("alter table {0} add {1} {2}", tableName, colName, colType));
|
|
}
|
|
isResult = true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
isResult = false;
|
|
}
|
|
return isResult;
|
|
}
|
|
/// <summary>
|
|
/// 获取操作token
|
|
/// </summary>
|
|
private string GetToken()
|
|
{
|
|
string token = "";
|
|
try
|
|
{
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi.Auth/verify/getToken";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> pmsDic = new Dictionary<string, string>();
|
|
pmsDic.Add("appCode", "13425C2E855757ED621C9A8BC4D52A4BCE33CB1A961831C9");
|
|
pmsDic.Add("appSecret", "tDfa1iY0FlSx20gM");
|
|
HttpWebResponse webResponse = HttpTools.Post(url, "", pmsDic, null, HttpTools.Method.GET);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
string code = resultJObject["code"] + "";
|
|
if (code.Equals("0000"))
|
|
{
|
|
token = resultJObject["token"] + "";
|
|
SqlHelper.ExecuteNonQuery(string.Format("update p_systemtab set invoiceToken = '{0}'", token));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
return token;
|
|
}
|
|
/// <summary>
|
|
/// 发送验证码
|
|
/// </summary>
|
|
private bool SendCode(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isSend = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/sendCode";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
pmsJObject.Add("password", SourceRow.Table.Columns.Contains("password") ? SourceRow["password"] + "" : "");
|
|
pmsJObject.Add("relateType", SourceRow.Table.Columns.Contains("relateType") ? SourceRow["relateType"] + "" : "");
|
|
int area = SourceRow.Table.Columns.Contains("area") && int.TryParse(SourceRow["area"] + "", out area) ? area : 0;
|
|
pmsJObject.Add("area", area);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
isSend = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isSend = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isSend = SendCode(resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isSend = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isSend = false;
|
|
}
|
|
return isSend;
|
|
}
|
|
/// <summary>
|
|
/// 验证码登录
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private bool Login(ResultModel resultModel, string smsCode, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/login";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
pmsJObject.Add("smsCode", smsCode);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = Login(resultModel, smsCode, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 获取二维码
|
|
/// </summary>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool Attestation(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/attestation";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
resultModel.Result = resultJObject["result"]["qrCode"] + "";
|
|
this.Rzid = resultJObject["result"]["Rzid"] + "";
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
isLogin = Attestation(resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 二维码验证
|
|
/// </summary>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool VerifyQrCode(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/verifyQrCode";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token); JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
pmsJObject.Add("Rzid", this.Rzid);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
resultModel.Result = resultJObject["result"]["status"] + "";
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
isLogin = VerifyQrCode(resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 蓝字发票开具
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private bool MakeInvoice(ref ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/makeInvoice";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
JObject qptJObject = new JObject();
|
|
qptJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
qptJObject.Add("password", SourceRow.Table.Columns.Contains("password") ? SourceRow["password"] + "" : "");
|
|
qptJObject.Add("Yhyywdmc", SourceRow.Table.Columns.Contains("Yhyywdmc") ? SourceRow["Yhyywdmc"] + "" : "");
|
|
qptJObject.Add("Yhzh", SourceRow.Table.Columns.Contains("Yhzh") ? SourceRow["Yhzh"] + "" : "");
|
|
pmsJObject.Add("qpt", qptJObject);
|
|
JObject invoiceJObject = new JObject();
|
|
invoiceJObject.Add("documentNo", SourceRow.Table.Columns.Contains("documentNo") ? SourceRow["documentNo"] + "" : "");
|
|
invoiceJObject.Add("fjh", SourceRow.Table.Columns.Contains("fjh") ? SourceRow["fjh"] + "" : "");
|
|
invoiceJObject.Add("jqbh", SourceRow.Table.Columns.Contains("jqbh") ? SourceRow["jqbh"] + "" : "");
|
|
int fplx = SourceRow.Table.Columns.Contains("fplx") && int.TryParse(SourceRow["fplx"] + "", out fplx) ? fplx : 12;
|
|
invoiceJObject.Add("fplx", fplx);
|
|
int ghfType = SourceRow.Table.Columns.Contains("ghfType") && int.TryParse(SourceRow["ghfType"] + "", out ghfType) ? ghfType : 1;
|
|
invoiceJObject.Add("ghfType", ghfType);
|
|
invoiceJObject.Add("ghfAddr", SourceRow.Table.Columns.Contains("ghfAddr") ? SourceRow["ghfAddr"] + "" : "");
|
|
invoiceJObject.Add("ghfBankAccount", SourceRow.Table.Columns.Contains("ghfBankAccount") ? SourceRow["ghfBankAccount"] + "" : "");
|
|
invoiceJObject.Add("ghfEmail", SourceRow.Table.Columns.Contains("ghfEmail") ? SourceRow["ghfEmail"] + "" : "");
|
|
invoiceJObject.Add("ghfMobile", SourceRow.Table.Columns.Contains("ghfMobile") ? SourceRow["ghfMobile"] + "" : "");
|
|
invoiceJObject.Add("ghfNsrmc", SourceRow.Table.Columns.Contains("ghfNsrmc") ? SourceRow["ghfNsrmc"] + "" : "");
|
|
invoiceJObject.Add("ghfNsrsbh", SourceRow.Table.Columns.Contains("ghfNsrsbh") ? SourceRow["ghfNsrsbh"] + "" : "");
|
|
invoiceJObject.Add("ghfTel", SourceRow.Table.Columns.Contains("ghfTel") ? SourceRow["ghfTel"] + "" : "");
|
|
decimal hjje = SourceRow.Table.Columns.Contains("hjje") && decimal.TryParse(SourceRow["hjje"] + "", out hjje) ? hjje : 0;
|
|
invoiceJObject.Add("hjje", hjje);
|
|
decimal hjse = SourceRow.Table.Columns.Contains("hjse") && decimal.TryParse(SourceRow["hjse"] + "", out hjse) ? hjse : 0;
|
|
invoiceJObject.Add("hjse", hjse);
|
|
int invoiceType = SourceRow.Table.Columns.Contains("invoiceType") && int.TryParse(SourceRow["invoiceType"] + "", out invoiceType) ? invoiceType : 1;
|
|
invoiceJObject.Add("invoiceType", invoiceType);
|
|
invoiceJObject.Add("issuer", SourceRow.Table.Columns.Contains("issuer") ? SourceRow["issuer"] + "" : "");
|
|
decimal jshj = SourceRow.Table.Columns.Contains("jshj") && decimal.TryParse(SourceRow["jshj"] + "", out jshj) ? jshj : 0;
|
|
invoiceJObject.Add("jshj", jshj);
|
|
decimal kce = SourceRow.Table.Columns.Contains("kce") && decimal.TryParse(SourceRow["kce"] + "", out kce) ? kce : 0;
|
|
invoiceJObject.Add("kce", kce);
|
|
invoiceJObject.Add("memo", SourceRow.Table.Columns.Contains("memo") ? SourceRow["memo"] + "" : "");
|
|
invoiceJObject.Add("payee", SourceRow.Table.Columns.Contains("payee") ? SourceRow["payee"] + "" : "");
|
|
invoiceJObject.Add("createorName", SourceRow.Table.Columns.Contains("createorName") ? SourceRow["createorName"] + "" : "");
|
|
invoiceJObject.Add("sellerAddrName", SourceRow.Table.Columns.Contains("sellerAddrName") ? SourceRow["sellerAddrName"] + "" : "");
|
|
invoiceJObject.Add("sellerNsrmc", SourceRow.Table.Columns.Contains("sellerNsrmc") ? SourceRow["sellerNsrmc"] + "" : "");
|
|
invoiceJObject.Add("sellerNsrsbh", SourceRow.Table.Columns.Contains("sellerNsrsbh") ? SourceRow["sellerNsrsbh"] + "" : "");
|
|
invoiceJObject.Add("sellerTel", SourceRow.Table.Columns.Contains("sellerTel") ? SourceRow["sellerTel"] + "" : "");
|
|
invoiceJObject.Add("callBackUrl", SourceRow.Table.Columns.Contains("callBackUrl") ? SourceRow["callBackUrl"] + "" : "");
|
|
int tsfs = SourceRow.Table.Columns.Contains("tsfs") && int.TryParse(SourceRow["tsfs"] + "", out tsfs) ? tsfs : -1;
|
|
invoiceJObject.Add("tsfs", tsfs);
|
|
pmsJObject.Add("invoice", invoiceJObject);
|
|
JArray invoiceItemsArray = new JArray();
|
|
foreach (DataRow item in DetailDataTab.Rows)
|
|
{
|
|
JObject itemJObject = new JObject();
|
|
decimal amount = item.Table.Columns.Contains("amount") && decimal.TryParse(item["amount"] + "", out amount) ? amount : 0;
|
|
itemJObject.Add("amount", amount);
|
|
decimal incTaxAmount = item.Table.Columns.Contains("incTaxAmount") && decimal.TryParse(item["incTaxAmount"] + "", out incTaxAmount) ? incTaxAmount : 0;
|
|
itemJObject.Add("incTaxAmount", incTaxAmount);
|
|
decimal incTaxPrice;
|
|
if (item.Table.Columns.Contains("incTaxPrice") && decimal.TryParse(item["incTaxPrice"] + "", out incTaxPrice))
|
|
{
|
|
itemJObject.Add("incTaxPrice", incTaxPrice);
|
|
}
|
|
decimal price;
|
|
if (item.Table.Columns.Contains("price") && decimal.TryParse(item["price"] + "", out price))
|
|
{
|
|
itemJObject.Add("price", price);
|
|
}
|
|
itemJObject.Add("productName", item.Table.Columns.Contains("productName") ? item["productName"] + "" : "");
|
|
decimal quantity;
|
|
if (item.Table.Columns.Contains("quantity") && decimal.TryParse(item["quantity"] + "", out quantity))
|
|
{
|
|
itemJObject.Add("quantity", quantity);
|
|
}
|
|
itemJObject.Add("spec", item.Table.Columns.Contains("spec") ? item["spec"] + "" : "");
|
|
int sphxz = item.Table.Columns.Contains("sphxz") && int.TryParse(item["sphxz"] + "", out sphxz) ? sphxz : 0;
|
|
itemJObject.Add("sphxz", sphxz);
|
|
decimal taxRate = item.Table.Columns.Contains("taxRate") && decimal.TryParse(item["taxRate"] + "", out taxRate) ? taxRate : 0;
|
|
itemJObject.Add("taxRate", taxRate);
|
|
itemJObject.Add("ssflbm", item.Table.Columns.Contains("ssflbm") ? item["ssflbm"] + "" : "");
|
|
decimal taxAmount = item.Table.Columns.Contains("taxAmount") && decimal.TryParse(item["taxAmount"] + "", out taxAmount) ? taxAmount : 0;
|
|
int taxPre = item.Table.Columns.Contains("taxPre") && int.TryParse(item["taxPre"] + "", out taxPre) ? taxPre : 0;
|
|
itemJObject.Add("taxPre", taxPre);
|
|
itemJObject.Add("taxPreCon", item.Table.Columns.Contains("taxPreCon") ? item["taxPreCon"] + "" : "");
|
|
itemJObject.Add("unit", item.Table.Columns.Contains("unit") ? item["unit"] + "" : "");
|
|
itemJObject.Add("taxAmount", taxAmount);
|
|
invoiceItemsArray.Add(itemJObject);
|
|
}
|
|
pmsJObject.Add("invoiceItems", invoiceItemsArray);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
InvoiceId = resultJObject["invoiceId"] + "";
|
|
SqlHelper.ExecuteNonQuery(string.Format("update Acc_InvoiceMaintab set O_invoiceId = '{0}' where XMid = '{1}'", InvoiceId, PrimaryValue));
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = MakeInvoice(ref resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
private bool RefreshInvoiceResponse(ref ResultModel resultModel, ref string token, bool isInvoice = false, bool isNext = true)
|
|
{
|
|
if (resultModel == null)
|
|
{
|
|
resultModel = new ResultModel();
|
|
}
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/refreshInvoiceResponse";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
JObject reInvoiceVOObject = new JObject();
|
|
if (!isInvoice)
|
|
{
|
|
JArray invoiceIdsArray = new JArray();
|
|
invoiceIdsArray.Add(!string.IsNullOrWhiteSpace(InvoiceId) ? InvoiceId : SourceRow.Table.Columns.Contains("O_invoiceId") ? SourceRow["O_invoiceId"] + "" : SqlHelper.ExecuteScalar(string.Format("select O_invoiceId from Acc_InvoiceMaintab where XMid = '{0}'", PrimaryValue)) + "");
|
|
reInvoiceVOObject.Add("invoiceIds", invoiceIdsArray);
|
|
}
|
|
else
|
|
{
|
|
JArray documentNosArray = new JArray();
|
|
documentNosArray.Add(SourceRow.Table.Columns.Contains("documentNo") ? SourceRow["documentNo"] + "" : "");
|
|
reInvoiceVOObject.Add("documentNos", documentNosArray);
|
|
}
|
|
pmsJObject.Add("reInvoiceVO", reInvoiceVOObject);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.JResult = resultJObject;
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
resultModel.Result = resultJObject["result"] + "";
|
|
JArray returnResult = (JArray)JsonConvert.DeserializeObject(resultModel.Result);
|
|
string invoiceStatus = returnResult[0]["invoiceStatus"] + "";
|
|
resultModel.State = invoiceStatus;
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
if (invoiceStatus.Equals("20"))//正在开票中
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = RefreshInvoiceResponse(ref resultModel, ref token, isInvoice);
|
|
}
|
|
else if (!invoiceStatus.Equals("0") && !invoiceStatus.Equals("4"))
|
|
{
|
|
JObject resultObj = (JsonConvert.DeserializeObject(resultModel.JResult["result"] + "") as JArray)[0] as JObject;
|
|
if (isInvoice)
|
|
{
|
|
string id = resultObj["id"] + "";
|
|
this.InvoiceId = id;
|
|
SqlHelper.ExecuteNonQuery(string.Format("update Acc_InvoiceMaintab set O_invoiceId = '{0}' where XMid = '{1}'", InvoiceId, PrimaryValue));
|
|
}
|
|
if (invoiceStatus.Equals("2"))
|
|
{
|
|
isLogin = true;
|
|
string invoiceNr = resultObj["invoiceNr"] + "";
|
|
string invoiceDate = resultObj["invoiceDate"] + "";
|
|
//long timestamp = Convert.ToInt64(invoiceDate);
|
|
//DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));//当地时区
|
|
//DateTime time = startTime.AddMilliseconds(timestamp);
|
|
//invoiceDate = time.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
|
string ghfBankAccount = resultObj["ghfBankAccount"] + "";
|
|
string ghfAddr = resultObj["ghfAddr"] + "";
|
|
string ghfTel = resultObj["ghfTel"] + "";
|
|
string hjje = resultObj["hjje"] + "";
|
|
string hjse = resultObj["hjse"] + "";
|
|
string pdfUrl = resultObj["pdfUrl"] + "";
|
|
string updateSql = string.Format("update Acc_InvoiceMaintab set O_InfoNumber = '{0}',O_InfoInvDate = '{1}',InfoClientBankAccount = '{2}',InfoClientAddressPhone = '{3}',O_infoAmount = '{4}',O_InfoTaxAmount = '{5}',O_tokenurl = '{6}' where XMid = '{7}'",
|
|
invoiceNr, invoiceDate, ghfBankAccount, ghfAddr + ghfTel, hjje, hjse, pdfUrl, PrimaryValue);
|
|
SqlHelper.ExecuteNonQuery(updateSql);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = RefreshInvoiceResponse(ref resultModel, ref token, isInvoice, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 重开发票
|
|
/// </summary>
|
|
/// <param name="resultModel"></param>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool RetryInvoice(ref ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
if (resultModel == null)
|
|
{
|
|
resultModel = new ResultModel();
|
|
}
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/retryInvoice";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("id", !string.IsNullOrWhiteSpace(InvoiceId) ? InvoiceId : SourceRow.Table.Columns.Contains("O_invoiceId") ? SourceRow["O_invoiceId"] + "" : SqlHelper.ExecuteScalar(string.Format("select O_invoiceId from Acc_InvoiceMaintab where XMid = '{0}'", PrimaryValue)) + "");
|
|
JObject qptObject = new JObject();
|
|
qptObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
qptObject.Add("password", SourceRow.Table.Columns.Contains("password") ? SourceRow["password"] + "" : "");
|
|
qptObject.Add("Yhyywdmc", SourceRow.Table.Columns.Contains("Yhyywdmc") ? SourceRow["Yhyywdmc"] + "" : "");
|
|
qptObject.Add("Yhzh", SourceRow.Table.Columns.Contains("Yhzh") ? SourceRow["Yhzh"] + "" : "");
|
|
pmsJObject.Add("qpt", qptObject);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.JResult = resultJObject;
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("9999"))
|
|
{
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = RetryInvoice(ref resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 红字确认单初始化
|
|
/// </summary>
|
|
/// <param name="resultModel"></param>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool InitializeRedConfirm(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/initializeRedConfirm";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
InvoiceId = MainDataTab.Columns.Contains("O_invoiceId") ? MainDataTab.Rows[0]["O_invoiceId"] + "" : SqlHelper.ExecuteScalar(string.Format("select O_invoiceId from Acc_InvoiceMaintab where XMid = '{0}'", PrimaryValue)) + "";
|
|
pmsJObject.Add("invoiceId", InvoiceId);
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
string responseDec = resultJObject["result"]["responseDec"] + "";
|
|
resultModel.Result = responseDec;
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = InitializeRedConfirm(resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 红字确认单申请
|
|
/// </summary>
|
|
/// <param name="resultModel"></param>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool SaveRedConfirm(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/saveRedConfirm";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("url", SourceRow.Table.Columns.Contains("url") ? SourceRow["url"] + "" : "");
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("responseDec", resultModel.Result);
|
|
JObject vatoutRedConfirmJObject = new JObject();
|
|
vatoutRedConfirmJObject.Add("invoiceId", InvoiceId);
|
|
vatoutRedConfirmJObject.Add("applySource", SourceRow.Table.Columns.Contains("applySource") ? SourceRow["applySource"] + "" : "");
|
|
decimal taxAmount = SourceRow.Table.Columns.Contains("taxAmount") && decimal.TryParse(SourceRow["taxAmount"] + "", out taxAmount) ? taxAmount : 0;
|
|
vatoutRedConfirmJObject.Add("taxAmount", taxAmount);
|
|
decimal taxIncludeAmount = SourceRow.Table.Columns.Contains("taxIncludeAmount") && decimal.TryParse(SourceRow["taxIncludeAmount"] + "", out taxIncludeAmount) ? taxIncludeAmount : 0;
|
|
vatoutRedConfirmJObject.Add("taxIncludeAmount", taxIncludeAmount);
|
|
decimal taxExcludeAmount = SourceRow.Table.Columns.Contains("taxExcludeAmount") && decimal.TryParse(SourceRow["taxExcludeAmount"] + "", out taxExcludeAmount) ? taxExcludeAmount : 0;
|
|
vatoutRedConfirmJObject.Add("taxExcludeAmount", taxExcludeAmount);
|
|
vatoutRedConfirmJObject.Add("redReason", SourceRow.Table.Columns.Contains("redReason") ? SourceRow["redReason"] + "" : "");
|
|
pmsJObject.Add("vatoutRedConfirm", vatoutRedConfirmJObject);
|
|
JArray vatoutRedConfirmItemsArray = new JArray();
|
|
foreach (DataRow item in DetailDataTab.Rows)
|
|
{
|
|
JObject itemJObject = new JObject();
|
|
int blueDetailIndex = item.Table.Columns.Contains("blueDetailIndex") && int.TryParse(item["blueDetailIndex"] + "", out blueDetailIndex) ? blueDetailIndex : 0;
|
|
itemJObject.Add("blueDetailIndex", blueDetailIndex);
|
|
itemJObject.Add("goodsName", item.Table.Columns.Contains("goodsName") ? item["goodsName"] + "" : "");
|
|
itemJObject.Add("unit", item.Table.Columns.Contains("unit") ? item["unit"] + "" : "");
|
|
itemJObject.Add("specType", item.Table.Columns.Contains("specType") ? item["specType"] + "" : "");
|
|
decimal num = item.Table.Columns.Contains("num") && decimal.TryParse(item["num"] + "", out num) ? num : 0;
|
|
itemJObject.Add("num", num);
|
|
decimal price = item.Table.Columns.Contains("price") && decimal.TryParse(item["price"] + "", out price) ? price : 0;
|
|
itemJObject.Add("price", price);
|
|
decimal taxExcludePrice = item.Table.Columns.Contains("taxExcludePrice") && decimal.TryParse(item["taxExcludePrice"] + "", out taxExcludePrice) ? taxExcludePrice : 0;
|
|
itemJObject.Add("taxExcludePrice", taxExcludePrice);
|
|
decimal taxExcludeAmountDetail = item.Table.Columns.Contains("taxExcludeAmount") && decimal.TryParse(item["taxExcludeAmount"] + "", out taxExcludeAmount) ? taxExcludeAmount : 0;
|
|
itemJObject.Add("taxExcludeAmount", taxExcludeAmountDetail);
|
|
decimal taxAmountDetail = item.Table.Columns.Contains("taxAmount") && decimal.TryParse(item["taxAmount"] + "", out taxAmount) ? taxAmount : 0;
|
|
itemJObject.Add("taxAmount", taxAmountDetail);
|
|
decimal taxRate = item.Table.Columns.Contains("taxRate") && decimal.TryParse(item["taxRate"] + "", out taxRate) ? taxRate : 0;
|
|
itemJObject.Add("taxRate", taxRate);
|
|
itemJObject.Add("goodsCode", item.Table.Columns.Contains("goodsCode") ? item["goodsCode"] + "" : "");
|
|
itemJObject.Add("favouredPolicyFlag", item.Table.Columns.Contains("favouredPolicyFlag") ? item["favouredPolicyFlag"] + "" : "");
|
|
itemJObject.Add("issuer", item.Table.Columns.Contains("issuer") ? item["issuer"] + "" : "");
|
|
vatoutRedConfirmItemsArray.Add(itemJObject);
|
|
}
|
|
pmsJObject.Add("vatoutRedConfirmItems", vatoutRedConfirmItemsArray);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
string billUuid = resultJObject["billUuid"] + "";
|
|
string billNo = resultJObject["billNo"] + "";
|
|
resultModel.JResult = resultJObject;
|
|
isLogin = true;
|
|
}
|
|
else if (resultModel.Code.Equals("500"))
|
|
{
|
|
resultModel.Message = resultJObject + "";
|
|
isLogin = false;
|
|
}
|
|
else if (resultModel.Code.Equals("1006") && resultModel.Message.Contains("token已失效"))
|
|
{
|
|
token = GetToken();
|
|
if (isNext)
|
|
{
|
|
resultModel = new ResultModel();
|
|
isLogin = SaveRedConfirm(resultModel, ref token, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isLogin = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
resultModel.Message = ex.Message;
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
/// <summary>
|
|
/// 红字确认单开具
|
|
/// </summary>
|
|
/// <param name="resultModel"></param>
|
|
/// <param name="token"></param>
|
|
/// <param name="isNext"></param>
|
|
/// <returns></returns>
|
|
private bool MakeRedBill(ResultModel resultModel, ref string token, bool isNext = true)
|
|
{
|
|
bool isLogin = false;
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(token) && AlterTable("p_systemtab", "invoiceToken", "varchar(1000)"))
|
|
{
|
|
token = SqlHelper.ExecuteScalar("select invoiceToken from p_systemtab") + "";
|
|
if (string.IsNullOrEmpty(token))
|
|
{
|
|
token = GetToken();
|
|
}
|
|
}
|
|
string url = "https://lqzs.kflmgzs.com/prod-api/aisinoOpenApi/aisino/outSide/redBill";
|
|
HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("token", token);
|
|
JObject pmsJObject = new JObject();
|
|
DataRow SourceRow = this.MainDataTab.Rows.Count > 0 ? this.MainDataTab.Rows[0] : null;
|
|
if (SourceRow != null)
|
|
{
|
|
pmsJObject.Add("taxNo", SourceRow.Table.Columns.Contains("taxNo") ? SourceRow["taxNo"] + "" : "");
|
|
pmsJObject.Add("username", SourceRow.Table.Columns.Contains("username") ? SourceRow["username"] + "" : "");
|
|
pmsJObject.Add("issuer", SourceRow.Table.Columns.Contains("issuer") ? SourceRow["issuer"] + "" : "");
|
|
JObject vatOutRedConfirmJObject = new JObject();
|
|
vatOutRedConfirmJObject.Add("applySource", SourceRow.Table.Columns.Contains("applySource") ? SourceRow["applySource"] + "" : "");
|
|
vatOutRedConfirmJObject.Add("sellerTaxNo", SourceRow.Table.Columns.Contains("sellerTaxNo") ? SourceRow["sellerTaxNo"] + "" : "");
|
|
vatOutRedConfirmJObject.Add("blueInvoiceNumber", SourceRow.Table.Columns.Contains("blueInvoiceNumber") ? SourceRow["blueInvoiceNumber"] + "" : "");
|
|
string billNo = resultModel.JResult["billNo"] + "";
|
|
vatOutRedConfirmJObject.Add("billNo", billNo);
|
|
string billUuid = resultModel.JResult["billUuid"] + "";
|
|
vatOutRedConfirmJObject.Add("billUuid", billUuid);
|
|
vatOutRedConfirmJObject.Add("invoiceId", InvoiceId);
|
|
vatOutRedConfirmJObject.Add("blueInvoiceLine", SourceRow.Table.Columns.Contains("blueInvoiceLine") ? SourceRow["blueInvoiceLine"] + "" : "");
|
|
pmsJObject.Add("vatOutRedConfirm", vatOutRedConfirmJObject);
|
|
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
|
|
string result = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
|
|
if (webResponse != null && !string.IsNullOrEmpty(result))
|
|
{
|
|
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(result);
|
|
resultModel.Code = resultJObject["code"] + "";
|
|
resultModel.Message = resultJObject["message"] + "";
|
|
if (resultModel.Code.Equals("0000"))
|
|
{
|
|
isLogin = true;
|
|
}
|
|
else if (resultMode |