commit 1eaedea85d11516f3d5fae365cf5c6ddeb007a67
Author: 18923810322 <1666941798@qq.com>
Date: Wed Apr 30 17:01:05 2025 +0800
添加项目文件。
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..fe1152b
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,30 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
+!**/.gitignore
+!.git/HEAD
+!.git/config
+!.git/packed-refs
+!.git/refs/heads/**
\ No newline at end of file
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..1ff0c42
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bc1364c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,366 @@
+## 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/master/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/
+[Oo]ut/
+[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
+*.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 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/
+
+# 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
+/BarCode.Web.sln
+/src/BarCode.Web.Api/BarCode.Web.Api.csproj
+/src/BarCode.Web.Api/BarCode.Web.Api.csproj
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..2690cf5
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,40 @@
+#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
+#ĵַ https://github.com/dotnet/dotnet-docker/
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+WORKDIR /app
+EXPOSE 8080
+EXPOSE 80
+EXPOSE 443
+
+#װapt-get װ libc6-dev , libgdiplus ֧system.drawing ,Ĭubuntu
+#RUN apt-get update -qq && apt-get -y install libgdiplus libc6-dev
+#װ curl
+RUN apt-get update && apt-get install -y curl
+
+COPY ["src/BarCode.Web.Api/wwwroot/BarCode.Web.Api.xml", "/app/BarCode.Web.Api.xml"]
+COPY ["src/BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml", "/app/BarCode.Web.Core.xml"]
+COPY ["src/BarCode.Web.Api/wwwroot/BarCode.Web.Domain.xml", "/app/BarCode.Web.Domain.xml"]
+
+USER app
+
+#FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+COPY ["src/BarCode.Web.Api/BarCode.Web.Api.csproj", "src/BarCode.Web.Api/"]
+COPY ["src/BarCode.Web.Repositories/BarCode.Web.Repositories.csproj", "src/BarCode.Web.Repositories/"]
+COPY ["src/BarCode.Web.Core/BarCode.Web.Core.csproj", "src/BarCode.Web.Core/"]
+COPY ["src/BarCode.Web.Domain/BarCode.Web.Domain.csproj", "src/BarCode.Web.Domain/"]
+RUN dotnet restore "./src/BarCode.Web.Api/BarCode.Web.Api.csproj"
+COPY . .
+WORKDIR "/src/src/BarCode.Web.Api"
+RUN dotnet build "./BarCode.Web.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build
+
+FROM build AS publish
+ARG BUILD_CONFIGURATION=Release
+RUN dotnet publish "./BarCode.Web.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "BarCode.Web.Api.dll"]
\ No newline at end of file
diff --git a/src/BarCode.Web.Api/.config/dotnet-tools.json b/src/BarCode.Web.Api/.config/dotnet-tools.json
new file mode 100644
index 0000000..305bdb1
--- /dev/null
+++ b/src/BarCode.Web.Api/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "dotnet-ef": {
+ "version": "9.0.0",
+ "commands": [
+ "dotnet-ef"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/BarCode.Web.Api/Controllers/BoxController.cs b/src/BarCode.Web.Api/Controllers/BoxController.cs
new file mode 100644
index 0000000..4ba50c6
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/BoxController.cs
@@ -0,0 +1,199 @@
+using AutoMapper;
+using BarCode.Web.Core.Dto;
+using BarCode.Web.Core.Dto.Box;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Services;
+using BarCode.Web.Domain.Values;
+using BarCode.Web.Repositories;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Text.RegularExpressions;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 箱子
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class BoxController : ControllerBase
+ {
+ private readonly IBoxRepositories _boxRepositories;
+ private readonly IMapper _mapper;
+ private readonly ILoginService _loginService;
+ private readonly IBoxService _boxService;
+ public BoxController(IMapper mapper, ILoginService loginService, IBoxRepositories boxRepositories,
+ IBoxService boxService)
+ {
+ _boxRepositories = boxRepositories;
+ _mapper = mapper;
+ _loginService = loginService;
+ _boxService = boxService;
+ }
+
+ ///
+ /// 箱信息-列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetList")]
+ public async Task> GetPagedList([FromBody] BoxQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ if (!string.IsNullOrEmpty(dto.BoxBeginNo)
+ && !Regex.Match(dto.BoxBeginNo.ToUpper().Replace("CTN", ""), "^[0-9]*$").Success)
+ return ResultPagedList.ReFailure(ResultCodes.BoxNO_Invalid_Error);
+ if (!string.IsNullOrEmpty(dto.BoxEndNo)
+ && !Regex.Match(dto.BoxEndNo.ToUpper().Replace("CTN", ""), "^[0-9]*$").Success)
+ return ResultPagedList.ReFailure(ResultCodes.BoxNO_Invalid_Error);
+
+ var (list, count) = await _boxRepositories.GetListAsync(dto, loginInfo);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+ /////
+ ///// 获取详情
+ /////
+ /////
+ /////
+ //[HttpGet]
+ //[Route("GetInfo/{id}")]
+ //public async Task> GetInfo([FromRoute] int id)
+ //{
+ // var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ // if (loginInfo == null || loginInfo.UserInfo == null)
+ // return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ // var response = await _repositories.GetInfo(id);
+ // return Result.ReSuccess(response);
+ //}
+
+ ///
+ /// 生成箱码
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Generate")]
+ public async Task Generate(GenerateBoxRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.Generate(dto, loginInfo);
+ }
+
+ ///
+ /// 装箱保存
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Save")]
+ public async Task Save(SaveBoxRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ return await _boxService.Save(dto, loginInfo);
+ }
+ ///
+ /// 打印
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Print")]
+ public async Task Print(OperateRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.Print(dto);
+ }
+ ///
+ /// 删除
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Delete")]
+ public async Task Delete(DeleteBoxSerialNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.Delete(dto, loginInfo);
+ }
+ ///
+ /// 清空装箱信息
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("Clear")]
+ public async Task Clear([FromQuery] int boxId)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.Clear(boxId, loginInfo);
+ }
+ ///
+ /// 根据箱号获取箱信息
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("GetBoxByNo")]
+ public async Task> GetBoxByNo([FromQuery] string boxBillNo)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ var entity = await _boxRepositories.GetByNo(boxBillNo);
+ if (entity == null)
+ return Result.ReFailure(ResultCodes.BoxNoDataError);
+
+ return Result.ReSuccess(_mapper.Map(entity));
+ }
+ ///
+ /// 重新装箱
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Restart")]
+ public async Task Restart(OperateRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.Restart(dto, loginInfo);
+ }
+ ///
+ /// 开始装箱
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("BeginCarton")]
+ public async Task BeginCarton([FromQuery] int boxId)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxService.BeginCarton(boxId, loginInfo);
+ }
+
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/BoxMarkController.cs b/src/BarCode.Web.Api/Controllers/BoxMarkController.cs
new file mode 100644
index 0000000..44c4d10
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/BoxMarkController.cs
@@ -0,0 +1,89 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using BarCode.Web.Core.Dto;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Values;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 箱唛-接口
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class BoxMarkController : ControllerBase
+ {
+
+ private readonly ILoginService _loginService;
+ private readonly IBoxMarkService _boxMarkService;
+ private readonly IBoxMarkRepositories _boxMarkRepositories;
+ private readonly IExportExcelService _exportExcelService;
+ public BoxMarkController(
+ ILoginService loginService,
+ IBoxMarkRepositories boxMarkRepositories,
+ IBoxMarkService boxMarkService,
+ IExportExcelService exportExcelService)
+ {
+ this._loginService = loginService;
+ this._boxMarkService = boxMarkService;
+ this._exportExcelService = exportExcelService;
+ this._boxMarkRepositories = boxMarkRepositories;
+ }
+
+ ///
+ /// 箱唛--列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetList")]
+ public async Task> GetPagedList([FromBody] BoxMarkQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+ var (list, count) = await _boxMarkService.GetPagedList(dto, loginInfo);
+ return ResultPagedList.ReSuccess(list, count);
+ }
+
+ ///
+ /// 生成
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("generate")]
+ public async Task> GenerateAsync([FromBody] GenerateBoxMarkDto dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _boxMarkService.Generate(dto, loginInfo);
+ }
+
+ ///
+ /// 批量删除
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("delete")]
+ public async Task Delete([FromBody] OperateRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+ var isSuccess= await _boxMarkRepositories.DeleteRange(dto.Ids);
+ if(!isSuccess)
+ return Result.ReFailure(ResultCodes.DateWriteError);
+ return Result.ReSuccess();
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/ClientLogController.cs b/src/BarCode.Web.Api/Controllers/ClientLogController.cs
new file mode 100644
index 0000000..cdd40b6
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/ClientLogController.cs
@@ -0,0 +1,82 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using BarCode.Web.Core.Internal.Results;
+using Microsoft.Extensions.Hosting;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 前端记录日志
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class ClientLogController : ControllerBase
+ {
+ private readonly ILogger _Logger;
+ public IWebHostEnvironment _webHostEnvironment { get; set; }
+ public ClientLogController(ILogger Logger, IWebHostEnvironment webHostEnvironment)
+ {
+ _Logger = Logger;
+ _webHostEnvironment = webHostEnvironment;
+ }
+ ///
+ /// 前端记录日志
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("Log")]
+ public Task Log([FromQuery] string log)
+ {
+ if (!_webHostEnvironment.IsDevelopment())
+ _Logger.LogInformation($"前端日志 时间:{DateTime.Now} 内容:{log}");
+
+ return Task.FromResult(Result.ReSuccess());
+ }
+
+ ///
+ /// 前端记录日志
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("test")]
+ public Task Log()
+ {
+ return Task.FromResult(Result.ReSuccess());
+ }
+
+ ///
+ /// 前端记录日志(数组)
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Logs")]
+ public Task Logs(List logs)
+ {
+ if (!_webHostEnvironment.IsDevelopment())
+ _Logger.LogInformation($"前端日志(数组) 时间:{DateTime.Now} 内容:{JsonConvert.SerializeObject(logs)}");
+
+ return Task.FromResult(Result.ReSuccess());
+ }
+ }
+ ///
+ /// 消息数组
+ ///
+ [Serializable]
+ public class LogRequest
+ {
+ ///
+ /// 消息内容数组
+ ///
+ public List logs { get; set; } = new List();
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/FileDownManagerController.cs b/src/BarCode.Web.Api/Controllers/FileDownManagerController.cs
new file mode 100644
index 0000000..b0ad382
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/FileDownManagerController.cs
@@ -0,0 +1,107 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using BarCode.Web.Core;
+using BarCode.Web.Core.Dto;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Values;
+using Microsoft.AspNetCore.StaticFiles;
+using NPOI.SS.Formula.Functions;
+using Npoi.Mapper;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 上传下载中心
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class FileDownManagerController : ControllerBase
+ {
+ private readonly ILoginService _loginService;
+ private readonly IFileDownManagerRepositories _repositories;
+ public FileDownManagerController(ILoginService loginService, IFileDownManagerRepositories repositories)
+ {
+ _loginService = loginService;
+ _repositories = repositories;
+ }
+
+ ///
+ /// 获取需要的状态列表
+ ///
+ ///
+ [HttpGet]
+ [Route("GetStatus")]
+ public Task> GetStatus()
+ {
+ FileDownManagerStatusResponse response = new FileDownManagerStatusResponse();
+ foreach (FileDownLoadOrderType enumv in Enum.GetValues(typeof(FileDownLoadOrderType)))
+ {
+ response.Type.Add((int)enumv, enumv.GetRemark());
+ }
+ foreach (ExportStatus enumv in Enum.GetValues(typeof(ExportStatus)))
+ {
+ response.Status.Add((int)enumv, enumv.GetRemark());
+ }
+ return Task.FromResult(Result.ReSuccess(response));
+ }
+
+ ///
+ /// 下载导出文件 列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("FileDownManagerQuery")]
+ public async Task> FileDownManagerQuery(FileDownManagerRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ dto.SupplierId = loginInfo.UserInfo.SupplierId;
+
+ var result = await _repositories.GetList(dto, loginInfo);
+ return Result.ReSuccess(result);
+ }
+ ///
+ /// 模板(生成序列码)
+ ///
+ ///
+ [HttpGet]
+ [Route("TemplateExcel")]
+ public IActionResult TemplateExcel()
+ {
+ Mapper mapper = new Mapper();
+
+ //第一个参数为导出Excel名称
+ //第二个参数为Excel数据来源
+ //第三个参数为导出的Sheet名称
+ //overwrite参数如果是要覆盖已存在的Excel或者新建Excel则为true,如果在原有Excel上追加数据则为false
+ //xlsx参数是用于区分导出的数据格式为xlsx还是xls
+ byte[] buffer = null;
+ using (MemoryStream stream = new MemoryStream())
+ {
+ try
+ {
+ List list = new List();
+ mapper.Put(list, "sheet1", true);
+
+ mapper.Save(stream);
+ }
+ catch (Exception)
+ {
+ }
+
+ buffer = stream.ToArray();
+ }
+ // .xlsx文件对应的Mime信息
+ var mime = new FileExtensionContentTypeProvider().Mappings[".xlsx"];
+ return File(buffer, mime, "批量生成条码模板.xlsx");
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/HeartController.cs b/src/BarCode.Web.Api/Controllers/HeartController.cs
new file mode 100644
index 0000000..66c7130
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/HeartController.cs
@@ -0,0 +1,20 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace BarCode.Web.Api.Controllers
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class HeartController : ControllerBase
+ {
+ [HttpGet]
+ public Task Heart()
+ {
+ return Task.FromResult("Success");
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/LoginController.cs b/src/BarCode.Web.Api/Controllers/LoginController.cs
new file mode 100644
index 0000000..9e3b391
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/LoginController.cs
@@ -0,0 +1,143 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using BarCode.Web.Core.Dto.Login;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Values;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 登录接口
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class LoginController : ControllerBase
+ {
+ private readonly ILoginService _loginService;
+ private readonly ILogger _logger;
+ public LoginController(ILoginService loginService,ILogger logger)
+ {
+ this._logger = logger;
+ this._loginService = loginService;
+
+ }
+
+ ///
+ /// 登录
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("LoginIn")]
+ public async Task> LoginIn([FromQuery] string code)
+ {
+ //var result = await _loginService.GetUserInfoAsync(code);
+ var result = await _loginService.GetUserInfoByCode(code);
+ return result;
+ }
+
+ ///
+ /// 登录-APP和小程序
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("LoginInPwd")]
+ public async Task> LoginInPwd([FromBody] LoginRequest dto)
+ {
+ var result = await _loginService.GetUserInfo(dto.UserName,dto.Password);
+ return result;
+ }
+
+ ///
+ /// 退出登录
+ ///
+ ///
+ [HttpPost]
+ [Route("LoginOut")]
+ public async Task LoginOut()
+ {
+ string authorization = this.HttpContext.Request.Headers["Authorization"];
+ //if (string.IsNullOrEmpty(authorization))
+ //{
+ // return Result.ReFailure(BaseResultCodes.UnAuthorized);
+ //}
+
+ //if (logininfo == null || logininfo.UserInfo == null)
+ // return Result.ReFailure(BaseResultCodes.UnAuthorized);
+ if (!string.IsNullOrEmpty(authorization))
+ {
+ var logininfo = _loginService.GetLoginInfo(authorization);
+ if (logininfo != null && logininfo.UserInfo != null)
+ {
+ var dto = new LoginOutDto()
+ {
+ UcId = logininfo.UserInfo.UcId.ToString(),
+ SessionId = logininfo.UserInfo.SeesionId,
+ Token = logininfo.TokenInfo.Token,
+ AccessToken = logininfo.TokenInfo.PhpToken,
+ RefreshToken=logininfo.TokenInfo.RefreshToken,
+ ExpiresIn = logininfo.TokenInfo.Expired
+ };
+ var res = await _loginService.LoginOut(dto);
+ }
+ }
+ return Result.ReSuccess();
+ }
+ ///
+ /// PHP单点退出使用
+ ///
+ ///
+ [HttpGet]
+ [Route("LoginOutSingle")]
+ public async Task LoginOutSingle()
+ {
+ this.HttpContext.Request.Cookies.TryGetValue("PHPSESSID", out string value);
+ if (string.IsNullOrEmpty(value))
+ value = string.Empty;
+ if (!string.IsNullOrEmpty(value))
+ await _loginService.LoginOutSingleAsync(value);
+ return Result.ReSuccess();
+ }
+
+ ///
+ /// 菜单列表
+ ///
+ ///
+ [HttpGet]
+ [Route("Menus")]
+ public async Task>> GetMenuList()
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result>.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ _logger.LogInformation($"用户ID:{loginInfo.UserInfo.UcId}");
+ var list = await _loginService.GetMenuList(loginInfo.UserInfo.UcId);
+ _logger.LogInformation($"菜单数量:{list.Count}");
+ if (list.Count == 0)
+ {
+ //调用单点的退出接口
+ var dto = new LoginOutDto()
+ {
+ UcId = loginInfo.UserInfo.UcId.ToString(),
+ SessionId = loginInfo.UserInfo.SeesionId,
+ Token = loginInfo.TokenInfo.Token,
+ AccessToken = loginInfo.TokenInfo.PhpToken,
+ ExpiresIn = loginInfo.TokenInfo.Expired
+
+ };
+ await _loginService.LoginOut(dto);
+ return Result>.ReFailure(ResultCodes.NoRoot);
+ }
+ var res = Result>.ReSuccess(list);
+ return res;
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/MaterialController.cs b/src/BarCode.Web.Api/Controllers/MaterialController.cs
new file mode 100644
index 0000000..ee7f664
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/MaterialController.cs
@@ -0,0 +1,118 @@
+using AutoMapper;
+using BarCode.Web.Core.Dto.Erp;
+using BarCode.Web.Core.Help;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Entitys;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Options;
+using BarCode.Web.Domain.Services;
+using BarCode.Web.Domain.Services.Public;
+using BarCode.Web.Domain.Values;
+using BarCode.Web.Repositories;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 物料
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class MaterialController : ControllerBase
+ {
+ private IMapper _mapper;
+ private ILogger _logger;
+ private IErpService _erpService;
+ private IMaterialsRepositories _materialsRepositories;
+ private ErpOptions _erpOptions;
+ private readonly IMemoryCache _memoryCache;
+ public MaterialController(IMapper mapper, ILogger logger, IErpService erpService,
+ IMaterialsRepositories materialsRepositories, IOptions erpOptions, IMemoryCache memoryCache)
+ {
+ _mapper = mapper;
+ _logger = logger;
+ _erpService = erpService;
+ _materialsRepositories = materialsRepositories;
+ this._erpOptions = erpOptions.Value;
+ this._memoryCache = memoryCache;
+ }
+
+ ///
+ /// 刷新物料 69条码或id32进制
+ ///
+ /// 物料编码
+ /// 69 条码,id id32进制,other 名字和规格型号
+ ///
+ [HttpGet]
+ [Route("Refresh/{number}/{type}")]
+ public async Task Refresh([FromRoute] string number, [FromRoute] string type)
+ {
+ if (string.IsNullOrEmpty(number))
+ return Result.ReFailure("物料编码不能为空", 556677);
+ if (string.IsNullOrEmpty(type) || (!type.Equals("69") && !type.Equals("id")&& !type.Equals("other")))
+ return Result.ReFailure("类型只能是69或id或other", 556677);
+
+ List numbers = new List();
+ numbers.Add(number);
+
+ var list = await _materialsRepositories.GetEntityList(numbers);
+ if (list.Count() <= 0) return Result.ReFailure(ResultCodes.MateriaNoData);
+
+ var mDtos = await _erpService.BillQueryForMaterialByNumbers(numbers);
+ if (!mDtos.IsSuccess) return Result.ReFailure(mDtos.Message, mDtos.Status);
+ if (mDtos.Data.Count() <= 0) return Result.ReFailure(ResultCodes.MateriaNoData);
+
+ var materials = _memoryCache.Get>(_erpOptions.cache_materail_key);
+
+ List update_list = new List();
+ foreach (var m in mDtos.Data)
+ {
+ var entity = list.FirstOrDefault(f => f.MaterialNumber.Equals(m.MaterialNumber));
+ if (entity == null) continue;
+ if (type.Equals("69"))
+ {
+ entity.BarCode = m.BarCode.Trim();
+ update_list.Add(entity);
+ }
+ if (type.Equals("id"))
+ {
+ entity.IdConvertBar = m.IdConvertBar.Trim();
+ update_list.Add(entity);
+ }
+ if (type.Equals("other"))
+ {
+ entity.MaterialName = m.MaterialName;
+ entity.Specifications = m.Specifications;
+ update_list.Add(entity);
+ }
+
+ //修改缓存
+ if (materials == null) continue;
+ var entity_cache = materials.FirstOrDefault(f => f.MaterialNumber.Equals(m.MaterialNumber));
+ if (entity_cache == null) continue;
+ if (type.Equals("69"))
+ entity_cache.BarCode = m.BarCode.Trim();
+ if (type.Equals("id"))
+ entity_cache.IdConvertBar = m.IdConvertBar.Trim();
+ if (type.Equals("other"))
+ {
+ entity_cache.MaterialName = m.MaterialName;
+ entity_cache.Specifications = m.Specifications;
+ }
+
+ }
+ //修改缓存
+ if (materials != null && materials.Count() > 0)
+ {
+ _memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
+ }
+ await _materialsRepositories.UpdateRange(update_list);
+ return Result.ReSuccess();
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/SecurityController.cs b/src/BarCode.Web.Api/Controllers/SecurityController.cs
new file mode 100644
index 0000000..2218df0
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/SecurityController.cs
@@ -0,0 +1,59 @@
+using BarCode.Web.Core.Dto.SecurityNumbers;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Core.Help;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.Values;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using System.Text.Json.Serialization;
+using System.Text.RegularExpressions;
+
+namespace BarCode.Web.Api.Controllers
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class SecurityController : ControllerBase
+ {
+ public readonly ISecurityNumbersRepositories _securityNumbersRepositories;
+ public readonly ILogger _logger;
+ public SecurityController(ISecurityNumbersRepositories securityNumbersRepositories, ILogger logger)
+ {
+ _securityNumbersRepositories = securityNumbersRepositories;
+ _logger = logger;
+ }
+ ///
+ /// 获取序列号信息
+ ///
+ /// 防伪码
+ ///
+ [HttpGet]
+ [Route("Get")]
+ public async Task> Get([FromQuery] string security)
+ {
+ _logger.LogInformation($"请求防伪码:{security}");
+ var zz = "^[0-9A-Za-z]{6,15}$";
+ Regex regex = new Regex(zz);
+ if (!regex.IsMatch(security)) return Result.ReSuccess(new SecurityResponse());
+
+ var res = await _securityNumbersRepositories.GetEntity(security);
+ if (res == null) return Result.ReSuccess(new SecurityResponse());
+
+ res.Get();
+ res = await _securityNumbersRepositories.Edit(res);
+ //为了让前端可以做语言判断 这个接口所有错误都提示500
+ if (res == null) return Result.ReFailure(BaseResultCodes.UnknowError);
+
+ var response = new SecurityResponse()
+ {
+ Security = res.SecurityNumber,
+ QueryCount = res.QueryCount,
+ IsOneQuery = res.QueryCount == 1 ? true : false,
+ QueryTime = res.QueryTime.DateToStringSeconds()
+ };
+ _logger.LogInformation($"请求防伪码返回:{JsonConvert.SerializeObject(response)}");
+ return Result.ReSuccess(response);
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/SecurityNumberController.cs b/src/BarCode.Web.Api/Controllers/SecurityNumberController.cs
new file mode 100644
index 0000000..9816bab
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/SecurityNumberController.cs
@@ -0,0 +1,189 @@
+using AutoMapper;
+using BarCode.Web.Core.Dto.SecurityNumbers;
+using BarCode.Web.Core.Dto;
+using BarCode.Web.Core.Help;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.IService;
+using BarCode.Web.Domain.Options;
+using BarCode.Web.Domain.Values;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Domain.Services;
+using BarCode.Web.Core;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 防伪码
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class SecurityNumberController : ControllerBase
+ {
+ private readonly IMapper _mapper;
+ private readonly ILoginService _loginService;
+ private readonly ISecurityNumbersRepositories _securityNumbersRepositories;
+ private readonly ISecurityNumberService _securityNumberService;
+ private readonly IExportExcelService _exportExcelService;
+ private readonly QiniuOptions _option;
+ private readonly ISecurityGenerateRecordRepositories _sGenerateRecordRepositories;
+ public SecurityNumberController(IMapper mapper, ILoginService loginService, ISecurityNumbersRepositories SecurityNumbersRepositories,
+ ISecurityNumberService SecurityNumberService, IExportExcelService exportExcelService,
+ IOptions option, ISecurityGenerateRecordRepositories sGenerateRecordRepositories)
+ {
+ _mapper = mapper;
+ _loginService = loginService;
+ _securityNumbersRepositories = SecurityNumbersRepositories;
+ _securityNumberService = SecurityNumberService;
+ _exportExcelService = exportExcelService;
+ _option = option?.Value;
+ _sGenerateRecordRepositories = sGenerateRecordRepositories;
+ }
+ ///
+ /// 防伪码生成记录列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetGenerateRecordList")]
+ public async Task> GetGenerateRecordList([FromBody] SecurityGenerateRecordQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+ ///
+ /// 防伪码列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetList")]
+ public async Task> GetPagedList([FromBody] SecurityNumberQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ var (list, count) = await _securityNumbersRepositories.GetListAsync(dto, loginInfo);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+ ///
+ /// 防伪码生成记录页面-下载条码
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("ExportAll")]
+ public Task> ExportAll(OperateRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
+
+ var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
+ if (entityList.Count < 0)return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
+ string orgCode = entityList.First().OrgCode;
+ //反写下载数据
+ var resSuccess = this.DownLoad(new OperateSecurityNumberRequest() { GenerateRecordIds = dto.Ids, IsAll = true }).GetAwaiter().GetResult();
+ if (!resSuccess.IsSuccess) Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
+
+ string fileName = FileDownLoadOrderType.SecurityNumbers.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
+ string res = _option.Url + fileName;
+
+ SecurityNumbersExportRequest request = new SecurityNumbersExportRequest();
+ request.Ids = dto.Ids;
+
+ Task.Run(async () =>
+ {
+ await _exportExcelService.ExportList(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SecurityNumbers, orgCode);
+ });
+
+ return Task.FromResult(Result.ReSuccess(res));
+ }
+ ///
+ /// 防伪码页面-条码下载
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Export")]
+ public Task> Export([FromBody] SecurityNumberQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
+
+ var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
+ if (entity==null) return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
+ string orgCode = entity.OrgCode;
+ //反写下载数据
+ Result resSuccess;
+ if (dto.SecurityNumbers.Count() > 0)
+ {
+ resSuccess = this.DownLoad(new OperateSecurityNumberRequest()
+ {
+ GenerateRecordIds = new List() { dto.GenerateRecordId },
+ IsAll = false,
+ SecurityNumbers = dto.SecurityNumbers
+ }).GetAwaiter().GetResult();
+ }
+ else
+ {
+ resSuccess = this.DownLoad(new OperateSecurityNumberRequest()
+ {
+ GenerateRecordIds = new List() { dto.GenerateRecordId },
+ IsAll = true
+ }).GetAwaiter().GetResult();
+ }
+ if (!resSuccess.IsSuccess) return Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
+
+ string fileName = FileDownLoadOrderType.SecurityNumberInfo.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
+ string res = _option.Url + fileName;
+
+ Task.Run(async () =>
+ {
+ await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SecurityNumberInfo, orgCode);
+ });
+
+ return Task.FromResult(Result.ReSuccess(res));
+ }
+ ///
+ /// 下载(一般后端内部调用)
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("DownLoad")]
+ public async Task DownLoad(OperateSecurityNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _securityNumberService.DownLoad(dto);
+ }
+ ///
+ /// 生成序列号
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Generate")]
+ public async Task Generate(GenerateSecurityNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _securityNumberService.Generate(dto, loginInfo);
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/SerialNumberController.cs b/src/BarCode.Web.Api/Controllers/SerialNumberController.cs
new file mode 100644
index 0000000..e003ac8
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/SerialNumberController.cs
@@ -0,0 +1,309 @@
+using AutoMapper;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Values;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Repositories;
+using BarCode.Web.Core.Dto;
+using BarCode.Web.Domain.IService;
+using BarCode.Web.Core.Help;
+using BarCode.Web.Core;
+using BarCode.Web.Domain.Services;
+using BarCode.Web.Domain.Options;
+using Microsoft.Extensions.Options;
+using NPOI.SS.Formula.Functions;
+using System.Diagnostics.Eventing.Reader;
+using BarCode.Web.Core.Dto.Box;
+using System.Text.RegularExpressions;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 序列号
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class SerialNumberController : ControllerBase
+ {
+ private readonly IMapper _mapper;
+ private readonly ILoginService _loginService;
+ private readonly ISerialNumbersRepositories _serialNumbersRepositories;
+ private readonly ISerialNumberService _serialNumberService;
+ private readonly IExportExcelService _exportExcelService;
+ private readonly QiniuOptions _option;
+ private readonly ISGenerateRecordRepositories _sGenerateRecordRepositories;
+ public SerialNumberController(IMapper mapper, ILoginService loginService, ISerialNumbersRepositories serialNumbersRepositories,
+ ISerialNumberService serialNumberService, IExportExcelService exportExcelService,
+ IOptions option, ISGenerateRecordRepositories sGenerateRecordRepositories)
+ {
+ _mapper = mapper;
+ _loginService = loginService;
+ _serialNumbersRepositories = serialNumbersRepositories;
+ _serialNumberService = serialNumberService;
+ _exportExcelService = exportExcelService;
+ _option = option?.Value;
+ _sGenerateRecordRepositories = sGenerateRecordRepositories;
+ }
+ ///
+ /// 序列码生成记录列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetGenerateRecordList")]
+ public async Task> GetGenerateRecordList([FromBody] SGenerateRecordQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+ ///
+ /// 序列码列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetList")]
+ public async Task> GetPagedList([FromBody] SerialNumberQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ if (!string.IsNullOrEmpty(dto.NumberCodeBegin)
+ && (!Regex.Match(dto.NumberCodeBegin, "^[0-9]*$").Success || dto.NumberCodeBegin.Length < 12))
+ return ResultPagedList.ReFailure(ResultCodes.NumberCode_Invalid_Error);
+ if (!string.IsNullOrEmpty(dto.NumberCodeEnd)
+ && (!Regex.Match(dto.NumberCodeEnd, "^[0-9]*$").Success || dto.NumberCodeEnd.Length < 12))
+ return ResultPagedList.ReFailure(ResultCodes.NumberCode_Invalid_Error);
+
+ var (list, count) = await _serialNumbersRepositories.GetListAsync(dto, loginInfo);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+ ///
+ /// 条码生成记录页面-下载条码
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("ExportAll")]
+ public Task> ExportAll(OperateRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
+
+ var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
+ if (entityList.Count < 0) return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
+ string orgCode = entityList.First().OrgCode;
+
+ //反写下载数据
+ var resSuccess = this.DownLoad(new OperateSerialNumberRequest() { GenerateRecordIds = dto.Ids, IsAll = true }).GetAwaiter().GetResult();
+ if (!resSuccess.IsSuccess) Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
+
+ string fileName = FileDownLoadOrderType.SerialNumbers.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
+ string res = _option.Url + fileName;
+
+ SerialNumbersExportRequest request = new SerialNumbersExportRequest();
+ request.Ids = dto.Ids;
+
+ Task.Run(async () =>
+ {
+ await _exportExcelService.ExportList(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumbers, orgCode);
+ });
+
+ return Task.FromResult(Result.ReSuccess(res));
+ }
+ ///
+ /// 序列码页面-条码下载
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Export")]
+ public Task> Export([FromBody] SerialNumberQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return Task.FromResult(Result.ReFailure(ResultCodes.Token_Invalid_Error));
+
+ var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
+ if (entity == null) return Task.FromResult(Result.ReFailure(ResultCodes.NoDateError));
+ string orgCode = entity.OrgCode;
+
+ //反写下载数据
+ Result resSuccess;
+ if (dto.SerialNumbers.Count() > 0)
+ {
+ resSuccess = this.DownLoad(new OperateSerialNumberRequest()
+ {
+ GenerateRecordIds = new List() { dto.GenerateRecordId },
+ IsAll = false,
+ SerialNumbers = dto.SerialNumbers
+ }).GetAwaiter().GetResult();
+ }
+ else
+ {
+ resSuccess = this.DownLoad(new OperateSerialNumberRequest()
+ {
+ GenerateRecordIds = new List() { dto.GenerateRecordId },
+ IsAll = true
+ }).GetAwaiter().GetResult();
+ }
+ if (!resSuccess.IsSuccess) return Task.FromResult(Result.ReFailure(resSuccess.Message, resSuccess.Status));
+
+ string fileName = FileDownLoadOrderType.SerialNumberInfo.GetRemark() + DateTime.Now.DateToStringSecondsNoSpace() + ".xlsx";
+ string res = _option.Url + fileName;
+
+ Task.Run(async () =>
+ {
+ await _exportExcelService.ExportList(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
+ });
+
+ return Task.FromResult(Result.ReSuccess(res));
+ }
+ ///
+ /// 生成序列号
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Generate")]
+ public async Task Generate(GenerateSerialNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _serialNumberService.Generate(dto, loginInfo);
+ }
+
+ ///
+ /// 打印
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("Print")]
+ public async Task Print(OperateSerialNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _serialNumberService.Print(dto);
+ }
+
+ ///
+ /// 下载(一般后端内部调用)
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("DownLoad")]
+ public async Task DownLoad(OperateSerialNumberRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _serialNumberService.DownLoad(dto);
+ }
+
+
+ ///
+ /// 获取序列号信息
+ ///
+ /// 箱Id
+ ///
+ [HttpPost]
+ [Route("GetByBoxId")]
+ public async Task> GetByBoxId(SerialNumberByBoxIdQueryRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultPagedList.ReFailure(ResultCodes.Token_Invalid_Error);
+ if (dto.BoxId == 0)
+ return ResultPagedList.ReFailure(ResultCodes.NoDateError);
+
+ var (list, count) = await _serialNumbersRepositories.GetEntityListByBoxId(dto);
+ var result = ResultPagedList.ReSuccess(list, count);
+ return result;
+ }
+
+
+ /////
+ ///// 获取序列号信息
+ /////
+ ///// 序列号
+ ///// 组织或供应商编码
+ /////
+ //[HttpGet]
+ //[Route("Get")]
+ //public async Task> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
+ //{
+ // var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ // if (loginInfo == null || loginInfo.UserInfo == null)
+ // return ResultList.ReFailure(ResultCodes.Token_Invalid_Error);
+ // if (string.IsNullOrEmpty(orgCode))
+ // return ResultList.ReFailure(ResultCodes.NoOrgError);
+
+ // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
+ // // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
+ // if (res == null) return ResultList.ReFailure(ResultCodes.SerialNumberNoData);
+
+ // // return ResultList.ReSuccess(res);
+ // return ResultList.ReSuccess(res.ToList());
+ //}
+
+
+ ///
+ /// 获取序列号信息
+ ///
+ /// 序列号
+ /// 组织或供应商编码
+ ///
+ [HttpGet]
+ [Route("Get")]
+ public async Task> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ if (string.IsNullOrEmpty(orgCode))
+ return Result.ReFailure(ResultCodes.NoOrgError);
+
+ var res = await _serialNumbersRepositories.GetEntity(serialNumber, orgCode, loginInfo);
+ // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
+ if (res == null) return Result.ReFailure(ResultCodes.SerialNumberNoData);
+
+ // return ResultList.ReSuccess(res);
+ return Result.ReSuccess(res);
+ }
+
+ ///
+ /// 修改序列码物料
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("UpdateMaterial")]
+ public async Task UpdateMaterial(UpdateMaterialRequest dto)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return Result.ReFailure(ResultCodes.Token_Invalid_Error);
+ return await _serialNumberService.UpdateMaterial(dto);
+ }
+
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/SysConfigController.cs b/src/BarCode.Web.Api/Controllers/SysConfigController.cs
new file mode 100644
index 0000000..9423ddb
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/SysConfigController.cs
@@ -0,0 +1,180 @@
+using AutoMapper;
+using BarCode.Web.Core.Dto.Erp;
+using BarCode.Web.Core.Dto.Erp.Org;
+using BarCode.Web.Core.Dto.Erp.Supplier;
+using BarCode.Web.Core.Dto.Login;
+using BarCode.Web.Core.Dto.SingleData;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Options;
+using BarCode.Web.Domain.Values;
+using BarCode.Web.Domain.Values.Single;
+using BarCode.Web.Repositories;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Microsoft.Extensions.Options;
+using NPOI.POIFS.FileSystem;
+using System.ComponentModel.Design;
+
+namespace BarCode.Web.Api.Controllers
+{
+ ///
+ /// 系统配置
+ ///
+ [Route("api/[controller]")]
+ [ApiController]
+ public class SysConfigController : ControllerBase
+ {
+ private readonly ILoginService _loginService;
+ private readonly IBasicsRepositories _basicsRepositories;
+ private readonly IErpService _erpService;
+ private readonly ISingleDataService _singleDataService;
+ private readonly IMapper _mapper;
+ private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
+ private readonly ILogger _logger;
+ private ErpOptions _erpOptions;
+ private readonly IMemoryCache _memoryCache;
+
+ public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IOptions erpOptions, IErpService erpService, ISingleDataService singleDataService, IMemoryCache memoryCache,
+ IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService,
+ ILogger logger)
+ {
+ this._erpOptions = erpOptions?.Value;
+ this._memoryCache = memoryCache;
+ _loginService = loginService;
+ _basicsRepositories = basicsRepositories;
+ _erpService = erpService;
+ _singleDataService = singleDataService;
+ _mapper = mapper;
+ _erpBasicDataExtendService = erpBasicDataExtendService;
+ _logger = logger;
+ }
+ ///
+ /// 获取物料;通过规格型号
+ ///
+ ///
+ ///
+ [HttpGet]
+ [Route("GetMaterialList")]
+ public async Task> GetMaterialList([FromQuery] string speci)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null || loginInfo.UserInfo == null)
+ return ResultList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ var materials = _memoryCache.Get>(_erpOptions.cache_materail_key);
+ if (materials == null)
+ {
+ var res = await _erpService.BillQueryForMaterial();
+ if (res.IsSuccess)
+ materials = res.Data.ToList();
+ }
+ if (materials == null) return ResultList.ReFailure(ResultCodes.MateriaNoData);
+ //没有物料Id 32进制的也过滤掉
+ var result = materials.Where(x => x.Specifications.Contains(speci)
+ && !string.IsNullOrEmpty(x.IdConvertBar.Trim())).Take(30).ToList();
+ return ResultList.ReSuccess(result);
+ }
+ ///
+ /// 获取供应商-erp基础数据
+ /// 使用code做键
+ ///
+ /// 供应商名字
+ /// 组织编码
+ ///
+ [HttpGet]
+ [Route("GetSupplierOrOrg")]
+ public async Task> GetSupplierOrOrg([FromQuery] string? name, [FromQuery] string orgCode)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return ResultList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ var result = await _singleDataService.GetSingleDataNoCache, NameRequest, SysConfigAction>(
+ new NameRequest(name, loginInfo.UserInfo.CompanyId), SysConfigAction.GetSupplierByNameAndCompany, SingleControllerType.SysConfig);
+ if (!result.IsSuccess)
+ return ResultList.ReFailure(result.Message, result.Status);
+
+ List suppliers = result.Data.ToList();
+ //suppliers = suppliers.Where(w => w.ErpOrgCode.Equals(orgCode)).ToList();
+ if (!string.IsNullOrEmpty(name))
+ suppliers = suppliers.Where(w => w.Name.Contains(name)).ToList();
+ List pullList = new List();
+ foreach (var c in suppliers)
+ {
+ pullList.Add(new PullDownStrResponse()
+ {
+ Id = "s_" + c.Id.ToString(),
+ Name = c.Name,
+ Code = "s_" + c.Code
+ });
+ }
+
+ //var org_result = await _erpService.BillQueryForOrg();
+ //List orgs = org_result.Data.ToList();
+ //if (!string.IsNullOrEmpty(name))
+ // orgs = orgs.Where(w => w.Name.Contains(name)).ToList();
+ //foreach (var c in orgs)
+ //{
+ // pullList.Add(new PullDownStrResponse()
+ // {
+ // Id = "o_" + c.Id.ToString(),
+ // Name = c.Name,
+ // Code = "o_" + c.Number
+ // });
+ //}
+
+ return ResultList.ReSuccess(pullList);
+ }
+ ///
+ /// 获取组织-erp基础数据
+ /// 使用 code做键
+ ///
+ ///
+ [HttpGet]
+ [Route("GetOrg")]
+ public async Task> GetOrg([FromQuery] string? name)
+ {
+ var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
+ if (loginInfo == null)
+ return ResultList.ReFailure(ResultCodes.Token_Invalid_Error);
+
+ List pullList = new List();
+
+ if (loginInfo.UserInfo.Identity == 2)
+ {
+ pullList.Add(new PullDownStrResponse()
+ {
+ Id = loginInfo.UserInfo.SupplierId.ToString(),
+ Name = loginInfo.UserInfo.SupplierName,
+ Code = "s_" + loginInfo.UserInfo.SupplierCode,
+ IsDefault = true
+ }); ;
+ return ResultList.ReSuccess(pullList);
+ }
+ var result = await _singleDataService.GetSingleDataNoCache, UserRequest, SysConfigAction>(
+ new UserRequest(loginInfo.UserInfo.UcId), SysConfigAction.GetOrgByUser, SingleControllerType.SysConfig);
+ if (!result.IsSuccess)
+ return ResultList.ReFailure(result.Message, result.Status);
+
+ List orgs = result.Data.ToList();
+ if (!string.IsNullOrEmpty(name))
+ orgs = orgs.Where(w => w.Name.Contains(name)).ToList();
+ foreach (var c in orgs)
+ {
+ pullList.Add(new PullDownStrResponse()
+ {
+ Id = c.Id.ToString(),
+ Name = c.Name,
+ Code = "o_" + c.ErpOrgCode
+ });
+ }
+ //默认显示第一个
+ pullList.First().IsDefault = true;
+
+ return ResultList.ReSuccess(pullList);
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/TestController.cs b/src/BarCode.Web.Api/Controllers/TestController.cs
new file mode 100644
index 0000000..e42223d
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/TestController.cs
@@ -0,0 +1,508 @@
+using AutoMapper;
+using AutoMapper.Internal.Mappers;
+using BarCode.Web.Core.Dto.Box;
+using BarCode.Web.Core.Dto.Erp.Org;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Core.Help;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Entitys;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.Services;
+using BarCode.Web.Domain.Services.Public;
+using BarCode.Web.Domain.Values;
+using BarCode.Web.Repositories;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Storage;
+using Newtonsoft.Json;
+using NPOI.SS.Formula.Functions;
+using StackExchange.Redis;
+using System.ComponentModel.Design;
+using System.Diagnostics.Eventing.Reader;
+using System.Json;
+using System.Runtime.InteropServices.JavaScript;
+using System.Text.Json.Nodes;
+using System.Text.RegularExpressions;
+
+namespace BarCode.Web.Api.Controllers
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class TestController : ControllerBase
+ {
+ private readonly ILoginService _loginService;
+ private readonly IFileDownManagerRepositories _repositories;
+ private readonly IMaterialService _materialService;
+ private readonly ISerialNumberService _serialNumberService;
+ private readonly IBoxRepositories _boxRepositories;
+ private readonly IMapper _mapper;
+ private readonly ISecurityGenerateRecordRepositories _securityGenerateRecordRepositories;
+ private IBasicsRepositories _transactionRepositories;
+ private readonly IBoxService _boxService;
+ private readonly IErpService _erpService;
+ private readonly ISGenerateRecordRepositories _sGenerateRecordRepositories;
+ private readonly ISerialNumbersRepositories _serialNumbersRepositories;
+ private readonly ISecurityNumbersRepositories _securityNumbersRepositories;
+ public TestController(ILoginService loginService, IFileDownManagerRepositories repositories, IMaterialService materialService,
+ ISerialNumberService serialNumberService, IBoxRepositories boxRepositories, IMapper mapper,
+ ISecurityGenerateRecordRepositories securityGenerateRecordRepositories, IBasicsRepositories transactionRepositories,
+ IBoxService boxService, IErpService erpService, ISGenerateRecordRepositories sGenerateRecordRepositories,
+ ISerialNumbersRepositories serialNumbersRepositories, ISecurityNumbersRepositories securityNumbersRepositories)
+ {
+ _loginService = loginService;
+ _repositories = repositories;
+ _materialService = materialService;
+ _serialNumberService = serialNumberService;
+ _boxRepositories = boxRepositories;
+ _mapper = mapper;
+ _securityGenerateRecordRepositories = securityGenerateRecordRepositories;
+ _transactionRepositories = transactionRepositories;
+ _boxService = boxService;
+ _erpService = erpService;
+ _sGenerateRecordRepositories = sGenerateRecordRepositories;
+ _serialNumbersRepositories = serialNumbersRepositories;
+ _securityNumbersRepositories = securityNumbersRepositories;
+ }
+ [HttpGet]
+ [Route("Get")]
+ public async Task Get()
+ {
+ //await GetFSer();
+
+ //Dictionary dic = new Dictionary();
+ //dic.Add("ABCD", "1111");
+ //dic.Add("ABCE", "2222");
+ //dic.Add("ABCF", "3333");
+ //dic.Add("BCDD", "4444");
+ //var v = from d in dic where d.Value.Equals("2222") select d;
+
+ //var b = v.Select(s => s.Key).ToList();
+
+ //await _materialService.SyncBar();
+
+ //await GetSer();
+
+ //await GetSer();
+ //GetBox();
+ //await GetBox();
+ //string msg = "o_sdf";
+ //string s = msg.Substring(0, 2);
+ //string s2 = msg.Substring(2, msg.Length-2);
+
+ //var supplier_result = await _erpService.BillQueryForSupplier();
+
+ //DateTime begin = DateTime.Now.AddDays(-1);
+ //begin = begin.AddHours(-1);
+ //WmsBoxRequest request = new WmsBoxRequest(begin, DateTime.Now);
+ //var b = await _boxService.GetCartonListAsync(request);
+
+ // List ids = new List();
+ // ids.Add(1);ids.Add(2);
+ // var bList = await _boxRepositories.GetEntityList(ids);
+ // foreach(var b in bList)
+ // {
+ // //var d= b.Details.FirstOrDefault(f=>f.MaterialNumber=="1");
+ // // d.Qty = 2;
+ // if (b.Id == 1)
+ // {
+ // var d = b.Details.FirstOrDefault(f => f.MaterialNumber == "1");
+ // d.Qty = 10;
+ // b.Details.Add(new BoxDetails()
+ // {
+ // MaterialNumber = "3",
+ // Qty = 3
+ // });
+ // }else
+ // {
+ // var d= b.Details.FirstOrDefault(f=>f.MaterialNumber=="2");
+ // b.Details.Remove(d);
+ // }
+ // }
+ //var s= await _boxRepositories.EditEntityList(bList);
+
+
+ //提交事务
+ // var isSuccess = _transactionRepositories.CommitTransaction(true, _transaction);
+ //var b=await _boxRepositories.Get(1);
+
+
+
+ //var c=_mapper.Map(b);
+ //string exclude = "WXYZ";
+ //int? FLength = 9;
+ //for (int i = 1; i < 100; i++)
+ //{
+ // var bc = Radix.ConvertRadix36((ulong)i, exclude.ToCharArray()).PadLeft(FLength ?? 0, '0');
+ // Console.WriteLine($"防伪码{i} : {bc}");
+ //}
+ //var b = await _boxRepositories.Get(1);
+ //GenerateSerialNumberRequest r = new GenerateSerialNumberRequest();
+ //r.OrgCode = "101";
+ //r.Details = new List();
+ ////r.Details.Add(new GenerateSerialNumberInfoRequest()
+ ////{
+ //// MaterialId = 260845,
+ //// MaterialNumber = "AS-005-000-002",
+ //// Number = 10
+ ////});
+ //r.Details.Add(new GenerateSerialNumberInfoRequest()
+ //{
+ // IdConvertBar = "",
+ // MaterialNumber = "G01-12-005834",
+ // Number = 3
+ //});
+ //await _serialNumberService.Generate(r, null);
+
+ // await _materialService.SyncNewMaterials();
+ //var s= await _repositories.GetList(new Core.Dto.FileDownManagerRequest(), 0);
+ return Result.ReSuccess();
+ }
+
+ private async Task GetBox()
+ {
+ string[] arr = System.IO.File.ReadAllLines("E:\\1\\x.txt");
+ var sList = GetS();
+ //var sList = new List();
+ List boxs = new List();
+ int i = 0;
+ foreach (string str in arr)
+ {
+ i++;
+ Console.WriteLine("操作条数:" + i);
+ var strarr = str.Split('\t');
+ if (strarr[3] == "NULL")
+ {
+ Box box = new Box()
+ {
+ CompanyId = 1,
+ Id = Convert.ToInt32(strarr[2].Replace("CTN", "")),
+ BoxBillNo = strarr[2],
+ OrgCode = strarr[0].Replace("-", ""),
+ SupplierCode = strarr[1].Replace("-", ""),
+ CreateTime = strarr[6] != "-" ? Convert.ToDateTime(strarr[6]) : DateTime.Now
+ };
+ if (string.IsNullOrEmpty(box.OrgCode) && string.IsNullOrEmpty(box.SupplierCode))
+ box.OrgCode = "101";
+ boxs.Add(box);
+ }
+ else
+ {
+ var box = boxs.FirstOrDefault(w => w.BoxBillNo.Equals(strarr[2]));
+ if (box == null)
+ {
+ box = new Box()
+ {
+ CompanyId = 1,
+ Id = Convert.ToInt32(strarr[2].Replace("CTN", "")),
+ BoxBillNo = strarr[2],
+ OrgCode = strarr[0].Replace("-", ""),
+ SupplierCode = strarr[1].Replace("-", ""),
+ CreateTime = strarr[6] != "-" ? Convert.ToDateTime(strarr[6]) : DateTime.Now,
+ CartonBeginTime = strarr[7] != "-" ? Convert.ToDateTime(strarr[7]) : null,
+ CartonEndTime = strarr[8] != "-" ? Convert.ToDateTime(strarr[8]) : null,
+ Status = strarr[8] != "-" ? BoxStatus.Complete : BoxStatus.NoComplete,
+ PrintNumber = Convert.ToInt32(strarr[10])
+ };
+ if (string.IsNullOrEmpty(box.OrgCode) && string.IsNullOrEmpty(box.SupplierCode))
+ box.OrgCode = "101";
+
+ var sers = sList.Where(w => w.BoxId == box.Id && w.MaterialNumber == strarr[3]).Select(s => s.SerialNumber).ToList();
+
+ box.Details.Add(new BoxDetails()
+ {
+ MaterialNumber = strarr[3],
+ Qty = Convert.ToInt32(strarr[4]),
+ SerialNumbers = sers
+ });
+ boxs.Add(box);
+ }
+ else
+ {
+ var sers = sList.Where(w => w.BoxId == box.Id && w.MaterialNumber == strarr[3]).Select(s => s.SerialNumber).ToList();
+
+ box.Details.Add(new BoxDetails()
+ {
+ MaterialNumber = strarr[3],
+ Qty = Convert.ToInt32(strarr[4]),
+ SerialNumbers = sers
+ });
+ }
+ }
+ }
+ var lis = boxs.GroupBy(g => new { g.OrgCode, g.SupplierCode }).Select(s => s.Key).ToList();
+
+ var c = boxs.Where(w => w.CreateTime > DateTime.Now.AddHours(-1)).Count();
+ var c1 = boxs.Where(w => w.Status == BoxStatus.Complete).Count();
+ var c2 = boxs.Where(w => w.Status == BoxStatus.NoComplete).Count();
+
+ var res = await _boxRepositories.AddRange(boxs);
+ }
+
+ private List GetS()
+ {
+ List serialNumbers = new List();
+
+ string[] arr_t = System.IO.File.ReadAllLines("E:\\1\\t.txt");
+ long number = 200000000;
+ foreach (var str in arr_t)
+ {
+ var strarr = str.Split('\t');
+ try
+ {
+ number = number - 1;
+ var s = new SerialNumbers();
+
+ s.Id = number;
+ s.SerialNumber = strarr[1];
+ s.OrgCode = strarr[2].Replace("-", "");
+ s.SupplierCode = strarr[3].Replace("-", "");
+ s.MaterialNumber = strarr[5];
+ if (string.IsNullOrEmpty(strarr[6]) || strarr[6] == "-")
+ s.BoxId = 0;
+ else
+ s.BoxId = Convert.ToInt32(strarr[6].ToUpper().Replace("CTN", ""));
+ if (string.IsNullOrEmpty(strarr[6]) || strarr[6] == "-")
+ s.IsUse = false;
+ else
+ s.IsUse = true;
+ if (!string.IsNullOrEmpty(strarr[7]) && strarr[7] != "-")
+ s.CreateTime = Convert.ToDateTime(strarr[7]);
+ if (!string.IsNullOrEmpty(strarr[8]) && strarr[8] != "-")
+ s.CompleteCartonTime = Convert.ToDateTime(strarr[8]);
+ s.NumberCode = "";
+
+ if (string.IsNullOrEmpty(s.OrgCode) && string.IsNullOrEmpty(s.SupplierCode))
+ s.OrgCode = "101";
+ serialNumbers.Add(s);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("数据处理错误:" + str);
+ }
+ }
+ return serialNumbers;
+ //int couont_1 = serialNumbers.Where(w => w.OrgCode == "" && w.SupplierCode == "").Count();
+ //int couont_2 = serialNumbers.GroupBy(g =>new { g.MaterialNumber ,g.OrgCode,g.SupplierCode}).Count();
+
+ //var lis= serialNumbers.GroupBy(g => new { g.OrgCode, g.SupplierCode }).Select(s=>s.Key).ToList();
+ }
+
+ private List GetE()
+ {
+ List serialNumbers = new List();
+
+ string[] arr_t = System.IO.File.ReadAllLines("E:\\1\\e.txt");
+ long number = 199000000;
+ foreach (var str in arr_t)
+ {
+ var strarr = str.Split('\t');
+ try
+ {
+ number = number - 1;
+ var s = new SerialNumbers();
+
+ s.Id = number;
+ s.SerialNumber = strarr[5];
+ s.OrgCode = "101";
+ s.SupplierCode = "";
+ s.MaterialNumber = strarr[0];
+ s.BoxId = 0;
+ s.IsUse = false;
+ s.CreateTime = Convert.ToDateTime("2023-09-06 00:00:05");
+ s.NumberCode = "";
+ serialNumbers.Add(s);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("数据处理错误:" + str);
+ }
+ }
+ return serialNumbers;
+ //int couont_1 = serialNumbers.Where(w => w.OrgCode == "" && w.SupplierCode == "").Count();
+ //int couont_2 = serialNumbers.GroupBy(g =>new { g.MaterialNumber ,g.OrgCode,g.SupplierCode}).Count();
+
+ //var lis= serialNumbers.GroupBy(g => new { g.OrgCode, g.SupplierCode }).Select(s=>s.Key).ToList();
+ }
+
+
+ private async Task GetSer()
+ {
+ IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
+
+ Result res_Rollback = Result.ReSuccess();
+ bool isSuccess = true;
+
+ // var sList = GetS();
+ var sList = GetE();
+ var mList = sList.GroupBy(g => new { g.MaterialNumber, g.OrgCode, g.SupplierCode }).Select(s => s.Key).ToList();
+ int numberid = 2620;
+ List records = new List();
+ int bid = 0;
+ foreach (var m in mList)
+ {
+ bid++;
+ Console.WriteLine($"处理生成计划数据{bid}");
+
+ var scountList = sList.Where(w => w.MaterialNumber == m.MaterialNumber && w.OrgCode == m.OrgCode && w.SupplierCode == m.SupplierCode).ToList();
+ var scount = scountList.Count();
+ SerialNumberGenerateRecord record = new SerialNumberGenerateRecord()
+ {
+ Id = numberid,
+ MaterialNumber = m.MaterialNumber,
+ OrgCode = m.OrgCode,
+ SupplierCode = m.SupplierCode,
+ CompanyId = 1,
+ IsGenerateComplete = true,
+ Number = scount,
+ GenerateCompleteTime = Convert.ToDateTime("2023-09-06 00:00:05"),
+ CreateTime = Convert.ToDateTime("2023-09-06 00:00:05")
+ };
+ records.Add(record);
+ scountList.ForEach(f => f.GenerateRecordId = numberid);
+ numberid++;
+ }
+ var cs = sList.Where(w => w.GenerateRecordId == 0).Count();
+ try
+ {
+ if (res_Rollback.IsSuccess)
+ {
+ var res = await _sGenerateRecordRepositories.AddRange(records, false);
+ if (!res) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
+ }
+ if (res_Rollback.IsSuccess)
+ {
+ for (int i = 1; i <= 7; i++)
+ {
+ Console.WriteLine($"正在处理第{i}页数据");
+ var sis = sList.Skip((i - 1) * 100000).Take(100000).ToList();
+ if (sis.Count() <= 0) break;
+ var res = await _serialNumbersRepositories.AddRange(sis, false);
+ if (!res)
+ {
+ res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
+ break;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+
+ throw ex;
+ }
+
+ //提交事务An error occurred while saving the entity changes. See the inner exception for details.”
+
+ isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
+ }
+
+
+
+ private List GetFE()
+ {
+ List serialNumbers = new List();
+
+ string[] arr_t = System.IO.File.ReadAllLines("E:\\1\\b6.txt");
+
+ foreach (var str in arr_t)
+ {
+ var strarr = str.Split('\t');
+ try
+ {
+ var s = new SecurityNumbers();
+
+ s.SecurityNumber = strarr[3];
+ s.OrgCode = "101";
+ s.SupplierCode = "";
+ s.MaterialNumber = strarr[0];
+ s.CreateTime = Convert.ToDateTime("2024-06-13 12:10:00");
+ serialNumbers.Add(s);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("数据处理错误:" + str);
+ }
+ }
+ return serialNumbers;
+ //int couont_1 = serialNumbers.Where(w => w.OrgCode == "" && w.SupplierCode == "").Count();
+ //int couont_2 = serialNumbers.GroupBy(g =>new { g.MaterialNumber ,g.OrgCode,g.SupplierCode}).Count();
+
+ //var lis= serialNumbers.GroupBy(g => new { g.OrgCode, g.SupplierCode }).Select(s=>s.Key).ToList();
+ }
+
+
+ private async Task GetFSer()
+ {
+ IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
+
+ Result res_Rollback = Result.ReSuccess();
+ bool isSuccess = true;
+
+ // var sList = GetS();
+ var sList = GetFE();
+ var mList = sList.GroupBy(g => new { g.MaterialNumber }).Select(s => s.Key).ToList();
+ int numberid = 30872924;
+ List records = new List();
+ int bid = 0;
+ foreach (var m in mList)
+ {
+ bid++;
+ Console.WriteLine($"处理生成计划数据{bid}");
+
+ var scountList = sList.Where(w => w.MaterialNumber == m.MaterialNumber).ToList();
+ var scount = scountList.Count();
+ SecurityNumberGenerateRecord record = new SecurityNumberGenerateRecord()
+ {
+ Id = numberid,
+ LotNumber = "",
+ MaterialNumber = m.MaterialNumber,
+ OrgCode = "101",
+ SupplierCode = "",
+ CompanyId = 1,
+ IsGenerateComplete = true,
+ Number = scount,
+ GenerateCompleteTime = Convert.ToDateTime("2024-06-13 12:15:00"),
+ CreateTime = Convert.ToDateTime("2024-06-13 12:10:00")
+ };
+ records.Add(record);
+ scountList.ForEach(f => f.GenerateRecordId = numberid);
+ numberid++;
+ }
+ var cs = sList.Where(w => w.GenerateRecordId == 0).Count();
+ try
+ {
+ if (res_Rollback.IsSuccess)
+ {
+ var res = await _securityGenerateRecordRepositories.AddRange(records, false);
+ if (!res) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
+ }
+ if (res_Rollback.IsSuccess)
+ {
+ for (int i = 1; i <= 7; i++)
+ {
+ Console.WriteLine($"正在处理第{i}页数据");
+ var sis = sList.Skip((i - 1) * 100000).Take(100000).ToList();
+ if (sis.Count() <= 0) break;
+ var res = await _securityNumbersRepositories.AddRange(sis, false);
+ if (!res)
+ {
+ res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
+ break;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+
+ throw ex;
+ }
+
+ //提交事务An error occurred while saving the entity changes. See the inner exception for details.”
+
+ isSuccess = _transactionRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/Controllers/WmsBoxController.cs b/src/BarCode.Web.Api/Controllers/WmsBoxController.cs
new file mode 100644
index 0000000..0e2c118
--- /dev/null
+++ b/src/BarCode.Web.Api/Controllers/WmsBoxController.cs
@@ -0,0 +1,150 @@
+using AutoMapper;
+using BarCode.Web.Domain.Infrastructure;
+using BarCode.Web.Domain.IService.Public;
+using BarCode.Web.Domain.IService;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using BarCode.Web.Core.Dto.Box;
+using BarCode.Web.Core.Internal.Results;
+using BarCode.Web.Domain.Values;
+using System.Text.RegularExpressions;
+using NPOI.SS.Formula.Functions;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+using BarCode.Web.Core.Dto.SerialNumbers;
+using BarCode.Web.Domain.Services.Public;
+using BarCode.Web.Domain.Values.Single;
+using System.ComponentModel.Design;
+
+namespace BarCode.Web.Api.Controllers
+{
+ [Route("api/[controller]")]
+ [ApiController]
+ public class WmsBoxController : ControllerBase
+ {
+ private readonly IBoxRepositories _boxRepositories;
+ private readonly IMapper _mapper;
+ private readonly ILoginService _loginService;
+ private readonly IBoxService _boxService;
+ private readonly ILogger _logger;
+ private readonly ISerialNumbersRepositories _serialNumbersRepositories;
+ private readonly ISingleDataService _singleDataService;
+ public WmsBoxController(IMapper mapper, ILoginService loginService, IBoxRepositories boxRepositories,
+ IBoxService boxService, ILogger logger,
+ ISerialNumbersRepositories serialNumbersRepositories, ISingleDataService singleDataService)
+ {
+ _boxRepositories = boxRepositories;
+ _mapper = mapper;
+ _loginService = loginService;
+ _boxService = boxService;
+ _logger = logger;
+ _serialNumbersRepositories = serialNumbersRepositories;
+ _singleDataService = singleDataService;
+ }
+
+ ///
+ /// Wms获取箱信息-列表
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetList")]
+ public async Task GetList(WmsBoxRequest dto)
+ {
+ _logger.LogInformation($"请求消息:{JsonConvert.SerializeObject(dto)}");
+ List list = new List();
+ int count = 0;
+ try
+ {
+ (list, count) = await _boxService.GetCartonListAsync(dto);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError($"wms系统获取箱信息异常:{ex.Message}");
+ return new OpsReponse()
+ {
+ succeeded = false
+ };
+ }
+ OpsInfo info = new OpsInfo()
+ {
+ date = JsonConvert.SerializeObject(list)
+ };
+ OpsReponse reponse = new OpsReponse()
+ {
+ succeeded = true,
+ data = info
+ };
+ return reponse;
+ }
+ ///
+ /// Wms获取序列号信息
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Route("GetSerialNumber")]
+ public async Task> GetSerialNumber(SerialNumbersWmsRequest dto)
+ {
+ _logger.LogInformation($"wms获取序列码:{JsonConvert.SerializeObject(dto)}");
+
+ var entity = await _serialNumbersRepositories.GetEntityWms(dto.SerialNumber);
+ if (entity == null) return Result.ReFailure(ResultCodes.SerialNumberNoData);
+ if (entity.BoxId > 0)
+ return Result.ReFailure(ResultCodes.SerialNumberBindBox);
+ if (entity.IsUse == true)
+ return Result.ReFailure(ResultCodes.SerialNumberIsUse);
+ var response = new SerialNumbersWmsResponse()
+ {
+ SerialNumber = entity.SerialNumber.Equals(dto.SerialNumber) ? entity.SerialNumber : entity.NumberCode,
+ MaterialNumber = entity.MaterialNumber,
+ CreateTime = entity.CreateTime,
+ Creator = _singleDataService.GetSingleData(SingleAction.Users, 1, entity.CreatorId)
+ };
+ //把查询到的序列码修改成使用
+ entity.WmsGet(dto.SerialNumber);
+ var list = new List();
+ list.Add(entity);
+ var res = await _serialNumbersRepositories.EditEntityList(list);
+ if (!res) return Result.ReFailure(ResultCodes.DateWriteError);
+
+ _logger.LogInformation($"wms获取序列码返回序列码信息:{JsonConvert.SerializeObject(response)}");
+
+ return Result.ReSuccess(response);
+ }
+
+ ///
+ /// 获取序列号信息
+ ///
+ /// 序列号
+ ///
+ [HttpGet]
+ [Route("Get/{serialNumber}")]
+ public async Task> Get([FromRoute] string serialNumber)
+ {
+ if (string.IsNullOrEmpty(serialNumber))
+ return Result.ReFailure(ResultCodes.SerialNumbersNoData);
+
+ var serial = await _serialNumbersRepositories.GetExternal(serialNumber);
+ if (serial == null) return Result.ReFailure(ResultCodes.SerialNumbersNoData);
+ return Result.ReSuccess(serial);
+ }
+ }
+
+ public class OpsInfo
+ {
+ public int code { get; set; }
+ public string message { get; set; }
+ public string date { get; set; }
+ public string token { get; set; }
+ }
+ public class OpsReponse
+ {
+ public int statusCode { get; set; }
+ public bool succeeded { get; set; }
+ public string errors { get; set; }
+ public string extras { get; set; }
+
+ public OpsInfo data { get; set; }
+ }
+}
diff --git a/src/BarCode.Web.Api/CustomResultFilter .cs b/src/BarCode.Web.Api/CustomResultFilter .cs
new file mode 100644
index 0000000..a4f711c
--- /dev/null
+++ b/src/BarCode.Web.Api/CustomResultFilter .cs
@@ -0,0 +1,40 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using BarCode.Web.Core.Internal.Results;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace BarCode.Web.Api
+{
+ ///
+ /// 错误拦截
+ ///
+ public class CustomResultFilter : ActionFilterAttribute
+ {
+ public override void OnResultExecuting(ResultExecutingContext context)
+ {
+ if (!context.ModelState.IsValid)
+ {
+ var result = new Result();
+
+ foreach (var item in context.ModelState.Values)
+ {
+ foreach (var error in item.Errors)
+ {
+ result.Message += error.ErrorMessage + ",";
+ result.Status = 4204004;
+ }
+ }
+ result.Message = result.Message.TrimEnd(',');
+ context.Result = new JsonResult(result);
+ }
+ }
+
+ public override void OnActionExecuting(ActionExecutingContext context)
+ {
+ }
+
+ }
+}
diff --git a/src/BarCode.Web.Api/Program.cs b/src/BarCode.Web.Api/Program.cs
new file mode 100644
index 0000000..43bda42
--- /dev/null
+++ b/src/BarCode.Web.Api/Program.cs
@@ -0,0 +1,60 @@
+using BarCode.Web.Api;
+using BarCode.Web.Domain.Options;
+using BarCode.Web.Repositories.DependencyInjection;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.OpenApi.Models;
+using Swashbuckle.AspNetCore.SwaggerUI;
+using System.Configuration;
+using System.IdentityModel.Tokens.Jwt;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
+var option = builder.Configuration.GetSection("AppOptions").Get();
+var option_soa = builder.Configuration.GetSection("SoaOptions").Get();
+
+var isDevelopment = builder.Configuration.GetSection("IsDevelopment").Get();
+var serverVersion = new MySqlServerVersion(new Version(8, 0, 18));
+//ݿע
+builder.Services.AddApp(builder.Configuration, isDevelopment, builder =>
+{
+ builder.AddDbContext(
+ opt => { opt.UseMySql(option.DBConnectionString, serverVersion); });
+});
+
+
+builder.Services.AddControllers(options =>
+{
+ options.Filters.Add();
+});
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+// Swaggerм
+if (isDevelopment)
+{
+ app.UseSwagger();
+ // SwaggerUI
+ app.UseSwaggerUI(c =>
+ {
+ c.SwaggerEndpoint($"/swagger/v1/swagger.json", "BarCode-Api");
+ c.RoutePrefix = string.Empty;
+ c.DocExpansion(DocExpansion.None);
+ });
+}
+
+app.UseHttpsRedirection();
+app.UseStaticFiles();
+app.UseCors("AllowAllOrigin");
+//ͳһ쳣м
+app.UseMiddleware();
+app.UseMiddleware();
+
+//app.UseAuthorization();
+
+app.MapControllers();
+
+app.Run();
diff --git a/src/BarCode.Web.Api/Properties/launchSettings.json b/src/BarCode.Web.Api/Properties/launchSettings.json
new file mode 100644
index 0000000..703b688
--- /dev/null
+++ b/src/BarCode.Web.Api/Properties/launchSettings.json
@@ -0,0 +1,50 @@
+{
+ "profiles": {
+ "http": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "launchUrl": "weatherforecast",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "dotnetRunMessages": true,
+ "applicationUrl": "http://localhost:5050"
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "weatherforecast",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Container (Dockerfile)": {
+ "commandName": "Docker",
+ "launchBrowser": true,
+ "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/weatherforecast",
+ "environmentVariables": {
+ "ASPNETCORE_HTTP_PORTS": "8080"
+ },
+ "publishAllPorts": true
+ },
+ "WSL": {
+ "commandName": "WSL2",
+ "launchBrowser": true,
+ "launchUrl": "http://localhost:5050/weatherforecast",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development",
+ "ASPNETCORE_URLS": "http://localhost:5050"
+ },
+ "distributionName": ""
+ }
+ },
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:56505",
+ "sslPort": 0
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/BarCode.Web.Api/appsettings.Development.json b/src/BarCode.Web.Api/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/src/BarCode.Web.Api/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/src/BarCode.Web.Api/appsettings.json b/src/BarCode.Web.Api/appsettings.json
new file mode 100644
index 0000000..0a82c14
--- /dev/null
+++ b/src/BarCode.Web.Api/appsettings.json
@@ -0,0 +1,100 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*", //允许所有主机
+ "IsDevelopment": true, //是否是开发模式
+ "AllowedCores": "localhost,http://localhost:8080,http://192.168.1.188:8080",//跨域
+ "AppOptions": {
+ "DBConnectionString": "Server=rm-wz9215skklas0287pwo.mysql.rds.aliyuncs.com; Database=test_barcode_db;User Id=orico_erp;password=Orico2023;port=3306;CharSet=gb2312;Connect Timeout=150;", //数据库连接地址
+ "RedisConnectionString": "47.106.232.90:6379,password=orico.2020,DefaultDatabase=7", //redis连接地址
+ "RedisIpRateLimitingConnectionString": "47.110.156.96:16379,password=123456,DefaultDatabase=3", //redis连接地址
+ "SingleBaseUrl": "http://127.0.0.1:8066/api", //单点服务连接地址
+ "DBType": "Mysql", //数据库类型
+ "CompanyId": 1, //公司Id
+ "AllowCache": false, //允许缓存
+ "RedisDirectory": "Test" //redis标记
+ },
+ "SoaOptions": {
+ "ModuleID": 30,//系统在单点系统的标记
+ "AdminUser": [ 1 ],//管理员用户
+ "Url_V3": "https://dev.uc.v3.f2b211.com", //正式http://uc.v3.f2b211.com //单点系统的连接地址v3版
+ "Url": "http://dev.uc.f2b211.com",//单点系统的连接地址(老版 应该没用了)
+ "AppId": "100829382855098368",//系统Id
+ "AppSecret": "d0ebed53e67ec9b0be4e23918bb11792",//系统授权
+ "PublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs7b9r5qLgy4R/caQi2ZwfCULhOOZsfyBwlhqL0Y/nyBI/bFwc0+iIVHp/gq78PYXAUOplQC5YnaLMHsAV4y3pfGPiA7jD5ZmnoEJq1MLIDBCbm7H8JaBdW4b48w7afccTgnkqFQP3vs7JS8VSTkOEO32lyX6LYjP6o32juUsDu4VKZH922BHvaNC0ewt1dOT4v6XHiGPOyJs3dW86yqhCWRDRGZjUPMZDlZfQx1qF3thMc4DObgKWYVS5RWsKvDg5DwbQznUuhneCABHpqZ0ICtkq187K29dHmk8KmCNtsHM8+zwP+j1GU9/zVT4XVw+oGJcO6II0ZTWkA/ESSUTmQIDAQAB",//公钥
+ "PrivateKey": "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCztv2vmouDLhH9xpCLZnB8JQuE45mx/IHCWGovRj+fIEj9sXBzT6IhUen+Crvw9hcBQ6mVALlidoswewBXjLel8Y+IDuMPlmaegQmrUwsgMEJubsfwloF1bhvjzDtp9xxOCeSoVA/e+zslLxVJOQ4Q7faXJfotiM/qjfaO5SwO7hUpkf3bYEe9o0LR7C3V05Pi/pceIY87Imzd1bzrKqEJZENEZmNQ8xkOVl9DHWoXe2ExzgM5uApZhVLlFawq8ODkPBtDOdS6Gd4IAEempnQgK2SrXzsrb10eaTwqYI22wczz7PA/6PUZT3/NVPhdXD6gYlw7ogjRlNaQD8RJJROZAgMBAAECggEABeEWq4gCyGfZbtPwJp9TTrxnhBFuFcSM+i6qSqGhszL7MFF9vEf+pdhoL0dqnpduaTwtcBJ1/iKiqxNbD4Iq/+LHL0xNYVUqRkUya8hrtMHfan11TQmfcpgHkYw85VqQMn1gXaFiY4kUhkLkD2EudJ9UUd2MMbEoHCRIzKPyrQpO3We/4iwYFh96DW+iSzxRuqjtWE4+rnWaQECPzeOu7TMaktnccqw+dPM49EXPmtGCCqfSwLAAYEewL0q4dcaLgFL4qugABsTM7NQaS8AgE5so2RErcpeGSIy0s1aNgSPmdhJ8Msc+AMVc6xYpkylYYmmSNMKVnnQgVhAJsIrmAQKBgQDSFh/V52LffsYV69ePtgMnNlp+fGeYb1zqSAREKJlPjEB24BTPbbUhPQSrdi9ZFa0W93lEPTPyokWx8Rj/1GnHd5k9QPkPzIejO3ljuCtEXBn0Y+4S24T1gMEgGpiMgOQdmTI1xQ2btifvLFsu+63TDPeYiXJclTjFMtGGHMHw1QKBgQDa/aQmxLV+5/2hzf+ijsklJ4w3DTzzXl1OTdcyQia2oxs6fJ/9YEs0zzVLvcs3JA+evuJtuzteXmexUEv8hH9OGMJFbSiJ2ePwGNJ1JKPN4zRAA2FVtrmVdS4rVwjb/kuVU+4KFxpM98R/YZAnymhD9obepD23kxOdhVFgff0ZtQKBgQCqwBSr9F6mLBGvq3oOce7qJgEzIMXKXWj1egcNprnEr8eNVt9TIGXBWCi9e1dMXpPKQOWtEtlv8XgYAk9BT1GSL6C66l4D+0aa4zHsXLm92+W0fqv3Y7gTGczd3P/z4qaFcAghL8G5tzmJ6VFLRH+pM7bhoYTzvszfakhlamYu6QKBgQCYeoMRe2XkNyQixYx5Y3IqrJ60tkL6MXpGS2zLUcQi5u7OinfbtHCpFJ3HXx9gBXvazI5cWUG9M35/t6kw6hC6EAM01Ayl71EGnEHtztU/RjPbXn8nb1NI/Y5oHvHMPAPktcvIus1VSi9HgmcdTZHLwJun6jQO3hmKVImU5iSVAQKBgQC2xZ9KkzAui1YSadtD6jNtBzdXgEQ0K2MziRBlVslFfxmlJ/0X9r4lIw4RJJmsCS6To9n1h0DGK9uveVwE+oGPLD95ISala+OYj9ewiBnZwbkDD201q0Ui2ji4PCZa462ZNKJw/G8vQ5oc/zu2EBER/85Y5h+RtJfFs3b5TKtNxA=="//私钥
+ },
+ "ErpOptions": {
+ "EndpointAddress": "http://erp.orico.com.cn/k3cloud/ERPGW.asmx",//金蝶连接地址
+ "UserName": "mes",//金蝶账户名
+ "Password": "A1B2C3Dh.",//金蝶密码
+ "ErpId": "ce20210909"//金蝶Id
+ },
+ "WmsOptions": {
+ "Url": "https://api.wms.test.f2b211.com/" //WMS系统的连接地址
+ },
+ "Qiniu": {
+ "AccessKey": "dOsTum4a5qvhPTBbZRPX0pIOU7PZWRX7htKjztms",//七牛云账号
+ "SecretKey": "KFxsGbnErkALFfeGdMa8QWTdodJbamMX0iznLe-q",//七牛云授权
+ "Bucket": "orico-wms-test", //正式 orico-wms //七牛云文件下的文件名
+ "Url": "https://wmstestfile.f2b211.com/" //测试 https://wmstestfile.f2b211.com/ 正式 https://wmsfile.f2b211.com/ //访问七牛云文件的链接地址
+ }, //定时任务配置项
+ "QuartzJobOptions": {
+ //存储类型:键和值
+ "JobStoreTypeKey": "quartz.jobStore.type",
+ "JobStoreTypeValue": "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
+
+ //数据库驱动类型-这里是mysql:键和值
+ "JobStoreDriverDelegateTypeKey": "quartz.jobStore.driverDelegateType",
+ "JobStoreDriverDelegateTypeValue": "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz",
+
+ //数据库表名前缀:键和值
+ "JobStoreTablePrefixKey": "quartz.jobStore.tablePrefix",
+ "JobStoreTablePrefixValue": "QRTZ_",
+
+ //数据源的名称:键和值
+ "JobStoreDataSourceKey": "quartz.jobStore.dataSource",
+ "JobStoreDataSourceValue": "myDS",
+
+ //连接字符串:键和值
+ "JobStoreConnectionStringKey": "quartz.dataSource.myDS.connectionString",
+ "JobStoreConnectionStringValue": "Server=rm-wz9215skklas0287pwo.mysql.rds.aliyuncs.com; Database=test_barcode_db;User Id=orico_erp;password=Orico2023;port=3306;CharSet=gb2312;Connect Timeout=150;",
+
+ //mysql提供器:键和值
+ "JobStoreProviderKey": "quartz.dataSource.myDS.provider",
+ "JobStoreProviderValue": "MySql",
+
+ //几点开始执行
+ "JobStartHour": [ 15, 11, 1, 0, 0, 10 ],
+ //几分钟开始执行
+ "JobStartMinute": [ 30, 39, 30, 20, 5, 5 ],
+
+ //执行Cron表达式:可以是几小时or几分钟or几秒钟or几天or几周;
+ "JobStartExpre": "0 0 * * * ?",
+ "JobStartExpreAmount": "0 50 23 * * ?",
+ "JobStartExpreSend": "0 0 12,16,20 * * ?",
+ "JobStartExpreMaterial": "0 30 23 * * ?",
+ "JobStartExpreCenerateData": "0 1 0 * * ?", //凌晨0点1分执行
+
+ //a.是否启用集群:键和值
+ "JobStoreClusteredKey": "quartz.jobStore.clustered",
+ "JobStoreClusteredValue": true,
+
+ //b.集群中的每个节点都必须有一个唯一的 instanceId
+ // 通过将“AUTO”设置为该属性的值来完成
+ //备注:a属性和b属性配套使用;如果不开启集群这两个属性去掉
+ "JobStoreInstanceIdKey": "quartz.scheduler.instanceId",
+ "JobStoreInstanceIdValue": "AUTO",
+
+ //以下可以自定义配置
+ "QuartzJobKey": "OpsJob",
+ "QuartzJobValue": "OpsJobGroup",
+ "QuartzJobDescription": "OpsJob",
+ "QuartzTriggerIdentity": "OpsTrigger",
+ "QuartzTriggerDescription": "OpsJobTrigger"
+ }
+}
diff --git a/src/BarCode.Web.Api/wwwroot/BarCode.Web.Api.xml b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Api.xml
new file mode 100644
index 0000000..7dcd7a8
--- /dev/null
+++ b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Api.xml
@@ -0,0 +1,396 @@
+
+
+
+ BarCode.Web.Api
+
+
+
+
+ 箱子
+
+
+
+
+ 箱信息-列表
+
+
+
+
+
+
+ 生成箱码
+
+
+
+
+
+
+ 装箱保存
+
+
+
+
+
+
+ 打印
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+ 清空装箱信息
+
+
+
+
+
+
+ 根据箱号获取箱信息
+
+
+
+
+
+
+ 重新装箱
+
+
+
+
+
+
+ 开始装箱
+
+
+
+
+
+
+ 箱唛-接口
+
+
+
+
+ 箱唛--列表
+
+
+
+
+
+
+ 生成
+
+
+
+
+
+
+ 批量删除
+
+
+
+
+
+
+ 前端记录日志
+
+
+
+
+ 前端记录日志
+
+
+
+
+
+
+ 前端记录日志
+
+
+
+
+
+
+ 前端记录日志(数组)
+
+
+
+
+
+
+ 消息数组
+
+
+
+
+ 消息内容数组
+
+
+
+
+ 上传下载中心
+
+
+
+
+ 获取需要的状态列表
+
+
+
+
+
+ 下载导出文件 列表
+
+
+
+
+
+
+ 模板(生成序列码)
+
+
+
+
+
+ 登录接口
+
+
+
+
+ 登录
+
+
+
+
+
+
+ 登录-APP和小程序
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+ PHP单点退出使用
+
+
+
+
+
+ 菜单列表
+
+
+
+
+
+ 物料
+
+
+
+
+ 刷新物料 69条码或id32进制
+
+ 物料编码
+ 69 条码,id id32进制,other 名字和规格型号
+
+
+
+
+ 获取序列号信息
+
+ 防伪码
+
+
+
+
+ 防伪码
+
+
+
+
+ 防伪码生成记录列表
+
+
+
+
+
+
+ 防伪码列表
+
+
+
+
+
+
+ 防伪码生成记录页面-下载条码
+
+
+
+
+
+
+ 防伪码页面-条码下载
+
+
+
+
+
+
+ 下载(一般后端内部调用)
+
+
+
+
+
+
+ 生成序列号
+
+
+
+
+
+
+ 序列号
+
+
+
+
+ 序列码生成记录列表
+
+
+
+
+
+
+ 序列码列表
+
+
+
+
+
+
+ 条码生成记录页面-下载条码
+
+
+
+
+
+
+ 序列码页面-条码下载
+
+
+
+
+
+
+ 生成序列号
+
+
+
+
+
+
+ 打印
+
+
+
+
+
+
+ 下载(一般后端内部调用)
+
+
+
+
+
+
+ 获取序列号信息
+
+ 箱Id
+
+
+
+
+ 获取序列号信息
+
+ 序列号
+ 组织或供应商编码
+
+
+
+
+ 修改序列码物料
+
+
+
+
+
+
+ 系统配置
+
+
+
+
+ 获取物料;通过规格型号
+
+
+
+
+
+
+ 获取供应商-erp基础数据
+ 使用code做键
+
+ 供应商名字
+ 组织编码
+
+
+
+
+ 获取组织-erp基础数据
+ 使用 code做键
+
+
+
+
+
+ Wms获取箱信息-列表
+
+
+
+
+
+
+ Wms获取序列号信息
+
+
+
+
+
+
+ 获取序列号信息
+
+ 序列号
+
+
+
+
+ 错误拦截
+
+
+
+
diff --git a/src/BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml
new file mode 100644
index 0000000..788cabf
--- /dev/null
+++ b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml
@@ -0,0 +1,4526 @@
+
+
+
+ BarCode.Web.Core
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请求对象
+
+
+
+
+ 组织Code
+
+
+
+
+ 订单编号集合字符串
+
+
+
+
+ 物料三件套搜索
+
+
+
+
+ 开始的箱唛编号
+
+
+
+
+ 结束的箱唛编号
+
+
+
+
+ 操作人
+
+
+
+
+ 生成开始时间
+
+
+
+
+ 生成结束时间
+
+
+
+
+ 列表响应对象
+
+
+
+
+ 唯一ID
+
+
+
+
+ 明细编号ID
+
+
+
+
+ 箱唛编号
+
+
+
+
+ 订单编号
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 69条码
+
+
+
+
+ 装箱数量
+
+
+
+
+ 装箱净重
+
+
+
+
+ 装箱毛重
+
+
+
+
+ 尾箱数量
+
+
+
+
+ 尾箱净重
+
+
+
+
+ 尾箱毛重
+
+
+
+
+ 备注
+
+
+
+
+ 操作人
+
+
+
+
+ 创建时间(生成时间)
+
+
+
+
+ 是否是尾箱
+
+
+
+
+ 装箱总数
+
+
+
+
+ 产品数量
+
+
+
+
+ 排序
+
+
+
+
+ 流水号(开始)
+
+
+
+
+ 流水号(结束)
+
+
+
+
+ 生成箱唛dto
+
+
+
+
+ 组织Code
+
+
+
+
+
+ 物料
+
+
+
+
+ 产品数量
+
+
+
+
+ 装箱数量
+
+
+
+
+ 装箱净重
+
+
+
+
+ 装箱毛重
+
+
+
+
+ 尾箱数量
+
+
+
+
+ 尾箱净重
+
+
+
+
+ 尾箱毛重
+
+
+
+
+ 备注
+
+
+
+
+ 流水号(开始)
+
+
+
+
+ 流水号(结束)
+
+
+
+
+ 箱明细信息
+
+
+
+
+ ID
+
+
+
+
+ 物料编码
+
+
+
+
+ 数量(装箱数量)
+
+
+
+
+ 序列号
+
+
+
+
+ 箱列表返回信息
+
+
+
+
+ ID
+
+
+
+
+ 明细Id(可能为0)
+
+
+
+
+ 箱编号
+
+
+
+
+ 供应商或组织
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料条码
+
+
+
+
+ 序列号
+
+
+
+
+ 数量(装箱数量)
+
+
+
+
+ 箱状态
+
+
+
+
+ 装箱开始时间
+
+
+
+
+ 装箱结束时间(完成装箱时间)
+
+
+
+
+ 装箱人
+
+
+
+
+ 生成人
+
+
+
+
+ 创建时间
+
+
+
+
+ 箱号打印次数
+
+
+
+
+ 箱信息列表
+
+
+
+
+ 组织Code
+
+
+
+
+ 箱号(开始)
+
+
+
+
+ 箱号(结束)
+
+
+
+
+ 箱状态
+
+
+
+
+ 创建时间
+
+
+
+
+ 创建时间
+
+
+
+
+ 装箱完成时间
+
+
+
+
+ 装箱完成时间
+
+
+
+
+ 物料编码/名称/型号规格
+
+
+
+
+ 序列号
+
+
+
+
+ 箱号打印状态 打印 true 未打印false
+
+
+
+
+ 供应商或组织
+
+
+
+
+ 生成人
+
+
+
+
+ 箱信息
+
+
+
+
+ ID
+
+
+
+
+ 箱编号
+
+
+
+
+ 供应商Code
+
+
+
+
+ 组织Code
+
+
+
+
+ 箱状态
+
+
+
+
+ 装箱开始时间
+
+
+
+
+ 装箱结束时间(完成装箱时间)
+
+
+
+
+ 完成装箱用户
+
+
+
+
+ 箱子创建用户
+
+
+
+
+ 创建时间
+
+
+
+
+ 箱号打印次数
+
+
+
+
+ 最新打印时间
+
+
+
+
+ 明细
+
+
+
+
+ 删除箱和序列码绑定
+
+
+
+
+ 箱Id
+
+
+
+
+ 物料编码
+
+
+
+
+ 序列号
+
+
+
+
+ 生成箱码
+
+
+
+
+ 组织Code
+
+
+
+
+ 生成数量
+
+
+
+
+ 箱信息明细
+
+
+
+
+ 物料编码
+
+
+
+
+ 序列号
+
+
+
+
+ 保存箱信息(装箱保存,完成装箱)
+
+
+
+
+ 箱Id
+
+
+
+
+ 是否完成装箱(保存 false 完成装箱 true)
+
+
+
+
+ 明细信息
+
+
+
+
+ 老ops箱信息请求
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 开始时间
+
+
+
+
+ 结束时间
+
+
+
+
+ 箱号
+
+
+
+
+ 页码
+
+
+
+
+ 每页条数
+
+
+
+
+ 老ops箱信息
+
+
+
+
+ 对应老OPS的箱ID
+
+
+
+
+ 箱编号(老OPS生成的箱号)
+
+
+
+
+ 供应商Id
+
+
+
+
+ 组织Id
+
+
+
+
+ 完成装箱时间
+
+
+
+
+ 完成装箱用户
+
+
+
+
+ 箱子创建用户
+
+
+
+
+ 创建时间(对应老OPS的创建时间)
+
+
+
+
+ 明细
+
+
+
+
+ 序列号
+
+
+
+
+ 序列号生成时间
+
+
+
+
+ 序列号生成用户
+
+
+
+
+ 物料编码
+
+
+
+
+ 数量(装箱数量)
+
+
+
+
+ 序列号集
+
+
+
+
+ 所有枚举信息
+
+
+
+
+ 出库单类型
+
+
+
+
+ 移库单类型
+
+
+
+
+ 盘点结果类型
+
+
+
+
+ 入库单类型
+
+
+
+
+ 入库状态
+
+
+
+
+ 类型:1为入库回退下架,2为出库回退上架
+
+
+
+
+ 类型:1为入库,2为出库
+
+
+
+
+ 单据类型
+
+
+
+
+ 非采购上架方式
+
+
+
+
+ 下载导出订单类型
+
+
+
+
+ 下载导出状态
+
+
+
+
+ 出入库方式:按箱或者按产品
+
+
+
+
+ 出库状态
+
+
+
+
+ 同步金蝶状态
+
+
+
+
+ 客户
+
+
+
+
+ ID
+
+
+
+
+ 编码
+
+
+
+
+ 名称
+
+
+
+
+ ERP:单据查询-dto
+
+
+
+
+ 令牌
+
+
+
+
+ 参数
+
+
+
+
+ 参数(保存提交审核formId在外层)
+
+
+
+
+ ERP:单据查询-参数-dto
+
+
+
+
+ 业务对象表单Id(必录)
+
+
+
+
+ 需查询的字段key集合,字符串类型,格式:"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如:FEntryKey_FEntryId)
+
+
+
+
+ 过滤条件,数组类型,如:[{"Left":"(","FieldName":"Field1","Compare":"=","Value":"111","Right":")","Logic":"AND"},{"Left":"(","FieldName":"Field2","Compare":"=","Value":"222","Right":")","Logic":""}]
+
+
+
+
+ 排序字段,字符串类型(非必录)
+
+
+
+
+ 返回总行数,整型(非必录)
+
+
+
+
+ 开始行索引,整型(非必录)
+
+
+
+
+ 最大行数,整型,不能超过10000(非必录)
+
+
+
+
+ 表单所在的子系统内码,字符串类型(非必录)
+
+
+
+
+ ERP:入库单-统一响应对象
+
+
+
+
+ 单据编号
+
+
+
+
+ 组织
+
+
+
+
+ erp的明细ID
+
+
+
+
+ 组织编码
+
+
+
+
+ 供应商
+
+
+
+
+ 物料编码
+
+
+
+
+ 仓库ID
+
+
+
+
+ 仓库code
+
+
+
+
+ 数量
+
+
+
+
+ 出厂价
+
+
+
+
+ 已交数量(对应金蝶的已交数量-对应物料),目前只有采购订单有
+
+
+
+
+ 明细备注
+
+
+
+
+ 创建时间
+
+
+
+
+ 单据类型
+
+
+
+
+ 销售订单
+
+
+
+
+ 客户编码
+
+
+
+
+ 物料编码
+
+
+
+
+ 组织编码
+
+
+
+
+ 仓库
+
+
+
+
+ 子仓库(跟金蝶交互字段)
+
+
+
+
+ 数量
+
+
+
+
+ 编码
+
+
+
+
+ 编码
+
+
+
+
+ 盘点子仓库
+
+
+
+
+ GD仓
+
+
+
+
+ HD仓
+
+
+
+
+ erp 提交和审核
+
+
+
+
+ 业务对象表单Id(必录)
+
+
+
+
+ 单据编码
+
+
+
+
+ 修改采购入库单
+
+
+
+
+ 单据Id
+
+
+
+
+ 明细
+
+
+
+
+ 明细
+
+
+
+
+ 明细Id
+
+
+
+
+ 采购订单明细Id
+
+
+
+
+ 数量
+
+
+
+
+ 批号
+
+
+
+
+ 批号
+
+
+
+
+ 批号
+
+
+
+
+ 下推
+
+
+
+
+ 业务对象表单Id(必录)
+
+
+
+
+ 分录内码集合,逗号分隔(分录下推时必录) 注(按分录下推时,单据内码和编码不需要填,否则按整单下推)
+
+
+
+
+ 目标单据类型
+
+
+
+
+ 是否启用默认转换规则,布尔类型,默认false(非必录)
+ false 需要穿 RuleId true 不需要传RuleId
+
+
+
+
+ 转换规则内码
+
+
+
+
+ 保存失败时是否暂存,布尔类型,默认false(非必录) 注(暂存的单据是没有编码的)
+
+
+
+
+ Erp同步数据时单据头
+
+
+
+
+ 业务对象表单Id(必录)
+
+
+
+
+ 单据体
+
+
+
+
+ 对应金蝶,物料信息
+
+
+
+
+ 组织ID
+
+
+
+
+ 组织编码
+
+
+
+
+ 物料ID
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 基本单位
+
+
+
+
+ 基本单位名称
+
+
+
+
+ 基本单位编码
+
+
+
+
+ 条码
+
+
+
+
+ 是否启用批号管理
+
+
+
+
+ 物料Id 32进制字符串
+
+
+
+
+ 金蝶组织-基本信息
+
+
+
+
+ Id
+
+
+
+
+ 编码
+
+
+
+
+ 名称
+
+
+
+
+ 发货通知单转出库任务
+
+
+
+
+ 来源单号
+
+
+
+
+ 销售订单号
+
+
+
+
+ 发货组织
+
+
+
+
+ 组织编码
+
+
+
+
+ 收货客户
+
+
+
+
+ 对应金蝶单据明细id(销售出库同步金蝶下推使用)
+
+
+
+
+ 物料编码
+
+
+
+
+ 仓库ID
+
+
+
+
+ 仓位ID
+
+
+
+
+ 应出库数量
+
+
+
+
+ 订单明细备注
+
+
+
+
+ 创建时间(erp那边的创建时间)
+
+
+
+
+ 用来自动构建单据类型 跟OutStockType 一致
+
+
+
+
+ 出库单同步金蝶
+
+
+
+
+ 单据编号
+
+
+
+
+ 单据类型
+
+
+
+
+ 发货组织
+
+
+
+
+ 收货客户
+
+
+
+
+ 创建时间(出库时间)
+
+
+
+
+ 结算币别默认为: 人民币
+
+
+
+
+ 销售组织取对应发货通知单的销售组织
+
+
+
+
+ 销售部门取对应发货通知单的销售部门
+
+
+
+
+ 物料Id
+
+
+
+
+ 仓库ID
+
+
+
+
+ 出库数量
+
+
+
+
+ 出库数量
+
+
+
+
+ 应发数量,取对应发货通知单的销售数量
+
+
+
+
+ 单价 取对应发货通知单对应物料编码行的 单价
+
+
+
+
+ 含税单价 取对应发货通知单对应物料编码行的 含税单价
+
+
+
+
+ 修改销售出库单
+
+
+
+
+ 单据Id
+
+
+
+
+ 明细
+
+
+
+
+ 明细Id
+
+
+
+
+ 发货通知单明细Id
+
+
+
+
+ 数量
+
+
+
+
+ key为string 下拉列表对象
+
+
+
+
+ id
+
+
+
+
+ 编码
+
+
+
+
+ 名字
+
+
+
+
+ 是否默认选中
+
+
+
+
+ 仓库信息
+
+
+
+
+ id
+
+
+
+
+ 编码
+
+
+
+
+ 名字
+
+
+
+
+ 业务组织(使用组织)
+
+
+
+
+ 业务组织(使用组织)编码
+
+
+
+
+ 子仓库信息
+
+
+
+
+ id
+
+
+
+
+ 编码
+
+
+
+
+ 名字
+
+
+
+
+ 业务组织(使用组织)
+
+
+
+
+ 业务组织(使用组织)编码
+
+
+
+
+ 仓库编码
+
+
+
+
+ erp供应商基础数据
+
+
+
+
+ ID
+
+
+
+
+ 编码
+
+
+
+
+ 名称
+
+
+
+
+ 组织编码
+
+
+
+
+ 盘点单
+
+
+
+
+ 单据类型(标准盘亏单; 标准盘盈单 PY01_SYS) 盘亏 PK01_SYS
+
+
+
+
+ 库存组织 (取仓库对应的库存组织)
+
+
+
+
+ 货主类型: 默认为业务组织 BD_OwnerOrg
+
+
+
+
+ 单据编号
+
+
+
+
+ 盘点日期
+
+
+
+
+ 明细
+
+
+
+
+ 库存状态 KCZT01_SYS
+
+
+
+
+ 货主类型: 默认为业务组织 BD_OwnerOrg
+
+
+
+
+ 取仓库对应的货主信息 货主: 等于库存组织
+
+
+
+
+ 保管者类型
+
+
+
+
+ 保管者 仓库”库存组织”
+
+
+
+
+ 物料ID
+
+
+
+
+ 单位ID
+
+
+
+
+ 仓库ID
+
+
+
+
+ 仓位ID
+
+
+
+
+ 盘点前数量(wms系统数量)
+
+
+
+
+ 盘点实际数量(实际仓库数量)
+
+
+
+
+ 盘盈数量
+
+
+
+
+ 盘亏数量
+
+
+
+
+ 备注
+
+
+
+
+ 上传下载列表
+
+
+
+
+ 组织Code
+
+
+
+
+ 单据类型(任务类型)
+
+
+
+
+ 状态
+
+
+
+
+ 下单时间 开始
+
+
+
+
+ 下单时间 结束
+
+
+
+
+ 操作人
+
+
+
+
+ 供应商用户Id
+
+
+
+
+ 上传下载列表
+
+
+
+
+ 查询列表内容
+
+
+
+
+ 总条数
+
+
+
+
+ 上传下载列表
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 日期
+
+
+
+
+ 单据类型(任务类型)
+
+
+
+
+ 状态(Key)
+
+
+
+
+ 状态
+
+
+
+
+ 文件地址
+
+
+
+
+ 操作人
+
+
+
+
+ 失败原因
+
+
+
+
+ 任务类型
+
+
+
+
+ 状态
+
+
+
+
+ 客户端名称
+
+
+
+
+ 授权token -- 给前端用的验证token
+
+
+
+
+ 授权token -- 单点给过来的token
+
+
+
+
+ token头标识
+
+
+
+
+ 刷新token
+
+
+
+
+ 过期时间
+
+
+
+
+ 登录后要保存的信息
+
+
+
+
+ 用户信息
+
+
+
+
+ token信息
+
+
+
+
+ 登出的dto
+
+
+
+
+ 授权token
+
+
+
+
+ 用户ID
+
+
+
+
+ PHP-session-ID
+
+
+
+
+ PHP登录返回的token
+
+
+
+
+ PHP登录的过期时间
+
+
+
+
+ ops自己产生的token 给前端验证用的
+
+
+
+
+ 登录请求对象
+
+
+
+
+ 账号
+
+
+
+
+ 密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 菜单的请求对象
+
+
+
+
+ 用户ID(不是人员ID)
+
+
+
+
+ 应用ID
+
+
+
+
+ 菜单响应对象
+
+
+
+
+
+
+
+
+
+ 上级菜单
+
+
+
+
+ 模块ID,对应apps表ID
+
+
+
+
+ 菜单标题
+
+
+
+
+ 菜单标签
+
+
+
+
+ 菜单路径
+
+
+
+
+ 操作,比如 /admin/info
+
+
+
+
+ 图标
+
+
+
+
+
+
+
+
+
+ 排序
+
+
+
+
+ 0为普通按钮/连接,1为左侧菜单
+
+
+
+
+ 是否显示:0为否,1为是
+
+
+
+
+ 是否禁用:0为否,1为是
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ 子集
+
+
+
+
+ meta
+
+
+
+
+ 菜单名字
+
+
+
+
+ 菜单图标
+
+
+
+
+ 登录后:请求相关全部信息对象
+
+
+
+
+ 用户ID
+
+
+
+
+ 供应商
+
+
+
+
+ 客户
+
+
+
+
+ 登录后:响应相关全部信息对象
+
+
+
+
+ 人员
+
+
+
+
+ 公司
+
+
+
+
+ 供应商
+
+
+
+
+ 客户
+
+
+
+
+ 部门
+
+
+
+
+ 基本信息人员--和单点系统的字段一一对应
+
+
+
+
+ 用户在单点中维一ID
+
+
+
+
+ 用户编码
+
+
+
+
+ 用户业务员编码
+
+
+
+
+ 角色id
+
+
+
+
+ 姓名
+
+
+
+
+ 头像
+
+
+
+
+ 用户手机
+
+
+
+
+ 用户邮件
+
+
+
+
+ 公司id
+
+
+
+
+ 组织id
+
+
+
+
+ 供应商id
+
+
+
+
+ 客户id
+
+
+
+
+ 创建时间
+
+
+
+
+ 更新时间
+
+
+
+
+ 签名(登录)时间
+
+
+
+
+ 签名(登录)ip
+
+
+
+
+ 关闭状态,0为未关闭
+
+
+
+
+ 用户类型 1为员工,2为供应商,3为客户
+
+
+
+
+ 部门
+
+
+
+
+ 登录后获取的:token 信息-和单点系统的字段一一对应
+
+
+
+
+ 用户在单点中维一ID
+
+
+
+
+ 单点访问的session id
+
+
+
+
+ 后续与单点通信验证token
+
+
+
+
+ access token过期时间
+
+
+
+
+ 用于access_token过期后刷新用
+
+
+
+
+ 加密后的用户数据
+
+
+
+
+ 登录后获取的:token 信息-和单点系统的字段一一对应
+
+
+
+
+ 后续与单点通信验证token
+
+
+
+
+ access token过期时间
+
+
+
+
+ 用于access_token过期后刷新用
+
+
+
+
+ 加密后的用户数据
+
+
+
+
+ 用户在单点中维一ID
+
+
+
+
+ 人员ID
+
+
+
+
+ 用户编码
+
+
+
+
+ 用户业务员编码
+
+
+
+
+ 头像
+
+
+
+
+ 是否是admin账户
+
+
+
+
+ 公司id
+
+
+
+
+ 公司名称
+
+
+
+
+ 组织id 用户类型为内部员工的时候才有值
+
+
+
+
+ 供应商id 用户类型为供应商的时候才有值
+
+
+
+
+ 供应商Code 用户类型为供应商的时候才有值
+
+
+
+
+ 供应商名称
+
+
+
+
+ 客户id 用户类型为客户的时候才有值
+
+
+
+
+ 客户名称
+
+
+
+
+ 用户类型:1为员工,2为供应商,3为客户
+
+
+
+
+ 用户在单点中维一ID
+
+
+
+
+ 序列号信息
+
+
+
+
+ 箱Id
+
+
+
+
+ 箱号
+
+
+
+
+ 仓位编码(序列号不存在库存的话仓位是"")
+
+
+
+
+ 仓库编码
+
+
+
+
+ 是否存在于箱库存中
+
+
+
+
+ 序列号
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 是否是老Ops条码
+
+
+
+
+ 是否冻结
+
+
+
+
+ 是否激活过(只有做过 盘点 采购和非采购上架 出库回退上架 才算激活)
+
+
+
+
+ 物料对应的仓位有哪些
+
+
+
+
+ 物料编码
+
+
+
+
+ 仓位编码
+
+
+
+
+ 仓位名称
+
+
+
+
+ 组织
+
+
+
+
+ 仓库
+
+
+
+
+ 操作 Id集合
+
+
+
+
+ 操作 Id集合
+
+
+
+
+ 操作 string集合
+
+
+
+
+ 组织Id(所有列表页都需要 全局)
+
+
+
+
+ 页数 不传默认为1
+
+
+
+
+ 每页条数 不传默认每页10 条
+
+
+
+
+ 生成防伪码
+
+
+
+
+ 组织Code
+
+
+
+
+ 物料编码
+
+
+
+
+ 数量
+
+
+
+
+ 防伪码下载
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 是否全部操作
+
+
+
+
+ 如果是部分操作(防伪码) 全部操作的话可不传
+
+
+
+
+ 防伪码生成列表记录
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 防伪码批次
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料条码
+
+
+
+
+ 生成完成 1 生成中 0
+
+
+
+
+ 生成条码数量
+
+
+
+
+ 下载数
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 生成完成时间
+
+
+
+
+ 防伪码生成列表
+
+
+
+
+ 组织Code
+
+
+
+
+ 创建时间
+
+
+
+
+ 创建时间
+
+
+
+
+ 防伪码集合
+
+
+
+
+ 防伪码批号
+
+
+
+
+ 生成完成 true 生成中 false 不搜 null或不传
+
+
+
+
+ 物料编码
+
+
+
+
+ 防伪码列表
+
+
+
+
+ 流水号
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 防伪码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 数量
+
+
+
+
+ 生成时间
+
+
+
+
+ 下载次数
+
+
+
+
+ 最新下载时间
+
+
+
+
+ 创建人
+
+
+
+
+ 防伪码列表
+
+
+
+
+ 组织Code
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 流水号区间-开始
+
+
+
+
+ 流水号区间-结束
+
+
+
+
+ 是否下载 true 下载 false 未下载
+
+
+
+
+ 下载时间
+
+
+
+
+ 下载时间
+
+
+
+
+ 防伪码
+
+
+
+
+ 防伪码导出
+
+
+
+
+ 防伪码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 数量
+
+
+
+
+ 下载次数
+
+
+
+
+ 最新下载时间
+
+
+
+
+ 生成记录Ids
+
+
+
+
+ 防伪码信息
+
+
+
+
+ 防伪码
+
+
+
+
+ 是否第一次查询 true 第一次 false 不是第一次
+
+
+
+
+ 查询次数
+
+
+
+
+ 第一次查询时间
+
+
+
+
+ 客户编码
+
+
+
+
+ 客户名称
+
+
+
+
+ 手机号码
+
+
+
+
+ 邮箱
+
+
+
+
+ 邮箱
+
+
+
+
+ 明细
+
+
+
+
+ 邮箱
+
+
+
+
+ 名称
+
+
+
+
+ 地址
+
+
+
+
+ 明细
+
+
+
+
+ 入库明细ID
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 数量
+
+
+
+
+ 生成序列号请求参数
+
+
+
+
+ 组织Code
+
+
+
+
+ 明细数据
+
+
+
+
+ 生成序列号请求参数详情
+
+
+
+
+ 物料Id转32进制
+
+
+
+
+ 物料编码
+
+
+
+
+ 规格型号
+
+
+
+
+ 数量
+
+
+
+
+ 采购单号
+
+
+
+
+ 是否套装
+
+
+
+
+ 操作序列号请求接口(打印 下载)
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 是否全部操作
+
+
+
+
+ 如果是部分操作(序列号) 全部操作的话可不传
+
+
+
+
+ 根据箱Id获取序列码信息
+
+
+
+
+ 箱Id
+
+
+
+
+ 序列号列表搜索返回参数
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 转换前规格型号
+
+
+
+
+ 物料条码
+
+
+
+
+ 序列码
+
+
+
+
+ 数字序列码
+
+
+
+
+ 序列码流水号
+
+
+
+
+ 数量
+
+
+
+
+ 是否使用
+
+
+
+
+ 是否使用
+
+
+
+
+ 箱号
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 打印次数
+
+
+
+
+ 下载次数
+
+
+
+
+ 最新打印时间
+
+
+
+
+ 最新下载时间
+
+
+
+
+ 是否允许打印(序列码已经被使用 但没有箱号,那么就是被wms系统拉去使用了,不能再被打印)
+
+
+
+
+ 是否为两件装,为了控制后面的变动,设为整数形,0和1看作1,2代表2件装,3代表三件装 alter by yzh
+
+
+
+
+ 第二个序列号
+
+
+
+
+ 序列号列表搜索请求参数
+
+
+
+
+ 组织Code
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 打印状态 已打印 true 未打印 false
+
+
+
+
+ 使用状态 已使用 true 未使用 false
+
+
+
+
+ 下载时间
+
+
+
+
+ 下载时间
+
+
+
+
+ 打印时间
+
+
+
+
+ 打印时间
+
+
+
+
+ 序列号
+
+
+
+
+ 序号区间-开始
+
+
+
+
+ 序号区间-结束
+
+
+
+
+ 是否更改过物料编码
+
+
+
+
+ 箱号
+
+
+
+
+ 数字序列号
+
+
+
+
+ 数字序列码-开始
+
+
+
+
+ 数字序列码-结束
+
+
+
+
+ 是否为两件装,为了控制后面的变动,设为整数形,0和1看作1,2代表2件装,3代表三件装 alter by yzh
+
+
+
+
+ 序列码导出数据
+
+
+
+
+ 供应商或组织
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料条码
+
+
+
+
+ 序列码
+
+
+
+
+ 数字序列码
+
+
+
+
+ 数量
+
+
+
+
+ 序列码导出参数
+
+
+
+
+ 生成记录Ids
+
+
+
+
+ 序列码信息
+
+
+
+
+ 序列号
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 生成时间时间
+
+
+
+
+ 采购单号
+
+
+
+
+ 供应商
+
+
+
+
+ 序列号信息
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料条码
+
+
+
+
+ 序列号
+
+
+
+
+ 数字序列号
+
+
+
+
+ 箱号
+
+
+
+
+ 是否已经装箱 true 已经装箱 false 未装箱
+
+
+
+
+ 是否是已经存在的数据 默认就是true
+ 前端操作新增加的数据就是false 后端保存到数据库才会变成true
+
+
+
+
+ 是否使用的是数字序列码未使用null,数字序列码true,序列码false
+
+
+
+
+ 是否为两件套产品
+
+
+
+
+ 套装编码
+
+
+
+
+ 第二个序列码
+
+
+
+
+ 获取没有装过箱的序列码
+
+
+
+
+ 序列号
+
+
+
+
+ wms系统请求序列码返回
+
+
+
+
+ 序列号
+
+
+
+
+ 物料编码
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 序列号生成记录列表返回参数
+
+
+
+
+ 主键编号
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料条码
+
+
+
+
+ 采购单号
+
+
+
+
+ 生成完成 1 生成中 0
+
+
+
+
+ 生成条码数量
+
+
+
+
+ 打印数
+
+
+
+
+ 下载数
+
+
+
+
+ 使用数
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 生成完成时间
+
+
+
+
+ 供应商或组织
+
+
+
+
+ 是否更改过物料编码
+
+
+
+
+ 是否两件装
+
+
+
+
+ 序列号生成记录列表请求参数
+
+
+
+
+ 组织Code
+
+
+
+
+ 供应商或组织
+
+
+
+
+ 创建时间
+
+
+
+
+ 创建时间
+
+
+
+
+ 序列号集合
+
+
+
+
+ 生成完成 true 生成中 false 不搜 null或不传
+
+
+
+
+ 物料编码
+
+
+
+
+ 采购单号
+
+
+
+
+ 箱号
+
+
+
+
+ 数字序列号
+
+
+
+
+ 生成人
+
+
+
+
+ 是否更改过物料编码
+
+
+
+
+ 是否两件装
+
+
+
+
+ 修改序列号的物料
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 物料编码
+
+
+
+
+ 操作(序列号)
+
+
+
+
+ ID请求对象
+
+
+
+
+ ID
+
+
+
+
+ Id集合
+
+
+
+
+ 名称请求对象
+
+
+
+
+ 名称
+
+
+
+
+
+
+
+
+
+ 编码
+
+
+
+
+ erp对应Code
+
+
+
+
+ 名称
+
+
+
+
+ 组织类型:1为主业务,2为辅业务 3为工厂
+
+
+
+
+ 本位币名称
+
+
+
+
+ 本位币id
+
+
+
+
+ 自动排产默认入库仓库
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ 单点数据-请求统一对象
+
+
+
+
+ 公司ID
+
+
+
+
+ 单点数据响应-统一对象
+
+
+
+
+ ID
+
+
+
+
+ 编码
+
+
+
+
+ 名称
+
+
+
+
+ 组织编码对应金蝶
+
+
+
+
+ 数值
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ 仓位
+
+
+
+
+ 仓库ID
+
+
+
+
+ 供应商信息
+
+
+
+
+ 供应商Id
+
+
+
+
+ 供应商编码
+
+
+
+
+ 供应商名字
+
+
+
+
+ 组织返回对象
+
+
+
+
+
+
+
+
+
+ 编码
+
+
+
+
+ 名称
+
+
+
+
+ 组织类型:1为主业务,2为辅业务 3为工厂
+
+
+
+
+ 本位币名称
+
+
+
+
+ 本位币id
+
+
+
+
+ 自动排产默认入库仓库
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ erp对应Code
+
+
+
+
+ 员工响应
+
+
+
+
+ StaffID
+
+
+
+
+ 名称
+
+
+
+
+ 部门ID
+
+
+
+
+ 电话
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ 系统code获取
+
+
+
+
+ 系统code
+
+
+
+
+ 仓库名称
+
+
+
+
+ 仓库响应
+
+
+
+
+ id
+
+
+
+
+ 名称
+
+
+
+
+ 编码
+
+
+
+
+ 对应金蝶的组织编码
+
+
+
+
+ 是否禁用:true为禁用,false为启用
+
+
+
+
+ 仓位响应对象
+
+
+
+
+ id
+
+
+
+
+ 仓库ID
+
+
+
+
+ 仓库名称
+
+
+
+
+ 仓库code
+
+
+
+
+ 对应的金蝶组织编码
+
+
+
+
+ 名称
+
+
+
+
+ 编码
+
+
+
+
+ 人员请求对象
+
+
+
+
+ 用户ID
+
+
+
+
+ 请求仓位对象
+
+
+
+
+ 名称
+
+
+
+
+ 仓库
+
+
+
+
+ 组织
+
+
+
+
+ 生成序列号模板
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 物料名称
+
+
+
+
+ 采购单号
+
+
+
+
+ 基类
+
+
+
+
+ Id
+
+
+
+
+ 基类
+
+
+
+
+ Id
+
+
+
+
+ 定义cache
+
+
+
+
+ 设置cache
+
+ 键
+ 值
+
+
+
+ 获取cache
+
+ 键
+
+
+
+
+ 时间转换
+
+
+
+
+ 时间戳计时开始时间
+
+
+
+
+ DateTime转换为10位时间戳(单位:秒)
+
+ DateTime
+ 10位时间戳(单位:秒)
+
+
+
+ DateTime转换为13位时间戳(单位:毫秒)
+
+ DateTime
+ 13位时间戳(单位:毫秒)
+
+
+
+ 10位时间戳(单位:秒)转换为DateTime
+
+ 10位时间戳(单位:秒)
+ DateTime
+
+
+
+ 13位时间戳(单位:毫秒)转换为DateTime
+
+ 13位时间戳(单位:毫秒)
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 转字符串(没有空格)
+
+ )
+ DateTime
+
+
+
+ 转字符串(没有空格)
+
+ )
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 转字符串
+
+ )
+ DateTime
+
+
+
+ 两个时间的差:分钟
+
+
+
+
+
+
+
+ 当前时间和今晚0点之间的时间的差:分钟
+
+
+
+
+
+ 保存单个key value
+
+ 保存的值
+ 过期时间
+
+
+
+ 获取单个key的值
+
+
+
+
+ 移除redis
+
+
+
+
+
+
+ 获取一个key的对象
+
+
+
+
+ 保存一个对象
+
+
+
+
+
+ 结果对象
+
+
+
+
+ 返回结果对象
+
+
+
+
+ 返回结果对象
+
+
+
+
+
+
+ 返回结果对象
+
+
+
+
+
+ 执行是否成功
+
+
+
+
+ 执行是否成功
+
+
+
+
+ 业务返回码
+
+
+
+
+ 执行返回消息
+
+
+
+
+ 转换实体
+
+
+
+
+
+ 转换实体
+
+
+
+
+
+
+ 转换实体
+
+ 结果对象
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+ 结果状态
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+ 结果状态
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 转换为 task
+
+
+
+
+
+ 实体结果对象
+
+
+
+
+
+ 实体结果
+
+
+
+
+ 实体结果
+
+
+
+
+
+ 返回结果对象
+
+
+
+
+
+
+ 返回对象
+
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+ 结果状态
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果
+
+
+
+
+ 转换为task
+
+
+
+
+
+ 处理成功
+
+
+
+
+ 错误请求
+
+
+
+
+ 未授权
+
+
+
+
+ 拒绝请求
+
+
+
+
+ 未找到服务
+
+
+
+
+ 系统错误
+
+
+
+
+ 请求超时
+
+
+
+
+ 返回对象扩展
+
+
+
+
+ 根据替换符进行替换支付
+
+ 结果对象
+ 替换字符
+
+
+
+
+ 集合结果类
+
+
+
+
+
+ 实体集合结果
+
+
+
+
+ 实体集合结果
+
+ 实体集合
+
+
+
+ 实体集合结果
+
+ 实体集合
+ 结果状态
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+ 结果状态
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果
+
+
+
+
+ 转换为 task
+
+
+
+
+
+ 分页列表结果对象
+
+
+
+
+ 实体分页集合结果
+
+
+
+
+ 实体分页集合结果
+
+ 实体集合
+ 总条数
+
+
+
+ 实体分页集合结果
+
+
+
+
+
+
+
+ Total count of Items.
+
+
+
+
+ 创建成功的返回消息
+
+ 实体集合
+ 总条数
+
+
+
+
+ 创建成功的返回消息
+
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+ 结果状态
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果消息
+
+
+
+
+ 创建返回信息(返回处理失败)
+
+ 结果
+
+
+
+
+ 转换为 task
+
+
+
+
+
+ 用于签名的私钥
+
+
+
+
+ 用于验证的公钥
+
+
+
+
+ 签名
+
+ 签名内容
+ 私钥
+ 编码类型
+ 加密方式
+ 加密密文
+
+
+
+ 验证签名
+
+ 验证签名内容
+ 公钥
+ 签名密文
+ 编码类型
+ 加密方式
+ 加密密文
+
+
+
+ 解密
+
+ 密文
+ 私钥
+ 编码
+ 明文
+
+
+
+ 加密
+
+ 明文
+ 公钥
+ 编码
+ 密文
+
+
+
+ 解密公钥
+
+
+
+
+
+
+
+
+ 私钥解密
+
+
+
+
+
+
+
+
+ Pkcs#8 证书解密
+
+
+
+
+
+
+ 获取Integer的大小
+
+
+
+
+
+
+ 获取私钥的类型
+
+
+
+
+
+
+ php单点登录解析token根据密钥-分段解析
+
+
+
+
+
+
+
+ 密钥类型枚举
+
+
+
+
+ 1024
+
+
+
+
+ 2048
+
+
+
+
+ 1023
+
+
+
+
+ 2048
+
+
+
+
+ 数值处理
+
+
+
+
+ Decimal 数值精度转换
+
+ decimal数值
+ 精度值
+ 舍入类型:1为进位,2为舍位,3为四舍五入
+ decimal数值
+
+
+
+ Decimal 数值精度转换
+
+ decimal数值
+ 精度值
+ 舍入类型:1为进位,2为舍位,3为四舍五入
+ decimal数值
+
+
+
+ Decimal 去掉后面无效的0
+
+
+
+
+
+
diff --git a/src/BarCode.Web.Api/wwwroot/BarCode.Web.Domain.xml b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Domain.xml
new file mode 100644
index 0000000..80207e2
--- /dev/null
+++ b/src/BarCode.Web.Api/wwwroot/BarCode.Web.Domain.xml
@@ -0,0 +1,4028 @@
+
+
+
+ BarCode.Web.Domain
+
+
+
+
+ 箱信息头
+ alter table t_barcode_box_details AUTO_INCREMENT=50000;
+
+
+
+
+ ID
+
+
+
+
+ 箱编号
+
+
+
+
+ 供应商Code
+
+
+
+
+ 组织Code
+
+
+
+
+ 公司Id
+
+
+
+
+ 箱状态
+
+
+
+
+ 装箱开始时间
+
+
+
+
+ 装箱结束时间(完成装箱时间)
+
+
+
+
+ 装箱用户
+
+
+
+
+ 箱子创建用户
+
+
+
+
+ 创建时间
+
+
+
+
+ 箱号打印次数
+
+
+
+
+ 最新打印时间
+
+
+
+
+ 明细
+
+
+
+
+ 打印
+
+
+
+
+ 解绑序列号
+
+
+
+
+
+
+ 清空
+
+
+
+
+ 装箱
+
+
+
+
+ 开始装箱
+
+
+
+
+
+
+ 重置
+
+
+
+
+ 老ops箱信息明细
+ alter table t_barcode_box_details AUTO_INCREMENT=50000;
+
+
+
+
+ ID
+
+
+
+
+ 单据头ID
+
+
+
+
+ 物料编码
+
+
+
+
+ 数量(装箱数量)
+
+
+
+
+ 序列号
+
+
+
+
+ 箱唛表
+
+
+
+
+ ID
+
+
+
+
+ 供应商Code
+
+
+
+
+ 组织Code
+
+
+
+
+ 订单编号
+
+
+
+
+ 物料编码
+
+
+
+
+ 产品数量
+
+
+
+
+ 装箱数量
+
+
+
+
+ 装箱净重
+
+
+
+
+ 装箱毛重
+
+
+
+
+ 尾箱数量
+
+
+
+
+ 尾箱净重
+
+
+
+
+ 尾箱毛重
+
+
+
+
+ 备注
+
+
+
+
+ 操作人
+
+
+
+
+ 创建时间(生成时间)
+
+
+
+
+ 流水号(开始)
+
+
+
+
+ 流水号(结束)
+
+
+
+
+ 编号集合
+
+
+
+
+ 创建
+
+
+
+
+
+ 生成编号
+
+
+
+
+
+
+ 箱唛表-编号表
+
+
+
+
+ ID
+
+
+
+
+ 上级ID
+
+
+
+
+ 箱唛编号
+
+
+
+
+ 箱唛编号-首位
+
+
+
+
+ 箱唛编号-末尾序号
+
+
+
+
+ 是否是尾箱
+
+
+
+
+ 排序
+
+
+
+
+ 流水号(开始)
+
+
+
+
+ 流水号(结束)
+
+
+
+
+ 生成编号
+
+
+
+
+
+
+ 生成计划管理
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 同步类型
+
+
+
+
+ 数量
+
+
+
+
+ 文件下载类型
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 日期
+
+
+
+
+ 单据类型(任务类型)
+
+
+
+
+ 状态
+
+
+
+
+ 公司Id
+
+
+
+
+ 组织编码
+
+
+
+
+ 文件地址
+
+
+
+
+ 操作人
+
+
+
+
+ 失败原因
+
+
+
+
+ 供应商编码
+
+
+
+
+ 物料
+
+
+
+
+ ID
+
+
+
+
+ 组织Id
+
+
+
+
+ 组织编码
+
+
+
+
+ 物料ID
+
+
+
+
+ 物料名称
+
+
+
+
+ 物料编码
+
+
+
+
+ 物料规格型号
+
+
+
+
+ 基本单位
+
+
+
+
+ 基本单位名称
+
+
+
+
+ 基本单位编码
+
+
+
+
+ 条码
+
+
+
+
+ 是否启用批号管理
+
+
+
+
+ 物料Id 32进制字符串
+
+
+
+
+ 防伪码生成记录
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 防伪码批次
+
+
+
+
+ 物料编码
+
+
+
+
+ 公司Id
+
+
+
+
+ 组织Id
+
+
+
+
+ 供应商code
+
+
+
+
+ 生成完成 1 生成中 0
+
+
+
+
+ 生成条码数量
+
+
+
+
+ 下载数
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 生成完成时间
+
+
+
+
+ 生成完成
+
+
+
+
+ 下载
+
+
+
+
+ 生成批号
+
+
+
+
+ 防伪码
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 组织Code
+
+
+
+
+ 供应商code
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 防伪码
+
+
+
+
+ 物料编码
+
+
+
+
+ 下载次数
+
+
+
+
+ 最新下载时间
+
+
+
+
+ 查询次数
+
+
+
+
+ 第一次查询时间
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 下载
+
+
+
+
+ 生成防伪码
+
+
+
+
+ 被查询
+
+
+
+
+ 序列号生成记录
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 物料Id转32进制
+
+
+
+
+ 物料编码
+
+
+
+
+ 是否更改过物料编码
+
+
+
+
+ 采购单号
+
+
+
+
+ 供应商code
+
+
+
+
+ 公司Id
+
+
+
+
+ 组织Id
+
+
+
+
+ 生成完成 1 生成中 0
+
+
+
+
+ 生成条码数量
+
+
+
+
+ 生成条码起始位数量(后端用来做标记)
+
+
+
+
+ 打印数
+
+
+
+
+ 下载数
+
+
+
+
+ 使用数
+
+
+
+
+ 创建人
+
+
+
+
+ 是否套装,默认是为1,1即为单个,不是套装Alter by yzh
+
+
+
+
+ 生成时间
+
+
+
+
+ 生成完成时间
+
+
+
+
+ 生成完成
+
+
+
+
+ 打印
+
+
+
+
+ 下载
+
+
+
+
+ 反写使用数
+
+
+
+
+
+ 标记修改物料
+
+
+
+
+ 序列号 默认Id从 200000000 起始
+ alter table users AUTO_INCREMENT=200000000;
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 组织Code
+
+
+
+
+ 供应商code
+
+
+
+
+ 生成记录Id
+
+
+
+
+ 序列号
+
+
+
+
+ 套装(1代表单套,2代表2套,3代表3套) aLTER BY YZH
+
+
+
+
+ 当次序号,用来记录当次所产生时所处的序列号
+
+
+
+
+ 序列号
+
+
+
+
+ 产生第二个
+
+
+
+
+ 物料Id
+
+
+
+
+ 物料编码
+
+
+
+
+ 老物料编码(上一次物料编码)
+
+
+
+
+ 箱ID
+
+
+
+
+ 数字序列码
+
+
+
+
+ 数字序列码(不包含日期)
+
+
+
+
+ 是否使用
+
+
+
+
+ 创建人
+
+
+
+
+ 生成时间
+
+
+
+
+ 完成装箱时间
+
+
+
+
+ 打印次数
+
+
+
+
+ 下载次数
+
+
+
+
+ 最新打印时间
+
+
+
+
+ 最新下载时间
+
+
+
+
+ 是否使用的是数字序列码未使用null,数字序列码true,序列码false
+
+
+
+
+ 生成序列码
+
+
+
+
+ 生成时间序列码
+
+
+
+
+ 产生套装编码 alter by yzh
+
+
+
+
+
+ 产生第二个序列号
+
+
+
+
+
+ 打印
+
+
+
+
+ 下载
+
+
+
+
+ 装箱
+
+
+
+
+
+
+ 解绑箱
+
+
+
+
+ wms系统获取序列码后 序列码调整为已使用
+
+
+
+
+ 修改物料编码
+
+
+
+
+
+ 列表字段导出接口
+
+
+
+
+
+
+
+ 基础数据
+
+
+
+
+ 根据用户精确搜索用户
+
+
+
+
+
+
+ 获取所有人员-根据主体
+
+
+
+
+
+
+ 根据仓库获取子仓库
+
+ 仓库id
+
+
+
+
+ 获取仓位:根据name模糊,和系统code和公司
+
+
+
+
+
+
+
+
+ 获取仓位详情:根据仓位ID和公司ID
+
+
+
+
+
+
+
+ 获取仓位集合:根据仓位ID集合和公司ID
+
+
+
+
+
+
+
+ 获取仓位详情:根据仓位ID和公司ID
+
+
+
+
+
+
+
+ 获取仓位集合:根据仓位编码集合和公司ID
+
+
+
+
+
+
+
+ 获取仓库
+
+
+
+
+
+ 获取事务 用来处理即时库存
+
+
+
+
+
+ 获取事务 用来处理即时库存
+
+
+
+
+
+ 箱唛-仓储接口
+
+
+
+
+ 列表分页
+
+
+
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+ 详情-根据最新的ID
+
+
+
+
+
+ 列表-详情信息列表
+
+
+
+
+
+
+
+ 获取最新的编号实体
+
+
+
+
+
+ 批量删除
+
+
+
+
+
+
+
+ 老ops箱信息
+
+
+
+
+ 获取列表
+
+
+
+
+
+
+
+ 批量添加
+
+
+
+
+
+
+ 查询实体集合
+
+
+ 查询实体集合
+
+
+
+ 生成数据管理
+
+
+
+ 获取最新一次更新时间
+
+
+ 定时任务执行后更新时间
+
+
+ 定时任务执行后创建
+
+
+
+ 保存
+
+
+
+
+
+
+ 编辑
+
+
+
+
+
+
+ 获取销售列表
+
+
+
+
+
+ 公司Id
+
+
+
+
+ 员工ID
+
+
+
+
+ 登录用户信息
+
+
+
+
+ 物料仓储接口
+
+
+
+
+ 物料添加
+
+
+
+
+
+
+
+ 列表
+
+
+
+
+
+ 物料
+
+
+
+
+
+
+ 物料
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 列表
+
+
+
+
+
+
+
+ 列表(获取所有没有id32进制的物料)
+
+
+
+
+
+ 修改物料
+
+
+
+
+
+
+
+ 集合
+
+
+
+
+
+
+ 防伪码生成记录
+
+
+
+ 获取列表
+
+
+ 新增
+
+
+ 编辑
+
+
+ 批量添加
+
+
+ 修改实体集合
+
+
+ 查询实体集合
+
+
+ 查询实体
+
+
+ 获取当天生成记录条数
+
+
+
+ 防伪码
+
+
+
+ 获取列表
+
+
+ 批量添加
+
+
+ 修改实体集合
+
+
+ 查询实体集合
+
+
+ 根据生成记录id查询序列码
+
+
+ 根据生成记录id查询序列码
+
+
+ 查询实体
+
+
+ 修改实体
+
+
+
+ 下载反写 执行sql语句
+
+
+
+
+
+
+ 序列码
+
+
+
+
+ 获取列表
+
+
+
+
+
+
+
+ 批量添加
+
+
+
+
+
+
+ 修改实体集合
+
+
+ 查询实体集合
+
+
+ 查询实体集合
+
+
+ 根据箱Id查询序列码
+
+
+ 根据生成记录id查询序列码
+
+
+ 根据套装码查询序列码
+
+
+ 根据生成记录id查询序列码
+
+
+ 根据箱号查询序列码
+
+
+ 查询实体
+
+
+ 查询实体
+
+
+ WMS查询实体
+
+
+
+ 根据序列号搜索信息
+
+
+
+
+
+
+ 批量添加
+
+
+
+
+
+
+ 修改实体集合
+
+
+ 查询实体集合
+
+
+ 查询实体
+
+
+
+ 获取事务 用来处理即时库存
+
+
+
+
+
+ 获取事务 用来处理即时库存
+
+
+
+
+
+ 箱唛-服务接口
+
+
+
+
+ 生成
+
+
+
+
+
+
+
+ 列表-分页
+
+
+
+
+
+
+
+ 箱
+
+
+
+
+ wms获取已完成装箱箱信息
+
+
+
+
+
+
+
+ 装箱
+
+
+
+
+
+
+
+ 生成箱码
+
+
+
+
+
+
+ 打印
+
+
+
+ 删除
+
+
+
+
+
+ 清空
+
+
+
+
+ 重新装箱
+
+
+
+ 开始装箱
+
+
+
+
+
+ 全字段导出数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 列表字段导出数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 列表页导出数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传文件
+
+
+
+ 是否开启自动删除 如果开启 3天后自动删除 导出的execl文件
+
+
+
+
+ 防伪码
+
+
+
+
+ 下载
+
+
+
+
+
+
+ 生成防伪码
+
+
+
+
+
+
+
+ 序列号服务
+
+
+
+
+ 生成序列号
+
+
+
+
+
+
+
+ 打印
+
+
+
+
+
+
+ 下载
+
+
+
+
+
+
+ 装箱后反写使用数
+
+
+
+
+
+
+ 修改序列号物料
+
+
+
+
+
+
+ erp基础数据:扩展服务接口
+
+
+
+
+ 获取物料名称
+
+
+
+
+
+
+ 获取物料编码
+
+
+
+
+
+
+
+ 获取物料规格型号
+
+
+
+
+
+
+
+ 获取物料名称
+
+
+
+
+
+
+ 获取物料规格型号
+
+
+
+
+
+
+
+ 获取物料基本单位名称
+
+
+
+
+
+
+
+ 获取物料基本单位名称
+
+
+
+
+
+
+
+ 获取物料的条码
+
+
+
+
+
+
+
+ 获取物料的条码
+
+
+
+
+
+
+
+ 获取物料基本单位id
+
+
+
+
+
+
+
+ 获取物料基本单位编码
+
+
+
+
+
+
+
+ 获取物料基本单位编码
+
+
+
+
+
+
+
+ 获取组织名称
+
+
+
+
+
+
+
+ 获取组织名称
+
+
+
+
+
+
+
+ 获取组织ID
+
+
+
+
+
+
+ 获取供应商名称
+
+
+
+
+
+
+
+ 获取供应商名称
+
+
+
+
+
+
+
+ 获取客户名称
+
+
+
+
+
+
+
+ 获取仓库名称
+
+
+
+
+
+
+
+ 获取仓库名称
+
+
+
+
+
+
+
+ 获取仓库编码
+
+
+
+
+
+
+
+ 获取子仓库名称
+
+
+
+
+
+
+
+ 获取单点组织名字
+
+
+
+
+
+
+ 查单据类型的值
+
+
+
+
+
+ erp:单据查询-物料集合
+
+
+
+
+
+ 获取物料id32进制
+
+
+
+
+
+
+ erp:基础数据-物料信息
+
+
+
+
+
+
+ erp:基础数据-物料信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 供应商
+
+
+
+
+
+ 客户
+
+
+
+
+
+ 获取仓库信息
+
+
+
+
+
+ 获取仓位信息信息 根据仓库编码
+
+
+
+
+
+ 登录服务接口
+
+
+
+
+ 创建token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 获取单点用户信息
+
+
+
+
+
+
+
+ 登录退出
+
+
+
+
+
+
+ 刷新token
+
+
+
+
+
+
+
+ 单点退出通知token失效
+
+
+
+
+
+
+ 获取登录后的信息
+
+
+
+
+
+
+ 获取菜单
+
+
+
+
+
+
+ 单点数据返回服务接口
+
+
+
+
+ 获取单点数据:根据方法名和公司ID
+
+
+
+
+
+
+
+
+ 获取单点数据:根据方法名和公司ID
+
+
+
+
+
+
+
+
+ 获取单点数据:根据方法名和公司ID
+
+
+
+
+
+
+
+
+ 获取单点数据:根据方法名和公司ID
+
+
+
+
+ 加上ID防止编码重复
+
+
+
+
+ 根据名字模糊匹配
+
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-同步
+
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-异步
+
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-异步-无缓存
+
+
+
+
+
+
+
+
+ 单点数据:可对接全部接口
+
+ 返回对象
+ 请求对象
+ 方法名称
+ 请求对象
+ 方法名称
+ 控制器名称
+
+
+
+
+ 单点数据:可对接全部接口-无缓存
+
+
+
+
+
+
+
+
+
+
+
+ 获取单点数据:请求对象和接口方法名
+
+
+
+
+
+
+
+
+
+ 获取客户仓库
+
+
+
+
+
+
+
+ wms重置箱信息
+
+
+
+
+ 重置wms箱信息
+
+
+
+
+
+
+ 物料服务接口
+
+
+
+
+ 同步金蝶新物料
+
+
+
+
+
+ 同步物料id32进制
+
+
+
+
+
+ mapper映射
+
+
+
+
+ 箱mapper映射
+
+
+
+
+ 箱mapper映射
+
+
+
+
+ 集合映射
+
+
+
+
+ 映射实体里 集合属性
+
+
+
+
+
+
+
+
+
+
+ 映射实体里 集合属性
+
+
+
+
+
+
+
+
+
+
+ 数据库
+
+
+
+
+ redis
+
+
+
+
+ 单点数据请求地址-后端使用接口地址
+
+
+
+
+ redis数据目录
+
+
+
+
+ 数据库类型
+
+
+
+
+ 是否允许缓存
+
+
+
+
+ 公司ID
+
+
+
+
+ 邮箱
+
+
+
+
+ SMTP 服务器地址
+
+
+
+
+ SMTP 服务器端口号
+
+
+
+
+ 名称
+
+
+
+
+ 主题
+
+
+
+
+ 发件人邮箱地址
+
+
+
+
+ 发件人邮箱密码
+
+
+
+
+ erp相关配置文件
+
+
+
+
+ erp-请求地址
+
+
+
+
+ 账号
+
+
+
+
+ 密码
+
+
+
+
+ erp-Id
+
+
+
+
+ 七牛云 配置
+
+
+
+
+ 访问key
+
+
+
+
+ 秘钥
+
+
+
+
+ 区块文件夹
+
+
+
+
+ 访问域名
+
+
+
+
+ Quartz定时任务-配置项
+
+
+
+
+ 存储类型:键
+
+
+
+
+ 存储类型:值
+
+
+
+
+ 数据库驱动类型-这里是mysql:键
+
+
+
+
+ 数据库驱动类型-这里是mysql:值
+
+
+
+
+ 数据库表名前缀:键
+
+
+
+
+ 数据库表名前缀:值
+
+
+
+
+ 数据源的名称:键
+
+
+
+
+ 数据源的名称:值
+
+
+
+
+ 连接字符串:键
+
+
+
+
+ 连接字符串:值
+
+
+
+
+ mysql提供器:键
+
+
+
+
+ mysql提供器:值
+
+
+
+
+ 几点后开始执行
+
+
+
+
+ 几分钟后开始执行
+
+
+
+
+ 执行Cron表达式:可以是几小时or几分钟or几秒钟or几天or几周
+
+
+
+
+
+
+
+
+
+ 发送通知执行cron表达式:每天12,16,20整点发送
+
+
+
+
+ 同步新物料执行cron表达式:每天23:30整点同步
+
+
+
+
+ 同步新物料执行cron表达式:每天0:01执行
+
+
+
+
+ 是否启用集群:键
+
+
+
+
+ 是否启用集群:值
+
+
+
+
+ 节点都必须有一个唯一ID:键
+
+
+
+
+ 节点都必须有一个唯一ID:值
+
+
+
+
+ 工作名称:键
+
+
+
+
+ 工作名称:值
+
+
+
+
+ 工作描述
+
+
+
+
+ 触发器身份认证信息
+
+
+
+
+ 触发器描述
+
+
+
+
+ 短信配置项
+
+
+
+
+ 访问凭证ID
+
+
+
+
+ 访问秘钥
+
+
+
+
+ 短信签名
+
+
+
+
+ 短信模板编号
+
+
+
+
+ 单点系统地址
+
+
+
+
+ 单点系统地址
+
+
+
+
+ admin账号的Id
+
+
+
+
+ 应用id
+
+
+
+
+ AppId
+
+
+
+
+ AppSecret
+
+
+
+
+ 公钥
+
+
+
+
+ 私钥
+
+
+
+
+ 老ops对接
+
+
+
+
+ 自动生成数据维护 凌晨清空
+
+
+
+
+ 执行方法
+
+
+
+
+
+
+ 执行方法
+
+
+
+
+
+
+ 物料同步执行定时任务
+
+
+
+
+ 执行方法
+
+
+
+
+
+
+ 箱唛-服务
+
+
+
+
+ 生成
+
+
+
+
+
+
+
+ 列表分页
+
+
+
+
+
+
+
+ 装箱总数
+
+
+
+
+
+
+
+ 箱信息
+
+
+
+
+ 生成箱码
+
+
+
+
+
+
+
+
+ 装箱
+
+
+
+
+
+
+
+
+ 打印
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+ 清空装箱信息
+
+
+
+
+
+
+
+ wms系统调用 获取完成装箱箱信息
+
+
+
+
+
+
+
+ 重新装箱
+
+
+
+
+
+
+
+ 开始装箱
+
+
+
+
+
+
+
+ 列表页导出
+
+
+
+
+
+
+
+
+
+
+
+
+ 全字段导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 同步erp基础数据
+
+
+
+
+ erp基础数据:扩展服务
+
+
+
+
+ 获取物料名称
+
+
+
+
+
+
+
+ 获取物料编码
+
+
+
+
+
+
+
+ 获取物料规格型号
+
+
+
+
+
+
+
+ 获取物料名称
+
+
+
+
+
+
+
+ 获取物料编码
+
+
+
+
+
+
+
+ 获取物料基本单位名称
+
+
+
+
+
+
+
+ 获取物料基本单位名称
+
+
+
+
+
+
+
+ 获取物料的条码
+
+
+
+
+
+
+
+ 获取物料的条码
+
+
+
+
+
+
+
+ 获取物料基本单位Id
+
+
+
+
+
+
+
+ 获取物料基本单位编码
+
+
+
+
+
+
+
+ 获取物料基本单位编码
+
+
+
+
+
+
+
+ 获取组织名称
+
+
+
+
+
+
+
+ 获取组织名称
+
+
+
+
+
+
+
+ 获取组织id
+
+
+
+
+
+
+
+ 获取供应商名称
+
+
+
+
+
+
+
+ 获取供应商名称
+
+
+
+
+
+
+
+ 获取客户名称
+
+
+
+
+
+
+
+ 获取仓库名称
+
+
+
+
+
+
+
+ 获取仓库名称
+
+
+
+
+
+
+
+ 获取仓库编码
+
+
+
+
+
+
+
+ 子仓库
+
+
+
+
+
+
+
+ 获取单点组织名字
+
+
+
+
+
+
+
+
+ erp数据交互服务
+
+
+
+
+ 初始化ERP:登录到ERP
+
+
+
+
+
+ 查单据类型的值
+
+
+
+
+
+ erp:单据查询-物料集合
+
+
+
+
+
+ 获取物料id32进制
+
+
+
+
+
+
+
+ erp:基础数据-物料信息
+
+
+
+
+
+
+ erp:基础数据-物料信息
+
+
+
+
+
+
+ erp:基础数据-物料-分页查询
+
+
+
+
+
+ erp:基础数据-物料-ids查询
+
+
+
+
+
+
+ erp:基础数据-物料-number查询
+
+
+
+
+
+
+ erp:单据查询-组织数据
+
+
+
+
+
+ erp:供应商
+
+
+
+
+
+ 客户
+
+
+
+
+
+ erp:仓库
+
+
+
+
+
+ 根据仓库编码获取仓位
+
+
+
+
+
+
+ 同步数据(保存提交审核)
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+ 审核
+
+
+
+
+
+
+
+ 反审核
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+ 下推
+
+
+
+
+
+
+ Get方法
+
+
+
+
+
+
+
+
+
+ Get方法
+
+
+
+
+
+
+
+
+
+ Post方法
+
+
+
+
+
+
+
+
+
+
+ Post方法
+
+
+
+
+
+
+
+
+
+ 公共http请求
+
+
+
+
+
+
+
+
+
+
+
+ 设置HttpRequestMessage
+
+
+
+
+
+
+
+
+
+ 设置请求内容
+
+
+
+
+
+
+
+ 设置请求头和超时时间:返回client
+
+
+
+
+
+
+
+ 创建token
+
+
+
+
+
+
+
+
+ 创建token
+
+
+
+
+
+
+
+
+ 获取单点登录信息
+
+
+
+
+
+
+ 获取单点用户信息
+
+
+
+
+
+
+
+ 登录退出
+
+
+
+
+
+
+ 刷新token
+
+
+
+
+
+
+
+ 单点退出通知token失效
+
+ 这个是单点传过来的SeesionId
+
+
+
+
+ 缓存退出的token
+
+
+
+
+
+
+ 获取登录后的信息
+
+
+
+
+
+
+ 移除登录后的用户信息
+
+
+
+
+
+ 获取菜单数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 进制转换
+
+ 整形数字
+ 排除的字符"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B",
+ "C", "D", "E", "F", "G", "H", "I", "J", "K","L", "M", "N", "O", "P", "Q", "R", "S",
+ "T", "U", "V", "W", "X", "Y", "Z"
+
+
+
+
+ 保存单个key value
+
+
+
+
+
+
+
+
+ 获取单个key的值
+
+
+
+
+ 移除redis
+
+
+
+
+
+
+ 获取一个key的对象
+
+
+
+
+ 保存一个对象
+
+
+
+
+
+ 单点数据返回服务
+
+
+
+
+ 获取单点数据:根据接口方法名和公司ID
+ 后端列表查询统一使用
+
+
+
+
+
+
+
+ 获取单点数据:根据接口方法名和公司ID
+ 后端列表查询统一使用
+
+
+
+
+
+
+
+ 获取单点数据:根据接口方法名和公司ID
+ 后端列表查询统一使用
+
+
+
+
+
+
+
+ 根据名字模糊匹配
+
+
+
+
+
+
+
+
+ 获取单点数据:根据接口方法名和公司ID
+ 后端列表查询统一使用
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-同步
+
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-异步
+
+
+
+
+
+
+
+
+ 获取单点数据集合:泛型-异步-无缓存
+
+
+
+
+
+
+
+
+ 单点数据:可对接全部接口
+
+ 返回对象
+ 请求对象
+ 方法名称
+ 请求对象
+ 方法名称
+ 控制器名称
+
+
+
+
+ 单点数据:可对接全部接口
+
+ 返回对象
+ 请求对象
+ 方法名称
+ 请求对象
+ 方法名称
+ 控制器名称
+
+
+
+
+ 获取单点数据:配置项接口
+
+
+
+
+
+
+
+
+
+ 请求单点服务接口:同步
+
+
+
+
+
+
+
+
+ 请求单点服务接口:异步
+
+
+
+
+
+
+
+
+ 获取客户仓库
+
+
+
+
+
+
+
+ ops服务
+
+
+
+
+ 重置箱信息
+
+
+
+
+
+
+
+ 物料服务
+
+
+
+
+ 同步物料32进制
+
+
+
+
+
+
+ 同步金蝶新的物料
+
+
+
+
+
+ 上传文件
+
+
+
+
+
+
+
+
+ 防伪码
+
+
+
+
+ 序列号服务
+
+
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+
+
+
+
+ 生成防伪码
+
+
+
+
+
+
+
+
+ 循环生成序列码
+
+
+
+
+
+ 序列号服务
+
+
+
+
+ 序列号服务
+
+
+
+
+
+
+
+
+
+
+
+ 生成序列号
+
+
+
+
+
+
+
+
+ 循环生成序列码
+
+
+
+
+
+
+ 下载
+
+
+
+
+
+
+
+ 打印
+
+
+
+
+
+
+
+ 反写使用数
+
+
+
+
+
+
+ 修改序列码物料
+
+
+
+
+
+
+
+ erp基础数据-同步定时任务
+
+
+
+
+ 箱状态
+
+
+
+
+ 未使用
+
+
+
+
+ 未完成
+
+
+
+
+ 已完成
+
+
+
+
+ 自动生成数据 序列码和防伪码
+
+
+
+
+ 序列码生成
+
+
+
+
+ 业务对象表单Id:对应erp的单据表的名称
+
+
+
+
+ 采购订单
+
+
+
+
+ 采购入库单
+
+
+
+
+ 其他入库单
+
+
+
+
+ 直接调拨单-里面包含出和入
+
+
+
+
+ 分步式调入单
+
+
+
+
+ 组装拆卸单:里面包含出和入
+
+
+
+
+ 组织
+
+
+
+
+ 供应商
+
+
+
+
+ 仓库
+
+
+
+
+ 盘盈单
+
+
+
+
+ 盘亏单
+
+
+
+
+ 物料
+
+
+
+
+ 销售发货通知单
+
+
+
+
+ 其他出库单
+
+
+
+
+ 分布式调出单
+
+
+
+
+ 客户
+
+
+
+
+ 销售出库单
+
+
+
+
+ 即时库存
+
+
+
+
+ 文件导出状态
+
+
+
+
+ 正在导出
+
+
+
+
+ 导出成功
+
+
+
+
+ 导出失败
+
+
+
+
+ 导出单据类型
+
+
+
+
+ 条码下载
+
+
+
+
+ 条码详情下载
+
+
+
+
+ 防伪码下载
+
+
+
+
+ 防伪码详情下载
+
+
+
+
+ 错误提示信息
+
+
+
+
+ 无效
+
+
+
+
+ 数据操作失败
+
+
+
+
+ 没有菜单权限,无法登录
+
+
+
+
+ 箱号不符合规则
+
+
+
+
+ 对接单点的接口方法-枚举
+
+
+
+
+ 组织集合
+
+
+
+
+ 用户集合
+
+
+
+
+ 人员集合
+
+
+
+
+ 供应商集合
+
+
+
+
+ 客户集合
+
+
+
+
+ 收款条件集合
+
+
+
+
+ 付款条件集合
+
+
+
+
+ 结算方式集合
+
+
+
+
+ 结算币别集合
+
+
+
+
+ 税率集合
+
+
+
+
+ 汇率集合
+
+
+
+
+ 仓库集合
+
+
+
+
+ 单位集合
+
+
+
+
+ 客户仓库集合
+
+
+
+
+ 部门集合
+
+
+
+
+ 仓库211集合
+
+
+
+
+ 供应商默认联系人集合
+
+
+
+
+ 菜单集合
+
+
+
+
+ 仓位集合
+
+
+
+
+ 仓库:编码与组织编码结合
+
+
+
+
+ 仓库:编码与组织编码结合
+
+
+
+
+ 单点-控制器枚举
+
+
+
+
+ 单点OPS列表数据-控制器
+
+
+
+
+ 单点配置项数据-控制器
+
+
+
+
+ 单点登录项数据-控制器
+
+
+
+
+ 单点公共接口数据-控制器
+
+
+
+
+ 单点数据接口-登录要使用的数据接口-方法枚举
+
+
+
+
+ 菜单
+
+
+
+
+ 人员
+
+
+
+
+ 公司
+
+
+
+
+ 供应商
+
+
+
+
+ 客户
+
+
+
+
+ 全部信息
+
+
+
+
+ 公司信息
+
+
+
+
+ 单点数据:配置项和公共接口的方法枚举值
+
+
+
+
+ 供应商-根据名称和公司
+
+
+
+
+ 组织-根据公司
+
+
+
+
+ 部门-根据组织和公司
+
+
+
+
+ 人员-根据公司
+
+
+
+
+ 人员-根据部门和公司
+
+
+
+
+ 人员-根据组织和公司
+
+
+
+
+ 客户-根据公司
+
+
+
+
+ 客户-根据客户和组织和公司
+
+
+
+
+ 客户信息-根据客户和组织和公司
+
+
+
+
+ 收款条件-根据公司
+
+
+
+
+ 付款条件-根据公司
+
+
+
+
+ 结算方式-根据公司
+
+
+
+
+ 结算币别-根据公司
+
+
+
+
+ 单位-根据公司
+
+
+
+
+ 单位(部分属性)-根据公司
+
+
+
+
+ 税率-根据公司
+
+
+
+
+ 仓库-根据名称和公司
+
+
+
+
+ 仓库-根据组织和公司
+
+
+
+
+ 仓库(不是调拨中转仓)-根据组织和公司
+
+
+
+
+ 仓库(211)-根据组织和公司
+
+
+
+
+ 仓库-根据客户和公司
+
+
+
+
+ 仓位-根据仓库
+
+
+
+
+ 仓位-根据-
+
+
+
+
+ 汇率信息-根据原币、目标币和公司
+
+
+
+
+ 客户仓库-根据客户和组织和公司
+
+
+
+
+ 付款条件,结算币别,结算方式,采购员,采购部门-根据供应商和组织
+
+
+
+
+ 获取仓库:根据仓库id
+
+
+
+
+ 获取库存:根据组织和公司
+
+
+
+
+ 获取客户仓库:根据客户IDS和组织和公司
+
+
+
+
+ 汇率(所有)
+
+
+
+
+ 供应商选择后获取:付款条件,结算币别,结算方式,采购员,采购部门,根据组织IDS
+
+
+
+
+ 获取客户仓库:根据code集合
+
+
+
+
+ 供应商:根据ids
+
+
+
+
+ 根据公司搜索所有仓库(计算补货频次)
+
+
+
+
+ 获取仓库:根据codes
+
+
+
+
+ 获取客户仓库:根据codes
+
+
+
+
+ 获取调拨中转仓库:根据公司
+
+
+
+
+ 获取供应商数据根据ids
+
+
+
+
+ 获取仓库:根据默认补货客户
+
+
+
+
+ 获取用户(ID和Name):根据公司
+
+
+
+
+ 全部部门-根据组织和公司:不处理子级
+
+
+
+
+ 获取全部员工:根据公司和组织
+
+
+
+
+ 获取仓库::根据管理系统code和仓库名称和公司ID,备注系统code和公司ID是必填
+
+
+
+
+ 获取仓库::根据管理系统code和仓位名称和公司ID,备注系统code和公司ID是必填
+
+
+
+
+ 获取仓位详情:根据仓位ID和公司ID
+
+
+
+
+ 获取仓位详情:根据仓位ID集合和公司ID
+
+
+
+
+ 获取仓位详情:根据仓位Code和公司ID
+
+
+
+
+ 获取仓位详情:根据仓位Codes集合和公司ID
+
+
+
+
+ 根据用户获取组织
+
+
+
+
+ 根据用户获取供应商
+
+
+
+
diff --git a/src/BarCode.Web.Core/BarCode.Web.Core.csproj b/src/BarCode.Web.Core/BarCode.Web.Core.csproj
new file mode 100644
index 0000000..4eab3ba
--- /dev/null
+++ b/src/BarCode.Web.Core/BarCode.Web.Core.csproj
@@ -0,0 +1,33 @@
+
+
+
+ net8.0
+ enable
+ enable
+ True
+ ../BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/BarCode.Web.Core/Connected Services/ERP/ConnectedService.json b/src/BarCode.Web.Core/Connected Services/ERP/ConnectedService.json
new file mode 100644
index 0000000..9e86b81
--- /dev/null
+++ b/src/BarCode.Web.Core/Connected Services/ERP/ConnectedService.json
@@ -0,0 +1,99 @@
+{
+ "ExtendedData": {
+ "inputs": [
+ "http://119.23.206.129/K3cloud/erpgw.asmx?WSDL"
+ ],
+ "collectionTypes": [
+ "System.Array",
+ "System.Collections.Generic.Dictionary`2"
+ ],
+ "namespaceMappings": [
+ "*, ERP"
+ ],
+ "references": [
+ "BouncyCastle.Cryptography, {BouncyCastle.Cryptography, 2.2.1}",
+ "Enums.NET, {Enums.NET, 4.0.1}",
+ "Google.Protobuf, {Google.Protobuf, 3.25.1}",
+ "ICSharpCode.SharpZipLib, {SharpZipLib, 1.3.3}",
+ "K4os.Compression.LZ4, {K4os.Compression.LZ4, 1.3.5}",
+ "K4os.Compression.LZ4.Streams, {K4os.Compression.LZ4.Streams, 1.3.5}",
+ "K4os.Hash.xxHash, {K4os.Hash.xxHash, 1.0.8}",
+ "LogicExtensions, {LogicExtensions, 0.0.3}",
+ "MathNet.Numerics, {MathNet.Numerics.Signed, 4.15.0}",
+ "Microsoft.EntityFrameworkCore, {Microsoft.EntityFrameworkCore, 8.0.2}",
+ "Microsoft.EntityFrameworkCore.Abstractions, {Microsoft.EntityFrameworkCore.Abstractions, 8.0.2}",
+ "Microsoft.EntityFrameworkCore.Relational, {Microsoft.EntityFrameworkCore.Relational, 8.0.2}",
+ "Microsoft.Extensions.Caching.Abstractions, {Microsoft.Extensions.Caching.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.Caching.Memory, {Microsoft.Extensions.Caching.Memory, 8.0.0}",
+ "Microsoft.Extensions.Configuration.Abstractions, {Microsoft.Extensions.Configuration.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.DependencyInjection, {Microsoft.Extensions.DependencyInjection, 8.0.0}",
+ "Microsoft.Extensions.DependencyInjection.Abstractions, {Microsoft.Extensions.DependencyInjection.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.Diagnostics.Abstractions, {Microsoft.Extensions.Diagnostics.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.Diagnostics.HealthChecks, {Microsoft.Extensions.Diagnostics.HealthChecks, 8.0.0}",
+ "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions, {Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.FileProviders.Abstractions, {Microsoft.Extensions.FileProviders.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.Hosting.Abstractions, {Microsoft.Extensions.Hosting.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.Logging, {Microsoft.Extensions.Logging, 8.0.0}",
+ "Microsoft.Extensions.Logging.Abstractions, {Microsoft.Extensions.Logging.Abstractions, 8.0.0}",
+ "Microsoft.Extensions.ObjectPool, {Microsoft.Extensions.ObjectPool, 6.0.16}",
+ "Microsoft.Extensions.Options, {Microsoft.Extensions.Options, 8.0.0}",
+ "Microsoft.Extensions.Primitives, {Microsoft.Extensions.Primitives, 8.0.0}",
+ "Microsoft.IdentityModel.Abstractions, {Microsoft.IdentityModel.Abstractions, 7.5.1}",
+ "Microsoft.IdentityModel.Logging, {Microsoft.IdentityModel.Logging, 7.5.1}",
+ "Microsoft.IdentityModel.Tokens, {Microsoft.IdentityModel.Tokens, 7.5.1}",
+ "Microsoft.IO.RecyclableMemoryStream, {Microsoft.IO.RecyclableMemoryStream, 2.3.2}",
+ "Microsoft.Win32.SystemEvents, {Microsoft.Win32.SystemEvents, 6.0.0}",
+ "MySql.Data, {MySql.Data, 8.3.0}",
+ "MySqlConnector, {MySqlConnector, 2.3.5}",
+ "Newtonsoft.Json, {Newtonsoft.Json, 13.0.3}",
+ "NPOI.Core, {NPOI, 2.6.2}",
+ "Npoi.Mapper, {Npoi.Mapper, 6.2.1}",
+ "NPOI.OOXML, {NPOI, 2.6.2}",
+ "NPOI.OpenXml4Net, {NPOI, 2.6.2}",
+ "NPOI.OpenXmlFormats, {NPOI, 2.6.2}",
+ "Pipelines.Sockets.Unofficial, {Pipelines.Sockets.Unofficial, 2.2.8}",
+ "Pomelo.EntityFrameworkCore.MySql, {Pomelo.EntityFrameworkCore.MySql, 8.0.2}",
+ "Quartz, {Quartz, 3.8.1}",
+ "Quartz.AspNetCore, {Quartz.AspNetCore, 3.8.1}",
+ "Quartz.Extensions.DependencyInjection, {Quartz.Extensions.DependencyInjection, 3.8.1}",
+ "Quartz.Extensions.Hosting, {Quartz.Extensions.Hosting, 3.8.1}",
+ "Quartz.Serialization.Json, {Quartz.Serialization.Json, 3.8.1}",
+ "SixLabors.Fonts, {SixLabors.Fonts, 1.0.0}",
+ "SixLabors.ImageSharp, {SixLabors.ImageSharp, 2.1.4}",
+ "StackExchange.Redis, {StackExchange.Redis, 2.7.33}",
+ "System.ComponentModel.Annotations, {System.ComponentModel.Annotations, 5.0.0}",
+ "System.Configuration.ConfigurationManager, {System.Configuration.ConfigurationManager, 6.0.1}",
+ "System.Diagnostics.DiagnosticSource, {System.Diagnostics.DiagnosticSource, 8.0.0}",
+ "System.Drawing.Common, {System.Drawing.Common, 6.0.0}",
+ "System.Formats.Asn1, {System.Formats.Asn1, 6.0.0}",
+ "System.IO, {System.IO, 4.3.0}",
+ "System.IO.Pipelines, {System.IO.Pipelines, 6.0.3}",
+ "System.Json, {System.Json, 4.7.1}",
+ "System.Reflection, {System.Reflection, 4.3.0}",
+ "System.Reflection.Primitives, {System.Reflection.Primitives, 4.3.0}",
+ "System.Runtime, {System.Runtime, 4.3.0}",
+ "System.Runtime.CompilerServices.Unsafe, {System.Runtime.CompilerServices.Unsafe, 6.0.0}",
+ "System.Runtime.Loader, {System.Runtime.Loader, 4.3.0}",
+ "System.Security.AccessControl, {System.Security.AccessControl, 6.0.0}",
+ "System.Security.Cryptography.Pkcs, {System.Security.Cryptography.Pkcs, 6.0.1}",
+ "System.Security.Cryptography.ProtectedData, {System.Security.Cryptography.ProtectedData, 6.0.0}",
+ "System.Security.Cryptography.Xml, {System.Security.Cryptography.Xml, 6.0.1}",
+ "System.Security.Permissions, {System.Security.Permissions, 6.0.0}",
+ "System.ServiceModel.Duplex, {System.ServiceModel.Duplex, 6.0.0}",
+ "System.ServiceModel.Http, {System.ServiceModel.Http, 8.0.0}",
+ "System.ServiceModel.NetFramingBase, {System.ServiceModel.NetFramingBase, 8.0.0}",
+ "System.ServiceModel.NetTcp, {System.ServiceModel.NetTcp, 8.0.0}",
+ "System.ServiceModel.Primitives, {System.ServiceModel.Primitives, 8.0.0}",
+ "System.ServiceModel.Security, {System.ServiceModel.Security, 6.0.0}",
+ "System.Text.Encoding, {System.Text.Encoding, 4.3.0}",
+ "System.Text.Encoding.CodePages, {System.Text.Encoding.CodePages, 5.0.0}",
+ "System.Text.Encodings.Web, {System.Text.Encodings.Web, 7.0.0}",
+ "System.Text.Json, {System.Text.Json, 7.0.1}",
+ "System.Threading.Tasks, {System.Threading.Tasks, 4.3.0}",
+ "System.Windows.Extensions, {System.Windows.Extensions, 6.0.0}",
+ "ZstdSharp, {ZstdSharp.Port, 0.7.1}"
+ ],
+ "targetFramework": "net8.0",
+ "typeReuseMode": "All"
+ }
+}
\ No newline at end of file
diff --git a/src/BarCode.Web.Core/Connected Services/ERP/Reference.cs b/src/BarCode.Web.Core/Connected Services/ERP/Reference.cs
new file mode 100644
index 0000000..295b378
--- /dev/null
+++ b/src/BarCode.Web.Core/Connected Services/ERP/Reference.cs
@@ -0,0 +1,1236 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+//
+// 对此文件的更改可能导致不正确的行为,并在以下条件下丢失:
+// 代码重新生成。
+//
+//------------------------------------------------------------------------------
+
+namespace ERP
+{
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.2.0-preview1.23462.5")]
+ [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ERP.ERPGWSoap")]
+ public interface ERPGWSoap
+ {
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Draft", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task DraftAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Save", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SaveAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Submit", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SubmitAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Audit", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task AuditAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ExecuteBillQuery", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task ExecuteBillQueryAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Push", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task PushAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ExecuteOperation", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task ExecuteOperationAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/UnAudit", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task UnAuditAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Delete", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task DeleteAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/BatchSave", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task BatchSaveAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/WorkflowAudit", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task WorkflowAuditAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CancelAssign", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CancelAssignAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Allocate", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task AllocateAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CancelAllocate", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CancelAllocateAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/GroupSave", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task GroupSaveAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/QueryGroupInfo", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task QueryGroupInfoAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/GroupDelete", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task GroupDeleteAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SaveMaterial", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SaveMaterialAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/WebApiSale", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task WebApiSaleAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/AR_receivableY", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task AR_receivableYAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SelMaterial", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SelMaterialAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SetJdture", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SetJdtureAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Selects", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SelectsAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/K3Client", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task K3ClientAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CkZck", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CkZckAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SerBom", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SerBomAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/OricoYG", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task OricoYGAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/OricoBM", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task OricoBMAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/OricoWLFZ", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task OricoWLFZAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IdOricoWLFZ", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task IdOricoWLFZAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/OricoGYS", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task OricoGYSAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Dw", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task DwAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Sktj", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SktjAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Fktj", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task FktjAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Jsfs", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task JsfsAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Jsbb", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task JsbbAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/HL", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task HLAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SL", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task SLAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateVoucher", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateVoucherAsync(ERP.VoucherInfo[] param);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreatePo_InStock", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreatePo_InStockAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateStockSearch", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateStockSearchAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateSale", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateSaleAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateShopSale", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateShopSaleAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateSaleMerge", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateSaleMergeAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/CreateSaleShopFH", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task CreateSaleShopFHAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/REQUIREMENTORDER", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task REQUIREMENTORDERAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/Zzjxqd115", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task Zzjxqd115Async(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/PoBill", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task PoBillAsync(string json);
+
+ [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/SaleLock", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ System.Threading.Tasks.Task