From 98b76c89befdd26d9da96d38d658869cd1460899 Mon Sep 17 00:00:00 2001 From: tdx Date: Mon, 20 Apr 2026 07:13:50 +0000 Subject: [PATCH] SVN r1154 SVN-Revision: r1154 --- 插件库/Lskj.QueryEssentialInfo/FrmMain.cs | 190 ++++++++++++++++-- .../Lskj.QueryEssentialInfo/QueryApiUtil.cs | 65 +++++- 2 files changed, 226 insertions(+), 29 deletions(-) diff --git a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs index 10da1b9..7ad40b3 100644 --- a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs +++ b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs @@ -57,6 +57,13 @@ namespace Lskj.QueryEssentialInfo })); break; case "1": + GSSKQuery(); + Invoke(new Action(() => + { + MessageUtil.Show("个税税款查询完成"); + })); + break; + case "11": GSSBQuery(); Invoke(new Action(() => { @@ -677,6 +684,48 @@ namespace Lskj.QueryEssentialInfo /// 个税申报 /// private void GSSBQuery() + { + SetProcessMsg($"正在进行个税申报..."); + string submitCode = QueryApiUtil.Submit(out string submitResult, out string submitMsg); + if (!submitCode.Equals("0")) + { + throw new Exception($"个税申报失败\r\n{submitMsg}"); + } + SetProcessMsg($"正在查询个税申报结果..."); + string submitQueryCode = "-99"; + string submitQueryResult = ""; + string submitQueryMsg = ""; + for (int i = 0; i < 5; i++) + { + submitQueryResult = ""; + submitQueryMsg = ""; + submitQueryCode = QueryApiUtil.SubmitQuery(out submitQueryResult, out submitQueryMsg); + if (submitQueryCode.Equals("0")) + { + break; + } + else + { + Thread.Sleep(1000); + } + } + if (!submitQueryCode.Equals("0")) + { + throw new Exception($"个税申报失败\r\n{submitQueryMsg}"); + } + else + { + + } + Invoke(new Action(() => + { + this.Close(); + })); + } + /// + /// 税款查询 + /// + private void GSSKQuery() { SetProcessMsg($"正在同步收入..."); string incomeCode = QueryApiUtil.GetIncome(out string incomeResult, out string incomeMsg); @@ -684,29 +733,128 @@ namespace Lskj.QueryEssentialInfo { throw new Exception($"同步收入失败\r\n{incomeMsg}"); } - SetProcessMsg($"正在生成批次信息..."); - string batchCode = QueryApiUtil.GetBatch(out string batchResult, "101060100", out string batchMsg); - if (!batchCode.Equals("0")) + SetProcessMsg($"正在计算税款..."); + string computeCode = QueryApiUtil.GetCompute(out string computeResult, "101060100", out string computeMsg); + if (!computeCode.Equals("0")) { - throw new Exception($"生成批次信息失败\r\n{batchMsg}"); + throw new Exception($"计算税款\r\n{computeMsg}"); + } + SetProcessMsg($"正在获取税款计算结果..."); + string resultCode = "-99"; + string resultResult = ""; + string resultMsg = ""; + for (int i = 0; i < 5; i++) + { + resultResult = ""; + resultMsg = ""; + resultCode = QueryApiUtil.GetResult(out resultResult, "101060100", out resultMsg); + if (resultCode.Equals("0")) + { + break; + } + else + { + Thread.Sleep(1000); + } } - SetProcessMsg($"正在获取计算结果..."); - string resultCode = QueryApiUtil.GetResult(out string resultResult, "101060100", out string resultMsg); if (!resultCode.Equals("0")) { - throw new Exception($"获取计算结果\r\n{resultMsg}"); + throw new Exception($"获取税款计算结果失败\r\n{resultMsg}"); } - //SetProcessMsg($"正在进行个税申报..."); - //string submitCode = QueryApiUtil.Submit(out string submitResult, out string submitMsg); - //if (!submitCode.Equals("0")) - //{ - // throw new Exception($"个税申报失败\r\n{submitMsg}"); - //} - //SetProcessMsg($"正在查询个税申报结果..."); - //string submitQueryCode = "-99"; - //while (!submitQueryCode.Equals("0")) - //{ - // submitQueryCode = QueryApiUtil.SubmitQuery(out string submitQueryResult, out string submitQueryMsg); - // if (!submitQueryCode.Equals("0")) - // { - // if \ No newline at end of file + else + { + JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultResult); + JArray zhsdJArray = (JArray)resultJObject["data"]["zhsdList"]; + string skssq = QueryApiUtil.mainRow["skssqQ"] + ""; + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.AppendLine($"delete from IndividualTax_Result_Detail where skssq = '{skssq}'"); + foreach (JObject zhsdJObject in zhsdJArray) + { + JObject personJObject = (JObject)zhsdJObject; + string nsrxm = personJObject["nsrxm"] + ""; + string sfzjhm = personJObject["sfzjhm"] + ""; + string zrrdah = personJObject["zrrdah"] + ""; + string sdxmdm = personJObject["sdxmdm"] + ""; + string sdxmMc = personJObject["sdxmMc"] + ""; + string bqsre = personJObject["bqsre"] + ""; + string ljsre = personJObject["ljsre"] + ""; + string bqfy = personJObject["bqfy"] + ""; + string bqmssr = personJObject["bqmssr"] + ""; + string ljmssr = personJObject["ljmssr"] + ""; + string yjbjcfy = personJObject["yjbjcfy"] + ""; + string ljjbjcfy = personJObject["ljjbjcfy"] + ""; + string jbylbxf = personJObject["jbylbxf"] + ""; + string jbyilbxf = personJObject["jbyilbxf"] + ""; + string sybxf = personJObject["sybxf"] + ""; + string zfgjj = personJObject["zfgjj"] + ""; + string bqzxkchj = personJObject["bqzxkchj"] + ""; + string ljzxkchj = personJObject["ljzxkchj"] + ""; + string nj = personJObject["nj"] + ""; + string syjkbx = personJObject["syjkbx"] + ""; + string syylbx = personJObject["syylbx"] + ""; + string qtje = personJObject["qtje"] + ""; + string bqqtkchj = personJObject["bqqtkchj"] + ""; + string ljqtkchj = personJObject["ljqtkchj"] + ""; + string znjyzc = personJObject["znjyzc"] + ""; + string sylrzc = personJObject["sylrzc"] + ""; + string zfdklxzc = personJObject["zfdklxzc"] + ""; + string zfzjzc = personJObject["zfzjzc"] + ""; + string jxjyzc = personJObject["jxjyzc"] + ""; + string yyezhzc = personJObject["yyezhzc"] + ""; + string bqzxfjkchj = personJObject["bqzxfjkchj"] + ""; + string ljznjyzc = personJObject["ljznjyzc"] + ""; + string ljsylrzc = personJObject["ljsylrzc"] + ""; + string ljzfdklxzc = personJObject["ljzfdklxzc"] + ""; + string ljzfzjzc = personJObject["ljzfzjzc"] + ""; + string ljjxjyzc = personJObject["ljjxjyzc"] + ""; + string ljyyezhzc = personJObject["ljyyezhzc"] + ""; + string ljzxfjkchj = personJObject["ljzxfjkchj"] + ""; + string bqzykcdjze = personJObject["bqzykcdjze"] + ""; + string ljzykcdjze = personJObject["ljzykcdjze"] + ""; + string ljynssde = personJObject["ljynssde"] + ""; + string sl = personJObject["sl"] + ""; + string sskcs = personJObject["sskcs"] + ""; + string ljynse = personJObject["ljynse"] + ""; + string bqjmse = personJObject["bqjmse"] + ""; + string ljjmse = personJObject["ljjmse"] + ""; + string ljyingkjse = personJObject["ljyingkjse"] + ""; + string bqyiyujse = personJObject["bqyiyujse"] + ""; + string ljyiyujse = personJObject["ljyiyujse"] + ""; + string ybtse = personJObject["ybtse"] + ""; + string ljfy = personJObject["ljfy"] + ""; + string yxkcdsf = personJObject["yxkcdsf"] + ""; + string bz = personJObject["bz"] + ""; + string qpcykse = personJObject["qpcykse"] + ""; + string bpcybtse = personJObject["bpcybtse"] + ""; + string batchId = personJObject["batchId"] + ""; + string S(string val) => string.IsNullOrEmpty(val) ? "NULL" : $"'{val.Replace("'", "''")}'"; + string N(string val) => string.IsNullOrEmpty(val) ? "0" : val; + string sql = $@" + INSERT INTO IndividualTax_Result_Detail ( + nsrxm, sfzjhm, zrrdah, sdxmdm, sdxmMc, + bqsre, ljsre, bqfy, bqmssr, ljmssr, + yjbjcfy, ljjbjcfy, jbylbxf, jbyilbxf, sybxf, + zfgjj, bqzxkchj, ljzxkchj, nj, syjkbx, + syylbx, qtje, bqqtkchj, ljqtkchj, znjyzc, + sylrzc, zfdklxzc, zfzjzc, jxjyzc, yyezhzc, + bqzxfjkchj, ljznjyzc, ljsylrzc, ljzfdklxzc, ljzfzjzc, + ljjxjyzc, ljyyezhzc, ljzxfjkchj, bqzykcdjze, ljzykcdjze, + ljynssde, sl, sskcs, ljynse, bqjmse, + ljjmse, ljyingkjse, bqyiyujse, ljyiyujse, ybtse, + ljfy, yxkcdsf, bz, qpcykse, bpcybtse, + batchId,skssq + ) VALUES ( + {S(nsrxm)}, {S(sfzjhm)}, {S(zrrdah)}, {S(sdxmdm)}, {S(sdxmMc)}, + {N(bqsre)}, {N(ljsre)}, {N(bqfy)}, {N(bqmssr)}, {N(ljmssr)}, + {N(yjbjcfy)}, {N(ljjbjcfy)}, {N(jbylbxf)}, {N(jbyilbxf)}, {N(sybxf)}, + {N(zfgjj)}, {N(bqzxkchj)}, {N(ljzxkchj)}, {N(nj)}, {N(syjkbx)}, + {N(syylbx)}, {N(qtje)}, {N(bqqtkchj)}, {N(ljqtkchj)}, {N(znjyzc)}, + {N(sylrzc)}, {N(zfdklxzc)}, {N(zfzjzc)}, {N(jxjyzc)}, {N(yyezhzc)}, + {N(bqzxfjkchj)}, {N(ljznjyzc)}, {N(ljsylrzc)}, {N(ljzfdklxzc)}, {N(ljzfzjzc)}, + {N(ljjxjyzc)}, {N(ljyyezhzc)}, {N(ljzxfjkchj)}, {N(bqzykcdjze)}, {N(ljzykcdjze)}, + {N(ljynssde)}, {N(sl)}, {N(sskcs)}, {N(ljynse)}, {N(bqjmse)}, + {N(ljjmse)}, {N(ljyingkjse)}, {N(bqyiyujse)}, {N(ljyiyujse)}, {N(ybtse)}, + {N(ljfy)}, {N(yxkcdsf)}, {S(bz)}, {N(qpcykse)}, {N(bpcybtse)}, + {S(batchId)},{S(skssq)} + );"; + sqlBu \ No newline at end of file diff --git a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs index 990ce0c..20db86b 100644 --- a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs +++ b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs @@ -837,9 +837,9 @@ namespace Lskj.QueryEssentialInfo headerDic.Add("Authorization", $"{GetAuthorization(date, host, x_htjs_nonce, x_htjs_ua)}"); JObject pmsJObject = new JObject(); pmsJObject.Add("qysh", mainRow["qysh"] + ""); - pmsJObject.Add("operator", mainRow["qysh"] + ""); - pmsJObject.Add("skssqQ", mainRow["qysh"] + ""); - pmsJObject.Add("skssqZ", mainRow["qysh"] + ""); + pmsJObject.Add("operator", mainRow["operator"] + ""); + pmsJObject.Add("skssqQ", mainRow["skssqQ"] + ""); + pmsJObject.Add("skssqZ", mainRow["skssqZ"] + ""); JArray bizDataListJArry = new JArray(); JArray incomeDataListJArry = new JArray(); var groupedRows = detailTab.AsEnumerable().Where(row => (row["p_emp_addTag"] + "") == "1").GroupBy(row => row["incomeTypeCode"] + ""); @@ -875,6 +875,7 @@ namespace Lskj.QueryEssentialInfo { } + incomeDataJObject.Add("externFields", externFieldsJObject); incomeDataListJArry.Add(incomeDataJObject); } bizDataJObject.Add("incomeTypeCode", typeCode); @@ -903,7 +904,7 @@ namespace Lskj.QueryEssentialInfo /// /// /// - public static string GetBatch(out string resultRead, string incomeTypeCode, out string resultMsg) + public static string GetBatch(out string resultRead, string nsrlxdm, string incomeTypeCode, out string resultMsg) { string code = "-9999"; resultRead = ""; @@ -926,7 +927,7 @@ namespace Lskj.QueryEssentialInfo JObject pmsJObject = new JObject(); pmsJObject.Add("qysh", mainRow["qysh"] + ""); pmsJObject.Add("ysyf", mainRow["ysyf"] + ""); - pmsJObject.Add("nsrlxdm", mainRow["nsrlxdm"] + ""); + pmsJObject.Add("nsrlxdm", nsrlxdm); pmsJObject.Add("incomeTypeCode", incomeTypeCode); HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); @@ -944,20 +945,68 @@ namespace Lskj.QueryEssentialInfo return code; } /// + /// 计算税款 + /// + /// + /// + /// + /// + public static string GetCompute(out string resultRead, string nsrlxdm, out string resultMsg) + { + string code = "-9999"; + resultRead = ""; + resultMsg = ""; + try + { + string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/compute"; + HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8); + Dictionary headerDic = new Dictionary(); + DateTime utcNow = DateTime.UtcNow; + string date = utcNow.ToString("r", CultureInfo.InvariantCulture); + string host = "api.baiwangjs.com"; + string x_htjs_nonce = Guid.NewGuid().ToString().ToLower(); + string x_htjs_ua = "1.8.0_181 64 bit, sdk-ver=1.0.0"; + headerDic.Add("Date", DateTime.UtcNow.ToString()); + headerDic.Add("host", host); + headerDic.Add("x-htjs-nonce", x_htjs_nonce); + headerDic.Add("x-htjs-ua", x_htjs_ua); + headerDic.Add("Authorization", $"{GetAuthorization(date, host, x_htjs_nonce, x_htjs_ua)}"); + JObject pmsJObject = new JObject(); + pmsJObject.Add("qysh", mainRow["qysh"] + ""); + pmsJObject.Add("operator", mainRow["operator"] + ""); + pmsJObject.Add("skssqQ", mainRow["skssqQ"] + ""); + pmsJObject.Add("skssqZ", mainRow["skssqZ"] + ""); + pmsJObject.Add("nsrlxDm", nsrlxdm); + HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); + resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); + if (webResponse != null && !string.IsNullOrEmpty(resultRead)) + { + JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead); + code = resultJObject["code"] + ""; + resultMsg = resultJObject["msg"] + ""; + } + } + catch (Exception) + { + throw; + } + return code; + } + /// /// 获取计算结果 /// /// /// /// /// - public static string GetResult(out string resultRead, string incomeTypeCode, out string resultMsg) + public static string GetResult(out string resultRead, string nsrlxdm, out string resultMsg) { string code = "-9999"; resultRead = ""; resultMsg = ""; try { - string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/acquire/compute/result"; + string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/compute/query"; HttpTools.setting("application/json", null, null, HttpTools.Encode.UTF8); Dictionary headerDic = new Dictionary(); DateTime utcNow = DateTime.UtcNow; @@ -974,7 +1023,7 @@ namespace Lskj.QueryEssentialInfo pmsJObject.Add("qysh", mainRow["qysh"] + ""); pmsJObject.Add("skssqQ", mainRow["skssqQ"] + ""); pmsJObject.Add("skssqZ", mainRow["skssqZ"] + ""); - pmsJObject.Add("incomeTypeCode", incomeTypeCode); + pmsJObject.Add("nsrlxDm", nsrlxdm); HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST); resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); if (webResponse != null && !string.IsNullOrEmpty(resultRead))