Compare commits

...

2 Commits

Author SHA1 Message Date
c3c3998152 Merge pull request '初始化仓库' (#2) from develop into main
Reviewed-on: #2
2025-11-26 15:17:49 +08:00
tangj
c61e4fc8b8 初始化仓库 2025-11-26 15:17:13 +08:00
44 changed files with 7872 additions and 0 deletions

407
.gitignore vendored Normal file
View File

@@ -0,0 +1,407 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea/
# Log files
log/
*.log
# Application specific
appsettings.Development.json
appsettings.Local.json

25
SHK3CloudWebAPI.sln Normal file
View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SHK3CloudWebAPI", "SHK3CloudWebAPI\SHK3CloudWebAPI.csproj", "{DC5DCF4E-9E67-4497-9CB5-03C627B3DAD7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC5DCF4E-9E67-4497-9CB5-03C627B3DAD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC5DCF4E-9E67-4497-9CB5-03C627B3DAD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC5DCF4E-9E67-4497-9CB5-03C627B3DAD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC5DCF4E-9E67-4497-9CB5-03C627B3DAD7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1C3FCF6F-D360-4801-B597-5197D81B8C33}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "9.0.0",
"commands": [
"dotnet-ef"
],
"rollForward": false
}
}
}

View File

@@ -0,0 +1,14 @@
namespace SHK3CloudWebAPI
{
/// <summary>
///
/// </summary>
public enum ApiVersions
{
/// <summary>
/// 接口
/// </summary>
=0,
}
}

View File

@@ -0,0 +1,60 @@
using System.Xml.Serialization;
namespace SHK3CloudWebAPI.Common
{
public class CommonHelper
{
public static string SerializeToXml<T>(T obj)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringWriter textWriter = new StringWriter())
{
serializer.Serialize(textWriter, obj);
return textWriter.ToString();
}
}
public static T DeserializeFromXml<T>(string xml)
{
if (string.IsNullOrWhiteSpace(xml))
{
throw new ArgumentException("XML内容为空无法反序列化", nameof(xml));
}
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader reader = new StringReader(xml))
{
return (T)serializer.Deserialize(reader);
}
}
catch (InvalidOperationException ex) when (ex.InnerException is System.Xml.XmlException)
{
// XML格式错误
throw new FormatException("XML格式不正确无法反序列化为 " + typeof(T).Name, ex);
}
}
public static string OigNumber(string HQID)
{
//1318586 205 新中冠智能科技股份有限公司
//1945324 203 深圳市高飞易科技有限公司
//3415228 202 厦门鑫亚宝宇信息技术有限公司
//693465 201 北京方正易通科技有限公司
//3860141 204 深圳市金文网络科技有限公司
//3311308 103 皓诺
string oidnumber = "";
switch (HQID)
{
case "3311308":
oidnumber = "103";
break;
}
return oidnumber;
}
}
}

View File

