添加项目文件。

This commit is contained in:
2025-04-30 17:01:05 +08:00
commit 1eaedea85d
261 changed files with 33985 additions and 0 deletions

30
.dockerignore Normal file
View File

@@ -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/**

63
.gitattributes vendored Normal file
View File

@@ -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

366
.gitignore vendored Normal file
View File

@@ -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

40
Dockerfile Normal file
View File

@@ -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.
#<23>ĵ<EFBFBD><C4B5><EFBFBD>ַ https://github.com/dotnet/dotnet-docker/
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 80
EXPOSE 443
#<23><>װapt-get <20><>װ libc6-dev , libgdiplus <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>system.drawing <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C4AC>ubuntu<74><75><EFBFBD><EFBFBD>
#RUN apt-get update -qq && apt-get -y install libgdiplus libc6-dev
#<23><>װ 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"]

View File

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

View File

@@ -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
{
/// <summary>
/// 箱子
/// </summary>
[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;
}
/// <summary>
/// 箱信息-列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedList<BoxInfoResponse>> GetPagedList([FromBody] BoxQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<BoxInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (!string.IsNullOrEmpty(dto.BoxBeginNo)
&& !Regex.Match(dto.BoxBeginNo.ToUpper().Replace("CTN", ""), "^[0-9]*$").Success)
return ResultPagedList<BoxInfoResponse>.ReFailure(ResultCodes.BoxNO_Invalid_Error);
if (!string.IsNullOrEmpty(dto.BoxEndNo)
&& !Regex.Match(dto.BoxEndNo.ToUpper().Replace("CTN", ""), "^[0-9]*$").Success)
return ResultPagedList<BoxInfoResponse>.ReFailure(ResultCodes.BoxNO_Invalid_Error);
var (list, count) = await _boxRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<BoxInfoResponse>.ReSuccess(list, count);
return result;
}
///// <summary>
///// 获取详情
///// </summary>
///// <param name="id"></param>
///// <returns></returns>
//[HttpGet]
//[Route("GetInfo/{id}")]
//public async Task<Result<OutStockInfoResponse>> GetInfo([FromRoute] int id)
//{
// var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
// if (loginInfo == null || loginInfo.UserInfo == null)
// return Result<OutStockInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
// var response = await _repositories.GetInfo(id);
// return Result<OutStockInfoResponse>.ReSuccess(response);
//}
/// <summary>
/// 生成箱码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Generate")]
public async Task<Result> 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);
}
/// <summary>
/// 装箱保存
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Save")]
public async Task<Result> 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);
}
/// <summary>
/// 打印
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Print")]
public async Task<Result> 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);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Delete")]
public async Task<Result> 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);
}
/// <summary>
/// 清空装箱信息
/// </summary>
/// <param name="boxId"></param>
/// <returns></returns>
[HttpGet]
[Route("Clear")]
public async Task<Result> 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);
}
/// <summary>
/// 根据箱号获取箱信息
/// </summary>
/// <param name="boxBillNo"></param>
/// <returns></returns>
[HttpGet]
[Route("GetBoxByNo")]
public async Task<Result<BoxResponse>> GetBoxByNo([FromQuery] string boxBillNo)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result<BoxResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var entity = await _boxRepositories.GetByNo(boxBillNo);
if (entity == null)
return Result<BoxResponse>.ReFailure(ResultCodes.BoxNoDataError);
return Result<BoxResponse>.ReSuccess(_mapper.Map<BoxResponse>(entity));
}
/// <summary>
/// 重新装箱
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Restart")]
public async Task<Result> 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);
}
/// <summary>
/// 开始装箱
/// </summary>
/// <param name="boxId"></param>
/// <returns></returns>
[HttpGet]
[Route("BeginCarton")]
public async Task<Result> 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);
}
}
}

View File

@@ -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
{
/// <summary>
/// 箱唛-接口
/// </summary>
[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;
}
/// <summary>
/// 箱唛--列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedList<BoxMarkQueryResponse>> GetPagedList([FromBody] BoxMarkQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<BoxMarkQueryResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _boxMarkService.GetPagedList(dto, loginInfo);
return ResultPagedList<BoxMarkQueryResponse>.ReSuccess(list, count);
}
/// <summary>
/// 生成
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("generate")]
public async Task<ResultList<BoxMarkQueryResponse>> GenerateAsync([FromBody] GenerateBoxMarkDto dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<BoxMarkQueryResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
return await _boxMarkService.Generate(dto, loginInfo);
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("delete")]
public async Task<Result> Delete([FromBody] OperateRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<BoxMarkQueryResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var isSuccess= await _boxMarkRepositories.DeleteRange(dto.Ids);
if(!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess();
}
}
}

View File

@@ -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
{
/// <summary>
/// 前端记录日志
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class ClientLogController : ControllerBase
{
private readonly ILogger<ClientLogController> _Logger;
public IWebHostEnvironment _webHostEnvironment { get; set; }
public ClientLogController(ILogger<ClientLogController> Logger, IWebHostEnvironment webHostEnvironment)
{
_Logger = Logger;
_webHostEnvironment = webHostEnvironment;
}
/// <summary>
/// 前端记录日志
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
[HttpGet]
[Route("Log")]
public Task<Result> Log([FromQuery] string log)
{
if (!_webHostEnvironment.IsDevelopment())
_Logger.LogInformation($"前端日志 时间:{DateTime.Now} 内容:{log}");
return Task.FromResult(Result.ReSuccess());
}
/// <summary>
/// 前端记录日志
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
[HttpGet]
[Route("test")]
public Task<Result> Log()
{
return Task.FromResult(Result.ReSuccess());
}
/// <summary>
/// 前端记录日志(数组)
/// </summary>
/// <param name="logs"></param>
/// <returns></returns>
[HttpPost]
[Route("Logs")]
public Task<Result> Logs(List<string> logs)
{
if (!_webHostEnvironment.IsDevelopment())
_Logger.LogInformation($"前端日志(数组) 时间:{DateTime.Now} 内容:{JsonConvert.SerializeObject(logs)}");
return Task.FromResult(Result.ReSuccess());
}
}
/// <summary>
/// 消息数组
/// </summary>
[Serializable]
public class LogRequest
{
/// <summary>
/// 消息内容数组
/// </summary>
public List<string> logs { get; set; } = new List<string>();
}
}

View File

@@ -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
{
/// <summary>
/// 上传下载中心
/// </summary>
[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;
}
/// <summary>
/// 获取需要的状态列表
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("GetStatus")]
public Task<Result<FileDownManagerStatusResponse>> 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<FileDownManagerStatusResponse>.ReSuccess(response));
}
/// <summary>
/// 下载导出文件 列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("FileDownManagerQuery")]
public async Task<Result<FileDownManagerResponse>> FileDownManagerQuery(FileDownManagerRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Result<FileDownManagerResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
dto.SupplierId = loginInfo.UserInfo.SupplierId;
var result = await _repositories.GetList(dto, loginInfo);
return Result<FileDownManagerResponse>.ReSuccess(result);
}
/// <summary>
/// 模板(生成序列码)
/// </summary>
/// <returns></returns>
[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<TemplateExcel> list = new List<TemplateExcel>();
mapper.Put<TemplateExcel>(list, "sheet1", true);
mapper.Save(stream);
}
catch (Exception)
{
}
buffer = stream.ToArray();
}
// .xlsx文件对应的Mime信息
var mime = new FileExtensionContentTypeProvider().Mappings[".xlsx"];
return File(buffer, mime, "批量生成条码模板.xlsx");
}
}
}

View File

@@ -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<string> Heart()
{
return Task.FromResult("Success");
}
}
}

View File

@@ -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
{
/// <summary>
/// 登录接口
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
private readonly ILoginService _loginService;
private readonly ILogger<LoginController> _logger;
public LoginController(ILoginService loginService,ILogger<LoginController> logger)
{
this._logger = logger;
this._loginService = loginService;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
[HttpGet]
[Route("LoginIn")]
public async Task<Result<LoginInDto>> LoginIn([FromQuery] string code)
{
//var result = await _loginService.GetUserInfoAsync(code);
var result = await _loginService.GetUserInfoByCode(code);
return result;
}
/// <summary>
/// 登录-APP和小程序
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("LoginInPwd")]
public async Task<Result<LoginInDto>> LoginInPwd([FromBody] LoginRequest dto)
{
var result = await _loginService.GetUserInfo(dto.UserName,dto.Password);
return result;
}
/// <summary>
/// 退出登录
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("LoginOut")]
public async Task<Result> 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();
}
/// <summary>
/// PHP单点退出使用
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("LoginOutSingle")]
public async Task<Result> 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();
}
/// <summary>
/// 菜单列表
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("Menus")]
public async Task<Result<List<MenuResponse>>> GetMenuList()
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result<List<MenuResponse>>.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<List<MenuResponse>>.ReFailure(ResultCodes.NoRoot);
}
var res = Result<List<MenuResponse>>.ReSuccess(list);
return res;
}
}
}

View File

@@ -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
{
/// <summary>
/// 物料
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class MaterialController : ControllerBase
{
private IMapper _mapper;
private ILogger<MaterialController> _logger;
private IErpService _erpService;
private IMaterialsRepositories _materialsRepositories;
private ErpOptions _erpOptions;
private readonly IMemoryCache _memoryCache;
public MaterialController(IMapper mapper, ILogger<MaterialController> logger, IErpService erpService,
IMaterialsRepositories materialsRepositories, IOptions<ErpOptions> erpOptions, IMemoryCache memoryCache)
{
_mapper = mapper;
_logger = logger;
_erpService = erpService;
_materialsRepositories = materialsRepositories;
this._erpOptions = erpOptions.Value;
this._memoryCache = memoryCache;
}
/// <summary>
/// 刷新物料 69条码或id32进制
/// </summary>
/// <param name="number">物料编码</param>
/// <param name="type">69 条码,id id32进制,other 名字和规格型号</param>
/// <returns></returns>
[HttpGet]
[Route("Refresh/{number}/{type}")]
public async Task<Result> 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<string> numbers = new List<string>();
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<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
List<Materials> update_list = new List<Materials>();
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();
}
}
}

View File

@@ -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<SecurityController> _logger;
public SecurityController(ISecurityNumbersRepositories securityNumbersRepositories, ILogger<SecurityController> logger)
{
_securityNumbersRepositories = securityNumbersRepositories;
_logger = logger;
}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="security">防伪码</param>
/// <returns></returns>
[HttpGet]
[Route("Get")]
public async Task<Result<SecurityResponse>> 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<SecurityResponse>.ReSuccess(new SecurityResponse());
var res = await _securityNumbersRepositories.GetEntity(security);
if (res == null) return Result<SecurityResponse>.ReSuccess(new SecurityResponse());
res.Get();
res = await _securityNumbersRepositories.Edit(res);
//为了让前端可以做语言判断 这个接口所有错误都提示500
if (res == null) return Result<SecurityResponse>.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<SecurityResponse>.ReSuccess(response);
}
}
}

View File

@@ -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
{
/// <summary>
/// 防伪码
/// </summary>
[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<QiniuOptions> option, ISecurityGenerateRecordRepositories sGenerateRecordRepositories)
{
_mapper = mapper;
_loginService = loginService;
_securityNumbersRepositories = SecurityNumbersRepositories;
_securityNumberService = SecurityNumberService;
_exportExcelService = exportExcelService;
_option = option?.Value;
_sGenerateRecordRepositories = sGenerateRecordRepositories;
}
/// <summary>
/// 防伪码生成记录列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetGenerateRecordList")]
public async Task<ResultPagedList<SecurityGenerateRecordInfoResponse>> GetGenerateRecordList([FromBody] SecurityGenerateRecordQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SecurityGenerateRecordInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SecurityGenerateRecordInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 防伪码列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedList<SecurityNumberInfoResponse>> GetPagedList([FromBody] SecurityNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SecurityNumberInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _securityNumbersRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SecurityNumberInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 防伪码生成记录页面-下载条码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("ExportAll")]
public Task<Result<string>> ExportAll(OperateRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
if (entityList.Count < 0)return Task.FromResult(Result<string>.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<string>.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<SecurityNumbersExportReponse, SecurityNumbersExportRequest>(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SecurityNumbers, orgCode);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 防伪码页面-条码下载
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Export")]
public Task<Result<string>> Export([FromBody] SecurityNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
if (entity==null) return Task.FromResult(Result<string>.ReFailure(ResultCodes.NoDateError));
string orgCode = entity.OrgCode;
//反写下载数据
Result resSuccess;
if (dto.SecurityNumbers.Count() > 0)
{
resSuccess = this.DownLoad(new OperateSecurityNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = false,
SecurityNumbers = dto.SecurityNumbers
}).GetAwaiter().GetResult();
}
else
{
resSuccess = this.DownLoad(new OperateSecurityNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = true
}).GetAwaiter().GetResult();
}
if (!resSuccess.IsSuccess) return Task.FromResult(Result<string>.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<SecurityNumberInfoResponse, SecurityNumberQueryRequest>(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SecurityNumberInfo, orgCode);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 下载(一般后端内部调用)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("DownLoad")]
public async Task<Result> 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);
}
/// <summary>
/// 生成序列号
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Generate")]
public async Task<Result> 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);
}
}
}

View File

@@ -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
{
/// <summary>
/// 序列号
/// </summary>
[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<QiniuOptions> option, ISGenerateRecordRepositories sGenerateRecordRepositories)
{
_mapper = mapper;
_loginService = loginService;
_serialNumbersRepositories = serialNumbersRepositories;
_serialNumberService = serialNumberService;
_exportExcelService = exportExcelService;
_option = option?.Value;
_sGenerateRecordRepositories = sGenerateRecordRepositories;
}
/// <summary>
/// 序列码生成记录列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetGenerateRecordList")]
public async Task<ResultPagedList<SGenerateRecordInfoResponse>> GetGenerateRecordList([FromBody] SGenerateRecordQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SGenerateRecordInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var (list, count) = await _sGenerateRecordRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SGenerateRecordInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 序列码列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<ResultPagedList<SerialNumberInfoResponse>> GetPagedList([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeBegin)
&& (!Regex.Match(dto.NumberCodeBegin, "^[0-9]*$").Success || dto.NumberCodeBegin.Length < 12))
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.NumberCode_Invalid_Error);
if (!string.IsNullOrEmpty(dto.NumberCodeEnd)
&& (!Regex.Match(dto.NumberCodeEnd, "^[0-9]*$").Success || dto.NumberCodeEnd.Length < 12))
return ResultPagedList<SerialNumberInfoResponse>.ReFailure(ResultCodes.NumberCode_Invalid_Error);
var (list, count) = await _serialNumbersRepositories.GetListAsync(dto, loginInfo);
var result = ResultPagedList<SerialNumberInfoResponse>.ReSuccess(list, count);
return result;
}
/// <summary>
/// 条码生成记录页面-下载条码
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("ExportAll")]
public Task<Result<string>> ExportAll(OperateRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entityList = _sGenerateRecordRepositories.GetEntityList(dto.Ids).GetAwaiter().GetResult();
if (entityList.Count < 0) return Task.FromResult(Result<string>.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<string>.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<SerialNumbersExportReponse, SerialNumbersExportRequest>(request, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumbers, orgCode);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 序列码页面-条码下载
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Export")]
public Task<Result<string>> Export([FromBody] SerialNumberQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return Task.FromResult(Result<string>.ReFailure(ResultCodes.Token_Invalid_Error));
var entity = _sGenerateRecordRepositories.GetEntity(dto.GenerateRecordId).GetAwaiter().GetResult();
if (entity == null) return Task.FromResult(Result<string>.ReFailure(ResultCodes.NoDateError));
string orgCode = entity.OrgCode;
//反写下载数据
Result resSuccess;
if (dto.SerialNumbers.Count() > 0)
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = false,
SerialNumbers = dto.SerialNumbers
}).GetAwaiter().GetResult();
}
else
{
resSuccess = this.DownLoad(new OperateSerialNumberRequest()
{
GenerateRecordIds = new List<int>() { dto.GenerateRecordId },
IsAll = true
}).GetAwaiter().GetResult();
}
if (!resSuccess.IsSuccess) return Task.FromResult(Result<string>.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<SerialNumberInfoResponse, SerialNumberQueryRequest>(dto, fileName, loginInfo.UserInfo.UcId, loginInfo, FileDownLoadOrderType.SerialNumberInfo, orgCode);
});
return Task.FromResult(Result<string>.ReSuccess(res));
}
/// <summary>
/// 生成序列号
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Generate")]
public async Task<Result> 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);
}
/// <summary>
/// 打印
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("Print")]
public async Task<Result> 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);
}
/// <summary>
/// 下载(一般后端内部调用)
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("DownLoad")]
public async Task<Result> 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);
}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="boxId">箱Id</param>
/// <returns></returns>
[HttpPost]
[Route("GetByBoxId")]
public async Task<ResultPagedList<SerialNumbersResponse>> GetByBoxId(SerialNumberByBoxIdQueryRequest dto)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultPagedList<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (dto.BoxId == 0)
return ResultPagedList<SerialNumbersResponse>.ReFailure(ResultCodes.NoDateError);
var (list, count) = await _serialNumbersRepositories.GetEntityListByBoxId(dto);
var result = ResultPagedList<SerialNumbersResponse>.ReSuccess(list, count);
return result;
}
///// <summary>
///// 获取序列号信息
///// </summary>
///// <param name="serialNumber">序列号</param>
///// <param name="orgCode">组织或供应商编码</param>
///// <returns></returns>
//[HttpGet]
//[Route("Get")]
//public async Task<ResultList<SerialNumbersResponse>> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
//{
// var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
// if (loginInfo == null || loginInfo.UserInfo == null)
// return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
// if (string.IsNullOrEmpty(orgCode))
// return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.NoOrgError);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// // var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
// if (res == null) return ResultList<SerialNumbersResponse>.ReFailure(ResultCodes.SerialNumberNoData);
// // return ResultList<SerialNumbersResponse>.ReSuccess(res);
// return ResultList<SerialNumbersResponse>.ReSuccess(res.ToList());
//}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="serialNumber">序列号</param>
/// <param name="orgCode">组织或供应商编码</param>
/// <returns></returns>
[HttpGet]
[Route("Get")]
public async Task<Result<SerialNumbersResponse>> Get([FromQuery] string serialNumber, [FromQuery] string orgCode)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result<SerialNumbersResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
if (string.IsNullOrEmpty(orgCode))
return Result<SerialNumbersResponse>.ReFailure(ResultCodes.NoOrgError);
var res = await _serialNumbersRepositories.GetEntity(serialNumber, orgCode, loginInfo);
// var res = await _serialNumbersRepositories.GetEntityList(serialNumber, orgCode, loginInfo);
if (res == null) return Result<SerialNumbersResponse>.ReFailure(ResultCodes.SerialNumberNoData);
// return ResultList<SerialNumbersResponse>.ReSuccess(res);
return Result<SerialNumbersResponse>.ReSuccess(res);
}
/// <summary>
/// 修改序列码物料
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("UpdateMaterial")]
public async Task<Result> 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);
}
}
}

View File

@@ -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
{
/// <summary>
/// 系统配置
/// </summary>
[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<SysConfigController> _logger;
private ErpOptions _erpOptions;
private readonly IMemoryCache _memoryCache;
public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IOptions<ErpOptions> erpOptions, IErpService erpService, ISingleDataService singleDataService, IMemoryCache memoryCache,
IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService,
ILogger<SysConfigController> logger)
{
this._erpOptions = erpOptions?.Value;
this._memoryCache = memoryCache;
_loginService = loginService;
_basicsRepositories = basicsRepositories;
_erpService = erpService;
_singleDataService = singleDataService;
_mapper = mapper;
_erpBasicDataExtendService = erpBasicDataExtendService;
_logger = logger;
}
/// <summary>
/// 获取物料;通过规格型号
/// </summary>
/// <param name="speci"></param>
/// <returns></returns>
[HttpGet]
[Route("GetMaterialList")]
public async Task<ResultList<ErpMaterialDto>> GetMaterialList([FromQuery] string speci)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.Token_Invalid_Error);
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
if (materials == null)
{
var res = await _erpService.BillQueryForMaterial();
if (res.IsSuccess)
materials = res.Data.ToList();
}
if (materials == null) return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.MateriaNoData);
//没有物料Id 32进制的也过滤掉
var result = materials.Where(x => x.Specifications.Contains(speci)
&& !string.IsNullOrEmpty(x.IdConvertBar.Trim())).Take(30).ToList();
return ResultList<ErpMaterialDto>.ReSuccess(result);
}
/// <summary>
/// 获取供应商-erp基础数据
/// 使用code做键
/// </summary>
/// <param name="name">供应商名字</param>
/// <param name="orgCode">组织编码</param>
/// <returns></returns>
[HttpGet]
[Route("GetSupplierOrOrg")]
public async Task<ResultList<PullDownStrResponse>> GetSupplierOrOrg([FromQuery] string? name, [FromQuery] string orgCode)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return ResultList<PullDownStrResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
var result = await _singleDataService.GetSingleDataNoCache<ResultList<SingleDataResponse>, NameRequest, SysConfigAction>(
new NameRequest(name, loginInfo.UserInfo.CompanyId), SysConfigAction.GetSupplierByNameAndCompany, SingleControllerType.SysConfig);
if (!result.IsSuccess)
return ResultList<PullDownStrResponse>.ReFailure(result.Message, result.Status);
List<SingleDataResponse> 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<PullDownStrResponse> pullList = new List<PullDownStrResponse>();
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<ErpOrgDto> 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<PullDownStrResponse>.ReSuccess(pullList);
}
/// <summary>
/// 获取组织-erp基础数据
/// 使用 code做键
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("GetOrg")]
public async Task<ResultList<PullDownStrResponse>> GetOrg([FromQuery] string? name)
{
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null)
return ResultList<PullDownStrResponse>.ReFailure(ResultCodes.Token_Invalid_Error);
List<PullDownStrResponse> pullList = new List<PullDownStrResponse>();
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<PullDownStrResponse>.ReSuccess(pullList);
}
var result = await _singleDataService.GetSingleDataNoCache<ResultList<OrgAllResponse>, UserRequest, SysConfigAction>(
new UserRequest(loginInfo.UserInfo.UcId), SysConfigAction.GetOrgByUser, SingleControllerType.SysConfig);
if (!result.IsSuccess)
return ResultList<PullDownStrResponse>.ReFailure(result.Message, result.Status);
List<OrgAllResponse> 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<PullDownStrResponse>.ReSuccess(pullList);
}
}
}

View File

@@ -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<Result> Get()
{
//await GetFSer();
//Dictionary<string, string> dic = new Dictionary<string, string>();
//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<int> ids = new List<int>();
// 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<BoxResponse>(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<GenerateSerialNumberInfoRequest>();
////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<SerialNumbers>();
List<Box> boxs = new List<Box>();
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<SerialNumbers> GetS()
{
List<SerialNumbers> serialNumbers = new List<SerialNumbers>();
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<SerialNumbers> GetE()
{
List<SerialNumbers> serialNumbers = new List<SerialNumbers>();
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<SerialNumberGenerateRecord> records = new List<SerialNumberGenerateRecord>();
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<SecurityNumbers> GetFE()
{
List<SecurityNumbers> serialNumbers = new List<SecurityNumbers>();
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<SecurityNumberGenerateRecord> records = new List<SecurityNumberGenerateRecord>();
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);
}
}
}

View File

@@ -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<WmsBoxController> _logger;
private readonly ISerialNumbersRepositories _serialNumbersRepositories;
private readonly ISingleDataService _singleDataService;
public WmsBoxController(IMapper mapper, ILoginService loginService, IBoxRepositories boxRepositories,
IBoxService boxService, ILogger<WmsBoxController> logger,
ISerialNumbersRepositories serialNumbersRepositories, ISingleDataService singleDataService)
{
_boxRepositories = boxRepositories;
_mapper = mapper;
_loginService = loginService;
_boxService = boxService;
_logger = logger;
_serialNumbersRepositories = serialNumbersRepositories;
_singleDataService = singleDataService;
}
/// <summary>
/// Wms获取箱信息-列表
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetList")]
public async Task<OpsReponse> GetList(WmsBoxRequest dto)
{
_logger.LogInformation($"请求消息:{JsonConvert.SerializeObject(dto)}");
List<WmsBoxResponse> list = new List<WmsBoxResponse>();
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;
}
/// <summary>
/// Wms获取序列号信息
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
[Route("GetSerialNumber")]
public async Task<Result<SerialNumbersWmsResponse>> GetSerialNumber(SerialNumbersWmsRequest dto)
{
_logger.LogInformation($"wms获取序列码:{JsonConvert.SerializeObject(dto)}");
var entity = await _serialNumbersRepositories.GetEntityWms(dto.SerialNumber);
if (entity == null) return Result<SerialNumbersWmsResponse>.ReFailure(ResultCodes.SerialNumberNoData);
if (entity.BoxId > 0)
return Result<SerialNumbersWmsResponse>.ReFailure(ResultCodes.SerialNumberBindBox);
if (entity.IsUse == true)
return Result<SerialNumbersWmsResponse>.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<Domain.Entitys.SerialNumbers>();
list.Add(entity);
var res = await _serialNumbersRepositories.EditEntityList(list);
if (!res) return Result<SerialNumbersWmsResponse>.ReFailure(ResultCodes.DateWriteError);
_logger.LogInformation($"wms获取序列码返回序列码信息:{JsonConvert.SerializeObject(response)}");
return Result<SerialNumbersWmsResponse>.ReSuccess(response);
}
/// <summary>
/// 获取序列号信息
/// </summary>
/// <param name="serialNumber">序列号</param>
/// <returns></returns>
[HttpGet]
[Route("Get/{serialNumber}")]
public async Task<Result<SerialNumbersExternalResponse>> Get([FromRoute] string serialNumber)
{
if (string.IsNullOrEmpty(serialNumber))
return Result<SerialNumbersExternalResponse>.ReFailure(ResultCodes.SerialNumbersNoData);
var serial = await _serialNumbersRepositories.GetExternal(serialNumber);
if (serial == null) return Result<SerialNumbersExternalResponse>.ReFailure(ResultCodes.SerialNumbersNoData);
return Result<SerialNumbersExternalResponse>.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; }
}
}

View File

@@ -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
{
/// <summary>
/// 错误拦截
/// </summary>
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)
{
}
}
}

View File

@@ -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<AppOptions>();
var option_soa = builder.Configuration.GetSection("SoaOptions").Get<SoaOptions>();
var isDevelopment = builder.Configuration.GetSection("IsDevelopment").Get<bool>();
var serverVersion = new MySqlServerVersion(new Version(8, 0, 18));
//<2F><><EFBFBD>ݿ<EFBFBD>ע<EFBFBD><D7A2>
builder.Services.AddApp(builder.Configuration, isDevelopment, builder =>
{
builder.AddDbContext(
opt => { opt.UseMySql(option.DBConnectionString, serverVersion); });
});
builder.Services.AddControllers(options =>
{
options.Filters.Add<CustomResultFilter>();
});
var app = builder.Build();
// Configure the HTTP request pipeline.
// Swagger<65>м<EFBFBD><D0BC><EFBFBD>
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");
//ͳһ<CDB3><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
app.UseMiddleware<AuthorizationTokenSecurityPolicy>();
app.UseMiddleware<ErrorHandlingMiddleware>();
//app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@@ -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
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -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"
}
}

View File

@@ -0,0 +1,396 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>BarCode.Web.Api</name>
</assembly>
<members>
<member name="T:BarCode.Web.Api.Controllers.BoxController">
<summary>
箱子
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.GetPagedList(BarCode.Web.Core.Dto.Box.BoxQueryRequest)">
<summary>
箱信息-列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Generate(BarCode.Web.Core.Dto.Box.GenerateBoxRequest)">
<summary>
生成箱码
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Save(BarCode.Web.Core.Dto.Box.SaveBoxRequest)">
<summary>
装箱保存
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Print(BarCode.Web.Core.Dto.OperateRequest)">
<summary>
打印
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Delete(BarCode.Web.Core.Dto.Box.DeleteBoxSerialNumberRequest)">
<summary>
删除
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Clear(System.Int32)">
<summary>
清空装箱信息
</summary>
<param name="boxId"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.GetBoxByNo(System.String)">
<summary>
根据箱号获取箱信息
</summary>
<param name="boxBillNo"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.Restart(BarCode.Web.Core.Dto.OperateRequest)">
<summary>
重新装箱
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxController.BeginCarton(System.Int32)">
<summary>
开始装箱
</summary>
<param name="boxId"></param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.BoxMarkController">
<summary>
箱唛-接口
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxMarkController.GetPagedList(BarCode.Web.Core.Dto.BoxMarkQueryRequest)">
<summary>
箱唛--列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxMarkController.GenerateAsync(BarCode.Web.Core.Dto.GenerateBoxMarkDto)">
<summary>
生成
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.BoxMarkController.Delete(BarCode.Web.Core.Dto.OperateRequest)">
<summary>
批量删除
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.ClientLogController">
<summary>
前端记录日志
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.ClientLogController.Log(System.String)">
<summary>
前端记录日志
</summary>
<param name="log"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.ClientLogController.Log">
<summary>
前端记录日志
</summary>
<param name="log"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.ClientLogController.Logs(System.Collections.Generic.List{System.String})">
<summary>
前端记录日志(数组)
</summary>
<param name="logs"></param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.LogRequest">
<summary>
消息数组
</summary>
</member>
<member name="P:BarCode.Web.Api.Controllers.LogRequest.logs">
<summary>
消息内容数组
</summary>
</member>
<member name="T:BarCode.Web.Api.Controllers.FileDownManagerController">
<summary>
上传下载中心
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.FileDownManagerController.GetStatus">
<summary>
获取需要的状态列表
</summary>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.FileDownManagerController.FileDownManagerQuery(BarCode.Web.Core.Dto.FileDownManagerRequest)">
<summary>
下载导出文件 列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.FileDownManagerController.TemplateExcel">
<summary>
模板(生成序列码)
</summary>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.LoginController">
<summary>
登录接口
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.LoginController.LoginIn(System.String)">
<summary>
登录
</summary>
<param name="code"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.LoginController.LoginInPwd(BarCode.Web.Core.Dto.Login.LoginRequest)">
<summary>
登录-APP和小程序
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.LoginController.LoginOut">
<summary>
退出登录
</summary>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.LoginController.LoginOutSingle">
<summary>
PHP单点退出使用
</summary>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.LoginController.GetMenuList">
<summary>
菜单列表
</summary>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.MaterialController">
<summary>
物料
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.MaterialController.Refresh(System.String,System.String)">
<summary>
刷新物料 69条码或id32进制
</summary>
<param name="number">物料编码</param>
<param name="type">69 条码,id id32进制,other 名字和规格型号</param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityController.Get(System.String)">
<summary>
获取序列号信息
</summary>
<param name="security">防伪码</param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.SecurityNumberController">
<summary>
防伪码
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.GetGenerateRecordList(BarCode.Web.Core.Dto.SecurityNumbers.SecurityGenerateRecordQueryRequest)">
<summary>
防伪码生成记录列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.GetPagedList(BarCode.Web.Core.Dto.SecurityNumbers.SecurityNumberQueryRequest)">
<summary>
防伪码列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.ExportAll(BarCode.Web.Core.Dto.OperateRequest)">
<summary>
防伪码生成记录页面-下载条码
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.Export(BarCode.Web.Core.Dto.SecurityNumbers.SecurityNumberQueryRequest)">
<summary>
防伪码页面-条码下载
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.DownLoad(BarCode.Web.Core.Dto.SecurityNumbers.OperateSecurityNumberRequest)">
<summary>
下载(一般后端内部调用)
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SecurityNumberController.Generate(BarCode.Web.Core.Dto.SecurityNumbers.GenerateSecurityNumberRequest)">
<summary>
生成序列号
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.SerialNumberController">
<summary>
序列号
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.GetGenerateRecordList(BarCode.Web.Core.Dto.SerialNumbers.SGenerateRecordQueryRequest)">
<summary>
序列码生成记录列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.GetPagedList(BarCode.Web.Core.Dto.SerialNumbers.SerialNumberQueryRequest)">
<summary>
序列码列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.ExportAll(BarCode.Web.Core.Dto.OperateRequest)">
<summary>
条码生成记录页面-下载条码
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.Export(BarCode.Web.Core.Dto.SerialNumbers.SerialNumberQueryRequest)">
<summary>
序列码页面-条码下载
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.Generate(BarCode.Web.Core.Dto.SerialNumbers.GenerateSerialNumberRequest)">
<summary>
生成序列号
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.Print(BarCode.Web.Core.Dto.SerialNumbers.OperateSerialNumberRequest)">
<summary>
打印
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.DownLoad(BarCode.Web.Core.Dto.SerialNumbers.OperateSerialNumberRequest)">
<summary>
下载(一般后端内部调用)
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.GetByBoxId(BarCode.Web.Core.Dto.SerialNumbers.SerialNumberByBoxIdQueryRequest)">
<summary>
获取序列号信息
</summary>
<param name="boxId">箱Id</param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.Get(System.String,System.String)">
<summary>
获取序列号信息
</summary>
<param name="serialNumber">序列号</param>
<param name="orgCode">组织或供应商编码</param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SerialNumberController.UpdateMaterial(BarCode.Web.Core.Dto.SerialNumbers.UpdateMaterialRequest)">
<summary>
修改序列码物料
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.Controllers.SysConfigController">
<summary>
系统配置
</summary>
</member>
<member name="M:BarCode.Web.Api.Controllers.SysConfigController.GetMaterialList(System.String)">
<summary>
获取物料;通过规格型号
</summary>
<param name="speci"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SysConfigController.GetSupplierOrOrg(System.String,System.String)">
<summary>
获取供应商-erp基础数据
使用code做键
</summary>
<param name="name">供应商名字</param>
<param name="orgCode">组织编码</param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.SysConfigController.GetOrg(System.String)">
<summary>
获取组织-erp基础数据
使用 code做键
</summary>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.WmsBoxController.GetList(BarCode.Web.Core.Dto.Box.WmsBoxRequest)">
<summary>
Wms获取箱信息-列表
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.WmsBoxController.GetSerialNumber(BarCode.Web.Core.Dto.SerialNumbers.SerialNumbersWmsRequest)">
<summary>
Wms获取序列号信息
</summary>
<param name="dto"></param>
<returns></returns>
</member>
<member name="M:BarCode.Web.Api.Controllers.WmsBoxController.Get(System.String)">
<summary>
获取序列号信息
</summary>
<param name="serialNumber">序列号</param>
<returns></returns>
</member>
<member name="T:BarCode.Web.Api.CustomResultFilter">
<summary>
错误拦截
</summary>
</member>
</members>
</doc>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<DocumentationFile>../BarCode.Web.Api/wwwroot/BarCode.Web.Core.xml</DocumentationFile>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.5.1" />
<PackageReference Include="MySql.Data" Version="8.3.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Npoi.Mapper" Version="3.5.1" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.2" />
<PackageReference Include="Quartz" Version="3.8.1" />
<PackageReference Include="Quartz.AspNetCore" Version="3.8.1" />
<PackageReference Include="Quartz.Serialization.Json" Version="3.8.1" />
<PackageReference Include="StackExchange.Redis" Version="2.7.33" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Json" Version="4.7.1" />
<PackageReference Include="System.ServiceModel.Duplex" Version="6.0.0" />
<PackageReference Include="System.ServiceModel.Federation" Version="6.0.*" />
<PackageReference Include="System.ServiceModel.Http" Version="8.0.0" />
<PackageReference Include="System.ServiceModel.NetTcp" Version="8.0.0" />
<PackageReference Include="System.ServiceModel.Security" Version="6.0.0" />
</ItemGroup>
</Project>

View File

@@ -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"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 箱明细信息
/// </summary>
public class BoxDetailsResponse
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = "";
/// <summary>
/// 数量(装箱数量)
/// </summary>
public decimal Qty { get; set; } = 0;
/// <summary>
/// 序列号
/// </summary>
public List<string> SerialNumbers { get; set; } = new List<string>();
}
}

View File

@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 箱列表返回信息
/// </summary>
public class BoxInfoResponse
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 明细Id(可能为0)
/// </summary>
public int DetailId { get; set; } = 0;
/// <summary>
/// 箱编号
/// </summary>
public string BoxBillNo { get; set; } = string.Empty;
/// <summary>
/// 供应商或组织
/// </summary>
public string SupplierOrOrg { get; set; } = string.Empty;
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; } = string.Empty;
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; } = string.Empty;
/// <summary>
/// 物料条码
/// </summary>
public string BarCode { get; set; } = string.Empty;
/// <summary>
/// 序列号
/// </summary>
public string SerialNumbers { get; set; } = string.Empty;
/// <summary>
/// 数量(装箱数量)
/// </summary>
public decimal Qty { get; set; } = 0;
/// <summary>
/// 箱状态
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 装箱开始时间
/// </summary>
public string CartonBeginTime { get; set; } = string.Empty;
/// <summary>
/// 装箱结束时间(完成装箱时间)
/// </summary>
public string CartonEndTime { get; set; } = string.Empty;
/// <summary>
/// 装箱人
/// </summary>
public string CartonUser { get; set; } = string.Empty;
/// <summary>
/// 生成人
/// </summary>
public string Creator { get; set; } = string.Empty;
/// <summary>
/// 创建时间
/// </summary>
public string CreateTime { get; set; } = string.Empty;
/// <summary>
/// 箱号打印次数
/// </summary>
public int PrintNumber { get; set; } = 0;
}
}

View File

@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 箱信息列表
/// </summary>
public class BoxQueryRequest : PaginationBaseRequestDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = "";
/// <summary>
/// 箱号(开始)
/// </summary>
public string BoxBeginNo { get; set; } = string.Empty;
/// <summary>
/// 箱号(结束)
/// </summary>
public string BoxEndNo { get; set; } = string.Empty;
/// <summary>
/// 箱状态
/// </summary>
public int? Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateBeginDate { get; set; } = null;
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateEndDate { get; set; } = null;
/// <summary>
/// 装箱完成时间
/// </summary>
public DateTime? CartonBeginDate { get; set; } = null;
/// <summary>
/// 装箱完成时间
/// </summary>
public DateTime? CartonEndDate { get; set; } = null;
/// <summary>
/// 物料编码/名称/型号规格
///</summary>
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 序列号
/// </summary>
public List<string> SerialNumbers { get; set; } = new List<string>();
/// <summary>
/// 箱号打印状态 打印 true 未打印false
/// </summary>
public bool? BoxPrintStatus { get; set; } = null;
/// <summary>
/// 供应商或组织
/// </summary>
public string SupplierOrOrg { get; set; } = string.Empty;
/// <summary>
/// 生成人
/// </summary>
public string CreateUser { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 箱信息
/// </summary>
public class BoxResponse
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; } = 0;
/// <summary>
/// 箱编号
/// </summary>
public string BoxBillNo { get; set; } = "";
/// <summary>
/// 供应商Code
/// </summary>
public string SupplierCode { get; set; } = "";
/// <summary>
/// 组织Code
/// </summary>
public string OrgCode { get; set; } = "";
/// <summary>
/// 箱状态
/// </summary>
public string Status { get; set; } = string.Empty;
/// <summary>
/// 装箱开始时间
/// </summary>
public string CartonBeginTime { get; set; } = string.Empty;
/// <summary>
/// 装箱结束时间(完成装箱时间)
/// </summary>
public string CartonEndTime { get; set; } = string.Empty;
/// <summary>
/// 完成装箱用户
/// </summary>
public int CartonUserId { get; set; } = 0;
/// <summary>
/// 箱子创建用户
/// </summary>
public int CreatorId { get; set; } = 0;
/// <summary>
/// 创建时间
/// </summary>
public string CreateTime { get; set; } = string.Empty;
/// <summary>
/// 箱号打印次数
/// </summary>
public int PrintNumber { get; set; } = 0;
/// <summary>
/// 最新打印时间
/// </summary>
public string PrintTime { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<BoxDetailsResponse> Details { get; set; } = new List<BoxDetailsResponse>();
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 删除箱和序列码绑定
/// </summary>
public class DeleteBoxSerialNumberRequest
{
/// <summary>
/// 箱Id
/// </summary>
[Required(ErrorMessage = "箱不能为空")]
public int BoxId { get; set; }
/// <summary>
/// 物料编码
/// </summary>
[Required(ErrorMessage = "物料不能为空")]
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 序列号
/// </summary>
[Required(ErrorMessage = "序列号不能为空")]
public string SerialNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 生成箱码
/// </summary>
public class GenerateBoxRequest
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = "";
/// <summary>
/// 生成数量
/// </summary>
[Required(ErrorMessage = "数量不能为空")]
[Range(0.0000000001, 10000000000, ErrorMessage = "0<数量<=10000000000")]
public int Number { get; set; } = 0;
}
}

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 箱信息明细
/// </summary>
public class SaveBoxDetailsRequest
{
/// <summary>
/// 物料编码
/// </summary>
[Required(ErrorMessage = "物料不能为空")]
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 序列号
/// </summary>
[Required(ErrorMessage = "序列号不能为空")]
public string SerialNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 保存箱信息(装箱保存,完成装箱)
/// </summary>
public class SaveBoxRequest
{
/// <summary>
/// 箱Id
/// </summary>
[Required(ErrorMessage = "箱不能为空")]
public int BoxId { get; set; } = 0;
/// <summary>
/// 是否完成装箱(保存 false 完成装箱 true)
/// </summary>
[Required(ErrorMessage = "装箱状态不能为空")]
public bool IsCarton { get; set; } = false;
/// <summary>
/// 明细信息
/// </summary>
public List<SaveBoxDetailsRequest> Details { get; set; } = new List<SaveBoxDetailsRequest>();
}
}

View File

@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 老ops箱信息请求
/// </summary>
public class WmsBoxRequest
{
/// <summary>
///
/// </summary>
public WmsBoxRequest() { }
/// <summary>
///
/// </summary>
/// <param name="strartTime"></param>
/// <param name="endTime"></param>
public WmsBoxRequest(DateTime strartTime, DateTime endTime)
{
this.StrartTime = strartTime;
this.EndTime = endTime;
}
/// <summary>
/// 开始时间
/// </summary>
public DateTime? StrartTime { get; set; } = null;
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndTime { get; set; } = null;
/// <summary>
/// 箱号
/// </summary>
public string? BoxBillNo { get; set; } = null;
/// <summary>
/// 页码
/// </summary>
public int Page { get; set; } = 1;
/// <summary>
/// 每页条数
/// </summary>
public int Limit { get; set; } = 10000000;
}
}

View File

@@ -0,0 +1,95 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Box
{
/// <summary>
/// 老ops箱信息
/// </summary>
public class WmsBoxResponse
{
/// <summary>
/// 对应老OPS的箱ID
/// </summary>
[JsonProperty("CartonId")]
public int OpsBoxId { get; set; }
/// <summary>
/// 箱编号老OPS生成的箱号
/// </summary>
[JsonProperty("CartonNo")]
public string BoxBillNo { get; set; }
/// <summary>
/// 供应商Id
/// </summary>
[JsonProperty("GysNo")]
public int? SupplierId { get; set; }
/// <summary>
/// 组织Id
/// </summary>
[JsonProperty("orgId")]
public int? OrgId { get; set; }
/// <summary>
/// 完成装箱时间
/// </summary>
[JsonProperty("CompleteCartonTime")]
public DateTime CompleteCartonTime { get; set; } = DateTime.Now;
/// <summary>
/// 完成装箱用户
/// </summary>
[JsonProperty("BoxUser")]
public string CompleteCartonUser { get; set; }
/// <summary>
/// 箱子创建用户
/// </summary>
[JsonProperty("Create_user")]
public string CreateUser { get; set; }
/// <summary>
/// 创建时间对应老OPS的创建时间
/// </summary>
[JsonProperty("cartonCreateTime")]
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 明细
/// </summary>
[JsonProperty("BoxReturnDetails")]
public List<OpsBoxDetailsResponse> Details { get; set; } = new List<OpsBoxDetailsResponse>();
}
public class OpsSerialNumbersResponse
{
/// <summary>
/// 序列号
/// </summary>
[JsonProperty("sn")]
public string SerialNumber { get; set; }
/// <summary>
/// 序列号生成时间
/// </summary>
[JsonProperty("barCreateTime")]
public DateTime? BarCreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 序列号生成用户
/// </summary>
[JsonProperty("barCereateUser")]
public string BarCereateUser { get; set; }
}
public class OpsBoxDetailsResponse {
/// <summary>
/// 物料编码
/// </summary>
[JsonProperty("FMaterialNo")]
public string MaterialNumber { get; set; }
/// <summary>
/// 数量(装箱数量)
/// </summary>
[JsonProperty("Qty")]
public decimal Qty { get; set; }
/// <summary>
/// 序列号集
/// </summary>
[JsonProperty("SerialNumbers")]
public List<OpsSerialNumbersResponse> SerialNumbers { get; set; } = new List<OpsSerialNumbersResponse>();
}
}

View File

@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 请求对象
/// </summary>
public class BoxMarkQueryRequest : PaginationBaseRequestDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = "";
/// <summary>
/// 订单编号集合字符串
/// </summary>
public string OrderBillNos { get; set; } = string.Empty;
/// <summary>
/// 物料三件套搜索
/// </summary>
public string Material { get; set; } = string.Empty;
/// <summary>
/// 开始的箱唛编号
/// </summary>
public string BeginBillNo { get; set; } = string.Empty;
/// <summary>
/// 结束的箱唛编号
/// </summary>
public string EndBillNo { get; set; } = string.Empty;
/// <summary>
/// 操作人
/// </summary>
public string Creator { get; set; } = string.Empty;
/// <summary>
/// 生成开始时间
/// </summary>
public DateTime? CreateBeginDate { get; set; } = null;
/// <summary>
/// 生成结束时间
/// </summary>
public DateTime? CreateEndDate { get; set; } = null;
}
}

View File

@@ -0,0 +1,124 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 列表响应对象
/// </summary>
public class BoxMarkQueryResponse
{
/// <summary>
/// 唯一ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 明细编号ID
/// </summary>
public int DetailId { get; set; }
/// <summary>
/// 箱唛编号
/// </summary>
public string BillNo { get; set; }
/// <summary>
/// 订单编号
/// </summary>
public string OrderBillNo { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 69条码
/// </summary>
public string BarCode { get; set; }
/// <summary>
/// 装箱数量
/// </summary>
public decimal CratingQty { get; set; }
/// <summary>
/// 装箱净重
/// </summary>
public decimal CratingNetWeightQty { get; set; }
/// <summary>
/// 装箱毛重
/// </summary>
public decimal CratingGrossWeightQty { get; set; }
/// <summary>
/// 尾箱数量
/// </summary>
public decimal TailboxQty { get; set; }
/// <summary>
/// 尾箱净重
/// </summary>
public decimal TailboxNetWeightQty { get; set; }
/// <summary>
/// 尾箱毛重
/// </summary>
public decimal TailboxGrossWeightQty { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string Creator { get; set; }
/// <summary>
/// 创建时间(生成时间)
/// </summary>
public string CreateTime { get; set; }
/// <summary>
/// 是否是尾箱
/// </summary>
public bool IsTail { get; set; }
/// <summary>
/// 装箱总数
/// </summary>
public int BoxSortCount { get; set; }
/// <summary>
/// 产品数量
/// </summary>
public decimal ProductQty { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 流水号(开始)
/// </summary>
public Int64? BeginNumber { get; set; } = null;
/// <summary>
/// 流水号(结束)
/// </summary>
public Int64? EndNumber { get; set; } = null;
}
}

View File

@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 生成箱唛dto
/// </summary>
public class GenerateBoxMarkDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = "";
/// <summary>
/// 订单编号
/// </summary>
/// <summary>
[Required(ErrorMessage = "订单编号不能为空")]
public string OrderBillNo { get; set; } = string.Empty;
/// <summary>
/// 物料
/// </summary>
[Required(ErrorMessage = "物料不能为空")]
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 产品数量
/// </summary>
[Required(ErrorMessage = "产品数量不能为空")]
[Range(1, int.MaxValue, ErrorMessage = "产品数量不能为0")]
public decimal ProductQty { get; set; }
/// <summary>
/// 装箱数量
/// </summary>
[Required(ErrorMessage = "装箱数量不能为空")]
[Range(1, int.MaxValue, ErrorMessage = "装箱数量不能为0")]
public decimal CratingQty { get; set; }
/// <summary>
/// 装箱净重
/// </summary>
public decimal CratingNetWeightQty { get; set; }
/// <summary>
/// 装箱毛重
/// </summary>
public decimal CratingGrossWeightQty { get; set; }
/// <summary>
/// 尾箱数量
/// </summary>
public decimal TailboxQty { get; set; }
/// <summary>
/// 尾箱净重
/// </summary>
public decimal TailboxNetWeightQty { get; set; }
/// <summary>
/// 尾箱毛重
/// </summary>
public decimal TailboxGrossWeightQty { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; } = string.Empty;
/// <summary>
/// 流水号(开始)
/// </summary>
public Int64? BeginNumber { get; set; } = null;
/// <summary>
/// 流水号(结束)
/// </summary>
public Int64? EndNumber { get; set; } = null;
}
}

View File

@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 所有枚举信息
/// </summary>
public class EnumStatusResponse
{
public EnumStatusResponse() { }
/// <summary>
/// 出库单类型
/// </summary>
public Dictionary<int, string> OutStockType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 移库单类型
/// </summary>
public Dictionary<int, string> MoveBoxType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 盘点结果类型
/// </summary>
public Dictionary<int, string> TakeStockType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 入库单类型
/// </summary>
public Dictionary<int, string> InstockType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 入库状态
/// </summary>
public Dictionary<int, string> InstockStatus { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 类型1为入库回退下架2为出库回退上架
/// </summary>
public Dictionary<int, string> BackRecordType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 类型1为入库2为出库
/// </summary>
public Dictionary<int, string> InventoryInOutType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 单据类型
/// </summary>
public Dictionary<int, string> OrderType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 非采购上架方式
/// </summary>
public Dictionary<int, string> ShelfMethod { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 下载导出订单类型
/// </summary>
public Dictionary<int, string> FileDownLoadOrderType { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 下载导出状态
/// </summary>
public Dictionary<int, string> ExportStatus { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 出入库方式:按箱或者按产品
/// </summary>
public Dictionary<int, string> InventoryInOutMethod { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 出库状态
/// </summary>
public Dictionary<int, string> OutStockStatus { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 同步金蝶状态
/// </summary>
public Dictionary<int, string> SyncStatus { get; set; } = new Dictionary<int, string>();
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.Customer
{
/// <summary>
/// 客户
/// </summary>
public class ErpCustomerDto
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Number { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
public class ErpBaseDto
{
public string Id { get; set; }
public string Number { get; set; }
public string Name { get; set; }
}
}

View File

@@ -0,0 +1,40 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// ERP单据查询-dto
/// </summary>
public class ErpBillQueryDto
{
public ErpBillQueryDto() { }
public ErpBillQueryDto(string accessToken)
{
this.AccessToken = accessToken;
}
public ErpBillQueryDto(string accessToken,string formid)
{
this.AccessToken = accessToken;
this.FormId = formid;
}
/// <summary>
/// 令牌
/// </summary>
[JsonProperty(PropertyName = "ACCESSTOKEN")]
public string AccessToken { get; set; }
/// <summary>
/// 参数
/// </summary>
[JsonProperty(PropertyName = "data")]
public string Data { get; set; }
/// <summary>
/// 参数(保存提交审核formId在外层)
/// </summary>
[JsonProperty(PropertyName = "formid")]
public string FormId { get; set; }
}
}

View File

@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// ERP单据查询-参数-dto
/// </summary>
public class ErpBillQueryParamDto
{
public ErpBillQueryParamDto() { }
public ErpBillQueryParamDto(string formId)
{
this.FormId = formId;
}
/// <summary>
/// 业务对象表单Id必录
/// </summary>
public string FormId { get; set; }
/// <summary>
/// 需查询的字段key集合字符串类型格式"key1,key2,..."(必录) 注(查询单据体内码,需加单据体Key和下划线,如FEntryKey_FEntryId
/// </summary>
public string FieldKeys { get; set; }
/// <summary>
/// 过滤条件,数组类型,如:[{"Left":"(","FieldName":"Field1","Compare":"=","Value":"111","Right":")","Logic":"AND"},{"Left":"(","FieldName":"Field2","Compare":"=","Value":"222","Right":")","Logic":""}]
/// </summary>
public string FilterString { get; set; }
/// <summary>
/// 排序字段,字符串类型(非必录)
/// </summary>
public string OrderString { get; set; }
/// <summary>
/// 返回总行数,整型(非必录)
/// </summary>
public int TopRowCount { get; set; }
/// <summary>
/// 开始行索引,整型(非必录)
/// </summary>
public int StartRow { get; set; } = 0;
/// <summary>
/// 最大行数整型不能超过10000非必录
/// </summary>
public int Limit { get; set; } = 1;
/// <summary>
/// 表单所在的子系统内码,字符串类型(非必录)
/// </summary>
public string SubSystemId { get; set; }
}
}

View File

@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// ERP:入库单-统一响应对象
/// </summary>
public class ErpInStockResultDto
{
/// <summary>
/// 单据编号
/// </summary>
public string BillNo { get; set; }
/// <summary>
/// 组织
/// </summary>
public int OrgId { get; set; }
/// <summary>
/// erp的明细ID
/// </summary>
public int ErpDetailId { get; set; }
/// <summary>
/// 组织编码
/// </summary>
public string OrgCode { get; set; }
/// <summary>
/// 供应商
/// </summary>
public int SupplierId { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 仓库ID
/// </summary>
public int StockId { get; set; }
/// <summary>
/// 仓库code
/// </summary>
public string StockCode { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
/// <summary>
/// 出厂价
/// </summary>
public decimal FactoryPrice { get; set; }
/// <summary>
/// 已交数量(对应金蝶的已交数量-对应物料),目前只有采购订单有
/// </summary>
public decimal DeliveredQty { get; set; }
/// <summary>
/// 明细备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 单据类型
/// </summary>
public int Type { get; set; }
/// <summary>
/// 销售订单
/// </summary>
public string SaleBillNo { get; set; }
/// <summary>
/// 客户编码
/// </summary>
public string CustomerCode { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
public class ErpInventoryDto
{
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 组织编码
/// </summary>
public string OrgCode { get; set; }
/// <summary>
/// 仓库
/// </summary>
public string StockCode { get; set; }
/// <summary>
/// 子仓库(跟金蝶交互字段)
/// </summary>
public int Erp_SubStockId { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
}
}

View File

@@ -0,0 +1,50 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 编码
/// </summary>
public class ErpNumberDto
{
public ErpNumberDto() { }
public ErpNumberDto(string number)
{
this.Number = number;
}
/// <summary>
/// 编码
/// </summary>
[JsonProperty("FNumber")]
public string Number { get; set; }
}
/// <summary>
/// 盘点子仓库
/// </summary>
public class ErpSubStockDto
{
public ErpSubStockDto() { }
public ErpSubStockDto(string stockCode, string subCode)
{
if (stockCode != null && stockCode.Equals("GD"))
this.GD = new ErpNumberDto(subCode ?? "");
if (stockCode != null && stockCode.Equals("HD"))
this.HD = new ErpNumberDto(subCode ?? "");
}
/// <summary>
/// GD仓
/// </summary>
[JsonProperty("FSTOCKLOCID__FF100005")]
public ErpNumberDto GD { get; set; } = new ErpNumberDto("");
/// <summary>
/// HD仓
/// </summary>
[JsonProperty("FSTOCKLOCID__FF100007")]
public ErpNumberDto HD { get; set; } = new ErpNumberDto("");
}
}

View File

@@ -0,0 +1,28 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// erp 提交和审核
/// </summary>
public class ErpOperateDto
{
public ErpOperateDto(string formId, string number)
{
this.FormId = formId;
this.Numbers =new List<string>() { number };
}
/// <summary>
/// 业务对象表单Id必录
/// </summary>
[JsonProperty("FormId")]
public string FormId { get; set; }
/// <summary>
/// 单据编码
/// </summary>
public List<string> Numbers { get; set; }
}
}

View File

@@ -0,0 +1,74 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 修改采购入库单
/// </summary>
public class ErpPurchaseInStockSaveDto
{
public ErpPurchaseInStockSaveDto() { }
public ErpPurchaseInStockSaveDto(string id)
{
this.Id = id;
}
/// <summary>
/// 单据Id
/// </summary>
[JsonProperty("FID")]
public string Id { get; set; }
/// <summary>
/// 明细
/// </summary>
[JsonProperty("FInStockEntry")]
public List<ErpPurchaseInStockDetailsSaveDto> Details { get; set; } = new List<ErpPurchaseInStockDetailsSaveDto>();
}
/// <summary>
/// 明细
/// </summary>
public class ErpPurchaseInStockDetailsSaveDto
{
/// <summary>
/// 明细Id
/// </summary>
[JsonProperty("FEntryID")]
public string DetailId { get; set; }
/// <summary>
/// 采购订单明细Id
/// </summary>
[JsonIgnore]
public string PurchaseDetailId { get; set; }
/// <summary>
/// 数量
/// </summary>
[JsonProperty("FRealQty")]
public decimal Qty { get; set; }
/// <summary>
/// 批号
/// </summary>
[JsonProperty("FLot")]
public ErpLotSaveDto Lot { get; set; }
}
/// <summary>
/// 批号
/// </summary>
public class ErpLotSaveDto
{
/// <summary>
/// 批号
/// </summary>
[JsonProperty("FNumber")]
public string Number { get; set; }
}
}

View File

@@ -0,0 +1,62 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 下推
/// </summary>
public class ErpPushDto
{
public ErpPushDto() { }
public ErpPushDto(string formId,List<int> detailIds,string targetFormId)
{
this.FormId = formId;
//this.Numbers.Add(number);
this.DetailsId = detailIds.ToString();
this.TargetFormId = targetFormId;
}
/// <summary>
/// 业务对象表单Id必录
/// </summary>
[JsonProperty("FormId")]
public string FormId { get; set; }
///// <summary>
///// 业务对象表单Id必录
///// </summary>
//[JsonProperty("Numbers")]
//public List<string> Numbers { get; set; }
/// <summary>
/// 分录内码集合,逗号分隔(分录下推时必录) 注(按分录下推时,单据内码和编码不需要填,否则按整单下推)
/// </summary>
[JsonProperty("EntryIds")]
public string DetailsId { get; set; }
/// <summary>
/// 目标单据类型
/// </summary>
[JsonProperty("TargetFormId")]
public string TargetFormId { get; set; }
/// <summary>
/// 是否启用默认转换规则布尔类型默认false非必录
/// false 需要穿 RuleId true 不需要传RuleId
/// </summary>
[JsonProperty("IsEnableDefaultRule")]
public bool IsEnableDefaultRule { get; set; } = false;
/// <summary>
/// 转换规则内码
/// </summary>
[JsonProperty("RuleId")]
public string RuleId { get; set; }
/// <summary>
/// 保存失败时是否暂存布尔类型默认false非必录 注(暂存的单据是没有编码的)
/// </summary>
[JsonProperty("IsDraftWhenSaveFail")]
public bool IsDraftWhenSaveFail { get; set; } = false;
}
}

View File

@@ -0,0 +1,28 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// Erp同步数据时单据头
/// </summary>
public class ErpSave<T>
{
public ErpSave(string formId,T model)
{
this.FormId = formId;
this.Model = model;
}
/// <summary>
/// 业务对象表单Id必录
/// </summary>
[JsonProperty("FormId")]
public string FormId { get; set; }
/// <summary>
/// 单据体
/// </summary>
public T Model { get; set; }
}
}

View File

@@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 对应金蝶,物料信息
/// </summary>
public class ErpMaterialDto
{
/// <summary>
/// 组织ID
/// </summary>
public int OrgId { get; set; }
/// <summary>
/// 组织编码
/// </summary>
public string OrgCode { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public int MaterialId { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; }
/// <summary>
/// 基本单位
/// </summary>
public int BaseUnitId { get; set; }
/// <summary>
/// 基本单位名称
/// </summary>
public string BaseUnitName { get; set; }
/// <summary>
/// 基本单位编码
/// </summary>
public string BaseUnitNumber { get; set; }
/// <summary>
/// 条码
/// </summary>
public string BarCode { get; set; }
/// <summary>
/// 是否启用批号管理
/// </summary>
public bool IsBatchManage { get; set; }
/// <summary>
/// 物料Id 32进制字符串
/// </summary>
public string IdConvertBar { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.Org
{
/// <summary>
/// 金蝶组织-基本信息
/// </summary>
public class ErpOrgDto
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Number { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.OutStock
{
/// <summary>
/// 发货通知单转出库任务
/// </summary>
public class ErpDeliveryNoticeOutStockResultDto
{
/// <summary>
/// 来源单号
///</summary>
public string SourceBillNo { get; set; }
/// <summary>
/// 销售订单号
///</summary>
public string SaleBillNo { get; set; }
/// <summary>
/// 发货组织
///</summary>
public int DeliveryOrgId { get; set; }
/// <summary>
/// 组织编码
///</summary>
public string OrgCode { get; set; }
/// <summary>
/// 收货客户
///</summary>
public int ReceiptCustomerId { get; set; }
/// <summary>
/// 对应金蝶单据明细id(销售出库同步金蝶下推使用)
/// </summary>
public int Erp_DetailId { get; set; } = 0;
/// <summary>
/// 物料编码
///</summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 仓库ID
///</summary>
public string StockCode { get; set; }
/// <summary>
/// 仓位ID
///</summary>
public int? SubStockId { get; set; }
/// <summary>
/// 应出库数量
///</summary>
public decimal AccruedQty { get; set; }
/// <summary>
/// 订单明细备注
///</summary>
public string Remark { get; set; }
/// <summary>
/// 创建时间erp那边的创建时间
///</summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 用来自动构建单据类型 跟OutStockType 一致
/// </summary>
public int Type { get; set; }
}
}

View File

@@ -0,0 +1,94 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.OutStock
{
/// <summary>
/// 出库单同步金蝶
/// </summary>
public class ErpOutStockSaveDto
{
/// <summary>
/// 单据编号
/// </summary>
[JsonProperty("BillNo")]
public string BillNo { get; set; }
/// <summary>
/// 单据类型
/// </summary>
[JsonProperty("BillNo")]
public string Type { get; set; }
/// <summary>
/// 发货组织
///</summary>
[JsonProperty("DeliveryOrgId")]
public int DeliveryOrgId { get; set; }
/// <summary>
/// 收货客户
///</summary>
[JsonProperty("ReceiptCustomerId")]
public int ReceiptCustomerId { get; set; }
/// <summary>
/// 创建时间(出库时间)
/// </summary>
[JsonProperty("CreateTime")]
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 结算币别默认为: 人民币
///</summary>
[JsonProperty("Currency")]
public string Currency { get; set; }
/// <summary>
/// 销售组织取对应发货通知单的销售组织
///</summary>
[JsonProperty("Currency")]
public string SalOrg { get; set; }
/// <summary>
/// 销售部门取对应发货通知单的销售部门
///</summary>
[JsonProperty("Currency")]
public string SalDept { get; set; }
}
public class ErpOutStockSaveDetailsDto
{
/// <summary>
/// 物料Id
///</summary>
[JsonProperty("MaterialId")]
public string MaterialId { get; set; }
/// <summary>
/// 仓库ID
///</summary>
[JsonProperty("StockId")]
public string StockId { get; set; }
/// <summary>
/// 出库数量
///</summary>
[JsonProperty("UnitId")]
public string UnitId { get; set; }
/// <summary>
/// 出库数量
///</summary>
[JsonProperty("Qty")]
public decimal Qty { get; set; }
/// <summary>
/// 应发数量,取对应发货通知单的销售数量
///</summary>
[JsonProperty("YFQty")]
public string YFQty { get; set; }
/// <summary>
/// 单价 取对应发货通知单对应物料编码行的 单价
///</summary>
[JsonProperty("Price")]
public string Price { get; set; }
/// <summary>
///含税单价 取对应发货通知单对应物料编码行的 含税单价
///</summary>
[JsonProperty("HSPrice")]
public string HSPrice { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.OutStock
{
/// <summary>
/// 修改销售出库单
/// </summary>
public class ErpSalOutStockSaveDto
{
public ErpSalOutStockSaveDto() { }
public ErpSalOutStockSaveDto(string id)
{
this.Id = id;
}
/// <summary>
/// 单据Id
/// </summary>
[JsonProperty("FID")]
public string Id { get; set; }
/// <summary>
/// 明细
/// </summary>
[JsonProperty("FEntity")]
public List<ErpSalOutStockDetailsSaveDto> Details { get; set; } = new List<ErpSalOutStockDetailsSaveDto>();
}
public class ErpSalOutStockDetailsSaveDto
{
public ErpSalOutStockDetailsSaveDto(){}
/// <summary>
/// 明细Id
/// </summary>
[JsonProperty("FENTRYID")]
public string DetailId { get; set; }
/// <summary>
/// 发货通知单明细Id
/// </summary>
[JsonIgnore]
public string DeliveryNoticeDetailId { get; set; }
/// <summary>
/// 数量
/// </summary>
[JsonProperty("FRealQty")]
public decimal Qty { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// key为string 下拉列表对象
/// </summary>
public class PullDownStrResponse
{
/// <summary>
/// id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 名字
/// </summary>
public string Name { get; set; }
/// <summary>
/// 是否默认选中
/// </summary>
public bool IsDefault { get; set; } = false;
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 仓库信息
/// </summary>
public class ErpStockDto
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 名字
/// </summary>
public string Name { get; set; }
/// <summary>
/// 业务组织(使用组织)
/// </summary>
public int OrgId { get; set; }
/// <summary>
/// 业务组织(使用组织)编码
/// </summary>
public string OrgCode { get; set; }
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp
{
/// <summary>
/// 子仓库信息
/// </summary>
public class Erp_SubStockDto
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 名字
/// </summary>
public string Name { get; set; }
/// <summary>
/// 业务组织(使用组织)
/// </summary>
public int OrgId { get; set; }
/// <summary>
/// 业务组织(使用组织)编码
/// </summary>
public string OrgCode { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string StockCode { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.Supplier
{
/// <summary>
/// erp供应商基础数据
/// </summary>
public class ErpSupplierDto
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Number { get; set; }
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 组织编码
/// </summary>
public string OrgCode { get; set; }
}
}

View File

@@ -0,0 +1,138 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Erp.TakeStock
{
/// <summary>
/// 盘点单
/// </summary>
public class ErpTakeStockSaveDto
{
public ErpTakeStockSaveDto() { }
/*
* 单据编号FBillNo
日期FDate (必填项)
库存组织FStockOrgId (必填项)
单据类型FBillTypeID (必填项)
货主类型FOwnerTypeIdHead (必填项) BD_OwnerOrg
物料编码FMaterialId (必填项)
单位FUnitID (必填项)
仓库FStockId (必填项)
库存状态FStockStatusId (必填项)
货主类型FOwnerTypeId (必填项) BD_OwnerOrg
货主FOwnerid (必填项)
保管者类型FKeeperTypeId (必填项) BD_KeeperOrg
保管者FKeeperId (必填项)
子仓库FStockLocId
*/
/// <summary>
/// 单据类型(标准盘亏单; 标准盘盈单 PY01_SYS) 盘亏 PK01_SYS
/// </summary>
[JsonProperty("FBillTypeID")]
public ErpNumberDto Type { get; set; }
/// <summary>
/// 库存组织 (取仓库对应的库存组织)
/// </summary>
[JsonProperty("FStockOrgId")]
public ErpNumberDto StockOrgId { get; set; }
/// <summary>
/// 货主类型: 默认为业务组织 BD_OwnerOrg
/// </summary>
[JsonProperty("FOwnerTypeIdHead")]
public string FOwnerTypeIdHead { get; set; } = "BD_OwnerOrg";
/// <summary>
/// 单据编号
/// </summary>
[JsonProperty("FBillNo")]
public string BillNo { get; set; }
/// <summary>
/// 盘点日期
/// </summary>
[JsonProperty("FDate")]
public DateTime Date { get; set; }
/// <summary>
/// 明细
/// </summary>
[JsonProperty("FBillEntry")]
public List<ErpTakeStockDetailsSaveDto> Details = new List<ErpTakeStockDetailsSaveDto>();
}
public class ErpTakeStockDetailsSaveDto
{
/// <summary>
/// 库存状态 KCZT01_SYS
/// </summary>
[JsonProperty("FStockStatusId")]
public ErpNumberDto FStockStatusId { get; set; } = new ErpNumberDto("KCZT01_SYS");
/// <summary>
/// 货主类型: 默认为业务组织 BD_OwnerOrg
/// </summary>
[JsonProperty("FOwnerTypeId")]
public string FOwnerTypeId { get; set; } = "BD_OwnerOrg";
/// <summary>
/// 取仓库对应的货主信息 货主: 等于库存组织
/// </summary>
[JsonProperty("FOwnerid")]
public ErpNumberDto FOwnerid { get; set; }
/// <summary>
/// 保管者类型
/// </summary>
[JsonProperty("FKeeperTypeId")]
public string FKeeperTypeId { get; set; } = "BD_KeeperOrg";
/// <summary>
/// 保管者 仓库”库存组织”
/// </summary>
[JsonProperty("FKeeperId")]
public ErpNumberDto FKeeperId { get; set; }
/// <summary>
/// 物料ID
/// </summary>
[JsonProperty("FMaterialId")]
public ErpNumberDto MaterialId { get; set; }
/// <summary>
/// 单位ID
/// </summary>
[JsonProperty("FUnitID")]
public ErpNumberDto UnitId { get; set; }
/// <summary>
/// 仓库ID
/// </summary>
[JsonProperty("FStockId")]
public ErpNumberDto StockId { get; set; }
/// <summary>
/// 仓位ID
/// </summary>
[JsonProperty("FStockLocId")]
public ErpSubStockDto SubStockId { get; set; }
/// <summary>
/// 盘点前数量wms系统数量
/// </summary>
[JsonProperty("FAcctQty")]
public decimal BeforeQty { get; set; }
/// <summary>
/// 盘点实际数量(实际仓库数量)
/// </summary>
[JsonProperty("FCountQty")]
public decimal AfterQty { get; set; }
/// <summary>
/// 盘盈数量
/// </summary>
[JsonProperty("FGainQty")]
public decimal FinalQty { get; set; }
/// <summary>
/// 盘亏数量
/// </summary>
[JsonProperty("FLossQty")]
public decimal LossQty { get; set; }
/// <summary>
/// 备注
/// </summary>
[JsonProperty("Fnote")]
public string Fnote { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 上传下载列表
/// </summary>
public class FileDownManagerRequest: PaginationBaseRequestDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = string.Empty;
/// <summary>
/// 单据类型(任务类型)
/// </summary>
public int? Type { get; set; }
/// <summary>
/// 状态
/// </summary>
public int? Status { get; set; }
/// <summary>
/// 下单时间 开始
/// </summary>
public DateTime? BeginDate { get; set; }
/// <summary>
/// 下单时间 结束
/// </summary>
public DateTime? EndDate { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string User { get; set; } = string.Empty;
/// <summary>
/// 供应商用户Id
/// </summary>
public int? SupplierId { get; set; } = null;
}
}

View File

@@ -0,0 +1,73 @@

using System;
using System.Collections.Generic;
using System.Text;
using BarCode.Web.Core.Help;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 上传下载列表
/// </summary>
public class FileDownManagerResponse
{
public FileDownManagerResponse(List<FileDownInfoManagerResponse> list, int? total)
{
this.List = list;
this.Total = total;
}
/// <summary>
/// 查询列表内容
/// </summary>
public List<FileDownInfoManagerResponse> List { get; set; } = new List<FileDownInfoManagerResponse>();
/// <summary>
/// 总条数
/// </summary>
public int? Total { get; set; }
}
/// <summary>
/// 上传下载列表
/// </summary>
public class FileDownInfoManagerResponse
{
public FileDownInfoManagerResponse() { }
public FileDownInfoManagerResponse(FileDownInfoManagerResponse response)
{
response.CopyPropertiesToD(this);
}
/// <summary>
/// 主键 订单编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 日期
/// </summary>
public string Date { get; set; }
/// <summary>
/// 单据类型(任务类型)
/// </summary>
public int Type { get; set; }
/// <summary>
/// 状态(Key
/// </summary>
public int StatusKey { get; set; }
/// <summary>
/// 状态
/// </summary>
public string Status { get; set; }
/// <summary>
/// 文件地址
/// </summary>
public string FilePath { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 失败原因
/// </summary>
public string Reason { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
public class FileDownManagerStatusResponse
{
public FileDownManagerStatusResponse() { }
/// <summary>
/// 任务类型
/// </summary>
public Dictionary<int, string> Type { get; set; } = new Dictionary<int, string>();
/// <summary>
/// 状态
/// </summary>
public Dictionary<int, string> Status { get; set; } = new Dictionary<int, string>();
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class AccessTokenDto
{
/// <summary>
/// 客户端名称
/// </summary>
public string ClientName { get; set; }
/// <summary>
/// 授权token -- 给前端用的验证token
/// </summary>
public string Token { get; set; }
/// <summary>
/// 授权token -- 单点给过来的token
/// </summary>
public string PhpToken { get; set; }
/// <summary>
/// token头标识
/// </summary>
public string TokenType { get; set; } = "Bearer";
/// <summary>
/// 刷新token
/// </summary>
public string RefreshToken { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime Expired { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class DeptInfoDto
{
public int Id { get; set; }
public string DeptCode { get; set; }
public string DeptName { get; set; }
public int? ManagerId { get; set; }
}
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 登录后要保存的信息
/// </summary>
public class LoginInDto
{
public bool SignedIn { get; set; }
/// <summary>
/// 用户信息
/// </summary>
public UserInfoDto UserInfo { get; set; }
/// <summary>
/// token信息
/// </summary>
public AccessTokenDto TokenInfo { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class LoginOutAuthorizeRequest
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 登出的dto
/// </summary>
public class LoginOutDto
{
/// <summary>
/// 授权token
/// </summary>
public string Authorization { get; set; }
/// <summary>
/// 用户ID
/// </summary>
public string UcId { get; set; }
/// <summary>
/// PHP-session-ID
/// </summary>
public string SessionId { get; set; }
/// <summary>
/// PHP登录返回的token
/// </summary>
public string AccessToken { get; set; }
/// <summary>
/// PHP登录的过期时间
/// </summary>
public DateTime ExpiresIn { get; set; }
/// <summary>
///ops自己产生的token 给前端验证用的
/// </summary>
public string Token { get; set; }
public string RefreshToken { get; set; }
}
}

View File

@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 登录请求对象
/// </summary>
public class LoginRequest
{
/// <summary>
/// 账号
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
}
public class LoginAuthorizeRequest : LoginRequest
{
/// <summary>
///
/// </summary>
public string ClientId { get; set; }
/// <summary>
///
/// </summary>
public string ClientSecret { get; set; }
/// <summary>
///
/// </summary>
public string GrantType { get; set; }
public string Scope { get; set; }
}
public class LoginAuthorizeCodeRequest
{
/// <summary>
///
/// </summary>
public string ClientId { get; set; }
/// <summary>
///
/// </summary>
public string ClientSecret { get; set; }
/// <summary>
///
/// </summary>
public string GrantType { get; set; }
public string Code { get; set; }
public string Scope { get; set; }
}
public class LoginAuthorizeRefreshTokenRequest
{
/// <summary>
///
/// </summary>
public string ClientId { get; set; }
/// <summary>
///
/// </summary>
public string ClientSecret { get; set; }
/// <summary>
///
/// </summary>
public string GrantType { get; set; }
public string RefreshToken { get; set; }
public string Scope { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 菜单的请求对象
/// </summary>
public class MenuRequest
{
public MenuRequest() { }
public MenuRequest(int userId, int moduleId)
{
this.UserId = userId;
this.ModuleID = moduleId;
}
/// <summary>
/// 用户ID不是人员ID
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 应用ID
/// </summary>
public int ModuleID { get; set; }
}
}

View File

@@ -0,0 +1,105 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 菜单响应对象
/// </summary>
public class MenuResponse
{
/// <summary>
///
///</summary>
public int ID { get; set; }
/// <summary>
/// 上级菜单
///</summary>
public int? Pid { get; set; }
/// <summary>
/// 模块ID对应apps表ID
///</summary>
public int? Module { get; set; }
/// <summary>
/// 菜单标题
///</summary>
public string Title { get; set; }
/// <summary>
/// 菜单标签
///</summary>
public string Name { get; set; }
/// <summary>
/// 菜单路径
///</summary>
public string Path { get; set; }
/// <summary>
/// 操作,比如 /admin/info
///</summary>
public string Component { get; set; }
/// <summary>
/// 图标
///</summary>
public string Icon { get; set; }
/// <summary>
///
///</summary>
public string Redirect { get; set; }
/// <summary>
/// 排序
///</summary>
public int? Sort { get; set; }
/// <summary>
/// 0为普通按钮/连接1为左侧菜单
///</summary>
public int? Type { get; set; }
/// <summary>
/// 是否显示0为否1为是
///</summary>
public bool Hidden { get; set; }
/// <summary>
/// 是否禁用0为否1为是
///</summary>
public bool Closed { get; set; }
/// <summary>
/// 是否禁用true为禁用false为启用
/// </summary>
public bool Disable { get; set; }
/// <summary>
/// 子集
/// </summary>
public List<MenuResponse> Children { get; set; }
/// <summary>
/// meta
/// </summary>
public Meta meta { get; set; }
}
public class Meta
{
/// <summary>
/// 菜单名字
/// </summary>
public string title { get; set; }
/// <summary>
/// 菜单图标
/// </summary>
public string icon { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 登录后:请求相关全部信息对象
/// </summary>
public class LoginSingleRequest
{
/// <summary>
/// 用户ID
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 供应商
/// </summary>
public int SupplierId { get; set; }
/// <summary>
/// 客户
/// </summary>
public int CustomerId { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Text;
using BarCode.Web.Core.Dto.SingleData;
namespace BarCode.Web.Core.Dto.Login
{
/// <summary>
/// 登录后:响应相关全部信息对象
/// </summary>
public class LoginSingleResponse
{
/// <summary>
/// 人员
/// </summary>
public SingleDataResponse Staff { get; set; }
/// <summary>
/// 公司
/// </summary>
public SingleDataResponse Company { get; set; }
/// <summary>
/// 供应商
/// </summary>
public SingleDataResponse Supplier { get; set; }
/// <summary>
/// 客户
/// </summary>
public SingleDataResponse Customer { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class TagInfoDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp
{
/// <summary>
/// 部门
/// </summary>
public class LoginJsonDeptTempDto
{
public int id { get; set; }
public string dept_code { get; set; }
public string dept_name { get; set; }
public int? manager { get; set; }
}
}

View File

@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp
{
/// <summary>
/// 基本信息人员--和单点系统的字段一一对应
/// </summary>
public class LoginJsonTokenTempDto
{
/// <summary>
/// 用户在单点中维一ID
/// </summary>
public int uc_id { get; set; }
/// <summary>
/// 用户编码
/// </summary>
public string staff_code { get; set; }
/// <summary>
/// 用户业务员编码
/// </summary>
public string business_code { get; set; }
/// <summary>
/// 角色id
/// </summary>
public string role_id { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string nickname { get; set; }
/// <summary>
/// 头像
/// </summary>
public string avatar { get; set; }
/// <summary>
/// 用户手机
/// </summary>
public string mobile { get; set; }
/// <summary>
/// 用户邮件
/// </summary>
public string email { get; set; }
/// <summary>
/// 公司id
/// </summary>
public int? company_id { get; set; }
/// <summary>
/// 组织id
/// </summary>
public int? org_id { get; set; }
/// <summary>
/// 供应商id
/// </summary>
public int? supplier_id { get; set; }
/// <summary>
/// 客户id
/// </summary>
public int? customer_id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public string created_at { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public string updated_at { get; set; }
/// <summary>
/// 签名(登录)时间
/// </summary>
public string signin_at { get; set; }
/// <summary>
/// 签名(登录ip
/// </summary>
public string signin_ip { get; set; }
/// <summary>
/// 关闭状态0为未关闭
/// </summary>
public string closed { get; set; }
/// <summary>
/// 用户类型 1为员工2为供应商3为客户
/// </summary>
public int? identity { get; set; }
/// <summary>
/// 部门
/// </summary>
public List<LoginJsonDeptTempDto> depts { get; set; }
}
}

View File

@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp
{
/// <summary>
/// 登录后获取的:token 信息-和单点系统的字段一一对应
/// </summary>
public class LoginTempDto
{
/// <summary>
/// 用户在单点中维一ID
/// </summary>
public int uc_id { get; set; }
/// <summary>
/// 单点访问的session id
/// </summary>
public string uc_sessid { get; set; }
/// <summary>
/// 后续与单点通信验证token
/// </summary>
public string access_token { get; set; }
/// <summary>
///access token过期时间
/// </summary>
public int expires_in { get; set; }
/// <summary>
/// 用于access_token过期后刷新用
/// </summary>
public string refresh_token { get; set; }
/// <summary>
/// 加密后的用户数据
/// </summary>
public string encryptedData { get; set; }
}
/// <summary>
/// 登录后获取的:token 信息-和单点系统的字段一一对应
/// </summary>
public class LoginTempV2Dto
{
/// <summary>
/// 后续与单点通信验证token
/// </summary>
public string access_token { get; set; }
/// <summary>
///access token过期时间
/// </summary>
public int access_expired_at { get; set; }
/// <summary>
/// 用于access_token过期后刷新用
/// </summary>
public string refresh_token { get; set; }
/// <summary>
/// 加密后的用户数据
/// </summary>
public string encrypted_data { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp
{
public class LoginJsonCompanyTempDto
{
public int company_id { get; set; }
public string company_name { get; set; }
public string company_code { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp.v3
{
public class LoginJsonDeptV3TempDto
{
public int dept_id { get; set; }
public string dept_name { get; set; }
public string dept_code { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp
{
public class LoginJsonOrgTempDto
{
public int org_id { get; set; }
public string org_name { get; set; }
public string org_code { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp.v3
{
public class LoginJsonRoleTempDto
{
public int role_id { get; set; }
public string role_name { get; set; }
public string role_code { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login.Temp.v3
{
public class LoginJsonTokenV3TempDto
{
/// <summary>
/// 用户在单点中维一ID
/// </summary>
public int id { get; set; }
public string dingtalk_uid { get; set; }
public string dingtalk_unionid { get; set; }
public string nickname { get; set; }
public string realname { get; set; }
public string mobile { get; set; }
public int identity { get; set; }
public LoginJsonCompanyTempDto company { get; set; }
public List<LoginJsonOrgTempDto> orgs { get; set; }
public List<LoginJsonDeptV3TempDto> depts { get; set; }
public List<LoginJsonRoleTempDto> roles { get; set; }
}
}

View File

@@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class UserInfoDto
{
public string SeesionId { get; set; }
public int UcId { get; set; }
public List<DeptInfoDto> Depts { get; set; }
/// <summary>
/// 人员ID
/// </summary>
public int StaffId { get; set; }
/// <summary>
/// 用户编码
/// </summary>
public string staff_code { get; set; }
/// <summary>
/// 用户业务员编码
/// </summary>
public string business_code { get; set; }
/// <summary>
/// 头像
/// </summary>
public string Avatar { get; set; }
/// <summary>
/// 是否是admin账户
/// </summary>
public bool IsAdmin { get; set; } = false;
public int Closed { get; set; }
public string CreatedAt { get; set; }
public string Email { get; set; }
public string Mobile { get; set; }
public string Nickname { get; set; }
public string RoleId { get; set; }
public string SigninAt { get; set; }
public string UpdatedAt { get; set; }
/// <summary>
/// 公司id
/// </summary>
public int CompanyId { get; set; }
/// <summary>
/// 公司名称
/// </summary>
public string CompanyName { get; set; }
//org_id, supplier_id ,customer_id, identity: 1为员工2为供应商3为客户
/// <summary>
/// 组织id 用户类型为内部员工的时候才有值
/// </summary>
public int? OrgId { get; set; }
/// <summary>
/// 供应商id 用户类型为供应商的时候才有值
/// </summary>
public int? SupplierId { get; set; }
/// <summary>
/// 供应商Code 用户类型为供应商的时候才有值
/// </summary>
public string SupplierCode { get; set; } = "";
/// <summary>
/// 供应商名称
/// </summary>
public string SupplierName { get; set; } = "";
/// <summary>
/// 客户id 用户类型为客户的时候才有值
/// </summary>
public int? CustomerId { get; set; }
/// <summary>
/// 客户名称
/// </summary>
public string CustomerName { get; set; }
/// <summary>
/// 用户类型1为员工2为供应商3为客户
/// </summary>
public int? Identity { get; set; }
//public string AuthList { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto.Login
{
public class UserInfoV3Dto
{
/// <summary>
/// 用户在单点中维一ID
/// </summary>
public int Id { get; set; }
public string DingtalkUid { get; set; }
public string DingtalkUnionid { get; set; }
public string Nickname { get; set; }
public string Realname { get; set; }
public string Mobile { get; set; }
public int Identity { get; set; }
public TagInfoDto Company { get; set; }
public List<TagInfoDto> Orgs { get; set; } = new List<TagInfoDto>();
public List<TagInfoDto> Depts { get; set; }= new List<TagInfoDto>();
public List<TagInfoDto> Roles { get; set; }= new List<TagInfoDto>();
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 序列号信息
/// </summary>
public class MaterialResponse
{
/// <summary>
/// 箱Id
/// </summary>
public int BoxId { get; set; } = 0;
/// <summary>
/// 箱号
/// </summary>
public string BoxBillNo { get; set; }
///// <summary>
///// 仓位Id(序列号不存在库存的话仓位是0)
///// </summary>
//public int SubStockId { get; set; } = 0;
/// <summary>
/// 仓位编码(序列号不存在库存的话仓位是"")
/// </summary>
public string SubStockCode { get; set; } = "";
/// <summary>
/// 仓库编码
/// </summary>
public string StockCode { get; set; } = "";
/// <summary>
/// 是否存在于箱库存中
/// </summary>
public bool IsBoxInventory { get; set; } = false;
/// <summary>
/// 序列号
/// </summary>
public string SerialNumber { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; }
/// <summary>
/// 是否是老Ops条码
/// </summary>
public bool IsOldOps { get; set; } = false;
/// <summary>
/// 是否冻结
///</summary>
public bool IsDelete { get; set; } = false;
/// <summary>
/// 是否激活过(只有做过 盘点 采购和非采购上架 出库回退上架 才算激活)
///</summary>
public bool IsActivate { get; set; } = false;
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 物料对应的仓位有哪些
/// </summary>
public class MaterialSubStock
{
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 仓位编码
/// </summary>
public string SubStockCode { get; set; }
/// <summary>
/// 仓位名称
/// </summary>
public string SubStock { get; set; }
/// <summary>
/// 组织
/// </summary>
public string OrgCode { get; set; }
/// <summary>
/// 仓库
/// </summary>
public string StockCode { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BarCode.Web.Core.Dto
{
/// <summary>
/// 操作 Id集合
/// </summary>
public class OperateRequest
{
public List<int> Ids { get; set; } = new List<int>();
}
/// <summary>
/// 操作 Id集合
/// </summary>
public class OperatePagedRequest : PaginationBaseRequestDto
{
public List<int> Ids { get; set; } = new List<int>();
}
/// <summary>
/// 操作 string集合
/// </summary>
public class OperateStrRequest
{
public List<string> Ids { get; set; } = new List<string>();
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace BarCode.Web.Core.Dto
{
public class PaginationRequestDto: PaginationBaseRequestDto
{
/// <summary>
/// 组织Id(所有列表页都需要 全局)
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public virtual int OrgId { get; set; }
}
public class PaginationBaseRequestDto
{
/// <summary>
/// 页数 不传默认为1
/// </summary>
public int PageNo { get; set; } = 1;
/// <summary>
/// 每页条数 不传默认每页10 条
/// </summary>
public int PageSize { get; set; } = 10;
}
}

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 生成防伪码
/// </summary>
public class GenerateSecurityNumberRequest
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = string.Empty;
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = "";
/// <summary>
/// 数量
/// </summary>
[Required(ErrorMessage = "数量不能为空")]
public int Number { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码下载
/// </summary>
public class OperateSecurityNumberRequest
{
/// <summary>
/// 生成记录Id
/// </summary>
public List<int> GenerateRecordIds { get; set; } = new List<int>();
/// <summary>
/// 是否全部操作
/// </summary>
public bool IsAll { get; set; } = false;
/// <summary>
/// 如果是部分操作(防伪码) 全部操作的话可不传
/// </summary>
public List<string> SecurityNumbers { get; set; } = new List<string>();
}
}

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码生成列表记录
/// </summary>
public class SecurityGenerateRecordInfoResponse
{
/// <summary>
/// 主键 订单编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 防伪码批次
/// </summary>
public string LotNumber { get; set; } = string.Empty;
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; } = string.Empty;
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = string.Empty;
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; } = string.Empty;
/// <summary>
/// 物料条码
/// </summary>
public string BarCode { get; set; } = string.Empty;
/// <summary>
/// 生成完成 1 生成中 0
///</summary>
public string GenerateComplete { get; set; } = string.Empty;
/// <summary>
/// 生成条码数量
///</summary>
public int Number { get; set; } = 0;
/// <summary>
/// 下载数
///</summary>
public int DownLoadNumber { get; set; } = 0;
/// <summary>
/// 创建人
/// </summary>
public string Creator { get; set; } = string.Empty;
/// <summary>
/// 生成时间
/// </summary>
public string CreateTime { get; set; } = string.Empty;
/// <summary>
/// 生成完成时间
/// </summary>
public string GenerateCompleteTime { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码生成列表
/// </summary>
public class SecurityGenerateRecordQueryRequest : PaginationBaseRequestDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = "";
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateBeginDate { get; set; } = null;
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateEndDate { get; set; } = null;
/// <summary>
/// 防伪码集合
/// </summary>
public List<string> SecurityNumbers { get; set; } = new List<string>();
/// <summary>
/// 防伪码批号
/// </summary>
public List<string> LotNumbers { get; set; } = new List<string>();
/// <summary>
/// 生成完成 true 生成中 false 不搜 null或不传
///</summary>
public bool? GenerateComplete { get; set; } = null;
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,62 @@
using Npoi.Mapper.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码列表
/// </summary>
public class SecurityNumberInfoResponse
{
/// <summary>
/// 流水号
/// </summary>
[Column("流水号")]
public long Id { get; set; }
/// <summary>
/// 生成记录Id
/// </summary>
[Ignore]
public int GenerateRecordId { get; set; } = 0;
/// <summary>
/// 防伪码
/// </summary>
[Column("防伪码")]
public string SecurityNumber { get; set; } = string.Empty;
/// <summary>
/// 物料规格型号
/// </summary>
[Column("规格型号")]
public string Specifications { get; set; } = string.Empty;
/// <summary>
/// 数量
/// </summary>
[Column("数量")]
public int Number { get; set; } = 0;
/// <summary>
/// 生成时间
/// </summary>
[Column("生成时间")]
public string CreateTime { get; set; } = string.Empty;
/// <summary>
/// 下载次数
/// </summary>
[Column("下载次数")]
public int DownLoadNumber { get; set; } = 0;
/// <summary>
/// 最新下载时间
/// </summary>
[Column("最近下载时间")]
public string DownLoadTime { get; set; } = string.Empty;
/// <summary>
/// 创建人
/// </summary>
[Ignore]
public string Creator { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码列表
/// </summary>
public class SecurityNumberQueryRequest : PaginationBaseRequestDto
{
/// <summary>
/// 组织Code
/// </summary>
[Required(ErrorMessage = "组织不能为空")]
public string OrgCode { get; set; } = string.Empty;
/// <summary>
/// 生成记录Id
/// </summary>
[Required(ErrorMessage = "生成记录不能为空")]
public int GenerateRecordId { get; set; } = 0;
/// <summary>
/// 流水号区间-开始
/// </summary>
public int? IdBegin { get; set; } = null;
/// <summary>
/// 流水号区间-结束
/// </summary>
public int? IdEnd { get; set; } = null;
/// <summary>
/// 是否下载 true 下载 false 未下载
/// </summary>
public bool? IsDownLoad { get; set; } = null;
/// <summary>
/// 下载时间
/// </summary>
public DateTime? DownLoadBeginDate { get; set; } = null;
/// <summary>
/// 下载时间
/// </summary>
public DateTime? DownLoadEndDate { get; set; } = null;
/// <summary>
/// 防伪码
/// </summary>
public List<string> SecurityNumbers { get; set; } = new List<string>();
}
}

View File

@@ -0,0 +1,41 @@
using Npoi.Mapper.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
/// <summary>
/// 防伪码导出
/// </summary>
public class SecurityNumbersExportReponse
{
/// <summary>
/// 防伪码
/// </summary>
[Column("防伪码")]
public string SecurityNumber { get; set; } = string.Empty;
/// <summary>
/// 物料规格型号
/// </summary>
[Column("规格型号")]
public string Specifications { get; set; } = string.Empty;
/// <summary>
/// 数量
/// </summary>
[Column("数量")]
public int Number { get; set; } = 0;
/// <summary>
/// 下载次数
/// </summary>
[Column("下载次数")]
public int DownLoadNumber { get; set; } = 0;
/// <summary>
/// 最新下载时间
/// </summary>
[Column("最近下载时间")]
public string DownLoadTime { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BarCode.Web.Core.Dto.SecurityNumbers
{
public class SecurityNumbersExportRequest : PaginationBaseRequestDto
{
/// <summary>
/// 生成记录Ids
/// </summary>
public List<int> Ids { get; set; } = new List<int>();
}
}

Some files were not shown because too many files have changed in this diff Show More