diff --git a/插件库/Lskj.PubBomImport/FrmProgress.cs b/插件库/Lskj.PubBomImport/FrmProgress.cs
index 286c9ed..dddb428 100644
--- a/插件库/Lskj.PubBomImport/FrmProgress.cs
+++ b/插件库/Lskj.PubBomImport/FrmProgress.cs
@@ -3960,11 +3960,9 @@ namespace Lskj.PubBomImport
{
long totalSize = fileInfo.Length;
// Web 前端上传器同样提示:经过防火墙的环境需要将分片
- // 从 1MB 降到约 0.3MB。仅大文件启用安全分片,避免影响
- // 现有小文件上传速度。
- int pageSize = totalSize > 4L * 1024 * 1024
- ? 320 * 1024
- : 1 * 1024 * 1024;
+ // 从 1MB 降到约 0.3MB。所有文件统一使用安全分片,兼容
+ // 内网网关、透明代理及防火墙对 multipart 请求体的限制。
+ int pageSize = 320 * 1024;
long position = 0;
int confirm = 1;
int encode = 4;
diff --git a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs
index 5fa5cc3..22a53f7 100644
--- a/插件库/Lskj.QueryEssentialInfo/FrmMain.cs
+++ b/插件库/Lskj.QueryEssentialInfo/FrmMain.cs
@@ -43,6 +43,7 @@ namespace Lskj.QueryEssentialInfo
progressBarCurrent.Value = 0;
QueryApiUtil.mainRow = BaseImpl.GetDataRowResult(Model.MainSourceSql);
QueryApiUtil.detailTab = BaseImpl.GetDataTableResult(Model.DetailSourceSql);
+ QueryApiUtil.EssentialTabExists();
Task.Factory.StartNew(() =>
{
try
@@ -74,12 +75,27 @@ namespace Lskj.QueryEssentialInfo
break;
case "11":
RYJQuery();
- GSSBQuery();
+ GSSBSubmit();
Invoke(new Action(() =>
{
MessageUtil.Show("个税申报完成");
}));
break;
+ case "-11":
+ RYJQuery();
+ GSSBInvalidSubmit();
+ Invoke(new Action(() =>
+ {
+ MessageUtil.Show("个税申报作废完成");
+ }));
+ break;
+ case "111":
+ GSSBQuery();
+ Invoke(new Action(() =>
+ {
+ MessageUtil.Show("个税申报查询成功");
+ }));
+ break;
case "2":
RYJQuery();
YLJQuery();
@@ -647,7 +663,7 @@ namespace Lskj.QueryEssentialInfo
///
/// 个税申报
///
- private void GSSBQuery()
+ private void GSSBSubmit()
{
QueryApiUtil.detailTab = BaseImpl.GetDataTableResult(Model.DetailSourceSql);
var rowsEnumerable = QueryApiUtil.detailTab.AsEnumerable();
@@ -662,31 +678,53 @@ namespace Lskj.QueryEssentialInfo
{
throw new Exception($"个税申报失败\r\n{submitMsg}");
}
+ Invoke(new Action(() =>
+ {
+ this.Close();
+ }));
+ }
+ ///
+ /// 个税申报作废
+ ///
+ private void GSSBInvalidSubmit()
+ {
+ QueryApiUtil.detailTab = BaseImpl.GetDataTableResult(Model.DetailSourceSql);
+ var rowsEnumerable = QueryApiUtil.detailTab.AsEnumerable();
+ int bsFaildCount = rowsEnumerable.Where(n => !(n["p_emp_addTag"] + "").Equals("1")).Count();
+ if (bsFaildCount > 0)
+ {
+ throw new Exception($"人员未全部报送成功,请稍后再试或联系管理员");
+ }
+ SetProcessMsg($"正在作废个税申报...");
+ string submitCode = QueryApiUtil.InvalidSubmit(out string submitResult, out string submitMsg);
+ if (!submitCode.Equals("0"))
+ {
+ throw new Exception($"个税申报作废失败\r\n{submitMsg}");
+ }
+ Invoke(new Action(() =>
+ {
+ this.Close();
+ }));
+ }
+ ///
+ /// 个税申报查询
+ ///
+ private void GSSBQuery()
+ {
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);
- }
- }
+ submitQueryResult = "";
+ submitQueryMsg = "";
+ submitQueryCode = QueryApiUtil.SubmitQuery(out submitQueryResult, out submitQueryMsg);
if (!submitQueryCode.Equals("0"))
{
throw new Exception($"个税申报失败\r\n{submitQueryMsg}");
}
else
{
-
+ throw new Exception($"个税申报成功\r\n{submitQueryMsg}");
}
Invoke(new Action(() =>
{
diff --git a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs
index 79fb7e6..6f01704 100644
--- a/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs
+++ b/插件库/Lskj.QueryEssentialInfo/QueryApiUtil.cs
@@ -6,6 +6,7 @@ using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
+using System.Data.SqlClient;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -427,8 +428,16 @@ namespace Lskj.QueryEssentialInfo
bizDataJObject.Add("idNumber", detailRow.Table.Columns.Contains("idNumber") ? detailRow["idNumber"] + "" : "");
bizDataJObject.Add("sex", detailRow.Table.Columns.Contains("sex") ? detailRow["sex"] + "" : "");
bizDataJObject.Add("birthday", detailRow.Table.Columns.Contains("birthday") ? detailRow["birthday"] + "" : "");
- bizDataJObject.Add("employType", detailRow.Table.Columns.Contains("employType") ? detailRow["employType"] + "" : "");
- bizDataJObject.Add("employedDate", detailRow.Table.Columns.Contains("employedDate") ? detailRow["employedDate"] + "" : "");
+ string employType = detailRow.Table.Columns.Contains("employType") ? detailRow["employType"] + "" : "";
+ bizDataJObject.Add("employType", employType);
+ if (employType.Equals("雇员"))
+ {
+ bizDataJObject.Add("employedDate", detailRow.Table.Columns.Contains("employedDate") ? detailRow["employedDate"] + "" : "");
+ }
+ else if (employType.Equals("其他"))
+ {
+ bizDataJObject.Add("taxRelatedMatters", detailRow.Table.Columns.Contains("taxRelatedMatters") ? detailRow["taxRelatedMatters"] + "" : "");
+ }
bizDataJObject.Add("phoneNumber", detailRow.Table.Columns.Contains("phoneNumber") ? detailRow["phoneNumber"] + "" : "");
bizDataJObject.Add("isDeductExpense", detailRow.Table.Columns.Contains("isDeductExpense") ? detailRow["isDeductExpense"] + "" : "");
bizlistJArray.Add(bizDataJObject);
@@ -436,6 +445,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("bizDataList", bizlistJArray);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("同步人员", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -478,6 +488,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("operator", mainRow["operator"] + "");
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("查询人员报送情况", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -533,6 +544,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("idNumberList", idNumberjArray);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("同步专项附加", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -588,6 +600,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("idNumberList", idNumberjArray);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("查询专项附加", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -648,6 +661,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("idNumberList", idNumberjArray);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("发起养老金查询", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -705,6 +719,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("idNumberList", idNumberjArray);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("获取养老金明细", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -752,6 +767,55 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("skssqZ", mainRow["skssqZ"] + "");
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("个税申报", JsonConvert.SerializeObject(pmsJObject), resultRead);
+ 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 InvalidSubmit(out string resultRead, out string resultMsg)
+ {
+ string code = "-9999";
+ resultRead = "";
+ resultMsg = "";
+ try
+ {
+ string url = $"{urlStart}/web/sbmk/personal-tax/api/v1/invalid/submit";
+ 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("busiTypeCode", mainRow["busiTypeCode"] + "");
+ pmsJObject.Add("qysh", mainRow["qysh"] + "");
+ pmsJObject.Add("operator", mainRow["operator"] + "");
+ pmsJObject.Add("skssqQ", mainRow["skssqQ"] + "");
+ pmsJObject.Add("skssqZ", mainRow["skssqZ"] + "");
+ HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
+ resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("个税申报作废", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -796,6 +860,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("skssqZ", mainRow["skssqZ"] + "");
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("个税申报查询", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -873,7 +938,7 @@ namespace Lskj.QueryEssentialInfo
}
else if (typeCode.Equals("101060100010500"))
{
-
+ externFieldsJObject.Add("sdxmdm", detailRow["sdxmdm"] + "");
}
incomeDataJObject.Add("externFields", externFieldsJObject);
incomeDataListJArry.Add(incomeDataJObject);
@@ -885,6 +950,7 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("bizDataList", bizDataListJArry);
HttpWebResponse webResponse = HttpTools.Post(url, JsonConvert.SerializeObject(pmsJObject), null, headerDic, HttpTools.Method.POST);
resultRead = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
+ WriteLogInfo("同步收入", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -976,9 +1042,11 @@ namespace Lskj.QueryEssentialInfo
pmsJObject.Add("operator", mainRow["operator"] + "");
pmsJObject.Add("skssqQ", mainRow["skssqQ"] + "");
pmsJObject.Add("skssqZ", mainRow["skssqZ"] + "");
+ pmsJObject.Add("incomeTypeCode", mainRow["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();
+ WriteLogInfo("计算税款", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -1026,6 +1094,7 @@ namespace Lskj.QueryEssentialInfo
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();
+ WriteLogInfo("获取税款计算结果", JsonConvert.SerializeObject(pmsJObject), resultRead);
if (webResponse != null && !string.IsNullOrEmpty(resultRead))
{
JObject resultJObject = (JObject)JsonConvert.DeserializeObject(resultRead);
@@ -1117,5 +1186,67 @@ namespace Lskj.QueryEssentialInfo
}
return isResult;
}
+ ///
+ /// 判断表是否存在
+ ///
+ public static void EssentialTabExists()
+ {
+ string sql = @"IF OBJECT_ID(N'[dbo].[p_EssentialLogTab]', N'U') IS NULL
+ BEGIN
+ CREATE TABLE [dbo].[p_EssentialLogTab]
+ (
+ [Id] INT IDENTITY(1,1) NOT NULL,
+ [title] NVARCHAR(255) NULL,
+ [data] NVARCHAR(MAX) NULL,
+ [datetime] DATETIME NOT NULL DEFAULT(GETDATE()),
+ [rtnmsg] NVARCHAR(MAX) NULL,
+
+ CONSTRAINT [PK_p_EssentialLogTab] PRIMARY KEY CLUSTERED ([Id] ASC)
+ );
+ END";
+ SqlHelper.ExecuteNonQuery(sql);
+ }
+ ///
+ /// 写入日志信息
+ ///
+ public static void WriteLogInfo(string title, string data, string rtnmsg)
+ {
+ try
+ {
+ string sql = @"
+ INSERT INTO [dbo].[p_EssentialLogTab]
+ (
+ [title],
+ [data],
+ [rtnmsg]
+ )
+ VALUES
+ (
+ @title,
+ @data,
+ @rtnmsg
+ );";
+
+ SqlParameter[] parameters =
+ {
+ new SqlParameter("@title", SqlDbType.NVarChar, 255)
+ {
+ Value = title
+ },
+ new SqlParameter("@data", SqlDbType.NVarChar, -1)
+ {
+ Value = data.Replace("'","''")
+ },
+ new SqlParameter("@rtnmsg", SqlDbType.NVarChar, -1)
+ {
+ Value = rtnmsg.Replace("'","''")
+ }
+ };
+ SqlHelper.ExecuteNonQuery(CommandType.Text, sql, parameters);
+ }
+ catch (Exception)
+ {
+ }
+ }
}
}