@@ -0,0 +1,272 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
namespace SHK3CloudWebAPI
{
/// <summary>
///
/// </summary>
public class InvokeHelper
{
/// <summary>
/// url
/// </summary>
public string _CloudUrl;
/// <summary>
/// 帐套标识
/// </summary>
public string _KDType;
/// <summary>
/// 用户
/// </summary>
public string _KDUser;
/// <summary>
/// 密码
/// </summary>
public string _KDPwd;
/// <summary>
///
/// </summary>
public InvokeHelper()
{
// 创建配置构建器
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
// 构建配置
var configuration = configurationBuilder.Build();
// 读取配置参数
_CloudUrl = configuration["AppSettings:CloudUrl"].ToString();
_KDType = configuration.GetValue<string>("AppSettings:KDType").ToString();
_KDUser = configuration.GetValue<string>("AppSettings:KDUser").ToString();
_KDPwd = configuration.GetValue<string>("AppSettings:KDPwd").ToString();
}
/// <summary>
/// 登录验证
/// </summary>
/// <returns></returns>
public string Login()
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
loginParameter loginData = new loginParameter();
loginData.acctID = _KDType;
loginData.username = _KDUser;
loginData.password = _KDPwd;
loginData.lcid = "2052";
var login = JsonConvert.SerializeObject(loginData);
request.AddParameter("application/json", login, ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
/// <summary>
/// 保存
/// </summary>
/// <param name="formId">单据标识</param>
/// <param name="content">JSON</param>
/// <param name="cookie">登录的kdservice-sessionid</param>
/// <returns></returns>
public string Save(string formId, string content, string cookie)
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", string.Format("kdservice-sessionid={0}", cookie));
List<object> Parameters = new List<object>();
//业务对象Id
Parameters.Add(formId);
//Json字串
Parameters.Add(content);
var push = JsonConvert.SerializeObject(Parameters);
JObject jsonRoot = new JObject();
jsonRoot.Add("parameters", push);
request.AddParameter("application/json", jsonRoot.ToString(), ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
/// <summary>
/// 整单关闭
/// </summary>
/// <param name="formId">单据标识</param>
/// <param name="content">JSON</param>
/// <param name="cookie">登录的kdservice-sessionid</param>
/// <returns></returns>
public string BillClose(string formId, string content, string cookie)
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExcuteOperation.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", string.Format("kdservice-sessionid={0}", cookie));
List<object> Parameters = new List<object>();
//业务对象Id
Parameters.Add(formId);
//业务操作 整单关闭
Parameters.Add("BillClose");
//Json字串
Parameters.Add(content);
var push = JsonConvert.SerializeObject(Parameters);
JObject jsonRoot = new JObject();
jsonRoot.Add("parameters", push);
request.AddParameter("application/json", jsonRoot.ToString(), ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
/// <summary>
/// 列表查询JSON
/// </summary>
/// <param name="content"></param>
/// <param name="cookie"></param>
/// <returns></returns>
public string BillQuery(string content, string cookie)
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", string.Format("kdservice-sessionid={0}", cookie));
List<object> Parameters = new List<object>();
//Json字串
Parameters.Add(content);
var billQuery = JsonConvert.SerializeObject(Parameters);
JObject jsonRoot = new JObject();
jsonRoot.Add("parameters", billQuery);
request.AddParameter("application/json", jsonRoot.ToString(), ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
/// <summary>
/// 列表查询
/// </summary>
/// <param name="content"></param>
/// /// <param name="cookie"></param>
/// <returns></returns>
public string ExecuteBillQuery(string content, string cookie)
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", string.Format("kdservice-sessionid={0}", cookie));
List<object> Parameters = new List<object>();
//Json字串
Parameters.Add(content);
var billQuery = JsonConvert.SerializeObject(Parameters);
JObject jsonRoot = new JObject();
jsonRoot.Add("parameters", billQuery);
request.AddParameter("application/json", jsonRoot.ToString(), ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
/// <summary>
///单据操作
/// </summary>
/// <param name="formId">单据标识</param>
/// <param name="content">JSON</param> "BillClose"
/// <param name="cookie">登录的kdservice-sessionid</param>
/// <returns></returns>
public string BillOperation(string formId, string content, string cookie, string strOperation)
{
var httpClient = new RestClient(_CloudUrl);
var request = new RestRequest("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExcuteOperation.common.kdsvc", Method.Post);
request.AddHeader("Accept", "*/*");
request.AddHeader("Accept-Encoding", "gzip, deflate, br");
request.AddHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Cookie", string.Format("kdservice-sessionid={0}", cookie));
List<object> Parameters = new List<object>();
//业务对象Id
Parameters.Add(formId);
//业务操作 整单关闭
Parameters.Add(strOperation);
//Json字串
Parameters.Add(content);
var push = JsonConvert.SerializeObject(Parameters);
JObject jsonRoot = new JObject();
jsonRoot.Add("parameters", push);
request.AddParameter("application/json", jsonRoot.ToString(), ParameterType.RequestBody);
var response = httpClient.Execute(request);
return response.Content;
}
}
}

View File

@@ -0,0 +1,88 @@
using Microsoft.AspNetCore.Http;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace SHK3CloudWebAPI.Common
{
public class RequestLoggingMiddleware
{
private readonly RequestDelegate _next;
public RequestLoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// 获取请求信息
var method = context.Request.Method;
var path = context.Request.Path;
var query = context.Request.QueryString.ToString();
var ipAddress = context.Connection.RemoteIpAddress?.ToString();
// 获取 AppKey 和 AppSecret如果存在
context.Request.Headers.TryGetValue("AppKey", out var appKey);
context.Request.Headers.TryGetValue("AppSecret", out var appSecret);
// 读取请求体
var originalBodyStream = context.Request.Body;
using (var memoryStream = new MemoryStream())
{
await originalBodyStream.CopyToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
var body = await new StreamReader(memoryStream).ReadToEndAsync();
memoryStream.Seek(0, SeekOrigin.Begin);
context.Request.Body = memoryStream;
var originalResponseBodyStream = context.Response.Body;
using (var responseBodyStream = new MemoryStream())
{
context.Response.Body = responseBodyStream;
await _next(context);
responseBodyStream.Seek(0, SeekOrigin.Begin);
var responseBody = await new StreamReader(responseBodyStream).ReadToEndAsync();
responseBodyStream.Seek(0, SeekOrigin.Begin);
await responseBodyStream.CopyToAsync(originalResponseBodyStream);
// 日志记录路径
var currentDate = DateTime.Now.ToString("yyyy-MM-dd");
var folderPath = Path.Combine("C:\\log", currentDate);
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
var filePath = Path.Combine(folderPath, $"{currentDate}.txt");
// 构建日志内容
var logMessage = new StringBuilder();
logMessage.AppendLine($"Timestamp: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
logMessage.AppendLine($"IP Address: {ipAddress}");
logMessage.AppendLine($"Method: {method}");
logMessage.AppendLine($"Path: {path}");
logMessage.AppendLine($"QueryString: {query}");
logMessage.AppendLine($"AppKey: {appKey}");
logMessage.AppendLine($"AppSecret: {appSecret}");
logMessage.AppendLine("Headers:");
foreach (var header in context.Request.Headers)
{
logMessage.AppendLine($"{header.Key}: {header.Value}");
}
logMessage.AppendLine($"Request Body: {body}");
logMessage.AppendLine($"Response Body: {responseBody}");
logMessage.AppendLine(new string('-', 80));
await File.AppendAllTextAsync(filePath, logMessage.ToString());
}
}
}
}
}

View File

@@ -0,0 +1,111 @@
using System.Collections.Generic;
namespace SHK3CloudWebAPI
{
public static class WarehouseMapper
{
// 定义一个字典存储 whCode 和 FNumber 的映射关系
//2025年修改原本是 12234-XMBT01 有对应关系 后来移除掉了 太多地方引用过,所以直接修改了映射关系
private static readonly Dictionary<string, string> whCodeToFNumberMap = new Dictionary<string, string>
{
{ "3655708-XMBT01", "XMBT01" },
{ "3655708-XMBT02", "XMBT02" },
{ "3655708-XMBT03", "XMBT03" },
{ "3655708-XMBT04", "XMBT04" },
{ "3655708-XMBT05", "XMBT05" },
{ "3655708-XMBT06", "XMBT06" },
{ "3655708-XMBT07", "XMBT07" },
{ "3655708-XMBT08", "XMBT08" },
{ "3655708-XMBT09", "XMBT09" },
{ "3655708-XMBT10", "XMBT10" },
{ "3655708-XMBT11", "XMBT11" },
{ "3655708-XMBT12", "XMBT12" },
{ "3655708-XMBT13", "XMBT13" },
{ "3655708-XMBT14", "XMBT14" },
{ "3655708-XMBT15", "XMBT15" },
{ "3655708-XMBT16", "XMBT16" },
{ "3655708-XMBT17", "XMBT17" },
{ "3655708-XMBT18", "XMBT18" },
{ "3655708-XMBT19", "XMBT19" },
{ "3655708-XMBT20", "XMBT20" },
{ "3655708-XMBT21", "XMBT21" },
{ "3655708-XMBT22", "XMBT22" },
{ "3655708-XMBT23", "XMBT23" },
{ "3655708-XMBT24", "XMBT24" },
{ "3655708-XMBT25", "XMBT25" },
{ "3655708-XMBT26", "XMBT26" },
{ "3655708-XMBT27", "XMBT27" },
{ "3655708-XMBT28", "XMBT28" },
{ "3655708-XMBT29", "XMBT29" },
{ "3655708-XMBT30", "XMBT30" },
{ "3655708-XMBT31", "XMBT31" },
{ "3655708-XMBT32", "XMBT32" },
{ "3655708-XMBT33", "XMBT33" },
{ "3655708-XMBT34", "XMBT34" },
{ "3655708-XMBT35", "XMBT35" },
{ "3655708-XMBT36", "XMBT36" },
{ "3655708-XMBT37", "XMBT37" },
{ "3655708-XMBT38", "XMBT38" },
{ "3655708-XMBT39", "XMBT39" },
{ "3655708-XMBT40", "XMBT40" },
{ "3655708-XMBT41", "XMBT41" },
{ "3655708-XMBT42", "XMBT42" },
{ "3655708-XMBT43", "XMBT43" },
{ "3655708-XMBT44", "XMBT44" },
{ "3655708-XMBT45", "XMBT45" },
{ "3655708-XMBT46", "XMBT46" },
{ "3655708-XMBT47", "XMBT47" },
{ "3655708-XMBT48", "XMBT48" },
{ "3655708-XMBT49", "XMBT49" },
{ "3655708-XMBT50", "XMBT50" },
{ "3655708-XMBT51", "XMBT51" },
{ "3655708-XMBT52", "XMBT52" },
{ "3655708-XMBT53", "XMBT53" },
{ "3655708-XMBT54", "XMBT54" },
{ "3655708-XMBT55", "XMBT55" },
{ "3655708-XMBT56", "XMBT56" },
{ "3655708-XMBT57", "XMBT57" },
{ "3655708-XMBT58", "XMBT58" },
{ "3655708-XMBT59", "XMBT59" },
{ "3655708-XMBT60", "XMBT60" },
{ "3655708-XMBT61", "XMBT61" },
{ "3655708-XMBT62", "XMBT62" },
{ "3655708-XMBT63", "XMBT63" },
{ "3655708-XMBT64", "XMBT64" },
{ "3655708-XMBT65", "XMBT65" },
{ "3655708-XMBT66", "XMBT66" },
{ "3655708-XMBT67", "XMBT67" },
{ "3655708-XMBT68", "XMBT68" },
{ "3655708-XMBT69", "XMBT69" },
{ "3655708-XMBT70", "XMBT70" },
{ "3655708-XMBT71", "XMBT71" },
{ "3655708-XMBT72", "XMBT72" },
{ "3655708-XMBT73", "XMBT73" },
{ "3655708-XMBT74", "XMBT74" },
{ "3655708-XMBT75", "XMBT75" },
{ "3655708-XMBT76", "XMBT76" },
{ "3655708-XMBT77", "XMBT77" },
// 添加其他映射关系
{ "2974108-BJ01", "2974108-BJ01" },
{ "2974108-BJ03", "CK002" },
{ "2974108-BJ02", "CK028" }
};
/// <summary>
/// 根据 whCode 获取对应的 FNumber
/// </summary>
/// <param name="whCode">传入的仓库编码</param>
/// <returns>返回对应的 FNumber如果找不到返回 null 或者一个默认值</returns>
public static string? GetFNumber(string? whCode)
{
if (whCode == null) return null;
// 从字典中查找,如果找不到可以返回一个默认值
return whCodeToFNumberMap.TryGetValue(whCode, out var fNumber) ? fNumber : null;
}
}
}

View File

@@ -0,0 +1,355 @@
using Microsoft.AspNetCore.Mvc;
using SHK3CloudWebAPI.Models;
using SHK3CloudWebAPI.Models.ERPModels;
namespace SHK3CloudWebAPI.Controllers
{
/// <summary>
/// 出入库业务
/// </summary>
[ApiController]
[Route("3pl-wms-adapter/2bApi")]
public class StkController : ControllerBase
{
/// <summary>
/// 入库接口(采购入库、销售退货、分步式调入)
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("notifyInboundTransaction")]
public ActionResult<BillOutput> NotifyInboundTransaction(InParameter parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
#region ERP单据上有没有
dynamic receive = BillQueryService.ReceiveBillQuery("FBillNo='" + parameter.inboundNo + "'");
if (receive.Count > 0)
{
//收料通知
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "Receive";
erpBillDatas.Add(erpBillData);
}
dynamic returnNotice = BillQueryService.ReturnNoticeBillQuery("FBillNo='" + parameter.inboundNo + "'");
if (returnNotice.Count > 0)
{
//退库通知
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "ReturnNotice";
erpBillDatas.Add(erpBillData);
}
dynamic transferOut = BillQueryService.TransferOutBillQuery("FBillNo='" + parameter.inboundNo + "'");
if (transferOut.Count > 0)
{
//分布式调出
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "TransferOut";
erpBillDatas.Add(erpBillData);
}
#endregion
if (erpBillDatas.Count > 1)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.inboundNo + "在ERP中不唯一"
};
}
else if (erpBillDatas.Count == 0)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.inboundNo + "在ERP中不存在"
};
}
else
{
if (erpBillDatas[0].BillType == "Receive")
{
billOutput = InService.InStock(parameter);
}
else if (erpBillDatas[0].BillType == "ReturnNotice")
{
billOutput = InService.ReturnStock(parameter);
}
else if (erpBillDatas[0].BillType == "TransferOut")
{
billOutput = InService.TransferIn(parameter);
}
}
return billOutput;
}
///// <summary>
///// 出库接口(销售出库、采购退料、分步式调出)
///// </summary>
///// <param name="parameter"></param>
///// <returns></returns>
//[ApiExplorerSettings(GroupName = "接口")]
//[HttpGet("XXXX")]
//public string XXXX()
//{
// return "11";
//}
/// <summary>
/// 出库接口(销售出库、采购退料、分步式调出)
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("notifyOutboundTransaction")]
public ActionResult<BillOutput> notifyOutboundTransaction([FromBody] OutParameter parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
#region ERP单据上有没有
dynamic deliveryNotice = BillQueryService.DeliveryNoticeBillQuery("FBillNo='" + parameter.outboundNo + "'");
if (deliveryNotice.Count > 0)
{
//发货通知
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "DeliveryNotice";
erpBillDatas.Add(erpBillData);
}
dynamic mrapp = BillQueryService.MrappBillQuery("FBillNo='" + parameter.outboundNo + "'");
if (mrapp.Count > 0)
{
//退料申请
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "Mrapp";
erpBillDatas.Add(erpBillData);
}
dynamic transferApply = BillQueryService.TransferApplyBillQuery("FBillNo='" + parameter.outboundNo + "'");
if (transferApply.Count > 0)
{
//调拨申请
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "TransferApply";
erpBillDatas.Add(erpBillData);
}
#endregion
if (erpBillDatas.Count > 1)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.outboundNo + "在ERP中不唯一"
};
}
else if (erpBillDatas.Count == 0)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.outboundNo + "在ERP中不存在"
};
}
else
{
if (erpBillDatas[0].BillType == "DeliveryNotice")
{
billOutput = OutService.OutStock(parameter);
}
else if (erpBillDatas[0].BillType == "Mrapp")
{
billOutput = OutService.PurMRB(parameter);
}
else if (erpBillDatas[0].BillType == "TransferApply")
{
billOutput = OutService.TRANSFEROUT(parameter);
}
}
return billOutput;
}
/// <summary>
/// 入库反馈接口
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("notifyOrderCreated")]
public ActionResult<BillOutput> notifyOrderCreated(InFinsihParameter parameter)
{
var billOutput = new BillOutput();
billOutput = new BillOutput
{
result = 0,
errorCode = "",
errorMsg = "未知的wms类型 inbound_order3655708-XMBT13"
};
return billOutput;
}
/// <summary>
/// 出库反馈接口
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("notifyInboundFinsih")]
public ActionResult<BillOutput> notifyInboundFinsih(OutFinsihParameter parameter)
{
var billOutput = new BillOutput();
billOutput = new BillOutput
{
result = 1,
errorCode = "",
errorMsg = ""
};
return billOutput;
}
/// <summary>
/// 2c销售退货接口
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("ReturnNotice")]
public ActionResult<BillOutput> ReturnNotice(InB2CParameter parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
#region ERP单据上有没有
ReturnNoticeBill returnNotice = BillQueryService.ReturnNoticeBillQuery("FBillNo='" + parameter.inBoundOrderConfirm[0].orderCode + "'");
if (returnNotice != null)
{
//退库通知
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "ReturnNotice";
erpBillDatas.Add(erpBillData);
}
#endregion
if (erpBillDatas.Count > 1)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.inBoundOrderConfirm[0].orderCode + "在ERP中不唯一"
};
}
else if (erpBillDatas.Count == 0)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.inBoundOrderConfirm[0].orderCode + "在ERP中不存在"
};
}
else
{
if (erpBillDatas[0].BillType == "ReturnNotice")
{
billOutput = InService.ReturnStock2c(parameter);
}
}
return billOutput;
}
/// <summary>
/// 2c销售出库接口
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("DeliveryNotice")]
public ActionResult<BillOutput> DeliveryNotice(OutB2CParameter parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
#region ERP单据上有没有
List<DeliveryNoticeBill> deliveryNotice = BillQueryService.DeliveryNoticeBillQuery("FBillNo='" + parameter.outBoundConfirm[0].orderCode + "'");
if (deliveryNotice.Count > 0)
{
//发货通知
ErpBillData erpBillData = new ErpBillData();
erpBillData.BillType = "DeliveryNotice";
erpBillDatas.Add(erpBillData);
}
#endregion
if (erpBillDatas.Count > 1)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.outBoundConfirm[0].orderCode + "在ERP中不唯一"
};
}
else if (erpBillDatas.Count == 0)
{
billOutput = new BillOutput
{
result = 0,
errorCode = "999",
errorMsg = "单据号" + parameter.outBoundConfirm[0].orderCode + "在ERP中不存在"
};
}
else
{
if (erpBillDatas[0].BillType == "DeliveryNotice")
{
billOutput = OutService.OutStock2c(parameter);
}
}
return billOutput;
}
}
}

