修改销售出库单单个打印发票
This commit is contained in:
@@ -27,6 +27,7 @@ namespace SAL_OUTSTOCK
|
||||
public class IssueAnInvoiceFormPlugIn : AbstractDynamicFormPlugIn
|
||||
{
|
||||
private bool _doingButtonFlag = false;
|
||||
private IOperationResult opResult;
|
||||
public override void BarItemClick(BarItemClickEventArgs e)
|
||||
{
|
||||
base.BarItemClick(e);
|
||||
@@ -34,25 +35,29 @@ namespace SAL_OUTSTOCK
|
||||
//数电普票
|
||||
if (e.BarItemKey.Equals("tbElectronic030", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ToExecuteRequest("030");
|
||||
DoCheckConditions("030");
|
||||
return;
|
||||
}
|
||||
|
||||
//数电专票
|
||||
if (e.BarItemKey.Equals("tbElectronic032", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ToExecuteRequest("032");
|
||||
DoCheckConditions("032");
|
||||
return;
|
||||
}
|
||||
|
||||
//增值税专票(纸质)
|
||||
if (e.BarItemKey.Equals("tbPaper004", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ToExecuteRequest("004");
|
||||
DoCheckConditions("004");
|
||||
return;
|
||||
}
|
||||
|
||||
//增值税普票(纸质)
|
||||
if (e.BarItemKey.Equals("tbPaper007", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ToExecuteRequest("007");
|
||||
DoCheckConditions("007");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,28 +65,117 @@ namespace SAL_OUTSTOCK
|
||||
/// 开始执行
|
||||
/// </summary>
|
||||
/// <param name="FPLXDM"></param>
|
||||
public void ToExecuteRequest(string FPLXDM)
|
||||
public void DoCheckConditions(string FPLXDM)
|
||||
{
|
||||
if (!_doingButtonFlag)
|
||||
{
|
||||
var org = this.View.Model.GetValue("FStockOrgId") as DynamicObject;
|
||||
if (org != null && org["Id"].Long2Int() == 101542)
|
||||
var checkId = 101542L;
|
||||
//checkId = this.Context.CurrentOrganizationInfo.ID;
|
||||
//checkId = org["Id"].Long2Int();
|
||||
if (org != null && org["Id"].Long2Int() == checkId)
|
||||
{
|
||||
opResult = new OperationResult();
|
||||
_doingButtonFlag = true;
|
||||
|
||||
long orgId = org["Id"].Long2Int();
|
||||
//orgId = this.Context.CurrentOrganizationInfo.ID;
|
||||
SendRequest(FPLXDM, orgId);
|
||||
return;
|
||||
DoIssueAnInvoice(FPLXDM, orgId);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.View.ShowMessage("此功能未开放!如有需要请联系管理员!");
|
||||
return;
|
||||
}
|
||||
_doingButtonFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表发票开具
|
||||
/// </summary>
|
||||
/// <param name="FPLXDM"></param>
|
||||
public void DoIssueAnInvoice(string FPLXDM, long orgId)
|
||||
{
|
||||
try
|
||||
{
|
||||
RequestDataHandle(FPLXDM, orgId, "GP_FPKJ", Inv_FPKJ, DataBackFill);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = "错误提示",
|
||||
Message = ex.Message,
|
||||
SuccessStatus = false
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
_doingButtonFlag = false;
|
||||
if (opResult.OperateResult.Any())
|
||||
this.View.ShowOperateResult(opResult.OperateResult);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送报文信息处理
|
||||
/// </summary>
|
||||
/// <param name="FPLXDM"></param>
|
||||
/// <param name="iiDt"></param>
|
||||
/// <param name="contentAction"></param>
|
||||
/// <returns></returns>
|
||||
public BaseRequest InterfaceDataHandle(string FPLXDM, DynamicObject invInfo
|
||||
, Func<string, DynamicObject, string> contentAction)
|
||||
{
|
||||
//发票开具接口Code
|
||||
//string interfaceCode = "GP_FPKJ";
|
||||
|
||||
string appId = invInfo["FAPPID"].ToString();
|
||||
string encodeKey = invInfo["FENCRYPTIONKEY"].ToString();
|
||||
|
||||
var requestBase = new BaseRequest();
|
||||
requestBase._interface = new Interface();
|
||||
var date = DateTime.Now;
|
||||
|
||||
string newDate = date.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
string newDate2 = date.ToString("yyyyMMdd");
|
||||
|
||||
string no = Guid.NewGuid().ToString("N").Substring(0, 9).ToUpper();
|
||||
//数据交换id
|
||||
string dataExchangeId = "DZFPQZ" + "DFXJ1001" + newDate2 + no;
|
||||
|
||||
requestBase._interface.globalInfo.appId = appId;
|
||||
//requestBase._interface.globalInfo.interfaceCode = interfaceCode;
|
||||
requestBase._interface.globalInfo.requestTime = newDate;
|
||||
requestBase._interface.globalInfo.dataExchangeId = dataExchangeId;
|
||||
|
||||
StringBuilder errMsg = new StringBuilder();
|
||||
try
|
||||
{
|
||||
//var requestCommonFPKJ = SetRequestCommonFPKJ(FPLXDM, iiDt, ref errMsg);
|
||||
|
||||
if (!errMsg.IsNullOrEmpty() && errMsg.Length > 0)
|
||||
throw new Exception(errMsg.ToString());
|
||||
|
||||
string contentDecode = contentAction(FPLXDM, invInfo);
|
||||
|
||||
//发票报文加密处理处理
|
||||
string content = Base64Helper.Base64Encode(contentDecode);
|
||||
string contentSHA256 = SHA256Helper.SHA256EncryptString(content);
|
||||
|
||||
//使用加密密钥再次加密
|
||||
string contentKey = AESHepler.AesEncryptorBase64(contentSHA256, encodeKey);
|
||||
|
||||
requestBase._interface.data.content = content;
|
||||
requestBase._interface.data.contentKey = contentKey;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
return requestBase;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置content报文明文信息
|
||||
/// </summary>
|
||||
@@ -255,18 +349,24 @@ WHERE
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送报文信息处理
|
||||
/// 发送报文,获取结果
|
||||
/// </summary>
|
||||
/// <param name="FPLXDM"></param>
|
||||
/// <returns></returns>
|
||||
public BaseRequest RequestDataHandle(string FPLXDM, long orgId, ref bool isTestUrl)
|
||||
/// <param name="orgId"></param>
|
||||
/// <param name="contentAction"></param>
|
||||
/// <param name="endAction"></param>
|
||||
public void RequestDataHandle(string FPLXDM, long orgId, string _interfaceCode,
|
||||
Func<string, DynamicObject, string> contentAction,
|
||||
Func<string, DynamicObject, bool> endAction)
|
||||
{
|
||||
//发票开具接口Code
|
||||
string interfaceCode = "GP_FPKJ";
|
||||
|
||||
string whereSql = $" AND {((FPLXDM.Equals("007") || FPLXDM.Equals("004")) ? "FIsDeviceType4" : "FIsDeviceType6")} = 1 ";
|
||||
#region 获取对应开票信息
|
||||
var iinfoSQL = $@"
|
||||
var result = string.Empty;
|
||||
try
|
||||
{
|
||||
|
||||
#region 获取对应开票信息
|
||||
string whereSql = $" AND {((FPLXDM.Equals("007") || FPLXDM.Equals("004")) ? "FIsDeviceType4" : "FIsDeviceType6")} = 1 ";
|
||||
var iinfoSQL = $@"
|
||||
SELECT TOP 1
|
||||
FID,
|
||||
FUSEORGID,
|
||||
@@ -282,7 +382,10 @@ SELECT TOP 1
|
||||
FSERIALNUMBER,
|
||||
FENCRYPTIONKEY,
|
||||
FISDEFAULT,
|
||||
FISTESTINFO
|
||||
FISTESTINFO,
|
||||
FCERTIFICATE2NAME,
|
||||
FCERTIFICATE2KEY,
|
||||
FREQUESTURL
|
||||
FROM
|
||||
T_BD_INVOICEINFORMATION
|
||||
WHERE
|
||||
@@ -291,98 +394,40 @@ WHERE
|
||||
ORDER BY
|
||||
FISDEFAULT DESC , FISTESTINFO DESC ";
|
||||
|
||||
var iinfoDB = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{iinfoSQL}");
|
||||
var iinfoDB = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{iinfoSQL}");
|
||||
|
||||
if (iinfoDB == null || !iinfoDB.Any())
|
||||
throw new Exception("使用组织没有配对的开票系统信息!");
|
||||
if (iinfoDB == null || !iinfoDB.Any())
|
||||
throw new Exception("使用组织没有配对的开票系统信息!");
|
||||
|
||||
var iiDt = iinfoDB[0];
|
||||
//是否测试数据
|
||||
isTestUrl = iiDt["FISTESTINFO"].Long2Int() == 1;
|
||||
string appId = iiDt["FAPPID"].ToString();
|
||||
string key = iiDt["FENCRYPTIONKEY"].ToString();
|
||||
var info = iinfoDB[0];
|
||||
bool isTest = info["FISTESTINFO"].Long2Int() == 1;
|
||||
|
||||
#endregion 获取对应开票信息
|
||||
var requestData = InterfaceDataHandle(FPLXDM, info, contentAction);
|
||||
|
||||
var requestBase = new BaseRequest();
|
||||
requestBase._interface = new Interface();
|
||||
var date = DateTime.Now;
|
||||
requestData._interface.globalInfo.interfaceCode = _interfaceCode;
|
||||
|
||||
string newDate = date.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
string newDate2 = date.ToString("yyyyMMdd");
|
||||
|
||||
string no = Guid.NewGuid().ToString("N").Substring(0, 9).ToUpper();
|
||||
//数据交换id
|
||||
string dataExchangeId = "DZFPQZ" + "DFXJ1001" + newDate2 + no;
|
||||
|
||||
requestBase._interface.globalInfo.appId = appId;
|
||||
requestBase._interface.globalInfo.interfaceCode = interfaceCode;
|
||||
requestBase._interface.globalInfo.requestTime = newDate;
|
||||
requestBase._interface.globalInfo.dataExchangeId = dataExchangeId;
|
||||
|
||||
StringBuilder errMsg = new StringBuilder();
|
||||
try
|
||||
{
|
||||
var requestCommonFPKJ = SetRequestCommonFPKJ(FPLXDM, iiDt, ref errMsg);
|
||||
|
||||
if (!errMsg.IsNullOrEmpty() && errMsg.Length > 0)
|
||||
throw new Exception(errMsg.ToString());
|
||||
|
||||
//更新对应开票信息的流水号记录
|
||||
var serialNumber = iiDt["FSERIALNUMBER"].Long2Int();
|
||||
var newSNumber = (serialNumber > 998 ? 1 : serialNumber + 1).ToString("D3");
|
||||
var updSql = $"/*dialect*/UPDATE T_BD_INVOICEINFORMATION SET FSERIALNUMBER = '{newSNumber}' WHERE FID = {iiDt["FID"]}";
|
||||
var isFlag = DBUtils.Execute(this.Context, updSql);
|
||||
|
||||
var contentBefore = JsonConvert.SerializeObject(requestCommonFPKJ);
|
||||
//发票报文加密处理处理
|
||||
string content = Base64Helper.Base64Encode(contentBefore);
|
||||
string contentSHA256 = SHA256Helper.SHA256EncryptString(content);
|
||||
|
||||
//使用加密密钥再次加密
|
||||
string contentKey = AESHepler.AesEncryptorBase64(contentSHA256, key);
|
||||
|
||||
requestBase._interface.data.content = content;
|
||||
requestBase._interface.data.contentKey = contentKey;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
return requestBase;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送报文,获取结果
|
||||
/// </summary>
|
||||
/// <param name="FPLXDM"></param>
|
||||
public void SendRequest(string FPLXDM, long orgId)
|
||||
{
|
||||
var result = string.Empty;
|
||||
//var jsonStr = string.Empty;
|
||||
try
|
||||
{
|
||||
var DataInfo = this.Model.DataObject;
|
||||
var fid = DataInfo["Id"].Long2Int();
|
||||
//财务信息
|
||||
var invoiveUrl = this.View.Model.GetValue("FInvoiceNumber");
|
||||
if (invoiveUrl != null && invoiveUrl.ToString().Trim().Length > 0)
|
||||
{
|
||||
this.View.ShowErrMessage($"此出库订单已经打印发票【财务信息】查看对应发票信息");
|
||||
return;
|
||||
}
|
||||
bool isTestUrl = false;
|
||||
var requestData = RequestDataHandle(FPLXDM, orgId, ref isTestUrl);
|
||||
var postData = JsonConvert.SerializeObject(requestData);
|
||||
#endregion 获取对应开票信息
|
||||
|
||||
//jsonStr = Base64Helper.Base64Decode(requestData._interface.data.content);
|
||||
|
||||
var url = "https://dev.fapiao.com:18944/fpt-rhqz/prepose";//双向通道地址
|
||||
if (isTestUrl)
|
||||
url = "https://dev.fapiao.com:18944/fpt-rhqz/prepose";//双向通道地址-测试
|
||||
var url = info["FREQUESTURL"].ToString();//双向通道地址
|
||||
if (url.IsNullOrEmptyOrWhiteSpace())
|
||||
url = "https://dev.fapiao.com:18944/fpt-rhqz/prepose";
|
||||
|
||||
result = DoPost(url, postData);
|
||||
var cerName = info["FCERTIFICATE2NAME"].ToString();//证书密钥
|
||||
if (cerName.IsNullOrEmptyOrWhiteSpace())
|
||||
cerName = "testISSUE.pfx";
|
||||
|
||||
//证书文件存放地址
|
||||
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||
var keyStoreFile = baseDirectory + $@"\bin\ISSUE\{cerName}";
|
||||
|
||||
var cerKey = info["FCERTIFICATE2KEY"].ToString();
|
||||
if (cerKey.IsNullOrEmptyOrWhiteSpace())
|
||||
cerKey = "123456";
|
||||
|
||||
var certificate2 = new X509Certificate2(keyStoreFile, cerKey);
|
||||
|
||||
result = HttpWebHelper.DoPost(url, postData, certificate2);
|
||||
|
||||
var responseData = JsonConvert.DeserializeObject<BaseRequest>(result);
|
||||
var returnStateInfo = responseData._interface.returnStateInfo;
|
||||
@@ -390,33 +435,8 @@ ORDER BY
|
||||
{
|
||||
if (returnStateInfo.returnCode.Equals("0000"))
|
||||
{
|
||||
this.View.ShowMessage($"报文处理成功,正在回填发票信息【财务信息】");
|
||||
var resultData = JsonConvert.DeserializeObject<ResultData>(Base64Helper.Base64Decode(responseData._interface.data.content));
|
||||
|
||||
var fpInfo = string.Empty;
|
||||
var data = resultData.DATA;
|
||||
//回填发票下载地址
|
||||
if (FPLXDM.Equals("030") || FPLXDM.Equals("032"))
|
||||
fpInfo = data.PDF_URL;
|
||||
else if (FPLXDM.Equals("007") || FPLXDM.Equals("004"))
|
||||
fpInfo = data.FP_MW;
|
||||
|
||||
this.View.Model.SetValue("FInvoiceUrl", fpInfo);
|
||||
this.View.Model.SetValue("FInvoiceNumber", data.FP_HM);
|
||||
this.View.Model.SetValue("FFPLXDM", data.FPLXDM);
|
||||
this.View.Model.SetValue("FFPQQLSH", data.FPQQLSH);
|
||||
|
||||
var updSql = $@"/*dialect*/
|
||||
UPDATE T_SAL_OUTSTOCKFIN
|
||||
SET FINVOICEURL = '{fpInfo}'
|
||||
,FFPLXDM = '{data.FPLXDM}'
|
||||
,FFPQQLSH = '{data.FPQQLSH}'
|
||||
,FINVOICENUMBER = '{data.FP_HM}'
|
||||
WHERE
|
||||
FID = {fid}";
|
||||
|
||||
//发票信息址回填到数据库
|
||||
var isFlag = DBUtils.Execute(this.Context, updSql);
|
||||
var resContent = Base64Helper.Base64Decode(responseData._interface.data.content);
|
||||
var isFlag = endAction(resContent, info);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -426,110 +446,278 @@ WHERE
|
||||
}
|
||||
catch (JsonSerializationException ex)
|
||||
{
|
||||
this.View.ShowMessage($"错误信息:{result}", MessageBoxType.Error);
|
||||
opResult.OperateResult.Add(new OperateResult()
|
||||
{
|
||||
Name = "信息提示",
|
||||
Message = ex.Message,
|
||||
SuccessStatus = false
|
||||
});
|
||||
|
||||
opResult.OperateResult.Add(new OperateResult()
|
||||
{
|
||||
Name = "信息提示",
|
||||
Message = result,
|
||||
SuccessStatus = false
|
||||
});
|
||||
//this.View.ShowMessage($"错误信息:{result}", MessageBoxType.Error);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.View.ShowErrMessage($"错误信息:{ex.Message}");
|
||||
|
||||
//IOperationResult opResult = new OperationResult();
|
||||
|
||||
//opResult.OperateResult.Add(new OperateResult()
|
||||
//{
|
||||
// Name = "信息提示",
|
||||
// Message = ex.Message,
|
||||
// SuccessStatus = false
|
||||
//});
|
||||
|
||||
//opResult.OperateResult.Add(new OperateResult()
|
||||
//{
|
||||
// Name = "信息提示",
|
||||
// Message = jsonStr,
|
||||
// SuccessStatus = false
|
||||
//});
|
||||
|
||||
|
||||
//this.View.ShowOperateResult(opResult.OperateResult);
|
||||
//this.View.ShowErrMessage($"错误信息:{ex.Message}");
|
||||
|
||||
opResult.OperateResult.Add(new OperateResult()
|
||||
{
|
||||
Name = "信息提示",
|
||||
Message = ex.Message,
|
||||
SuccessStatus = false
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
_doingButtonFlag = false;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// post请求
|
||||
/// 设置content报文明文信息
|
||||
/// </summary>
|
||||
/// <param name="url"></param>
|
||||
/// <param name="postData"></param>
|
||||
/// <param name="FPLXDM">发票类型</param>
|
||||
/// <param name="invoiceInfo">开票信息</param>
|
||||
/// <returns></returns>
|
||||
private static string DoPost(string url, string postData)
|
||||
public string Inv_FPKJ(string FPLXDM, DynamicObject invoiceInfo)
|
||||
{
|
||||
var DataInfo = this.Model.DataObject;
|
||||
var fid = DataInfo["Id"].Long2Int();
|
||||
|
||||
var result = new GP_FPKJ();
|
||||
var fpkj = result.FPKJ = new REQUEST_COMMON_FPKJ();
|
||||
|
||||
var headSql = $@"
|
||||
SELECT
|
||||
ID,DOCUMENTSTATUS,APPLYID,APPLYNAME,BILLALLAMOUNT,BILLAMOUNT,BILLTAXAMOUNT,BILLNO,
|
||||
CUSTID,CUSTNAME,INVOICETITLE,INVOICEBANKNAME,INVOICEBANKACCOUNT,INVOICENUMBER,
|
||||
TAXREGISTERCODE,SOCIALCRECODE,INVOICETEL,INVOICEADDRESS
|
||||
FROM
|
||||
V_INVINFO_OUTSTOCK
|
||||
WHERE ID = {fid}
|
||||
";
|
||||
var sHeadInfos = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{headSql}");
|
||||
var sHeadInfo = sHeadInfos[0];
|
||||
#region 针对非农产收购发票
|
||||
|
||||
#region 基础信息
|
||||
|
||||
if (sHeadInfos != null && sHeadInfos.Any())
|
||||
{
|
||||
foreach (var item in sHeadInfos)
|
||||
{
|
||||
if (!item["INVOICENUMBER"].IsNullOrEmptyOrWhiteSpace())
|
||||
{
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = item["BILLNO"].ToString(),
|
||||
Message = $"{item["BILLNO"]}该订单已打印过发票!",
|
||||
SuccessStatus = false
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!item["DOCUMENTSTATUS"].ToString().Trim().Equals("C"))
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = item["BILLNO"].ToString(),
|
||||
Message = $"{item["BILLNO"]}该订单未审核完毕!",
|
||||
SuccessStatus = false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (opResult.OperateResult.Any())
|
||||
throw new Exception("检验信息");
|
||||
|
||||
fpkj.FPQQLSH = $"{invoiceInfo["FFIRMCODE"]}{DateTime.Now.ToString("yyyyMMddHHmm")}{invoiceInfo["FSERIALNUMBER"]}";
|
||||
fpkj.FPLXDM = FPLXDM;
|
||||
|
||||
if (FPLXDM.Equals("030") || FPLXDM.Equals("032"))
|
||||
fpkj.SBLX = "6";
|
||||
else if (FPLXDM.Equals("007") || FPLXDM.Equals("004"))
|
||||
fpkj.SBLX = "4";
|
||||
|
||||
//是否纸质发票
|
||||
bool isPaper = fpkj.SBLX == "4";
|
||||
|
||||
if (isPaper)
|
||||
fpkj.KPZDDM = "cszp";
|
||||
|
||||
fpkj.KPLX = "0";
|
||||
fpkj.ZSFS = "0";
|
||||
|
||||
fpkj.JSHJ = sHeadInfos.Sum(x => x["BILLALLAMOUNT"].ToDecimalR()).ToString();
|
||||
fpkj.HJJE = sHeadInfos.Sum(x => x["BILLAMOUNT"].ToDecimalR()).ToString();
|
||||
fpkj.HJSE = sHeadInfos.Sum(x => x["BILLTAXAMOUNT"].ToDecimalR()).ToString();
|
||||
|
||||
#endregion 基础信息
|
||||
|
||||
#region 销售方
|
||||
|
||||
fpkj.XSF_NSRSBH = invoiceInfo["FTAXCODE"].ToString();
|
||||
fpkj.XSF_MC = invoiceInfo["FINVOICETITLE"].ToString();
|
||||
fpkj.XSF_DZDH = $"{invoiceInfo["FINVOICEADDRESS"]} {invoiceInfo["FINVOICETEL"]}";
|
||||
fpkj.XSF_YHZH = $"{invoiceInfo["FINVOICEBANKNAME"]} {invoiceInfo["FINVOICEBANKACCOUNT"]}";
|
||||
|
||||
fpkj.KPR = invoiceInfo["FDRAWER"].ToString();
|
||||
|
||||
fpkj.BZ = sHeadInfo["APPLYNAME"].ToString();
|
||||
#endregion 销售方
|
||||
|
||||
#region 购买方(客户信息)
|
||||
|
||||
fpkj.GMF_MC = (sHeadInfo["INVOICETITLE"].IsNullOrEmpty() ? (sHeadInfo["CUSTNAME"].IsNullOrEmpty() ? "" : sHeadInfo["CUSTNAME"]) : sHeadInfo["INVOICETITLE"]).ToString();
|
||||
//纳税人识别号/统一社会信用代码
|
||||
fpkj.GMF_NSRSBH = (sHeadInfo["SOCIALCRECODE"].IsNullOrEmpty() ? (sHeadInfo["TAXREGISTERCODE"].IsNullOrEmpty() ? "" : sHeadInfo["TAXREGISTERCODE"]) : sHeadInfo["SOCIALCRECODE"]).ToString();
|
||||
fpkj.GMF_DZDH = $"{sHeadInfo["INVOICEADDRESS"]} {sHeadInfo["INVOICETEL"]}";
|
||||
fpkj.GMF_YHZH = $"{sHeadInfo["INVOICEBANKNAME"]} {sHeadInfo["INVOICEBANKACCOUNT"]}";
|
||||
|
||||
if (fpkj.GMF_MC.IsNullOrEmptyOrWhiteSpace())
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = "客户信息",
|
||||
Message = "购买方(客户信息)名称不能为空!",
|
||||
SuccessStatus = false
|
||||
});
|
||||
|
||||
if (fpkj.GMF_NSRSBH.IsNullOrEmptyOrWhiteSpace())
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = "客户信息",
|
||||
Message = "购买方(客户信息)统一社会信用代码或纳税人识别号不能为空!",
|
||||
SuccessStatus = false
|
||||
});
|
||||
|
||||
if (isPaper && fpkj.GMF_DZDH.IsNullOrEmptyOrWhiteSpace())
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = "客户信息",
|
||||
Message = "开具纸质发票时,购买方(客户信息)开票电话地址不完整!请检查是否缺少地址信息,电话信息",
|
||||
SuccessStatus = false
|
||||
});
|
||||
|
||||
if (isPaper && fpkj.GMF_YHZH.IsNullOrEmptyOrWhiteSpace())
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = "客户信息",
|
||||
Message = "开具纸质发票时,购买方(客户信息)开票银行信息不完整!请检查是否缺少银行信息,银行账号信息",
|
||||
SuccessStatus = false
|
||||
});
|
||||
|
||||
#endregion 购买方
|
||||
|
||||
#region 明细信息
|
||||
var details = fpkj.COMMON_FPKJ_XMXX = new List<COMMON_FPKJ_XMXX>();
|
||||
if (opResult.OperateResult.Any())
|
||||
throw new Exception("检验信息");
|
||||
|
||||
var entrySql = $@"
|
||||
SELECT
|
||||
ID,TaxCategoryCodeId,Number,TaxCode,MaterialName,Qty,Specification,UnitName,Price,Amount,TaxRate,TaxAmount
|
||||
FROM V_INVINFO_OUTSTOCKENTRY
|
||||
|
||||
WHERE ID = {fid}
|
||||
";
|
||||
|
||||
var dbList = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{entrySql}");
|
||||
|
||||
foreach (var item in dbList)
|
||||
{
|
||||
|
||||
if (item["TaxCategoryCodeId"].Long2Int() == 0)
|
||||
{
|
||||
opResult.OperateResult.Add(new OperateResult
|
||||
{
|
||||
Name = item["Number"].ToString(),
|
||||
Message = $"物料:{item["Number"]} 缺少税收分类编码!",
|
||||
SuccessStatus = false
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
details.Add(new COMMON_FPKJ_XMXX
|
||||
{
|
||||
FPHXZ = "0",
|
||||
SPBM = item["TaxCode"].ToString(),
|
||||
//ZXBM = material["Number"].ToString(),
|
||||
XMMC = item["MaterialName"].ToString(),
|
||||
XMSL = item["Qty"].ToDecimal().ToString("F6"),
|
||||
GGXH = item["Specification"].ToString(),
|
||||
DW = item["UnitName"].ToString(),
|
||||
XMDJ = item["Price"].ToDecimal().ToString("F6"),
|
||||
XMJE = item["Amount"].ToDecimal().ToString("F2"),
|
||||
SL = (item["TaxRate"].ToDecimal() * 0.01M).ToString("F2"),
|
||||
SE = item["TaxAmount"].ToDecimal().ToString("F2"),
|
||||
});
|
||||
}
|
||||
|
||||
if (opResult.OperateResult.Any())
|
||||
throw new Exception("物料缺少税收分类编码");
|
||||
|
||||
|
||||
#endregion 明细信息
|
||||
|
||||
#endregion 针对非农产收购发票
|
||||
|
||||
return JsonConvert.SerializeObject(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据回填更新到数据库
|
||||
/// </summary>
|
||||
/// <param name="content">回调数据</param>
|
||||
/// <param name="invInfo"></param>
|
||||
/// <returns></returns>
|
||||
private bool DataBackFill(string content, DynamicObject invInfo)
|
||||
{
|
||||
try
|
||||
{
|
||||
string result = string.Empty;
|
||||
this.View.ShowMessage($"报文处理成功,正在回填发票信息【财务信息】");
|
||||
|
||||
HttpWebRequest request = null;
|
||||
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
request = WebRequest.Create(url) as HttpWebRequest;
|
||||
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
|
||||
request.ProtocolVersion = HttpVersion.Version11;
|
||||
// 这里设置了协议类型。
|
||||
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;// SecurityProtocolType.Tls1.2;
|
||||
request.KeepAlive = false;
|
||||
ServicePointManager.CheckCertificateRevocationList = true;
|
||||
ServicePointManager.DefaultConnectionLimit = 100;
|
||||
ServicePointManager.Expect100Continue = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
request = (HttpWebRequest)WebRequest.Create(url);
|
||||
}
|
||||
var DataInfo = this.Model.DataObject;
|
||||
var fid = DataInfo["Id"].Long2Int();
|
||||
|
||||
string str1 = AppDomain.CurrentDomain.BaseDirectory;
|
||||
//更新对应开票信息的流水号记录
|
||||
var serialNumber = invInfo["FSERIALNUMBER"].Long2Int();
|
||||
var newSNumber = (serialNumber > 998 ? 1 : serialNumber + 1).ToString("D3");
|
||||
var updInvSql = $"/*dialect*/UPDATE T_BD_INVOICEINFORMATION SET FSERIALNUMBER = '{newSNumber}' WHERE FID = {invInfo["FID"]}";
|
||||
DBUtils.Execute(this.Context, updInvSql);
|
||||
|
||||
//证书
|
||||
var keystorefile = str1 + @"\bin\ISSUE\testISSUE.pfx";
|
||||
var key = "123456";
|
||||
var resultData = JsonConvert.DeserializeObject<ResultData>(content);
|
||||
|
||||
var cer = new X509Certificate2(keystorefile, key);
|
||||
var fpInfo = string.Empty;
|
||||
var data = resultData.DATA;
|
||||
//回填发票下载地址
|
||||
if (data.FPLXDM.Equals("030") || data.FPLXDM.Equals("032"))
|
||||
fpInfo = data.PDF_URL;
|
||||
else if (data.FPLXDM.Equals("007") || data.FPLXDM.Equals("004"))
|
||||
fpInfo = data.FP_MW;
|
||||
|
||||
request.ClientCertificates.Add(cer);
|
||||
request.Method = "POST"; //使用get方式发送数据
|
||||
request.ContentType = "application/json;charset=utf-8";
|
||||
this.View.Model.SetValue("FInvoiceUrl", fpInfo);
|
||||
this.View.Model.SetValue("FInvoiceNumber", data.FP_HM);
|
||||
this.View.Model.SetValue("FFPLXDM", data.FPLXDM);
|
||||
this.View.Model.SetValue("FFPQQLSH", data.FPQQLSH);
|
||||
|
||||
byte[] data = Encoding.UTF8.GetBytes(postData);
|
||||
Stream newStream = request.GetRequestStream();
|
||||
newStream.Write(data, 0, data.Length);
|
||||
newStream.Close();
|
||||
var updSql = $@"/*dialect*/
|
||||
UPDATE T_SAL_OUTSTOCKFIN
|
||||
SET FINVOICEURL = '{fpInfo}'
|
||||
,FFPLXDM = '{data.FPLXDM}'
|
||||
,FFPQQLSH = '{data.FPQQLSH}'
|
||||
,FINVOICENUMBER = '{data.FP_HM}'
|
||||
WHERE
|
||||
FID = {fid} ";
|
||||
|
||||
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
||||
Stream stream = response.GetResponseStream();
|
||||
|
||||
using (StreamReader sr = new StreamReader(stream))
|
||||
{
|
||||
result = sr.ReadToEnd();
|
||||
}
|
||||
return result;
|
||||
//发票信息回填到数据库
|
||||
var isFlag = DBUtils.Execute(this.Context, updSql);
|
||||
return isFlag > 0;
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
|
||||
{
|
||||
if (errors == SslPolicyErrors.None)
|
||||
return true; //总是接受
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user