View File

@@ -0,0 +1,108 @@
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SHK3CloudWebAPI;
using SHK3CloudWebAPI.Common;
using SHK3CloudWebAPI.Models;
using SHK3CloudWebAPI.Models.ERPModels;
using System.Diagnostics.Eventing.Reader;
namespace SHB2CK3CloudWebAPI.Controllers
{
[ApiController]
[Route("[controller]")]
public class XmlToSHController : ControllerBase
{
/// <summary>
/// E27采购单同步(采购订单)
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("PurchaseOrderData")]
[Consumes("application/json")]
[Produces("application/json")]
public ActionResult<BillOutput> PurchaseOrderData([FromBody] PurchaseOrderData parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
billOutput = InService.PurchaseOrder(parameter);
return billOutput;
}
/// <summary>
/// E01 入库通知单(收料通知单 | 采购入库单)
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("InboundOrders")]
[Consumes("application/json")]
[Produces("application/json")]
public ActionResult<BillOutput> InboundOrders([FromBody] InboundOrders parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
if (parameter.InboundOrder.PoType == "10")//采购入库
{
billOutput = InService.ReceiveBill(parameter);
}
if (parameter.InboundOrder.PoType == "24")//采退差异
{
billOutput = InService.InStock3PP(parameter);
}
return billOutput;
}
/// <summary>
/// E03 采退出库通知单(退料申请单)
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("OutboundOrders")]
[Consumes("application/json")]
[Produces("application/json")]
public ActionResult<BillOutput> OutboundOrders([FromBody] OutboundOrders parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
billOutput = InService.MRAPP(parameter);
return billOutput;
}
/// <summary>
/// 物料同步接口
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
[ApiExplorerSettings(GroupName = "接口")]
[HttpPost("MaterialData")]
[Consumes("application/json")]
[Produces("application/json")]
public ActionResult<BillOutput> MaterialData([FromBody] ProductMasterDataParameter parameter)
{
var billOutput = new BillOutput();
List<ErpBillData> erpBillDatas = new List<ErpBillData>();
string outJson = JsonConvert.SerializeObject(parameter);
List<BD_MATERIALBILL> deliveryNotice = BillQueryService.BD_MATERIALBillQuery("FNumber='" + parameter.Variants[0].PartNumber + "' and FUSEORGID.FNumber='100'");
if (deliveryNotice.Count>0)
{
billOutput = InService.BD_MATERIAL(parameter, deliveryNotice[0].FMATERIALID, deliveryNotice[0].FDOCUMENTSTATUS, "100");
}
else
{
billOutput = InService.BD_MATERIAL(parameter, "0", "", "100");
}
return billOutput;
}
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI
{
/// <summary>
/// 返回参数
/// </summary>
public class BillOutput
{
/// <summary>
/// 数据接收状态0失败1单据创建成功2待回调告知单据创建完成
/// </summary>
public int result { get; set; }
/// <summary>
/// 错误编码
/// </summary>
public string errorCode { get; set; }
/// <summary>
/// 错误原因
/// </summary>
public string errorMsg { get; set; }
}
}

View File

@@ -0,0 +1,37 @@
namespace SHK3CloudWebAPI
{
/// <summary>
/// 查询
/// </summary>
public class BillQuery
{
/// <summary>
///
/// </summary>
public string FormId { get; set; }
/// <summary>
///
/// </summary>
public int TopRowCount { get; set; }
/// <summary>
///
/// </summary>
public int Limit { get; set; }
/// <summary>
///
/// </summary>
public int StartRow { get; set; }
/// <summary>
///
/// </summary>
public string FilterString { get; set; }
/// <summary>
///
/// </summary>
public string OrderString { get; set; }
/// <summary>
///
/// </summary>
public string FieldKeys { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
namespace SHK3CloudWebAPI.Models
{
public class DeliveryNoticeBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public string FDeliveryOrgIDNumber { get; set; }
public string FCustomerIDNumber { get; set; }
public int FEntity_FEntryId { get; set; }
public int FEntity_FSEQ { get; set; }
public string FMaterialIdNumber { get; set; }
public string FUnitIdFNumber { get; set; }
public bool F_UNW_IsSNTrue { get; set; }
public string FLABEL { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class BD_MATERIALBILL
{
public string FNumber { get; set; }
public string FMATERIALID { get; set; }
public string FDOCUMENTSTATUS { get; set; }
}
}

View File

@@ -0,0 +1,25 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class MrappBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public int FEntity_FEntryId { get; set; }
public int FEntity_FSEQ { get; set; }
public string FPURCHASEORGIDNumber { get; set; }
public string FSUPPLIERIDNumber { get; set; }
public string FMATERIALIDNumber { get; set; }
public string FUnitIDNumber { get; set; }
public string FORDERNO { get; set; }
public int FPOORDERENTRYID { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class PurchaseOrderBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public int FDetailEntity_FEntryId { get; set; }
//public int FDetailEntity_FSEQ { get; set; }
public string FMaterialIdNumber { get; set; }
}
}

View File

@@ -0,0 +1,25 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class ReceiveBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public string FStockOrgIdNumber { get; set; }
public string FSupplierIdNumber { get; set; }
public string FOrderBillNo { get; set; }
public int FPOORDERENTRYID { get; set; }
public int FDetailEntity_FEntryId { get; set; }
public int FDetailEntity_FSEQ { get; set; }
public string FMaterialIdNumber { get; set; }
public string FUnitIdFNumber { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class ReturnNoticeBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public string FOwnerNumber { get; set; }
public string FSaleOrgIdNumber { get; set; }
public string FRetcustIdNumber { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class ReturnNoticeBillDets
{
public int? FID { get; set; }
public string? FBillNo { get; set; }
public string? FOwnerNumber { get; set; }
public string? FSaleOrgIdNumber { get; set; }
public string? FRetcustIdNumber { get; set; }
public string? FMaterialIdNumber { get; set; }
public string? FUnitIDNumber { get; set; }
public int? FEntity_FEntryId { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class SerialMainFileBill
{
public string FNUMBER { get; set; }
public string FIMEI1 { get; set; }
public string FIMEI2 { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class TransferApplyBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public int FEntity_FEntryId { get; set; }
public string FAPPORGIDNumber { get; set; }
public string FMATERIALIDNumber { get; set; }
public string FUNITIDNumber { get; set; }
public string FStockInIdNumber { get; set; }
public string FSrcStockIDNumber { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
namespace SHK3CloudWebAPI.Models.ERPModels
{
public class TransferOutBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public int FSTKTRSOUTENTRY_FEntryId { get; set; }
public string FStockOrgIDNumber { get; set; }
public string FStockInOrgIDNumber { get; set; }
public string FMaterialIDNumber { get; set; }
public string FSrcStockIDNumber { get; set; }
public string FUnitIDNumber { get; set; }
public string FVESTONWAY { get; set; }
public string FDestStockStatusIDNumber { get; set; }
public string FSrcBillNo { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace SHK3CloudWebAPI.Models
{
public class ErpBillData
{
public string BillType { get; set; }
}
}

View File

@@ -0,0 +1,312 @@
namespace SHK3CloudWebAPI.Models
{
/// <summary>
/// 入库单批量反馈
/// </summary>
public class InB2CParameter
{
/// <summary>
/// 退货订单入库反馈信息
/// </summary>
public List<InBoundOrderConfirmItem> inBoundOrderConfirm { get; set; }
}
/// <summary>
/// 退货订单入库反馈库存明细
/// </summary>
public class InBoundInvLineConfirmItem
{
/// <summary>
/// 实际数量
/// </summary>
public decimal qtyActual { get; set; }
/// <summary>
///
/// </summary>
public string origin { get; set; }
/// <summary>
///
/// </summary>
public string invStatus { get; set; }
/// <summary>
///
/// </summary>
public string isSellable { get; set; }
/// <summary>
/// 批次号
/// </summary>
public string batchNo { get; set; }
/// <summary>
/// 入库批次号
/// </summary>
public string inboundBatchNo { get; set; }
/// <summary>
/// 生产日期
/// </summary>
public DateTime? productDate { get; set; }
/// <summary>
/// 过期日期
/// </summary>
public DateTime? expireDate { get; set; }
/// <summary>
///
/// </summary>
public string extMemo { get; set; }
/// <summary>
///
/// </summary>
public string isIqc { get; set; }
/// <summary>
/// SN信息
/// </summary>
public List<SkuSnInfoItem> skuSnInfo { get; set; }
/// <summary>
///
/// </summary>
public List<SkuDefectInfoItem> skuDefectInfo { get; set; }
/// <summary>
///
/// </summary>
public string subpackageDate { get; set; }
}
/// <summary>
/// 退货订单入库反馈明细信息
/// </summary>
public class InBoundLineConfirmItem
{
/// <summary>
/// 行号
/// </summary>
public string lineNo { get; set; }
/// <summary>
///
/// </summary>
public string storeCode { get; set; }
/// <summary>
/// 仓库code
/// </summary>
public string warehouseCode { get; set; }
/// <summary>
///
/// </summary>
public string skuCode { get; set; }
/// <summary>
///
/// </summary>
public string extCode { get; set; }
/// <summary>
/// erp物料编码
/// </summary>
public string upc { get; set; }
/// <summary>
///
/// </summary>
public string extCode3 { get; set; }
/// <summary>
///
/// </summary>
public string barCode { get; set; }
/// <summary>
///
/// </summary>
public string color { get; set; }
/// <summary>
///
/// </summary>
public string size { get; set; }
/// <summary>
///
/// </summary>
public string supplierCode { get; set; }
/// <summary>
///
/// </summary>
public string comboCode { get; set; }
/// <summary>
///
/// </summary>
public string isGift { get; set; }
/// <summary>
///
/// </summary>
public string cartonNo { get; set; }
/// <summary>
/// 计划数量
/// </summary>
public decimal qtyPlan { get; set; }
/// <summary>
/// 退货订单入库反馈库存明细
/// </summary>
public List<InBoundInvLineConfirmItem> inBoundInvLineConfirm { get; set; }
/// <summary>
///
/// </summary>
public int length { get; set; }
/// <summary>
///
/// </summary>
public int width { get; set; }
/// <summary>
///
/// </summary>
public int height { get; set; }
/// <summary>
///
/// </summary>
public int weight { get; set; }
/// <summary>
///
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
}
/// <summary>
/// 退货订单入库反馈信息
/// </summary>
public class InBoundOrderConfirmItem
{
/// <summary>
///
/// </summary>
public string orderCode { get; set; }
/// <summary>
///
/// </summary>
public string preOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string platformOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string platformRaCode { get; set; }
/// <summary>
///
/// </summary>
public string preSourceOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string preSourcePlatformOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string preSourceWmsOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string customerOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string storeCode { get; set; }
/// <summary>
///
/// </summary>
public string platformSource { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string customerCode { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string whCode { get; set; }
/// <summary>
///
/// </summary>
public string poType { get; set; }
/// <summary>
///
/// </summary>
public string extOrderType { get; set; }
/// <summary>
///
/// </summary>
public string fromLocation { get; set; }
/// <summary>
///
/// </summary>
public string toLocation { get; set; }
/// <summary>
/// 实际入库时间
/// </summary>
public string inboundTime { get; set; }
/// <summary>
///
/// </summary>
public string packRegistrationTime { get; set; }
/// <summary>
///
/// </summary>
public string isIqc { get; set; }
/// <summary>
///
/// </summary>
public string qualityInspectionNo { get; set; }
/// <summary>
///
/// </summary>
public int ctnPlanned { get; set; }
/// <summary>
/// 计划数量
/// </summary>
public decimal ctnActual { get; set; }
/// <summary>
/// 实际数量
/// </summary>
public decimal qtyPlanned { get; set; }
/// <summary>
///
/// </summary>
public int qtyActual { get; set; }
/// <summary>
///
/// </summary>
public int totalLine { get; set; }
/// <summary>
///
/// </summary>
public string dataSource { get; set; }
/// <summary>
///
/// </summary>
public string transCode { get; set; }
/// <summary>
///
/// </summary>
public string transNo { get; set; }
/// <summary>
///
/// </summary>
public string extMemo { get; set; }
/// <summary>
/// 退货订单入库反馈明细信息
/// </summary>
public List<InBoundLineConfirmItem> inBoundLineConfirm { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
/// <summary>
///
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public int feedbackType { get; set; }
/// <summary>
///
/// </summary>
public string @operator { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI.Models
{
/// <summary>
/// 入库反馈
/// </summary>
public class InFinsihParameter
{
/// <summary>
/// 仓库code
/// </summary>
public string? whCode { get; set; }
/// <summary>
/// ERP订单号
/// </summary>
public string? orderCode { get; set; }
/// <summary>
/// 单据类型, 5001 2C拒收退货入库,5002 采购入库,5003 仓间调入,5004 退货到仓,5006 差异调入,5007 盘点入库,5008 一步调入,5009 品质变更,6001 海关退货,6009 其他入库类型
/// </summary>
public string? preOrderType { get; set; }
}
}

View File

@@ -0,0 +1,104 @@
namespace SHK3CloudWebAPI
{
/// <summary>
/// 入库反馈库存明细
/// </summary>
public class InboundInvLineConfirmItem
{
/// <summary>
/// 实际收货数量
/// </summary>
public decimal qtyReceived { get; set; }
/// <summary>
/// 库存状态1-1良品,1-2良品不可售样机,2-1残次品-不可翻新A轻微盒损机器无问题,2-2残次品-不可翻新B盒损严重机器无问题,
/// 2-3残次品-不可翻新C盒损严重机器有使用痕迹,2-4残次品-不可翻新D机器有问题,2-5退货机,3串货回购机
/// </summary>
public string? invStatus { get; set; }
/// <summary>
/// 入库SN号信息
/// </summary>
public List<string>? sns { get; set; }
}
/// <summary>
/// 入库反馈库存明细
/// </summary>
public class InboundInvLineConfirms
{
/// <summary>
/// 入库反馈库存明细
/// </summary>
public List<InboundInvLineConfirmItem>? inboundInvLineConfirm { get; set; }
}
/// <summary>
/// 入库反馈行信息
/// </summary>
public class InboundConfirmLineItem
{
/// <summary>
/// MPN
/// </summary>
public string? extCode { get; set; }
/// <summary>
/// 行号
/// </summary>
public string? lineNo { get; set; }
/// <summary>
/// 入库反馈库存明细
/// </summary>
public InboundInvLineConfirms? inboundInvLineConfirms { get; set; }
}
/// <summary>
/// 入库反馈行信息
/// </summary>
public class InboundConfirmLines
{
/// <summary>
///
/// </summary>
public List<InboundConfirmLineItem>? inboundConfirmLine { get; set; }
}
/// <summary>
/// wms反馈erp入库单已入库请求
/// </summary>
public class InParameter
{
/// <summary>
/// 消息ID
/// </summary>
public string? uuid { get; set; }
/// <summary>
/// 数据来源
/// </summary>
public string? dataSource { get; set; }
/// <summary>
/// erp单号
/// </summary>
public string? inboundNo { get; set; }
/// <summary>
/// 货主
/// </summary>
public string? owner { get; set; }
/// <summary>
/// 收货地编码
/// </summary>
public string? toLocation { get; set; }
/// <summary>
/// 实际入库时间
/// </summary>
public DateTime? inboundTime { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string? whCode { get; set; }
/// <summary>
/// 入库反馈行信息
/// </summary>
public InboundConfirmLines? inboundConfirmLines { get; set; }
}
}

View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace SHK3CloudWebAPI.Models
{
public class SnLines
{
[XmlText]
public string? Sn { get; set; }
}
[XmlRoot("InboundOrders")]
public class InboundOrders
{
[XmlElement("sourceMarkCode")]
public string? SourceMarkCode { get; set; }
[XmlElement("msgId")]
public string? MsgId { get; set; }
[XmlElement("InboundOrder")]
public InboundOrder? InboundOrder { get; set; }
}
public class InboundOrder
{
[XmlElement("UUID")]
public string? Uuid { get; set; }
[XmlElement("InboundNo")]
public string? InboundNo { get; set; }
[XmlElement("supplier")]
public string? Supplier { get; set; }
[XmlElement("PreOrderType")]
public string? PreOrderType { get; set; }
[XmlElement("PoType")]
public string? PoType { get; set; }
[XmlElement("Owner")]
public string? Owner { get; set; }
[XmlElement("FromLocation")]
public string? FromLocation { get; set; }
[XmlElement("WhCode")]
public string? WhCode { get; set; }
[XmlElement("PlanQuantity")]
public int? PlanQuantity { get; set; }
[XmlElement("PlanCartonQty")]
public int? PlanCartonQty { get; set; }
// 多行商品列表
[XmlElement("InboundOrderLines")]
public InboundOrderLinese? InboundOrderLines { get; set; }
}
public class InboundOrderLinese
{
[XmlElement("InboundOrderLine")]
public List<InboundOrderLinee> InboundOrderLinee { get; set; }
}
public class InboundOrderLinee
{
[XmlElement("Upc")]
public string? Upc { get; set; }
[XmlElement("Mpn")]
public string? Mpn { get; set; }
[XmlElement("Qty")]
public string? Qty { get; set; }
[XmlElement("LineNo")]
public string? LineNo { get; set; }
[XmlElement("CartonNo")]
public string? CartonNo { get; set; }
[XmlArray("SnLines")]
[XmlArrayItem("Sn")]
public List<SnLines>? SnLines { get; set; }
[XmlElement("FSBillId")]
public string? FSBillId { get; set; }
[XmlElement("FSId")]
public string? FSId { get; set; }
[XmlElement("EcPoCode")]
public string? EcPoCode { get; set; }
}
}

View File

@@ -0,0 +1,856 @@
namespace SHK3CloudWebAPI.Models
{
/// <summary>
///
/// </summary>
public class OutB2CParameter
{
/// <summary>
/// 销售订单出库反馈
/// </summary>
public List<OutBoundConfirmItem> outBoundConfirm { get; set; }
}
public class SkuDefectInfos1Item
{
/// <summary>
///
/// </summary>
public string defectWareBarcode { get; set; }
/// <summary>
///
/// </summary>
public string defectSource { get; set; }
/// <summary>
///
/// </summary>
public string defectType { get; set; }
/// <summary>
///
/// </summary>
public string defectReasons { get; set; }
}
public class SkuSnInfo1Item
{
/// <summary>
///
/// </summary>
public string sn { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
}
public class OutBoundPackagerLineItem
{
/// <summary>
///
/// </summary>
public string storeCode { get; set; }
/// <summary>
///
/// </summary>
public string lineNo { get; set; }
/// <summary>
///
/// </summary>
public string warehouseCode { get; set; }
/// <summary>
///
/// </summary>
public string skuCode { get; set; }
/// <summary>
///
/// </summary>
public string extCode { get; set; }
/// <summary>
///
/// </summary>
public string upc { get; set; }
/// <summary>
///
/// </summary>
public string extCode3 { get; set; }
/// <summary>
///
/// </summary>
public string barCode { get; set; }
/// <summary>
///
/// </summary>
public string preOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string skuName { get; set; }
/// <summary>
///
/// </summary>
public int unitPrice { get; set; }
/// <summary>
///
/// </summary>
public int actualPrice { get; set; }
/// <summary>
///
/// </summary>
public int qty { get; set; }
/// <summary>
///
/// </summary>
public int amountBfDiscount { get; set; }
/// <summary>
///
/// </summary>
public int lineAmt { get; set; }
/// <summary>
///
/// </summary>
public string ownerCode { get; set; }
/// <summary>
///
/// </summary>
public string invStatus { get; set; }
/// <summary>
///
/// </summary>
public string batchNo { get; set; }
/// <summary>
///
/// </summary>
public string inboundBatchNo { get; set; }
/// <summary>
///
/// </summary>
public List<SkuDefectInfos1Item> skuDefectInfos1 { get; set; }
/// <summary>
///
/// </summary>
public List<SkuSnInfo1Item> skuSnInfo1 { get; set; }
/// <summary>
///
/// </summary>
public int isCommon { get; set; }
/// <summary>
///
/// </summary>
public string productDate { get; set; }
/// <summary>
///
/// </summary>
public string expireDate { get; set; }
/// <summary>
///
/// </summary>
public string color { get; set; }
/// <summary>
///
/// </summary>
public string size { get; set; }
/// <summary>
///
/// </summary>
public string supplierCode { get; set; }
/// <summary>
///
/// </summary>
public string comboCode { get; set; }
/// <summary>
///
/// </summary>
public string origin { get; set; }
/// <summary>
///
/// </summary>
public string isGift { get; set; }
/// <summary>
///
/// </summary>
public string outboundItemLineNo { get; set; }
/// <summary>
///
/// </summary>
public int planQty { get; set; }
/// <summary>
///
/// </summary>
public int actualQty { get; set; }
/// <summary>
///
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
/// <summary>
///
/// </summary>
public string platformLineNo { get; set; }
/// <summary>
///
/// </summary>
public string subpackageDate { get; set; }
}
public class OutboundPackageItem
{
/// <summary>
///
/// </summary>
public string transCode { get; set; }
/// <summary>
///
/// </summary>
public string transName { get; set; }
/// <summary>
///
/// </summary>
public string trackingNumber { get; set; }
/// <summary>
///
/// </summary>
public int length { get; set; }
/// <summary>
///
/// </summary>
public int width { get; set; }
/// <summary>
///
/// </summary>
public int height { get; set; }
/// <summary>
///
/// </summary>
public int weight { get; set; }
/// <summary>
///
/// </summary>
public int volume { get; set; }
/// <summary>
///
/// </summary>
public string consumablesUpc { get; set; }
/// <summary>
///
/// </summary>
public int consumablesWeight { get; set; }
/// <summary>
///
/// </summary>
public string outboundBoxCode { get; set; }
/// <summary>
///
/// </summary>
public string cartonType { get; set; }
/// <summary>
///
/// </summary>
public List<OutBoundPackagerLineItem> outBoundPackagerLine { get; set; }
}
public class Receiver
{
/// <summary>
///
/// </summary>
public string name { get; set; }
/// <summary>
///
/// </summary>
public string otherName { get; set; }
/// <summary>
///
/// </summary>
public string moblie { get; set; }
/// <summary>
///
/// </summary>
public string telephone { get; set; }
/// <summary>
///
/// </summary>
public string country { get; set; }
/// <summary>
///
/// </summary>
public string province { get; set; }
/// <summary>
///
/// </summary>
public string province1 { get; set; }
/// <summary>
///
/// </summary>
public string city { get; set; }
/// <summary>
///
/// </summary>
public string city1 { get; set; }
/// <summary>
///
/// </summary>
public string district { get; set; }
/// <summary>
///
/// </summary>
public string district1 { get; set; }
/// <summary>
///
/// </summary>
public string town { get; set; }
/// <summary>
///
/// </summary>
public string town1 { get; set; }
/// <summary>
///
/// </summary>
public string address { get; set; }
/// <summary>
///
/// </summary>
public string address1 { get; set; }
/// <summary>
///
/// </summary>
public string zipcode { get; set; }
/// <summary>
///
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
}
public class Sender
{
/// <summary>
///
/// </summary>
public string name { get; set; }
/// <summary>
///
/// </summary>
public string otherName { get; set; }
/// <summary>
///
/// </summary>
public string mobile { get; set; }
/// <summary>
///
/// </summary>
public string telephone { get; set; }
/// <summary>
/// 中国
/// </summary>
public string country { get; set; }
/// <summary>
/// 河南省
/// </summary>
public string province { get; set; }
/// <summary>
///
/// </summary>
public string province1 { get; set; }
/// <summary>
///
/// </summary>
public string city { get; set; }
/// <summary>
///
/// </summary>
public string city1 { get; set; }
/// <summary>
/// 二七区
/// </summary>
public string district { get; set; }
/// <summary>
///
/// </summary>
public string district1 { get; set; }
/// <summary>
/// 新集镇
/// </summary>
public string town { get; set; }
/// <summary>
///
/// </summary>
public string town1 { get; set; }
/// <summary>
/// 郑州大学
/// </summary>
public string address { get; set; }
/// <summary>
///
/// </summary>
public string address1 { get; set; }
/// <summary>
///
/// </summary>
public string zipcode { get; set; }
}
public class SkuDefectInfoItem
{
/// <summary>
///
/// </summary>
public string defectWareBarcode { get; set; }
/// <summary>
///
/// </summary>
public string defectSource { get; set; }
/// <summary>
///
/// </summary>
public string defectType { get; set; }
/// <summary>
///
/// </summary>
public string defectReasons { get; set; }
}
/// <summary>
/// SN信息
/// </summary>
public class SkuSnInfoItem
{
/// <summary>
/// SN号
/// </summary>
public string sn { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
}
public class RfidInfoItem
{
/// <summary>
///
/// </summary>
public string rfid { get; set; }
/// <summary>
///
/// </summary>
public string tid { get; set; }
/// <summary>
///
/// </summary>
public string qrCode { get; set; }
}
/// <summary>
/// 销售订单反馈明细
/// </summary>
public class OutBoundLineConfirmItem
{
/// <summary>
///
/// </summary>
public string storeCode { get; set; }
/// <summary>
///
/// </summary>
public string lineNo { get; set; }
/// <summary>
/// 仓库code
/// </summary>
public string warehouseCode { get; set; }
/// <summary>
///
/// </summary>
public string skuCode { get; set; }
/// <summary>
///
/// </summary>
public string extCode { get; set; }
/// <summary>
/// 传erp物料编码
/// </summary>
public string upc { get; set; }
/// <summary>
///
/// </summary>
public string extCode3 { get; set; }
/// <summary>
///
/// </summary>
public string barCode { get; set; }
/// <summary>
///
/// </summary>
public string preOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string skuName { get; set; }
/// <summary>
/// 折前单价
/// </summary>
public decimal unitPrice { get; set; }
/// <summary>
/// 实际购买单价(折后)
/// </summary>
public decimal actualPrice { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal qty { get; set; }
/// <summary>
/// 折前行总价
/// </summary>
public decimal amountBfDiscount { get; set; }
/// <summary>
/// 折后行总金额
/// </summary>
public decimal lineAmt { get; set; }
/// <summary>
/// 货主Code
/// </summary>
public string ownerCode { get; set; }
/// <summary>
///
/// </summary>
public string invStatus { get; set; }
/// <summary>
/// 批次号
/// </summary>
public string batchNo { get; set; }
/// <summary>
/// 入库批次号
/// </summary>
public string inboundBatchNo { get; set; }
/// <summary>
/// 残次信息
/// </summary>
public List<SkuDefectInfoItem> skuDefectInfo { get; set; }
/// <summary>
/// SN信息
/// </summary>
public List<SkuSnInfoItem> skuSnInfo { get; set; }
/// <summary>
/// 商品RFID信息
/// </summary>
public List<RfidInfoItem> rfidInfo { get; set; }
/// <summary>
///
/// </summary>
public int isCommon { get; set; }
/// <summary>
/// 生产日期
/// </summary>
public DateTime? productDate { get; set; }
/// <summary>
/// 过期日期
/// </summary>
public DateTime? expireDate { get; set; }
/// <summary>
/// 颜色
/// </summary>
public string color { get; set; }
/// <summary>
/// 尺码
/// </summary>
public string size { get; set; }
/// <summary>
///
/// </summary>
public string supplierCode { get; set; }
/// <summary>
///
/// </summary>
public string comboCode { get; set; }
/// <summary>
///
/// </summary>
public string origin { get; set; }
/// <summary>
/// 是否是赠品
/// </summary>
public string isGift { get; set; }
/// <summary>
///
/// </summary>
public string outboundBoxCode { get; set; }
/// <summary>
///
/// </summary>
public string outboundItemLineNo { get; set; }
/// <summary>
/// 计划数量
/// </summary>
public decimal planQty { get; set; }
/// <summary>
/// 实际出库数量
/// </summary>
public decimal actualQty { get; set; }
/// <summary>
///
/// </summary>
public string trackingNumber { get; set; }
/// <summary>
///
/// </summary>
public string cancelType { get; set; }
/// <summary>
/// 备注
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
/// <summary>
///
/// </summary>
public string platformLineNo { get; set; }
/// <summary>
///
/// </summary>
public string customStvle { get; set; }
/// <summary>
///
/// </summary>
public string customColorlD { get; set; }
/// <summary>
///
/// </summary>
public string customSize { get; set; }
/// <summary>
///
/// </summary>
public string subpackageDate { get; set; }
/// <summary>
///
/// </summary>
public string userDef2 { get; set; }
}
public class OutBoundInvoiceLineItem
{
/// <summary>
///
/// </summary>
public string lineNo { get; set; }
/// <summary>
///
/// </summary>
public int qty { get; set; }
/// <summary>
///
/// </summary>
public int price { get; set; }
/// <summary>
///
/// </summary>
public int amount { get; set; }
/// <summary>
///
/// </summary>
public string itemCode { get; set; }
/// <summary>
///
/// </summary>
public string skuName { get; set; }
}
public class OutboundInvoiceConfirmItem
{
/// <summary>
///
/// </summary>
public string invoiceCode { get; set; }
/// <summary>
///
/// </summary>
public string invoiceDate { get; set; }
/// <summary>
///
/// </summary>
public string payer { get; set; }
/// <summary>
///
/// </summary>
public int qty { get; set; }
/// <summary>
///
/// </summary>
public int actualPrice { get; set; }
/// <summary>
///
/// </summary>
public int amt { get; set; }
/// <summary>
///
/// </summary>
public string memo { get; set; }
/// <summary>
///
/// </summary>
public string payee { get; set; }
/// <summary>
///
/// </summary>
public string drawer { get; set; }
/// <summary>
///
/// </summary>
public string company { get; set; }
/// <summary>
///
/// </summary>
public string identificationNumber { get; set; }
/// <summary>
///
/// </summary>
public string address { get; set; }
/// <summary>
///
/// </summary>
public string telephone { get; set; }
/// <summary>
///
/// </summary>
public List<OutBoundInvoiceLineItem> outBoundInvoiceLine { get; set; }
}
/// <summary>
/// 销售订单出库反馈头信息
/// </summary>
public class OutBoundConfirmItem
{
/// <summary>
/// 批次号
/// </summary>
public string batchNumber { get; set; }
/// <summary>
/// OMS订单号(唯一对接标识)放erp单号
/// </summary>
public string orderCode { get; set; }
/// <summary>
/// WMS订单号
/// </summary>
public string preOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string platformOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string preOmsOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string customerOrderCode { get; set; }
/// <summary>
///
/// </summary>
public string storeCode { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string customerCode { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string whCode { get; set; }
/// <summary>
///
/// </summary>
public string extOrderType { get; set; }
/// <summary>
///
/// </summary>
public int transtimeType { get; set; }
/// <summary>
///
/// </summary>
public string expressTypeCode { get; set; }
/// <summary>
///
/// </summary>
public string specialDeliveryTypeCode { get; set; }
/// <summary>
/// 销售订单包装信息
/// </summary>
public List<OutboundPackageItem> outboundPackage { get; set; }
/// <summary>
/// 收货人信息
/// </summary>
public Receiver receiver { get; set; }
/// <summary>
/// 发件人信息
/// </summary>
public Sender sender { get; set; }
/// <summary>
/// 销售订单反馈明细
/// </summary>
public List<OutBoundLineConfirmItem> outBoundLineConfirm { get; set; }
/// <summary>
///
/// </summary>
public int wmsOdoStatus { get; set; }
/// <summary>
///
/// </summary>
public int outboundType { get; set; }
/// <summary>
///
/// </summary>
public string o2oShopCode { get; set; }
/// <summary>
///
/// </summary>
public string extStoreCode { get; set; }
/// <summary>
/// 销售订单反馈发票
/// </summary>
public List<OutboundInvoiceConfirmItem> outboundInvoiceConfirm { get; set; }
/// <summary>
///
/// </summary>
public string dataSource { get; set; }
/// <summary>
/// 出库时间
/// </summary>
public string outboundTime { get; set; }
/// <summary>
///
/// </summary>
public string remark { get; set; }
/// <summary>
///
/// </summary>
public string extProps { get; set; }
/// <summary>
///
/// </summary>
public string platformSource { get; set; }
/// <summary>
///
/// </summary>
public string orderSpecialType { get; set; }
/// <summary>
///
/// </summary>
public string @operator { get; set; }
/// <summary>
///
/// </summary>
public string version { get; set; }
/// <summary>
///
/// </summary>
public string dataStatus { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI.Models
{
/// <summary>
/// 出库反馈
/// </summary>
public class OutFinsihParameter
{
/// <summary>
/// 仓库code
/// </summary>
public string? whCode { get; set; }
/// <summary>
/// ERP订单号
/// </summary>
public string? orderCode { get; set; }
/// <summary>
/// 状态 0创单失败 1创单成功,示例值(1)
/// </summary>
public int status { get; set; }
}
}

View File

@@ -0,0 +1,76 @@
namespace SHK3CloudWebAPI
{
/// <summary>
/// 出库反馈
/// </summary>
public class OutParameter
{
/// <summary>
/// 消息ID
/// </summary>
public string? uuid { get; set; }
/// <summary>
/// ERP单号
/// </summary>
public string? outboundNo { get; set; }
/// <summary>
/// 上位系统单据类型1001 2C销售出库,1002 仓间调出,5003 仓间调入,1003 大仓分货,1004 退回工厂,1005 差异调出,1006 盘点出库,1007 礼品出库,1008 残次品处理
/// </summary>
public string? preOrderType { get; set; }
/// <summary>
/// 出库时间format: yyyy-MM-dd HH:mm:ss
/// </summary>
public string? outboundTime { get; set; }
/// <summary>
/// 预计发货时间format: yyyy-MM-dd HH:mm:ss
/// </summary>
public string? scheduleOutboundDate { get; set; }
/// <summary>
/// 货主 owner
/// </summary>
public string? owner { get; set; }
/// <summary>
/// 仓库编码 Warehouse Code
/// </summary>
public string? whCode { get; set; }
/// <summary>
/// 数据来源 区分上位系统 Data source
/// </summary>
public string? dataSource { get; set; }
/// <summary>
/// 销售订单反馈明细
/// </summary>
public List<OutboundConfirmLinesItem>? outboundConfirmLines { get; set; }
}
/// <summary>
/// 销售订单反馈明细
/// </summary>
public class OutboundConfirmLinesItem
{
/// <summary>
/// 订单行号唯一OMS order line number(Unique)
/// </summary>
public string? lineNo { get; set; }
/// <summary>
/// MPN
/// </summary>
public string? extCode { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal? qty { get; set; }
/// <summary>
/// 库存状态1-1良品,1-2良品不可售样机,2-1残次品-不可翻新A轻微盒损机器无问题,2-2残次品-不可翻新B盒损严重机器无问题,
/// 2-3残次品-不可翻新C盒损严重机器有使用痕迹,2-4残次品-不可翻新D机器有问题,2-5退货机,3串货回购机
/// </summary>
public string? invStatus { get; set; }
/// <summary>
/// 出库SN号信息
/// </summary>
public List<string>? sns { get; set; }
}
}

View File

@@ -0,0 +1,249 @@
using System.Xml.Serialization;
namespace SHK3CloudWebAPI.Models
{
public class Receiver2
{
/// <summary>
/// 收货人姓名
/// </summary>
[XmlElement("ReceiverName")]
public string? ReceiverName { get; set; }
/// <summary>
/// 收货人电话
/// </summary>
[XmlElement("ReceiverPhone")]
public string? ReceiverPhone { get; set; }
/// <summary>
/// 收货人手机号
/// </summary>
[XmlElement("ReceiverMobile")]
public string? ReceiverMobile { get; set; }
/// <summary>
/// 国家
/// </summary>
[XmlElement("Country")]
public string? Country { get; set; }
/// <summary>
/// 省份
/// </summary>
[XmlElement("Province")]
public string? Province { get; set; }
/// <summary>
/// 城市
/// </summary>
[XmlElement("City")]
public string? City { get; set; }
/// <summary>
/// 区县
/// </summary>
[XmlElement("District")]
public string? District { get; set; }
/// <summary>
/// 街道
/// </summary>
[XmlElement("Address")]
public string? Address { get; set; }
/// <summary>
/// 详细地址
/// </summary>
[XmlElement("ExtMemo")]
public string? ExtMemo { get; set; }
}
public class OutboundLine
{
/// <summary>
/// 电商采购单号
/// </summary>
[XmlElement("EcPoCode")]
public string? EcPoCode { get; set; }
/// <summary>
/// 行号
/// </summary>
[XmlElement("LineNo")]
public string? LineNo { get; set; }
/// <summary>
/// MPN编码
/// </summary>
[XmlElement("Mpn")]
public string? Mpn { get; set; }
/// <summary>
/// UPC编码
/// </summary>
[XmlElement("Upc")]
public string? Upc { get; set; }
/// <summary>
/// 实退价
/// </summary>
[XmlElement("LinePrice")]
public string? LinePrice { get; set; }
/// <summary>
/// 数量
/// </summary>
[XmlElement("Qty")]
public string? Qty { get; set; }
/// <summary>
/// 库存状态
/// </summary>
[XmlElement("InvStatus")]
public string? InvStatus { get; set; }
/// <summary>
/// 源单内码
/// </summary>
[XmlElement("FSBillId")]
public string? FSBillId { get; set; }
/// <summary>
/// 源单分录内码
/// </summary>
[XmlElement("FSId")]
public string? FSId { get; set; }
}
public class OutboundOrder
{
/// <summary>
/// 采退出库单编号
/// </summary>
[XmlElement("OutboundNo")]
public string? OutboundNo { get; set; }
/// <summary>
/// 原始采退申请编号
/// </summary>
[XmlElement("CustomerOrderCode")]
public string? CustomerOrderCode { get; set; }
/// <summary>
/// 货主T2 HQID
/// </summary>
[XmlElement("Owner")]
public string? Owner { get; set; }
/// <summary>
/// 单据类型代码(采退为固定值 21
/// </summary>
[XmlElement("OrderType")]
public string? OrderType { get; set; }
/// <summary>
/// 单据创建时间
/// </summary>
[XmlElement("OrderCreateTime")]
public string? OrderCreateRaw { get; set; }
/// <summary>
/// 下单日期,解析为 DateTime?(通过 OrderTimeRaw 转换)
/// </summary>
[XmlIgnore]
public DateTime? OrderCreateTime
{
get
{
if (DateTime.TryParse(OrderCreateRaw, out var dt))
return dt;
return null;
}
}
/// <summary>
/// 出库数量
/// </summary>
[XmlElement("Qty")]
public string? Qty { get; set; }
/// <summary>
/// 数据来源
/// </summary>
[XmlElement("DataSource")]
public string? DataSource { get; set; }
/// <summary>
/// 出库仓库编码
/// </summary>
[XmlElement("WhCode")]
public string? WhCode { get; set; }
/// <summary>
/// 出库单目标仓库编码,即供应商编码
/// </summary>
[XmlElement("OutboundTargetWhcode")]
public string? OutboundTargetWhcode { get; set; }
/// <summary>
/// 最迟发货时间格式yyyy-MM-dd HH:mm:ss
/// </summary>
[XmlElement("LatestOutboundTime")]
public string? LatestOutboundTimeRaw { get; set; }
/// <summary>
/// 下单日期,解析为 DateTime?(通过 OrderTimeRaw 转换)
/// </summary>
[XmlIgnore]
public DateTime? LatestOutboundTime
{
get
{
if (DateTime.TryParse(LatestOutboundTimeRaw, out var dt))
return dt;
return null;
}
}
/// <summary>
/// 收货人地址信息
/// </summary>
[XmlElement("Receiver")]
public Receiver2? Receiver { get; set; }
/// <summary>
/// 出库行信息
/// </summary>
[XmlElement("OutboundLines")]
public OutboundLines? OutboundLines { get; set; }
// public List<OutboundLines>? OutboundLines { get; set; }
}
public class OutboundLines
{
[XmlElement("OutboundLine")]
public List<OutboundLine>? OutboundLine { get; set; }
}
[XmlRoot("OutboundOrders")]
public class OutboundOrders
{
/// <summary>
/// 标识源系统的唯一值
/// </summary>
[XmlElement("sourceMarkCode")]
public string? SourceMarkCode { get; set; }
/// <summary>
/// 消息唯一标识
/// </summary>
[XmlElement("msgId")]
public string? MsgId { get; set; }
/// <summary>
/// 出库订单主信息
/// </summary>
[XmlElement("OutboundOrder")]
public OutboundOrder? OutboundOrder { get; set; }
}
}

View File

@@ -0,0 +1,90 @@
using Newtonsoft.Json;
namespace SHK3CloudWebAPI.Models
{
public class ProductMasterDataParameter
{
[JsonProperty("sourceMarkCode")]
public string? SourceMarkCode { get; set; }
[JsonProperty("variants")]
public List<Variant>? Variants { get; set; }
}
public class Variant
{
[JsonProperty("高mm")]
public string? HeightMm { get; set; }
[JsonProperty("SPU编码")]
public string? SpuCode { get; set; }
[JsonProperty("Part Number")]
public string? PartNumber { get; set; }
[JsonProperty("是否SN号管理")]
public string? IsSnManaged { get; set; }
//一级分类
[JsonProperty("一级分类")]
public string? CategoryLevel1 { get; set; }
[JsonProperty("sellerName")]
public string? SellerName { get; set; }
//二级分类
[JsonProperty("二级分类")]
public string? CategoryLevel2 { get; set; }
[JsonProperty("吊牌价/ListPrice")]
public string? ListPrice { get; set; }
[JsonProperty("商品税务编码")]
public string? TaxCode { get; set; }
//UPC编码SKU唯一码
[JsonProperty("UPC编码SKU唯一码")]
public string? Upc { get; set; }
[JsonProperty("productTypeEN")]
public string? ProductTypeEN { get; set; }
[JsonProperty("productNameEN")]
public string? ProductNameEN { get; set; }
[JsonProperty("productTypeCN")]
public string? ProductTypeCN { get; set; }
[JsonProperty("销售属性(规格)")]
public string? Spec { get; set; }
[JsonProperty("categoryEN")]
public string? CategoryEN { get; set; }
[JsonProperty("品牌")]
public string? Brand { get; set; }
[JsonProperty("宽mm")]
public string? WidthMm { get; set; }
[JsonProperty("三级分类")]
public string? CategoryLevel3 { get; set; }
[JsonProperty("重量kg")]
public string? WeightKg { get; set; }
[JsonProperty("imgUrl")]
public string? ImgUrl { get; set; }
[JsonProperty("商品名称")]
public string? ProductNameCN { get; set; }
[JsonProperty("sellerID")]
public string? SellerID { get; set; }
//销售属性(颜色)
[JsonProperty("销售属性(颜色)")]
public string? Color { get; set; }
[JsonProperty("productShortNameCN")]
public string? ProductShortNameCN { get; set; }
[JsonProperty("长mm")]
public string? LengthMm { get; set; }
}
}

View File

@@ -0,0 +1,162 @@
using System.Xml.Serialization;
namespace SHK3CloudWebAPI.Models
{
/// <summary>
/// XML 根节点:采购订单数据
/// </summary>
[XmlRoot("PurchaseOrderData", Namespace = "")]
public class PurchaseOrderData
{
/// <summary>
/// 消息唯一 ID
/// </summary>
[XmlElement("msgId")]
public string? MsgId { get; set; }
/// <summary>
/// 路由编码(上下游系统约定在网关层的编码)
/// </summary>
[XmlElement("sourceMarkCode")]
public string? SourceMarkCode { get; set; }
/// <summary>
/// 采购订单头
/// </summary>
[XmlElement("purchaseOrder")]
public PurchaseOrder? PurchaseOrder { get; set; }
}
/// <summary>
/// 采购订单头信息
/// </summary>
public class PurchaseOrder
{
/// <summary>
/// 采购订单唯一标识(部分 XML 没有这个字段)
/// </summary>
[XmlElement("uuid")]
public string? UUID { get; set; }
/// <summary>
/// MAP 采购单号
/// </summary>
[XmlElement("purchaseOrder")]
public string? PurchaseOrderNo { get; set; }
/// <summary>
/// 币种,固定值 CNY
/// </summary>
[XmlElement("currency")]
public string? Currency { get; set; }
/// <summary>
/// 含税总金额
/// </summary>
[XmlElement("totalPriceWithTax")]
public string? TotalPriceWithTax { get; set; }
/// <summary>
/// 供应商编码
/// </summary>
[XmlElement("vendorCode")]
public string? VendorCode { get; set; }
/// <summary>
/// 备注,允许自闭合标签 &lt;remark /&gt;
/// </summary>
[XmlElement("remark", IsNullable = true)]
public string? Remark { get; set; }
/// <summary>
/// 下单日期原始字符串例如2025-09-02 17:13:30
/// </summary>
[XmlElement("orderTime")]
public string? OrderTimeRaw { get; set; }
/// <summary>
/// 下单日期,解析为 DateTime?(通过 OrderTimeRaw 转换)
/// </summary>
[XmlIgnore]
public DateTime? OrderTime
{
get
{
if (DateTime.TryParse(OrderTimeRaw, out var dt))
return dt;
return null;
}
}
/// <summary>
/// 采购单状态1 审核通过3 已取消5 已关闭
/// </summary>
[XmlElement("status")]
public string? Status { get; set; }
/// <summary>
/// 采购商品行信息(可能有一个或多个)
/// </summary>
[XmlElement("purchaseOrderLines")]
public List<PurchaseOrderLine>? PurchaseOrderLines { get; set; }
}
/// <summary>
/// 采购订单行信息
/// </summary>
public class PurchaseOrderLine
{
/// <summary>
/// 商品 UPC 编码
/// </summary>
[XmlElement("upc")]
public string? Upc { get; set; }
/// <summary>
/// 商品 MPN 编码
/// </summary>
[XmlElement("mpn")]
public string? Mpn { get; set; }
/// <summary>
/// 采购数量
/// </summary>
[XmlElement("qty")]
public decimal Qty { get; set; }
/// <summary>
/// 信用模式1 现金结算2 账期结算3 铺货代销
/// </summary>
[XmlElement("creditType")]
public int CreditType { get; set; }
/// <summary>
/// 含税单价
/// </summary>
[XmlElement("priceWithTax")]
public decimal PriceWithTax { get; set; }
/// <summary>
/// 含税总金额
/// </summary>
[XmlElement("totalPriceWithTax")]
public decimal TotalPriceWithTax { get; set; }
/// <summary>
/// 入库仓库,收货仓编码
/// </summary>
[XmlElement("warehouseCode")]
public string? WarehouseCode { get; set; }
/// <summary>
/// 入库库存主体T2 HQID
/// </summary>
[XmlElement("ownerCode")]
public string? OwnerCode { get; set; }
/// <summary>
/// 行号
/// </summary>
[XmlElement("lineno")]
public string? LineNo { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SHK3CloudWebAPI.Models
{
public class ReturnNoticeBill
{
public int FID { get; set; }
public string FBillNo { get; set; }
public string FOwnerNumber { get; set; }
public string FSaleOrgIdNumber { get; set; }
public string FRetcustIdNumber { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace SHK3CloudWebAPI.Models
{
public class ReturnNoticeBillDets
{
public int? FID { get; set; }
public string? FBillNo { get; set; }
public string? FOwnerNumber { get; set; }
public string? FSaleOrgIdNumber { get; set; }
public string? FRetcustIdNumber { get; set; }
public string? FMaterialIdNumber { get; set; }
public string? FUnitIDNumber { get; set; }
public int? FEntity_FEntryId { get; set; }
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SHK3CloudWebAPI
{
public class ErrorsItem
{
public string FieldName { get; set; }
public string Message { get; set; }
public int DIndex { get; set; }
}
public class SuccessEntityItem
{
public string Number { get; set; }
public int Id { get; set; }
public int DIndex { get; set; }
}
public class ResponseStatus
{
public int ErrorCode { get; set; }
public Boolean IsSuccess { get; set; }
public List<ErrorsItem> Errors { get; set; }
public List<SuccessEntityItem> SuccessEntitys { get; set; }
public List<string> SuccessMessages { get; set; }
}
public class Result
{
public ResponseStatus ResponseStatus { get; set; }
public string Id { get; set; }
}
public class Root
{
public Result Result { get; set; }
}
}

View File

@@ -0,0 +1,28 @@
namespace SHK3CloudWebAPI
{
/// <summary>
/// 登录
/// </summary>
public class loginParameter
{
/// <summary>
/// 帐套标识
/// </summary>
public string acctID { get; set; }
/// <summary>
/// 用户
/// </summary>
public string username { get; set; }
/// <summary>
/// 密码
/// </summary>
public string password { get; set; }
/// <summary>
/// 语言标识
/// </summary>
public string lcid { get; set; }
}
}

View File

@@ -0,0 +1,60 @@
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using SHK3CloudWebAPI;
using SHK3CloudWebAPI.Common;
using System;
using System.Reflection;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
//builder.Services.AddControllers();
builder.Services.AddControllers().AddNewtonsoftJson(options =>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿڷ<D3BF><DAB7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʽ
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(options => {
var xmlfilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlfilename), true);
options.OrderActionsBy(o => o.RelativePath);
typeof(ApiVersions).GetEnumNames().ToList().ForEach(name =>
{
options.SwaggerDoc(name, new OpenApiInfo
{
Title = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿռ<C7BF><D5BC>ɽӿ<C9BD>",
Version = name,
Description = $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿռ<C7BF><D5BC>ɽӿ<C9BD>:{name}"
});
});
});
var app = builder.Build();
app.UseMiddleware<RequestLoggingMiddleware>(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>־<EFBFBD>м<EFBFBD><D0BC><EFBFBD>
app.UseSwagger();
app.UseSwaggerUI(options =>
{
//options.SwaggerEndpoint($"/swagger/V1/swagger.json", $"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿռ<C7BF><D5BC>ɽӿ<C9BD>");
typeof(ApiVersions).GetEnumNames().ToList().ForEach(version =>
{
options.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{version}");
});
//·<><C2B7>ǰ׺
options.RoutePrefix = "";
});
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@@ -0,0 +1,31 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:47195",
"sslPort": 44316
}
},
"profiles": {
"SHK3CloudWebAPI": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "",
"applicationUrl": "https://localhost:7155;http://localhost:5226",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<BaseOutputPath></BaseOutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Models\ReturnNoticeBill.cs" />
<Compile Remove="Models\ReturnNoticeBillDets.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.33" />
<PackageReference Include="RestSharp" Version="112.1.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,632 @@
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using SHK3CloudWebAPI.Models.ERPModels;
namespace SHK3CloudWebAPI
{
/// <summary>
/// 查询
/// </summary>
public static class BillQueryService
{
/// <summary>
/// 收料通知单查询
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic ReceiveBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "PUR_ReceiveBill",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FStockOrgId.FNumber as FStockOrgIdNumber,FSupplierId.FNumber as FSupplierIdNumber,FOrderBillNo,FPOORDERENTRYID,FDetailEntity_FEntryId,FDetailEntity_FSEQ,FMaterialId.FNumber as FMaterialIdNumber,FUnitId.FNumber as FUnitIdFNumber"
};
var wrappedData = new
{
data = billQuery
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FStockOrgIdNumber = entry[2],
FSupplierIdNumber = entry[3],
FOrderBillNo = entry[4],
FPOORDERENTRYID = entry[5],
FDetailEntity_FEntryId = entry[6],
FDetailEntity_FSEQ = entry[7],
FMaterialIdNumber = entry[8],
FUnitIdFNumber = entry[9]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FStockOrgIdNumber = entry != null && entry.Count > 2 ? entry[2] : null,
FSupplierIdNumber = entry != null && entry.Count > 3 ? entry[3] : null,
FOrderBillNo = entry != null && entry.Count > 4 ? entry[4] : null,
FPOORDERENTRYID = entry != null && entry.Count > 5 ? entry[5] : null,
FDetailEntity_FEntryId = entry != null && entry.Count > 6 ? entry[6] : null,
FDetailEntity_FSEQ = entry != null && entry.Count > 7 ? entry[7] : null,
FMaterialIdNumber = entry != null && entry.Count > 8 ? entry[8] : null,
FUnitIdFNumber = entry != null && entry.Count > 9 ? entry[9] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 发货通知单查询
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic DeliveryNoticeBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "SAL_DELIVERYNOTICE",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FDeliveryOrgID.FNumber as FDeliveryOrgIDNumber,FCustomerID.FNumber as FCustomerIDNumber,FEntity_FEntryId,FEntity_FSEQ,FMaterialId.FNumber as FMaterialIdNumber,FUnitId.FNumber as FUnitIdFNumber,FORDERNO"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FDeliveryOrgIDNumber = entry[2],
FCustomerIDNumber = entry[3],
FEntity_FEntryId = entry[4],
FEntity_FSEQ = entry[5],
FMaterialIdNumber = entry[6],
FUnitIdFNumber = entry[7],
FORDERNO = entry[8]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FDeliveryOrgIDNumber = entry != null && entry.Count > 2 ? entry[2] : null,
FCustomerIDNumber = entry != null && entry.Count > 3 ? entry[3] : null,
FEntity_FEntryId = entry != null && entry.Count > 4 ? entry[4] : null,
FEntity_FSEQ = entry != null && entry.Count > 5 ? entry[5] : null,
FMaterialIdNumber = entry != null && entry.Count > 6 ? entry[6] : null,
FUnitIdFNumber = entry != null && entry.Count > 7 ? entry[7] : null,
FORDERNO = entry != null && entry.Count > 8 ? entry[8] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 调拨申请
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic TransferApplyBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "STK_TRANSFERAPPLY",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FEntity_FEntryId,FAPPORGID.FNumber as FAPPORGIDNumber,FMATERIALID.FNumber as FMATERIALIDNumber,FUNITID.FNumber as FUNITIDNumber,FStockInId.FNumber as FStockInIdNumber,FStockId.FNumber as FSrcStockIDNumber"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FEntity_FEntryId = entry[2],
FAPPORGIDNumber = entry[3],
FMATERIALIDNumber = entry[4],
FUNITIDNumber = entry[5],
FStockInIdNumber = entry[6],
FSrcStockIDNumber = entry[7]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FEntity_FEntryId = entry != null && entry.Count > 2 ? entry[2] : null,
FAPPORGIDNumber = entry != null && entry.Count > 3 ? entry[3] : null,
FMATERIALIDNumber = entry != null && entry.Count > 4 ? entry[4] : null,
FUNITIDNumber = entry != null && entry.Count > 5 ? entry[5] : null,
FStockInIdNumber = entry != null && entry.Count > 6 ? entry[6] : null,
FSrcStockIDNumber = entry != null && entry.Count > 7 ? entry[7] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 分布式调拨出库
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic TransferOutBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "STK_TRANSFEROUT",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FSTKTRSOUTENTRY_FEntryId,FStockOrgID.FNumber as FStockOrgIDNumber,FStockInOrgID.FNumber as FStockInOrgIDNumber,FMaterialID.FNumber as FMaterialIDNumber,FSrcStockID.FNumber as FSrcStockIDNumber,FUnitID.FNumber as FUnitIDNumber,FVESTONWAY,FDestStockStatusID.FNumber as FDestStockStatusIDNumber"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FSTKTRSOUTENTRY_FEntryId = entry[2],
FStockOrgIDNumber = entry[3],
FStockInOrgIDNumber = entry[4],
FMaterialIDNumber = entry[5],
FSrcStockIDNumber = entry[6],
FUnitIDNumber = entry[7],
FVESTONWAY = entry[8],
FDestStockStatusIDNumber = entry[9]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FSTKTRSOUTENTRY_FEntryId = entry != null && entry.Count > 2 ? entry[2] : null,
FStockOrgIDNumber = entry != null && entry.Count > 3 ? entry[3] : null,
FStockInOrgIDNumber = entry != null && entry.Count > 4 ? entry[4] : null,
FMaterialIDNumber = entry != null && entry.Count > 5 ? entry[5] : null,
FSrcStockIDNumber = entry != null && entry.Count > 6 ? entry[6] : null,
FUnitIDNumber = entry != null && entry.Count > 7 ? entry[7] : null,
FVESTONWAY = entry != null && entry.Count > 8 ? entry[8] : null,
FDestStockStatusIDNumber = entry != null && entry.Count > 9 ? entry[9] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 物料
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static List<BD_MATERIALBILL> BD_MATERIALBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
List<BD_MATERIALBILL> resulted = new List<BD_MATERIALBILL>();
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "BD_MATERIAL",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FNumber,FMATERIALID,FDOCUMENTSTATUS "
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.ExecuteBillQuery(json.ToString(), cookie);
List<string[]> item = JsonConvert.DeserializeObject<List<string[]>>(relJson);
foreach (var row in item)
{
BD_MATERIALBILL returnNoticeBill = new BD_MATERIALBILL
{
FNumber = row[0],
FMATERIALID = row[1],
FDOCUMENTSTATUS = row[2]
};
resulted.Add(returnNoticeBill);
}
}
return resulted;
}
/// <summary>
/// 退料申请
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic MrappBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "PUR_MRAPP",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FEntity_FEntryId,FEntity_FSEQ ,FPURCHASEORGID.FNumber as FPURCHASEORGIDNumber,FSUPPLIERID.FNumber as FSUPPLIERIDNumber,FMATERIALID.FNumber as FMATERIALIDNumber,FUnitID.FNumber as FUnitIDNumber,FORDERNO,FPOORDERENTRYID"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FEntity_FEntryId = entry[2],
FEntity_FSEQ = entry[3],
FPURCHASEORGIDNumber = entry[4],
FSUPPLIERIDNumber = entry[5],
FMATERIALIDNumber = entry[6],
FUnitIDNumber = entry[7],
FORDERNO = entry[8],
FPOORDERENTRYID = entry[9]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FEntity_FEntryId = entry != null && entry.Count > 2 ? entry[2] : null,
FEntity_FSEQ = entry != null && entry.Count > 3 ? entry[3] : null,
FPURCHASEORGIDNumber = entry != null && entry.Count > 4 ? entry[4] : null,
FSUPPLIERIDNumber = entry != null && entry.Count > 5 ? entry[5] : null,
FMATERIALIDNumber = entry != null && entry.Count > 6 ? entry[6] : null,
FUnitIDNumber = entry != null && entry.Count > 7 ? entry[7] : null,
FORDERNO = entry != null && entry.Count > 8 ? entry[8] : null,
FPOORDERENTRYID = entry != null && entry.Count > 9 ? entry[9] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 退货通知
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static dynamic ReturnNoticeBillQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
dynamic resulted = null;
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "SAL_RETURNNOTICE",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FSaleOrgId.FNumber as FSaleOrgIdNumber,FRetcustId.FNumber as FRetcustIdNumber, FMaterialId.FNumber as FMaterialIdNumber,FUnitID.FNumber as FUnitIDNumber,FEntity_FEntryId"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.BillQuery(json.ToString(), cookie);
dynamic item = JsonConvert.DeserializeObject<dynamic>(relJson);
// 初始化返回结果
var receive = new List<dynamic>();
// 检查 item 是否有数据
if (item != null && item is JArray && item.Count > 0)
{
foreach (var entry in item)
{
// 检查当前 entry 是否包含足够的字段
if (entry != null && entry.Count >= 10)
{
receive.Add(new
{
FID = entry[0],
FBillNo = entry[1],
FSaleOrgIdNumber = entry[2],
FRetcustIdNumber = entry[3],
FMaterialIdNumber = entry[4],
FUnitIDNumber = entry[5],
FEntity_FEntryId = entry[6]
});
}
else
{
// 如果数据不完整,填充默认值
receive.Add(new
{
FID = entry != null && entry.Count > 0 ? entry[0] : null,
FBillNo = entry != null && entry.Count > 1 ? entry[1] : null,
FSaleOrgIdNumber = entry != null && entry.Count > 2 ? entry[2] : null,
FRetcustIdNumber = entry != null && entry.Count > 3 ? entry[3] : null,
FMaterialIdNumber = entry != null && entry.Count > 4 ? entry[4] : null,
FUnitIDNumber = entry != null && entry.Count > 5 ? entry[5] : null,
FEntity_FEntryId = entry != null && entry.Count > 6 ? entry[6] : null
});
}
}
}
resulted = receive;
}
return resulted;
}
/// <summary>
/// 退货通知明细
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static ReturnNoticeBillDets ReturnNoticeBillDetsQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
ReturnNoticeBillDets resulted = new ReturnNoticeBillDets();
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "SAL_RETURNNOTICE",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FSaleOrgId.FNumber as FSaleOrgIdNumber,FRetcustId.FNumber as FRetcustIdNumber, FMaterialId.FNumber as FMaterialIdNumber,FUnitID.FNumber as FUnitIDNumber,FEntity_FEntryId,FOwnerID.FNumber as FOwnerNumber"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
var relJson = invokeHelper.ExecuteBillQuery(json.ToString(), cookie);
var item = JsonConvert.DeserializeObject<string[]>(relJson);
ReturnNoticeBillDets returnNoticeBillDets = new ReturnNoticeBillDets
{
FID = int.Parse(item[0]),
FBillNo = item[1],
FSaleOrgIdNumber = item[2],
FRetcustIdNumber = item[3],
FMaterialIdNumber = item[4],
FUnitIDNumber = item[5],
FEntity_FEntryId = int.Parse(item[6]),
FOwnerNumber = item[7],
};
resulted = returnNoticeBillDets;
}
return resulted;
}
/// <summary>
/// 采购订单查询
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static List<PurchaseOrderBill> PurchaseOrderQuery(string strJson)
{
InvokeHelper invokeHelper = new InvokeHelper();
List<PurchaseOrderBill> resulted = new List<PurchaseOrderBill>();
var result = invokeHelper.Login();
var iResult = JObject.Parse(result)["LoginResultType"].Value<int>();
if (iResult == 1 || iResult == -5)
{
BillQuery billQuery = new BillQuery
{
FormId = "PUR_PurchaseOrder",
TopRowCount = 0,
Limit = 0,
StartRow = 0,
FilterString = strJson,
OrderString = "",
FieldKeys = "FID,FBillNo,FPOOrderEntry_FEntryId,FMaterialId.FNumber as FMaterialIdNumber"
};
string json = JsonConvert.SerializeObject(billQuery);
string cookie = JObject.Parse(result)["KDSVCSessionId"].Value<string>();
dynamic relJson = invokeHelper.ExecuteBillQuery(json.ToString(), cookie);
List<string[]> item1 = JsonConvert.DeserializeObject<List<string[]>>(relJson);
foreach (var row in item1)
{
PurchaseOrderBill purchaseOrderBill = new PurchaseOrderBill
{
FID = int.Parse(row[0]),
FBillNo = row[1],
FDetailEntity_FEntryId = int.Parse(row[2]),
FMaterialIdNumber = row[3]
};
resulted.Add(purchaseOrderBill);
}
}
return resulted;
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
//"AllowedHosts": "*",
//"AppSettings": {
// "CloudUrl": "http://47.95.40.103/K3Cloud/",
// "KDType": "6758eb76b9ec73",
// "KDUser": "Administrator",
// "KDPwd": "1qaz2wsx"
//}
"AllowedHosts": "*",
"AppSettings": {
"CloudUrl": "http://123.56.29.156/K3Cloud/",
"KDType": "5f23ccc5efaaf0",
"KDUser": "Administrator",
"KDPwd": "1qaz2wsx"
}
}