From b1982d4ffc6f6eaebb361fba0b0c35bdf5b88c4c Mon Sep 17 00:00:00 2001
From: sl c <790825059@qq.com>
Date: Mon, 21 Apr 2025 10:28:40 +0800
Subject: [PATCH 01/29] =?UTF-8?q?=E5=B2=97=E4=BD=8D=E5=B7=A5=E8=B5=84?=
=?UTF-8?q?=E3=80=81=E6=AF=8F=E6=9C=88=E5=B7=A5=E8=B5=84=E6=98=8E=E7=BB=86?=
=?UTF-8?q?=E3=80=81=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BaseInfo/EmployeeController.cs | 171 ++++++++++++++
.../BaseInfo/MonthSalaryController.cs | 171 ++++++++++++++
.../BaseInfo/SalaryLevelController.cs | 171 ++++++++++++++
.../Controllers/System/CompanyController.cs | 102 ++++++++
ZR.Admin.WebApi/appsettings.json | 13 +-
ZR.Model/BaseInfo/Dto/EmployeeDto.cs | 114 +++++++++
ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs | 179 ++++++++++++++
ZR.Model/BaseInfo/Dto/SalaryLevelDto.cs | 66 ++++++
ZR.Model/BaseInfo/Employee.cs | 126 ++++++++++
ZR.Model/BaseInfo/MonthSalary.cs | 221 ++++++++++++++++++
ZR.Model/BaseInfo/SalaryLevel.cs | 76 ++++++
ZR.Model/System/Company.cs | 56 +++++
ZR.Model/System/Dto/CompanyDto.cs | 40 ++++
ZR.Service/BaseInfo/EmployeeService.cs | 145 ++++++++++++
.../IBaseInfoService/IEmployeeService.cs | 25 ++
.../IBaseInfoService/IMonthSalaryService.cs | 25 ++
.../IBaseInfoService/ISalaryLevelService.cs | 25 ++
ZR.Service/BaseInfo/MonthSalaryService.cs | 142 +++++++++++
ZR.Service/BaseInfo/SalaryLevelService.cs | 142 +++++++++++
ZR.Service/System/CompanyService.cs | 80 +++++++
.../System/ISystemService/ICompanyService.cs | 21 ++
21 files changed, 2105 insertions(+), 6 deletions(-)
create mode 100644 ZR.Admin.WebApi/Controllers/BaseInfo/EmployeeController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/BaseInfo/SalaryLevelController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/System/CompanyController.cs
create mode 100644 ZR.Model/BaseInfo/Dto/EmployeeDto.cs
create mode 100644 ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs
create mode 100644 ZR.Model/BaseInfo/Dto/SalaryLevelDto.cs
create mode 100644 ZR.Model/BaseInfo/Employee.cs
create mode 100644 ZR.Model/BaseInfo/MonthSalary.cs
create mode 100644 ZR.Model/BaseInfo/SalaryLevel.cs
create mode 100644 ZR.Model/System/Company.cs
create mode 100644 ZR.Model/System/Dto/CompanyDto.cs
create mode 100644 ZR.Service/BaseInfo/EmployeeService.cs
create mode 100644 ZR.Service/BaseInfo/IBaseInfoService/IEmployeeService.cs
create mode 100644 ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
create mode 100644 ZR.Service/BaseInfo/IBaseInfoService/ISalaryLevelService.cs
create mode 100644 ZR.Service/BaseInfo/MonthSalaryService.cs
create mode 100644 ZR.Service/BaseInfo/SalaryLevelService.cs
create mode 100644 ZR.Service/System/CompanyService.cs
create mode 100644 ZR.Service/System/ISystemService/ICompanyService.cs
diff --git a/ZR.Admin.WebApi/Controllers/BaseInfo/EmployeeController.cs b/ZR.Admin.WebApi/Controllers/BaseInfo/EmployeeController.cs
new file mode 100644
index 00000000..1958f167
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/BaseInfo/EmployeeController.cs
@@ -0,0 +1,171 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Service.BaseInfo.IBaseInfoService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+
+//创建时间:2025-04-10
+namespace ZR.Admin.WebApi.Controllers.BaseInfo
+{
+ ///
+ /// 员工信息
+ ///
+ [Verify]
+ [Route("BaseInfo/Employee")]
+ public class EmployeeController : BaseController
+ {
+ ///
+ /// 员工信息接口
+ ///
+ private readonly IEmployeeService _EmployeeService;
+
+ public EmployeeController(IEmployeeService EmployeeService)
+ {
+ _EmployeeService = EmployeeService;
+ }
+
+ ///
+ /// 查询员工信息列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "Employee:list")]
+ public IActionResult QueryEmployee([FromQuery] EmployeeQueryDto parm)
+ {
+ var response = _EmployeeService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询员工信息详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "Employee:query")]
+ public IActionResult GetEmployee(int Id)
+ {
+ var response = _EmployeeService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加员工信息
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "Employee:add")]
+ [Log(Title = "员工信息", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddEmployee([FromBody] EmployeeDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _EmployeeService.AddEmployee(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新员工信息
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "Employee:edit")]
+ [Log(Title = "员工信息", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateEmployee([FromBody] EmployeeDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _EmployeeService.UpdateEmployee(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除员工信息
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "Employee:delete")]
+ [Log(Title = "员工信息", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteEmployee([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_EmployeeService.Delete(idArr));
+ }
+
+ ///
+ /// 导出员工信息
+ ///
+ ///
+ [Log(Title = "员工信息", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "Employee:export")]
+ public IActionResult Export([FromQuery] EmployeeQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _EmployeeService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "员工信息", "员工信息");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ ///
+ /// 清空员工信息
+ ///
+ ///
+ [Log(Title = "员工信息", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "Employee:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_EmployeeService.TruncateEmployee());
+ }
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "员工信息导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "Employee:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_EmployeeService.ImportEmployee(list.Adapt>()));
+ }
+
+ ///
+ /// 员工信息导入模板下载
+ ///
+ ///
+ [HttpGet("importTemplate")]
+ [Log(Title = "员工信息模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "Employee");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs b/ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs
new file mode 100644
index 00000000..6db62ba8
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs
@@ -0,0 +1,171 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Service.BaseInfo.IBaseInfoService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+
+//创建时间:2025-04-10
+namespace ZR.Admin.WebApi.Controllers.BaseInfo
+{
+ ///
+ /// 每月工资明细
+ ///
+ [Verify]
+ [Route("BaseInfo/MonthSalary")]
+ public class MonthSalaryController : BaseController
+ {
+ ///
+ /// 每月工资明细接口
+ ///
+ private readonly IMonthSalaryService _MonthSalaryService;
+
+ public MonthSalaryController(IMonthSalaryService MonthSalaryService)
+ {
+ _MonthSalaryService = MonthSalaryService;
+ }
+
+ ///
+ /// 查询每月工资明细列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "MonthSalary:list")]
+ public IActionResult QueryMonthSalary([FromQuery] MonthSalaryQueryDto parm)
+ {
+ var response = _MonthSalaryService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询每月工资明细详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "MonthSalary:query")]
+ public IActionResult GetMonthSalary(int Id)
+ {
+ var response = _MonthSalaryService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加每月工资明细
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "MonthSalary:add")]
+ [Log(Title = "每月工资明细", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddMonthSalary([FromBody] MonthSalaryDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _MonthSalaryService.AddMonthSalary(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新每月工资明细
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "MonthSalary:edit")]
+ [Log(Title = "每月工资明细", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateMonthSalary([FromBody] MonthSalaryDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _MonthSalaryService.UpdateMonthSalary(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除每月工资明细
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "MonthSalary:delete")]
+ [Log(Title = "每月工资明细", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteMonthSalary([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_MonthSalaryService.Delete(idArr));
+ }
+
+ ///
+ /// 导出每月工资明细
+ ///
+ ///
+ [Log(Title = "每月工资明细", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "MonthSalary:export")]
+ public IActionResult Export([FromQuery] MonthSalaryQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _MonthSalaryService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "每月工资明细", "每月工资明细");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ ///
+ /// 清空每月工资明细
+ ///
+ ///
+ [Log(Title = "每月工资明细", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "MonthSalary:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_MonthSalaryService.TruncateMonthSalary());
+ }
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "每月工资明细导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "MonthSalary:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_MonthSalaryService.ImportMonthSalary(list.Adapt>()));
+ }
+
+ ///
+ /// 每月工资明细导入模板下载
+ ///
+ ///
+ [HttpGet("importTemplate")]
+ [Log(Title = "每月工资明细模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "MonthSalary");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/BaseInfo/SalaryLevelController.cs b/ZR.Admin.WebApi/Controllers/BaseInfo/SalaryLevelController.cs
new file mode 100644
index 00000000..af28ce24
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/BaseInfo/SalaryLevelController.cs
@@ -0,0 +1,171 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Service.BaseInfo.IBaseInfoService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+
+//创建时间:2025-04-10
+namespace ZR.Admin.WebApi.Controllers.BaseInfo
+{
+ ///
+ /// 岗位工资
+ ///
+ [Verify]
+ [Route("BaseInfo/SalaryLevel")]
+ public class SalaryLevelController : BaseController
+ {
+ ///
+ /// 岗位工资接口
+ ///
+ private readonly ISalaryLevelService _SalaryLevelService;
+
+ public SalaryLevelController(ISalaryLevelService SalaryLevelService)
+ {
+ _SalaryLevelService = SalaryLevelService;
+ }
+
+ ///
+ /// 查询岗位工资列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "SalaryLevel:list")]
+ public IActionResult QuerySalaryLevel([FromQuery] SalaryLevelQueryDto parm)
+ {
+ var response = _SalaryLevelService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询岗位工资详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "SalaryLevel:query")]
+ public IActionResult GetSalaryLevel(int Id)
+ {
+ var response = _SalaryLevelService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加岗位工资
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "SalaryLevel:add")]
+ [Log(Title = "岗位工资", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddSalaryLevel([FromBody] SalaryLevelDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _SalaryLevelService.AddSalaryLevel(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新岗位工资
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "SalaryLevel:edit")]
+ [Log(Title = "岗位工资", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateSalaryLevel([FromBody] SalaryLevelDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _SalaryLevelService.UpdateSalaryLevel(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除岗位工资
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "SalaryLevel:delete")]
+ [Log(Title = "岗位工资", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteSalaryLevel([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_SalaryLevelService.Delete(idArr));
+ }
+
+ ///
+ /// 导出岗位工资
+ ///
+ ///
+ [Log(Title = "岗位工资", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "SalaryLevel:export")]
+ public IActionResult Export([FromQuery] SalaryLevelQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _SalaryLevelService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "岗位工资", "岗位工资");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ ///
+ /// 清空岗位工资
+ ///
+ ///
+ [Log(Title = "岗位工资", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "SalaryLevel:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_SalaryLevelService.TruncateSalaryLevel());
+ }
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "岗位工资导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "SalaryLevel:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_SalaryLevelService.ImportSalaryLevel(list.Adapt>()));
+ }
+
+ ///
+ /// 岗位工资导入模板下载
+ ///
+ ///
+ [HttpGet("importTemplate")]
+ [Log(Title = "岗位工资模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "SalaryLevel");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/System/CompanyController.cs b/ZR.Admin.WebApi/Controllers/System/CompanyController.cs
new file mode 100644
index 00000000..36821e58
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/System/CompanyController.cs
@@ -0,0 +1,102 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.System.Dto;
+using ZR.Model.System;
+using ZR.Service.System.ISystemService;
+using ZR.Admin.WebApi.Filters;
+
+//创建时间:2025-04-10
+namespace ZR.Admin.WebApi.Controllers.System
+{
+ ///
+ /// 公司信息
+ ///
+ [Verify]
+ [Route("system/Company")]
+ public class CompanyController : BaseController
+ {
+ ///
+ /// 公司信息接口
+ ///
+ private readonly ICompanyService _CompanyService;
+
+ public CompanyController(ICompanyService CompanyService)
+ {
+ _CompanyService = CompanyService;
+ }
+
+ ///
+ /// 查询公司信息列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "Company:list")]
+ public IActionResult QueryCompany([FromQuery] CompanyQueryDto parm)
+ {
+ var response = _CompanyService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询公司信息详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "Company:query")]
+ public IActionResult GetCompany(int Id)
+ {
+ var response = _CompanyService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加公司信息
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "Company:add")]
+ [Log(Title = "公司信息", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddCompany([FromBody] CompanyDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _CompanyService.AddCompany(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新公司信息
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "Company:edit")]
+ [Log(Title = "公司信息", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateCompany([FromBody] CompanyDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _CompanyService.UpdateCompany(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除公司信息
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "Company:delete")]
+ [Log(Title = "公司信息", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteCompany([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_CompanyService.Delete(idArr));
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index ec13dd3b..4fa3a808 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -8,8 +8,8 @@
},
"dbConfigs": [
{
- "Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog=ZrAdmin;Encrypt=True;TrustServerCertificate=True;",
- "DbType": 1, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4
+ "Conn": "Data Source=192.168.107.252;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;",
+ "DbType": 0, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4
"ConfigId": "0", //多租户唯一标识
"IsAutoCloseConnection": true
}
@@ -18,11 +18,12 @@
//代码生成数据库配置
"CodeGenDbConfig": {
//代码生成连接字符串,注意{dbName}为固定格式,不要填写数据库名
- "Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog={dbName};",
- "DbType": 1,
+ //"Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog={dbName};",
+ "Conn": "Data Source=192.168.107.252;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;Initial Catalog={dbName};",
+ "DbType": 0,
"IsAutoCloseConnection": true,
- "DbName": "ZrAdmin" //代码生成默认连接数据库,Oracle库是实例的名称
- },
+ "DbName": "Salary_test" //代码生成默认连接数据库,Oracle库是实例的名称
+ },
"urls": "http://localhost:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改
"corsUrls": [ "http://localhost:8887", "http://localhost:8886" ], //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开
"JwtSettings": {
diff --git a/ZR.Model/BaseInfo/Dto/EmployeeDto.cs b/ZR.Model/BaseInfo/Dto/EmployeeDto.cs
new file mode 100644
index 00000000..1b2a84b4
--- /dev/null
+++ b/ZR.Model/BaseInfo/Dto/EmployeeDto.cs
@@ -0,0 +1,114 @@
+
+namespace ZR.Model.BaseInfo.Dto
+{
+ ///
+ /// 员工信息查询对象
+ ///
+ public class EmployeeQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 员工信息输入输出对象
+ ///
+ public class EmployeeDto
+ {
+ [Required(ErrorMessage = "Id不能为空")]
+ [ExcelColumn(Name = "Id")]
+ [ExcelColumnName("Id")]
+ public int Id { get; set; }
+
+ [Required(ErrorMessage = "人员编码不能为空")]
+ [ExcelColumn(Name = "人员编码")]
+ [ExcelColumnName("人员编码")]
+ public string EmployeeCode { get; set; }
+
+ [Required(ErrorMessage = "姓名不能为空")]
+ [ExcelColumn(Name = "姓名")]
+ [ExcelColumnName("姓名")]
+ public string FullName { get; set; }
+
+ [Required(ErrorMessage = "HR系统人员编码不能为空")]
+ [ExcelColumn(Name = "HR系统人员编码")]
+ [ExcelColumnName("HR系统人员编码")]
+ public string HrSysEmployeeCode { get; set; }
+
+ [Required(ErrorMessage = "HR系统部门id不能为空")]
+ [ExcelColumn(Name = "HR系统部门id")]
+ [ExcelColumnName("HR系统部门id")]
+ public string HrSysDeptId { get; set; }
+
+ [ExcelColumn(Name = "HR系统部门名称")]
+ [ExcelColumnName("HR系统部门名称")]
+ public string HrSysDeptName { get; set; }
+
+ [ExcelColumn(Name = "公司")]
+ [ExcelColumnName("公司")]
+ public string CompanyId { get; set; }
+
+ [ExcelColumn(Name = "部门")]
+ [ExcelColumnName("部门")]
+ public string DeptId { get; set; }
+
+ [ExcelColumn(Name = "片区")]
+ [ExcelColumnName("片区")]
+ public string Region { get; set; }
+
+ [ExcelColumn(Name = "中心名称")]
+ [ExcelColumnName("中心名称")]
+ public string CenterName { get; set; }
+
+ [ExcelColumn(Name = "班组名称")]
+ [ExcelColumnName("班组名称")]
+ public string TeamName { get; set; }
+
+ [ExcelColumn(Name = "人员类别")]
+ [ExcelColumnName("人员类别")]
+ public string EmployeeType { get; set; }
+
+ [ExcelColumn(Name = "用工分类")]
+ [ExcelColumnName("用工分类")]
+ public string EmploymentCategory { get; set; }
+
+ [ExcelColumn(Name = "性别")]
+ [ExcelColumnName("性别")]
+ public string Gender { get; set; }
+
+ [ExcelColumn(Name = "是否党员")]
+ [ExcelColumnName("是否党员")]
+ public string IsPartyMember { get; set; }
+
+ [ExcelColumn(Name = "岗级")]
+ [ExcelColumnName("岗级")]
+ public string SalaryLevelId { get; set; }
+
+ [ExcelColumn(Name = "状态(1正常 0停用)")]
+ [ExcelColumnName("状态(1正常 0停用)")]
+ public int? Status { get; set; }
+
+ [ExcelColumn(Name = "创建人")]
+ [ExcelColumnName("创建人")]
+ public string CreateBy { get; set; }
+
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelColumn(Name = "更新人")]
+ [ExcelColumnName("更新人")]
+ public string UpdateBy { get; set; }
+
+ [ExcelColumn(Name = "更新时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("更新时间")]
+ public DateTime? UpdateTime { get; set; }
+
+ [ExcelColumn(Name = "Remark")]
+ [ExcelColumnName("Remark")]
+ public string Remark { get; set; }
+
+
+
+ [ExcelColumn(Name = "人员类别")]
+ public string EmployeeTypeLabel { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs b/ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs
new file mode 100644
index 00000000..1976a9a2
--- /dev/null
+++ b/ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs
@@ -0,0 +1,179 @@
+
+namespace ZR.Model.BaseInfo.Dto
+{
+ ///
+ /// 每月工资明细查询对象
+ ///
+ public class MonthSalaryQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 每月工资明细输入输出对象
+ ///
+ public class MonthSalaryDto
+ {
+ [Required(ErrorMessage = "Id不能为空")]
+ [ExcelIgnore]
+ public int Id { get; set; }
+
+ [ExcelColumn(Name = "薪资月份", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("薪资月份")]
+ public DateTime? RecordMonth { get; set; }
+
+ [ExcelIgnore]
+ public int? EmployeeId { get; set; }
+
+ [Required(ErrorMessage = "人员编码不能为空")]
+ [ExcelColumn(Name = "人员编码")]
+ [ExcelColumnName("人员编码")]
+ public string EmployeeCode { get; set; }
+
+ [ExcelColumn(Name = "人员姓名")]
+ [ExcelColumnName("人员姓名")]
+ public string EmployeeName { get; set; }
+
+ [ExcelColumn(Name = "绩效所在岗级")]
+ [ExcelColumnName("绩效所在岗级")]
+ public string PerformanceGrade { get; set; }
+
+ [ExcelColumn(Name = "月标准绩效")]
+ [ExcelColumnName("月标准绩效")]
+ public decimal MonthlyPerformance { get; set; }
+
+ [ExcelColumn(Name = "月岗位工资")]
+ [ExcelColumnName("月岗位工资")]
+ public decimal MonthlySalary { get; set; }
+
+ [ExcelColumn(Name = "补发绩效工资")]
+ [ExcelColumnName("补发绩效工资")]
+ public decimal PerformanceSupplement { get; set; }
+
+ [ExcelColumn(Name = "补发岗位工资")]
+ [ExcelColumnName("补发岗位工资")]
+ public decimal SalarySupplement { get; set; }
+
+ [ExcelColumn(Name = "补发其他工资")]
+ [ExcelColumnName("补发其他工资")]
+ public decimal OtherSupplement { get; set; }
+
+ [ExcelColumn(Name = "年功津贴")]
+ [ExcelColumnName("年功津贴")]
+ public decimal SeniorityAllowance { get; set; }
+
+ [ExcelColumn(Name = "综合补贴")]
+ [ExcelColumnName("综合补贴")]
+ public decimal ComprehensiveAllowance { get; set; }
+
+ [ExcelColumn(Name = "加班工资")]
+ [ExcelColumnName("加班工资")]
+ public decimal OvertimeAllowance { get; set; }
+
+ [ExcelColumn(Name = "计算机补贴")]
+ [ExcelColumnName("计算机补贴")]
+ public decimal ComputerAllowance { get; set; }
+
+ [ExcelColumn(Name = "骨干津贴")]
+ [ExcelColumnName("骨干津贴")]
+ public decimal KeyStaffAllowance { get; set; }
+
+ [ExcelColumn(Name = "证书及考试奖励")]
+ [ExcelColumnName("证书及考试奖励")]
+ public decimal CertificateAllowance { get; set; }
+
+ [ExcelColumn(Name = "通讯补助")]
+ [ExcelColumnName("通讯补助")]
+ public decimal PhoneAllowance { get; set; }
+
+ [ExcelColumn(Name = "交通补贴")]
+ [ExcelColumnName("交通补贴")]
+ public decimal TransportAllowance { get; set; }
+
+ [ExcelColumn(Name = "生活补贴")]
+ [ExcelColumnName("生活补贴")]
+ public decimal LivingAllowance { get; set; }
+
+ [ExcelColumn(Name = "租房补助")]
+ [ExcelColumnName("租房补助")]
+ public decimal HousingAllowance { get; set; }
+
+ [ExcelColumn(Name = "市场拓展奖励")]
+ [ExcelColumnName("市场拓展奖励")]
+ public decimal MarketDevelopmentBonus { get; set; }
+
+ [ExcelColumn(Name = "月预发绩效工资")]
+ [ExcelColumnName("月预发绩效工资")]
+ public decimal AdvancePerformancePay { get; set; }
+
+ [ExcelColumn(Name = "清算绩效工资")]
+ [ExcelColumnName("清算绩效工资")]
+ public decimal SettlementPerformancePay { get; set; }
+
+ [ExcelColumn(Name = "绩效扣款(项目)")]
+ [ExcelColumnName("绩效扣款(项目)")]
+ public decimal ProjectDeduction { get; set; }
+
+ [ExcelColumn(Name = "绩效扣款(考勤)")]
+ [ExcelColumnName("绩效扣款(考勤)")]
+ public decimal AttendanceDeduction { get; set; }
+
+ [ExcelColumn(Name = "代发奖金")]
+ [ExcelColumnName("代发奖金")]
+ public decimal AgentBonus { get; set; }
+
+ [ExcelColumn(Name = "代发其他")]
+ [ExcelColumnName("代发其他")]
+ public decimal AgentOther { get; set; }
+
+ [ExcelColumn(Name = "其他固定发放")]
+ [ExcelColumnName("其他固定发放")]
+ public decimal FixedPayment { get; set; }
+
+ [ExcelColumn(Name = "计件计量工资")]
+ [ExcelColumnName("计件计量工资")]
+ public decimal PieceworkWage { get; set; }
+
+ [ExcelColumn(Name = "月预设项目")]
+ [ExcelColumnName("月预设项目")]
+ public decimal ProjectPreset { get; set; }
+
+ [ExcelColumn(Name = "其他工资")]
+ [ExcelColumnName("其他工资")]
+ public decimal OtherIncome { get; set; }
+
+ [ExcelColumn(Name = "平衡应发")]
+ [ExcelColumnName("平衡应发")]
+ public decimal AVGBalancePayable { get; set; }
+
+ [ExcelColumn(Name = "午餐补助")]
+ [ExcelColumnName("午餐补助")]
+ public decimal LunchAllowance { get; set; }
+
+ [ExcelColumn(Name = "女员工卫生费")]
+ [ExcelColumnName("女员工卫生费")]
+ public decimal WomenAllowance { get; set; }
+
+ [ExcelColumn(Name = "月应发小计")]
+ [ExcelColumnName("月应发小计")]
+ public decimal TotalMonthlyPay { get; set; }
+
+ [ExcelIgnore]
+ public string CreateBy { get; set; }
+
+ [ExcelIgnore]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelIgnore]
+ public string UpdateBy { get; set; }
+
+ [ExcelIgnore]
+ public DateTime? UpdateTime { get; set; }
+
+ [ExcelColumn(Name = "Remark")]
+ [ExcelColumnName("Remark")]
+ public string Remark { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/BaseInfo/Dto/SalaryLevelDto.cs b/ZR.Model/BaseInfo/Dto/SalaryLevelDto.cs
new file mode 100644
index 00000000..cc93d603
--- /dev/null
+++ b/ZR.Model/BaseInfo/Dto/SalaryLevelDto.cs
@@ -0,0 +1,66 @@
+
+namespace ZR.Model.BaseInfo.Dto
+{
+ ///
+ /// 岗位工资查询对象
+ ///
+ public class SalaryLevelQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 岗位工资输入输出对象
+ ///
+ public class SalaryLevelDto
+ {
+ [Required(ErrorMessage = "Id不能为空")]
+ [ExcelIgnore]
+ public int Id { get; set; }
+
+ [Required(ErrorMessage = "岗级名称不能为空")]
+ [ExcelColumn(Name = "岗级名称")]
+ [ExcelColumnName("岗级名称")]
+ public string FristLevelName { get; set; }
+
+ [ExcelColumn(Name = "第二级别")]
+ [ExcelColumnName("第二级别")]
+ public string SecondLevelName { get; set; }
+
+ [ExcelColumn(Name = "第三级别")]
+ [ExcelColumnName("第三级别")]
+ public string ThirdLevelName { get; set; }
+
+ [ExcelColumn(Name = "薪资")]
+ [ExcelColumnName("薪资")]
+ public decimal Salary { get; set; }
+
+ [ExcelColumn(Name = "排序字段")]
+ [ExcelColumnName("排序字段")]
+ public int? SortField { get; set; }
+
+ [ExcelColumn(Name = "状态")]
+ [ExcelColumnName("状态")]
+ public int? Status { get; set; }
+
+ [ExcelIgnore]
+ public string CreateBy { get; set; }
+
+ [ExcelIgnore]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelIgnore]
+ public string UpdateBy { get; set; }
+
+ [ExcelIgnore]
+ public DateTime? UpdateTime { get; set; }
+
+ [ExcelColumn(Name = "Remark")]
+ [ExcelColumnName("Remark")]
+ public string Remark { get; set; }
+
+
+
+ [ExcelColumn(Name = "状态")]
+ public string StatusLabel { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/BaseInfo/Employee.cs b/ZR.Model/BaseInfo/Employee.cs
new file mode 100644
index 00000000..ed87526d
--- /dev/null
+++ b/ZR.Model/BaseInfo/Employee.cs
@@ -0,0 +1,126 @@
+
+namespace ZR.Model.BaseInfo
+{
+ ///
+ /// 员工信息
+ ///
+ [SugarTable("pms_employee")]
+ public class Employee
+ {
+ ///
+ /// Id
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 人员编码
+ ///
+ public string EmployeeCode { get; set; }
+
+ ///
+ /// 姓名
+ ///
+ public string FullName { get; set; }
+
+ ///
+ /// HR系统人员编码
+ ///
+ public string HrSysEmployeeCode { get; set; }
+
+ ///
+ /// HR系统部门id
+ ///
+ public string HrSysDeptId { get; set; }
+
+ ///
+ /// HR系统部门名称
+ ///
+ public string HrSysDeptName { get; set; }
+
+ ///
+ /// 公司
+ ///
+ public string CompanyId { get; set; }
+
+ ///
+ /// 部门
+ ///
+ public string DeptId { get; set; }
+
+ ///
+ /// 片区
+ ///
+ public string Region { get; set; }
+
+ ///
+ /// 中心名称
+ ///
+ public string CenterName { get; set; }
+
+ ///
+ /// 班组名称
+ ///
+ public string TeamName { get; set; }
+
+ ///
+ /// 人员类别
+ ///
+ public string EmployeeType { get; set; }
+
+ ///
+ /// 用工分类
+ ///
+ public string EmploymentCategory { get; set; }
+
+ ///
+ /// 性别
+ ///
+ public string Gender { get; set; }
+
+ ///
+ /// 是否党员
+ ///
+ public string IsPartyMember { get; set; }
+
+ ///
+ /// 岗级
+ ///
+ public string SalaryLevelId { get; set; }
+
+ ///
+ /// 状态(1正常 0停用)
+ ///
+ public int? Status { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "create_by")]
+ public string CreateBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "create_time")]
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "update_by")]
+ public string UpdateBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "update_time")]
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// Remark
+ ///
+ public string Remark { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/BaseInfo/MonthSalary.cs b/ZR.Model/BaseInfo/MonthSalary.cs
new file mode 100644
index 00000000..e68f78ad
--- /dev/null
+++ b/ZR.Model/BaseInfo/MonthSalary.cs
@@ -0,0 +1,221 @@
+
+namespace ZR.Model.BaseInfo
+{
+ ///
+ /// 每月工资明细
+ ///
+ [SugarTable("pms_month_salary")]
+ public class MonthSalary
+ {
+ ///
+ /// Id
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 记录月份(YYYY-MM)
+ ///
+ public DateTime? RecordMonth { get; set; }
+
+ ///
+ /// 人员id
+ ///
+ public int EmployeeId { get; set; }
+
+ ///
+ /// 人员编码
+ ///
+ public string EmployeeCode { get; set; }
+
+ ///
+ /// 人员姓名
+ ///
+ public string EmployeeName { get; set; }
+
+ ///
+ /// 绩效所在岗级
+ ///
+ public string PerformanceGrade { get; set; }
+
+ ///
+ /// 月标准绩效
+ ///
+ public decimal MonthlyPerformance { get; set; }
+
+ ///
+ /// 月岗位工资
+ ///
+ public decimal MonthlySalary { get; set; }
+
+ ///
+ /// 补发绩效工资
+ ///
+ public decimal PerformanceSupplement { get; set; }
+
+ ///
+ /// 补发岗位工资
+ ///
+ public decimal SalarySupplement { get; set; }
+
+ ///
+ /// 补发其他工资
+ ///
+ public decimal OtherSupplement { get; set; }
+
+ ///
+ /// 年功津贴
+ ///
+ public decimal SeniorityAllowance { get; set; }
+
+ ///
+ /// 综合补贴
+ ///
+ public decimal ComprehensiveAllowance { get; set; }
+
+ ///
+ /// 加班工资
+ ///
+ public decimal OvertimeAllowance { get; set; }
+
+ ///
+ /// 计算机补贴
+ ///
+ public decimal ComputerAllowance { get; set; }
+
+ ///
+ /// 骨干津贴
+ ///
+ public decimal KeyStaffAllowance { get; set; }
+
+ ///
+ /// 证书及考试奖励
+ ///
+ public decimal CertificateAllowance { get; set; }
+
+ ///
+ /// 通讯补助
+ ///
+ public decimal PhoneAllowance { get; set; }
+
+ ///
+ /// 交通补贴
+ ///
+ public decimal TransportAllowance { get; set; }
+
+ ///
+ /// 生活补贴
+ ///
+ public decimal LivingAllowance { get; set; }
+
+ ///
+ /// 租房补助
+ ///
+ public decimal HousingAllowance { get; set; }
+
+ ///
+ /// 市场拓展奖励
+ ///
+ public decimal MarketDevelopmentBonus { get; set; }
+
+ ///
+ /// 月预发绩效工资
+ ///
+ public decimal AdvancePerformancePay { get; set; }
+
+ ///
+ /// 清算绩效工资
+ ///
+ public decimal SettlementPerformancePay { get; set; }
+
+ ///
+ /// 绩效扣款(项目)
+ ///
+ public decimal ProjectDeduction { get; set; }
+
+ ///
+ /// 绩效扣款(考勤)
+ ///
+ public decimal AttendanceDeduction { get; set; }
+
+ ///
+ /// 代发奖金
+ ///
+ public decimal AgentBonus { get; set; }
+
+ ///
+ /// 代发其他
+ ///
+ public decimal AgentOther { get; set; }
+
+ ///
+ /// 其他固定发放
+ ///
+ public decimal FixedPayment { get; set; }
+
+ ///
+ /// 计件计量工资
+ ///
+ public decimal PieceworkWage { get; set; }
+
+ ///
+ /// 月预设项目
+ ///
+ public decimal ProjectPreset { get; set; }
+
+ ///
+ /// 其他工资
+ ///
+ public decimal OtherIncome { get; set; }
+
+ ///
+ /// 平衡应发
+ ///
+ public decimal AVGBalancePayable { get; set; }
+
+ ///
+ /// 午餐补助
+ ///
+ public decimal LunchAllowance { get; set; }
+
+ ///
+ /// 女员工卫生费
+ ///
+ public decimal WomenAllowance { get; set; }
+
+ ///
+ /// 月应发小计
+ ///
+ public decimal TotalMonthlyPay { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "create_by")]
+ public string CreateBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "create_time")]
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "update_by")]
+ public string UpdateBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "update_time")]
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// Remark
+ ///
+ public string Remark { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/BaseInfo/SalaryLevel.cs b/ZR.Model/BaseInfo/SalaryLevel.cs
new file mode 100644
index 00000000..b4a12444
--- /dev/null
+++ b/ZR.Model/BaseInfo/SalaryLevel.cs
@@ -0,0 +1,76 @@
+
+namespace ZR.Model.BaseInfo
+{
+ ///
+ /// 岗位工资
+ ///
+ [SugarTable("pms_salary_level")]
+ public class SalaryLevel
+ {
+ ///
+ /// Id
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 岗级名称
+ ///
+ public string FristLevelName { get; set; }
+
+ ///
+ /// 第二级别
+ ///
+ public string SecondLevelName { get; set; }
+
+ ///
+ /// 第三级别
+ ///
+ public string ThirdLevelName { get; set; }
+
+ ///
+ /// Salary
+ ///
+ public decimal Salary { get; set; }
+
+ ///
+ /// 排序字段
+ ///
+ public int? SortField { get; set; }
+
+ ///
+ /// 状态(1正常 0停用)
+ ///
+ public int? Status { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "create_by")]
+ public string CreateBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "create_time")]
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "update_by")]
+ public string UpdateBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "update_time")]
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// Remark
+ ///
+ public string Remark { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/System/Company.cs b/ZR.Model/System/Company.cs
new file mode 100644
index 00000000..29ce7fb2
--- /dev/null
+++ b/ZR.Model/System/Company.cs
@@ -0,0 +1,56 @@
+
+namespace ZR.Model.System
+{
+ ///
+ /// 公司信息
+ ///
+ [SugarTable("pms_company")]
+ public class Company
+ {
+ ///
+ /// Id
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 公司名称
+ ///
+ public string CompanyName { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public int? Status { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "create_by")]
+ public string CreateBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "create_time")]
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新人
+ ///
+ [SugarColumn(ColumnName = "update_by")]
+ public string UpdateBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "update_time")]
+ public DateTime? UpdateTime { get; set; }
+
+ ///
+ /// Remark
+ ///
+ public string Remark { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/System/Dto/CompanyDto.cs b/ZR.Model/System/Dto/CompanyDto.cs
new file mode 100644
index 00000000..3c050e71
--- /dev/null
+++ b/ZR.Model/System/Dto/CompanyDto.cs
@@ -0,0 +1,40 @@
+
+namespace ZR.Model.System.Dto
+{
+ ///
+ /// 公司信息查询对象
+ ///
+ public class CompanyQueryDto : PagerInfo
+ {
+ public string CompanyName { get; set; }
+ }
+
+ ///
+ /// 公司信息输入输出对象
+ ///
+ public class CompanyDto
+ {
+ [Required(ErrorMessage = "Id不能为空")]
+ public int Id { get; set; }
+
+ [Required(ErrorMessage = "公司名称不能为空")]
+ public string CompanyName { get; set; }
+
+ public int? Status { get; set; }
+
+ public string CreateBy { get; set; }
+
+ public DateTime? CreateTime { get; set; }
+
+ public string UpdateBy { get; set; }
+
+ public DateTime? UpdateTime { get; set; }
+
+ public string Remark { get; set; }
+
+
+
+ [ExcelColumn(Name = "状态")]
+ public string StatusLabel { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/BaseInfo/EmployeeService.cs b/ZR.Service/BaseInfo/EmployeeService.cs
new file mode 100644
index 00000000..9221c030
--- /dev/null
+++ b/ZR.Service/BaseInfo/EmployeeService.cs
@@ -0,0 +1,145 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Repository;
+using ZR.Service.BaseInfo.IBaseInfoService;
+
+namespace ZR.Service.BaseInfo
+{
+ ///
+ /// 员工信息Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IEmployeeService), ServiceLifetime = LifeTime.Transient)]
+ public class EmployeeService : BaseService, IEmployeeService
+ {
+ ///
+ /// 查询员工信息列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(EmployeeQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ //.OrderBy("Id asc")
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public Employee GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加员工信息
+ ///
+ ///
+ ///
+ public Employee AddEmployee(Employee model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改员工信息
+ ///
+ ///
+ ///
+ public int UpdateEmployee(Employee model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 清空员工信息
+ ///
+ ///
+ public bool TruncateEmployee()
+ {
+ var newTableName = $"pms_employee_{DateTime.Now:yyyyMMdd}";
+ if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ {
+ Context.DbMaintenance.BackupTable("pms_employee", newTableName);
+ }
+
+ return Truncate();
+ }
+ ///
+ /// 导入员工信息
+ ///
+ ///
+ public (string, object, object) ImportEmployee(List list)
+ {
+ var x = Context.Storageable(list)
+ .SplitInsert(it => !it.Any())
+ .SplitError(x => x.Item.EmployeeCode.IsEmpty(), "人员编码不能为空")
+ .SplitError(x => x.Item.FullName.IsEmpty(), "姓名不能为空")
+ .SplitError(x => x.Item.HrSysEmployeeCode.IsEmpty(), "HR系统人员编码不能为空")
+ .SplitError(x => x.Item.HrSysDeptId.IsEmpty(), "HR系统部门id不能为空")
+ //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
+ .ToStorage();
+ var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ Console.WriteLine(msg);
+
+ //输出错误信息
+ foreach (var item in x.ErrorList)
+ {
+ Console.WriteLine("错误" + item.StorageMessage);
+ }
+ foreach (var item in x.IgnoreList)
+ {
+ Console.WriteLine("忽略" + item.StorageMessage);
+ }
+
+ return (msg, x.ErrorList, x.IgnoreList);
+ }
+
+ ///
+ /// 导出员工信息
+ ///
+ ///
+ ///
+ public PagedInfo ExportList(EmployeeQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .Select((it) => new EmployeeDto()
+ {
+ }, true)
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(EmployeeQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/BaseInfo/IBaseInfoService/IEmployeeService.cs b/ZR.Service/BaseInfo/IBaseInfoService/IEmployeeService.cs
new file mode 100644
index 00000000..fdfbf0a6
--- /dev/null
+++ b/ZR.Service/BaseInfo/IBaseInfoService/IEmployeeService.cs
@@ -0,0 +1,25 @@
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+
+namespace ZR.Service.BaseInfo.IBaseInfoService
+{
+ ///
+ /// 员工信息service接口
+ ///
+ public interface IEmployeeService : IBaseService
+ {
+ PagedInfo GetList(EmployeeQueryDto parm);
+
+ Employee GetInfo(int Id);
+
+
+ Employee AddEmployee(Employee parm);
+ int UpdateEmployee(Employee parm);
+
+ bool TruncateEmployee();
+
+ (string, object, object) ImportEmployee(List list);
+
+ PagedInfo ExportList(EmployeeQueryDto parm);
+ }
+}
diff --git a/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs b/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
new file mode 100644
index 00000000..e4d3c415
--- /dev/null
+++ b/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
@@ -0,0 +1,25 @@
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+
+namespace ZR.Service.BaseInfo.IBaseInfoService
+{
+ ///
+ /// 每月工资明细service接口
+ ///
+ public interface IMonthSalaryService : IBaseService
+ {
+ PagedInfo GetList(MonthSalaryQueryDto parm);
+
+ MonthSalary GetInfo(int Id);
+
+
+ MonthSalary AddMonthSalary(MonthSalary parm);
+ int UpdateMonthSalary(MonthSalary parm);
+
+ bool TruncateMonthSalary();
+
+ (string, object, object) ImportMonthSalary(List list);
+
+ PagedInfo ExportList(MonthSalaryQueryDto parm);
+ }
+}
diff --git a/ZR.Service/BaseInfo/IBaseInfoService/ISalaryLevelService.cs b/ZR.Service/BaseInfo/IBaseInfoService/ISalaryLevelService.cs
new file mode 100644
index 00000000..a0276ac2
--- /dev/null
+++ b/ZR.Service/BaseInfo/IBaseInfoService/ISalaryLevelService.cs
@@ -0,0 +1,25 @@
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+
+namespace ZR.Service.BaseInfo.IBaseInfoService
+{
+ ///
+ /// 岗位工资service接口
+ ///
+ public interface ISalaryLevelService : IBaseService
+ {
+ PagedInfo GetList(SalaryLevelQueryDto parm);
+
+ SalaryLevel GetInfo(int Id);
+
+
+ SalaryLevel AddSalaryLevel(SalaryLevel parm);
+ int UpdateSalaryLevel(SalaryLevel parm);
+
+ bool TruncateSalaryLevel();
+
+ (string, object, object) ImportSalaryLevel(List list);
+
+ PagedInfo ExportList(SalaryLevelQueryDto parm);
+ }
+}
diff --git a/ZR.Service/BaseInfo/MonthSalaryService.cs b/ZR.Service/BaseInfo/MonthSalaryService.cs
new file mode 100644
index 00000000..818f5130
--- /dev/null
+++ b/ZR.Service/BaseInfo/MonthSalaryService.cs
@@ -0,0 +1,142 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Repository;
+using ZR.Service.BaseInfo.IBaseInfoService;
+
+namespace ZR.Service.BaseInfo
+{
+ ///
+ /// 每月工资明细Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IMonthSalaryService), ServiceLifetime = LifeTime.Transient)]
+ public class MonthSalaryService : BaseService, IMonthSalaryService
+ {
+ ///
+ /// 查询每月工资明细列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(MonthSalaryQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ //.OrderBy("RecordMonth asc")
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public MonthSalary GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加每月工资明细
+ ///
+ ///
+ ///
+ public MonthSalary AddMonthSalary(MonthSalary model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改每月工资明细
+ ///
+ ///
+ ///
+ public int UpdateMonthSalary(MonthSalary model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 清空每月工资明细
+ ///
+ ///
+ public bool TruncateMonthSalary()
+ {
+ var newTableName = $"pms_month_salary_{DateTime.Now:yyyyMMdd}";
+ if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ {
+ Context.DbMaintenance.BackupTable("pms_month_salary", newTableName);
+ }
+
+ return Truncate();
+ }
+ ///
+ /// 导入每月工资明细
+ ///
+ ///
+ public (string, object, object) ImportMonthSalary(List list)
+ {
+ var x = Context.Storageable(list)
+ .SplitInsert(it => !it.Any())
+ .SplitError(x => x.Item.EmployeeCode.IsEmpty(), "人员编码不能为空")
+ //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
+ .ToStorage();
+ var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ Console.WriteLine(msg);
+
+ //输出错误信息
+ foreach (var item in x.ErrorList)
+ {
+ Console.WriteLine("错误" + item.StorageMessage);
+ }
+ foreach (var item in x.IgnoreList)
+ {
+ Console.WriteLine("忽略" + item.StorageMessage);
+ }
+
+ return (msg, x.ErrorList, x.IgnoreList);
+ }
+
+ ///
+ /// 导出每月工资明细
+ ///
+ ///
+ ///
+ public PagedInfo ExportList(MonthSalaryQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .Select((it) => new MonthSalaryDto()
+ {
+ }, true)
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(MonthSalaryQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/BaseInfo/SalaryLevelService.cs b/ZR.Service/BaseInfo/SalaryLevelService.cs
new file mode 100644
index 00000000..0b59b04d
--- /dev/null
+++ b/ZR.Service/BaseInfo/SalaryLevelService.cs
@@ -0,0 +1,142 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Repository;
+using ZR.Service.BaseInfo.IBaseInfoService;
+
+namespace ZR.Service.BaseInfo
+{
+ ///
+ /// 岗位工资Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(ISalaryLevelService), ServiceLifetime = LifeTime.Transient)]
+ public class SalaryLevelService : BaseService, ISalaryLevelService
+ {
+ ///
+ /// 查询岗位工资列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(SalaryLevelQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ //.OrderBy("SortField asc")
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public SalaryLevel GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加岗位工资
+ ///
+ ///
+ ///
+ public SalaryLevel AddSalaryLevel(SalaryLevel model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改岗位工资
+ ///
+ ///
+ ///
+ public int UpdateSalaryLevel(SalaryLevel model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 清空岗位工资
+ ///
+ ///
+ public bool TruncateSalaryLevel()
+ {
+ var newTableName = $"pms_salary_level_{DateTime.Now:yyyyMMdd}";
+ if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ {
+ Context.DbMaintenance.BackupTable("pms_salary_level", newTableName);
+ }
+
+ return Truncate();
+ }
+ ///
+ /// 导入岗位工资
+ ///
+ ///
+ public (string, object, object) ImportSalaryLevel(List list)
+ {
+ var x = Context.Storageable(list)
+ .SplitInsert(it => !it.Any())
+ .SplitError(x => x.Item.FristLevelName.IsEmpty(), "岗级名称不能为空")
+ //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
+ .ToStorage();
+ var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ Console.WriteLine(msg);
+
+ //输出错误信息
+ foreach (var item in x.ErrorList)
+ {
+ Console.WriteLine("错误" + item.StorageMessage);
+ }
+ foreach (var item in x.IgnoreList)
+ {
+ Console.WriteLine("忽略" + item.StorageMessage);
+ }
+
+ return (msg, x.ErrorList, x.IgnoreList);
+ }
+
+ ///
+ /// 导出岗位工资
+ ///
+ ///
+ ///
+ public PagedInfo ExportList(SalaryLevelQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .Select((it) => new SalaryLevelDto()
+ {
+ }, true)
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(SalaryLevelQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/System/CompanyService.cs b/ZR.Service/System/CompanyService.cs
new file mode 100644
index 00000000..bf580216
--- /dev/null
+++ b/ZR.Service/System/CompanyService.cs
@@ -0,0 +1,80 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.System.Dto;
+using ZR.Model.System;
+using ZR.Repository;
+using ZR.Service.System.ISystemService;
+
+namespace ZR.Service.System
+{
+ ///
+ /// 公司信息Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(ICompanyService), ServiceLifetime = LifeTime.Transient)]
+ public class CompanyService : BaseService, ICompanyService
+ {
+ ///
+ /// 查询公司信息列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(CompanyQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public Company GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加公司信息
+ ///
+ ///
+ ///
+ public Company AddCompany(Company model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改公司信息
+ ///
+ ///
+ ///
+ public int UpdateCompany(Company model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(CompanyQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.CompanyName), it => it.CompanyName.Contains(parm.CompanyName));
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/System/ISystemService/ICompanyService.cs b/ZR.Service/System/ISystemService/ICompanyService.cs
new file mode 100644
index 00000000..1f65ea70
--- /dev/null
+++ b/ZR.Service/System/ISystemService/ICompanyService.cs
@@ -0,0 +1,21 @@
+using ZR.Model.System.Dto;
+using ZR.Model.System;
+
+namespace ZR.Service.System.ISystemService
+{
+ ///
+ /// 公司信息service接口
+ ///
+ public interface ICompanyService : IBaseService
+ {
+ PagedInfo GetList(CompanyQueryDto parm);
+
+ Company GetInfo(int Id);
+
+
+ Company AddCompany(Company parm);
+ int UpdateCompany(Company parm);
+
+
+ }
+}
--
Gitee
From 0a4c78d4ae5f901516e54d70ebd3f62d0c764bf0 Mon Sep 17 00:00:00 2001
From: sl c <790825059@qq.com>
Date: Wed, 2 Jul 2025 16:21:02 +0800
Subject: [PATCH 02/29] 1
---
...troller.cs => PmsMonthSalaryController.cs} | 104 +++---
.../Report/AccountingDetailsController.cs | 65 ++++
...MonthSalaryDto.cs => PmsMonthSalaryDto.cs} | 205 +++++++++--
ZR.Model/BaseInfo/Employee.cs | 2 +-
.../{MonthSalary.cs => PmsMonthSalary.cs} | 227 ++++++++++--
ZR.Model/Report/Dto/AccountingDetailsDto.cs | 347 ++++++++++++++++++
.../IBaseInfoService/IMonthSalaryService.cs | 25 --
.../IPmsMonthSalaryService.cs | 25 ++
...aryService.cs => PmsMonthSalaryService.cs} | 50 +--
ZR.Service/Report/AccountingDetailsService.cs | 115 ++++++
.../IAccountingDetailsService.cs | 18 +
11 files changed, 1026 insertions(+), 157 deletions(-)
rename ZR.Admin.WebApi/Controllers/BaseInfo/{MonthSalaryController.cs => PmsMonthSalaryController.cs} (43%)
create mode 100644 ZR.Admin.WebApi/Controllers/Report/AccountingDetailsController.cs
rename ZR.Model/BaseInfo/Dto/{MonthSalaryDto.cs => PmsMonthSalaryDto.cs} (44%)
rename ZR.Model/BaseInfo/{MonthSalary.cs => PmsMonthSalary.cs} (50%)
create mode 100644 ZR.Model/Report/Dto/AccountingDetailsDto.cs
delete mode 100644 ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
create mode 100644 ZR.Service/BaseInfo/IBaseInfoService/IPmsMonthSalaryService.cs
rename ZR.Service/BaseInfo/{MonthSalaryService.cs => PmsMonthSalaryService.cs} (64%)
create mode 100644 ZR.Service/Report/AccountingDetailsService.cs
create mode 100644 ZR.Service/Report/IReportService/IAccountingDetailsService.cs
diff --git a/ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs b/ZR.Admin.WebApi/Controllers/BaseInfo/PmsMonthSalaryController.cs
similarity index 43%
rename from ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs
rename to ZR.Admin.WebApi/Controllers/BaseInfo/PmsMonthSalaryController.cs
index 6db62ba8..28d22433 100644
--- a/ZR.Admin.WebApi/Controllers/BaseInfo/MonthSalaryController.cs
+++ b/ZR.Admin.WebApi/Controllers/BaseInfo/PmsMonthSalaryController.cs
@@ -5,126 +5,126 @@ using ZR.Service.BaseInfo.IBaseInfoService;
using ZR.Admin.WebApi.Filters;
using MiniExcelLibs;
-//创建时间:2025-04-10
+//创建时间:2025-04-23
namespace ZR.Admin.WebApi.Controllers.BaseInfo
{
///
- /// 每月工资明细
+ /// 每月工资明细表
///
[Verify]
- [Route("BaseInfo/MonthSalary")]
- public class MonthSalaryController : BaseController
+ [Route("BaseInfo/PmsMonthSalary")]
+ public class PmsMonthSalaryController : BaseController
{
///
- /// 每月工资明细接口
+ /// 每月工资明细表接口
///
- private readonly IMonthSalaryService _MonthSalaryService;
+ private readonly IPmsMonthSalaryService _PmsMonthSalaryService;
- public MonthSalaryController(IMonthSalaryService MonthSalaryService)
+ public PmsMonthSalaryController(IPmsMonthSalaryService PmsMonthSalaryService)
{
- _MonthSalaryService = MonthSalaryService;
+ _PmsMonthSalaryService = PmsMonthSalaryService;
}
///
- /// 查询每月工资明细列表
+ /// 查询每月工资明细表列表
///
///
///
[HttpGet("list")]
- [ActionPermissionFilter(Permission = "MonthSalary:list")]
- public IActionResult QueryMonthSalary([FromQuery] MonthSalaryQueryDto parm)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:list")]
+ public IActionResult QueryPmsMonthSalary([FromQuery] PmsMonthSalaryQueryDto parm)
{
- var response = _MonthSalaryService.GetList(parm);
+ var response = _PmsMonthSalaryService.GetList(parm);
return SUCCESS(response);
}
///
- /// 查询每月工资明细详情
+ /// 查询每月工资明细表详情
///
///
///
[HttpGet("{Id}")]
- [ActionPermissionFilter(Permission = "MonthSalary:query")]
- public IActionResult GetMonthSalary(int Id)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:query")]
+ public IActionResult GetPmsMonthSalary(int Id)
{
- var response = _MonthSalaryService.GetInfo(Id);
+ var response = _PmsMonthSalaryService.GetInfo(Id);
- var info = response.Adapt();
+ var info = response.Adapt();
return SUCCESS(info);
}
///
- /// 添加每月工资明细
+ /// 添加每月工资明细表
///
///
[HttpPost]
- [ActionPermissionFilter(Permission = "MonthSalary:add")]
- [Log(Title = "每月工资明细", BusinessType = BusinessType.INSERT)]
- public IActionResult AddMonthSalary([FromBody] MonthSalaryDto parm)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:add")]
+ [Log(Title = "每月工资明细表", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddPmsMonthSalary([FromBody] PmsMonthSalaryDto parm)
{
- var modal = parm.Adapt().ToCreate(HttpContext);
+ var modal = parm.Adapt().ToCreate(HttpContext);
- var response = _MonthSalaryService.AddMonthSalary(modal);
+ var response = _PmsMonthSalaryService.AddPmsMonthSalary(modal);
return SUCCESS(response);
}
///
- /// 更新每月工资明细
+ /// 更新每月工资明细表
///
///
[HttpPut]
- [ActionPermissionFilter(Permission = "MonthSalary:edit")]
- [Log(Title = "每月工资明细", BusinessType = BusinessType.UPDATE)]
- public IActionResult UpdateMonthSalary([FromBody] MonthSalaryDto parm)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:edit")]
+ [Log(Title = "每月工资明细表", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdatePmsMonthSalary([FromBody] PmsMonthSalaryDto parm)
{
- var modal = parm.Adapt().ToUpdate(HttpContext);
- var response = _MonthSalaryService.UpdateMonthSalary(modal);
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _PmsMonthSalaryService.UpdatePmsMonthSalary(modal);
return ToResponse(response);
}
///
- /// 删除每月工资明细
+ /// 删除每月工资明细表
///
///
[HttpPost("delete/{ids}")]
- [ActionPermissionFilter(Permission = "MonthSalary:delete")]
- [Log(Title = "每月工资明细", BusinessType = BusinessType.DELETE)]
- public IActionResult DeleteMonthSalary([FromRoute]string ids)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:delete")]
+ [Log(Title = "每月工资明细表", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeletePmsMonthSalary([FromRoute]string ids)
{
var idArr = Tools.SplitAndConvert(ids);
- return ToResponse(_MonthSalaryService.Delete(idArr));
+ return ToResponse(_PmsMonthSalaryService.Delete(idArr));
}
///
- /// 导出每月工资明细
+ /// 导出每月工资明细表
///
///
- [Log(Title = "每月工资明细", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [Log(Title = "每月工资明细表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[HttpGet("export")]
- [ActionPermissionFilter(Permission = "MonthSalary:export")]
- public IActionResult Export([FromQuery] MonthSalaryQueryDto parm)
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:export")]
+ public IActionResult Export([FromQuery] PmsMonthSalaryQueryDto parm)
{
parm.PageNum = 1;
parm.PageSize = 100000;
- var list = _MonthSalaryService.ExportList(parm).Result;
+ var list = _PmsMonthSalaryService.ExportList(parm).Result;
if (list == null || list.Count <= 0)
{
return ToResponse(ResultCode.FAIL, "没有要导出的数据");
}
- var result = ExportExcelMini(list, "每月工资明细", "每月工资明细");
+ var result = ExportExcelMini(list, "每月工资明细表", "每月工资明细表");
return ExportExcel(result.Item2, result.Item1);
}
///
- /// 清空每月工资明细
+ /// 清空每月工资明细表
///
///
- [Log(Title = "每月工资明细", BusinessType = BusinessType.CLEAN)]
- [ActionPermissionFilter(Permission = "MonthSalary:delete")]
+ [Log(Title = "每月工资明细表", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:delete")]
[HttpPost("clean")]
public IActionResult Clear()
{
@@ -132,7 +132,7 @@ namespace ZR.Admin.WebApi.Controllers.BaseInfo
{
return ToResponse(ResultCode.FAIL, "操作失败");
}
- return SUCCESS(_MonthSalaryService.TruncateMonthSalary());
+ return SUCCESS(_PmsMonthSalaryService.TruncatePmsMonthSalary());
}
///
@@ -141,29 +141,29 @@ namespace ZR.Admin.WebApi.Controllers.BaseInfo
///
///
[HttpPost("importData")]
- [Log(Title = "每月工资明细导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
- [ActionPermissionFilter(Permission = "MonthSalary:import")]
+ [Log(Title = "每月工资明细表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "pmsmonthsalary:import")]
public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
{
- List list = new();
+ List list = new();
using (var stream = formFile.OpenReadStream())
{
- list = stream.Query(startCell: "A1").ToList();
+ list = stream.Query(startCell: "A1").ToList();
}
- return SUCCESS(_MonthSalaryService.ImportMonthSalary(list.Adapt>()));
+ return SUCCESS(_PmsMonthSalaryService.ImportPmsMonthSalary(list.Adapt>()));
}
///
- /// 每月工资明细导入模板下载
+ /// 每月工资明细表导入模板下载
///
///
[HttpGet("importTemplate")]
- [Log(Title = "每月工资明细模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [Log(Title = "每月工资明细表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
[AllowAnonymous]
public IActionResult ImportTemplateExcel()
{
- var result = DownloadImportTemplate(new List() { }, "MonthSalary");
+ var result = DownloadImportTemplate(new List() { }, "PmsMonthSalary");
return ExportExcel(result.Item2, result.Item1);
}
diff --git a/ZR.Admin.WebApi/Controllers/Report/AccountingDetailsController.cs b/ZR.Admin.WebApi/Controllers/Report/AccountingDetailsController.cs
new file mode 100644
index 00000000..934ded2f
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/Report/AccountingDetailsController.cs
@@ -0,0 +1,65 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+using ZR.Service.BaseInfo.IBaseInfoService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+using ZR.Service.Report.IReportService;
+using ZR.Model.Report.Dto;
+using ZR.Service.BaseInfo;
+
+namespace ZR.Admin.WebApi.Controllers.Report
+{
+ ///
+ /// 核算明细
+ ///
+ [Verify]
+ [Route("Report/AccountingDetails")]
+ public class AccountingDetailsController : BaseController
+ {
+ ///
+ /// 核算明细接口
+ ///
+ private readonly IAccountingDetailsService _AccountingDetailsService;
+ private readonly ISysConfigService sysConfigService;
+
+ public AccountingDetailsController(IAccountingDetailsService EmployeeService, ISysConfigService sysConfigService)
+ {
+ _AccountingDetailsService = EmployeeService;
+ this.sysConfigService = sysConfigService;
+ }
+
+ ///
+ /// 查询核算明细
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "AccountingDetails:list")]
+ public IActionResult QueryAccountingDetails([FromQuery] AccountingDetailsQueryDto parm)
+ {
+ var response = _AccountingDetailsService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 导出核算明细
+ ///
+ ///
+ [Log(Title = "核算明细", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "AccountingDetails:export")]
+ public IActionResult Export([FromQuery] AccountingDetailsQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _AccountingDetailsService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "核算明细", "核算明细");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+ }
+}
diff --git a/ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs b/ZR.Model/BaseInfo/Dto/PmsMonthSalaryDto.cs
similarity index 44%
rename from ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs
rename to ZR.Model/BaseInfo/Dto/PmsMonthSalaryDto.cs
index 1976a9a2..4a6b2cfc 100644
--- a/ZR.Model/BaseInfo/Dto/MonthSalaryDto.cs
+++ b/ZR.Model/BaseInfo/Dto/PmsMonthSalaryDto.cs
@@ -2,31 +2,34 @@
namespace ZR.Model.BaseInfo.Dto
{
///
- /// 每月工资明细查询对象
+ /// 每月工资明细表查询对象
///
- public class MonthSalaryQueryDto : PagerInfo
+ public class PmsMonthSalaryQueryDto : PagerInfo
{
+ public DateTime? RecordMonth { get; set; }
+ public string EmployeeCode { get; set; }
+ public string EmployeeName { get; set; }
}
///
- /// 每月工资明细输入输出对象
+ /// 每月工资明细表输入输出对象
///
- public class MonthSalaryDto
+ public class PmsMonthSalaryDto
{
[Required(ErrorMessage = "Id不能为空")]
[ExcelIgnore]
public int Id { get; set; }
- [ExcelColumn(Name = "薪资月份", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
- [ExcelColumnName("薪资月份")]
+ [ExcelColumn(Name = "记录月份", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("记录月份")]
public DateTime? RecordMonth { get; set; }
- [ExcelIgnore]
+ [ExcelColumn(Name = "人员id")]
+ [ExcelColumnName("人员id")]
public int? EmployeeId { get; set; }
[Required(ErrorMessage = "人员编码不能为空")]
- [ExcelColumn(Name = "人员编码")]
- [ExcelColumnName("人员编码")]
+ [ExcelIgnore]
public string EmployeeCode { get; set; }
[ExcelColumn(Name = "人员姓名")]
@@ -45,18 +48,10 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumnName("月岗位工资")]
public decimal MonthlySalary { get; set; }
- [ExcelColumn(Name = "补发绩效工资")]
- [ExcelColumnName("补发绩效工资")]
- public decimal PerformanceSupplement { get; set; }
-
[ExcelColumn(Name = "补发岗位工资")]
[ExcelColumnName("补发岗位工资")]
public decimal SalarySupplement { get; set; }
- [ExcelColumn(Name = "补发其他工资")]
- [ExcelColumnName("补发其他工资")]
- public decimal OtherSupplement { get; set; }
-
[ExcelColumn(Name = "年功津贴")]
[ExcelColumnName("年功津贴")]
public decimal SeniorityAllowance { get; set; }
@@ -65,6 +60,18 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumnName("综合补贴")]
public decimal ComprehensiveAllowance { get; set; }
+ [ExcelColumn(Name = "月预发绩效工资")]
+ [ExcelColumnName("月预发绩效工资")]
+ public decimal AdvancePerformancePay { get; set; }
+
+ [ExcelColumn(Name = "补发绩效工资")]
+ [ExcelColumnName("补发绩效工资")]
+ public decimal PerformanceSupplement { get; set; }
+
+ [ExcelColumn(Name = "清算绩效工资")]
+ [ExcelColumnName("清算绩效工资")]
+ public decimal SettlementPerformancePay { get; set; }
+
[ExcelColumn(Name = "加班工资")]
[ExcelColumnName("加班工资")]
public decimal OvertimeAllowance { get; set; }
@@ -101,14 +108,6 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumnName("市场拓展奖励")]
public decimal MarketDevelopmentBonus { get; set; }
- [ExcelColumn(Name = "月预发绩效工资")]
- [ExcelColumnName("月预发绩效工资")]
- public decimal AdvancePerformancePay { get; set; }
-
- [ExcelColumn(Name = "清算绩效工资")]
- [ExcelColumnName("清算绩效工资")]
- public decimal SettlementPerformancePay { get; set; }
-
[ExcelColumn(Name = "绩效扣款(项目)")]
[ExcelColumnName("绩效扣款(项目)")]
public decimal ProjectDeduction { get; set; }
@@ -125,6 +124,10 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumnName("代发其他")]
public decimal AgentOther { get; set; }
+ [ExcelColumn(Name = "补发其他工资")]
+ [ExcelColumnName("补发其他工资")]
+ public decimal OtherSupplement { get; set; }
+
[ExcelColumn(Name = "其他固定发放")]
[ExcelColumnName("其他固定发放")]
public decimal FixedPayment { get; set; }
@@ -143,7 +146,7 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumn(Name = "平衡应发")]
[ExcelColumnName("平衡应发")]
- public decimal AVGBalancePayable { get; set; }
+ public decimal BalancePayableAVG { get; set; }
[ExcelColumn(Name = "午餐补助")]
[ExcelColumnName("午餐补助")]
@@ -157,10 +160,152 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelColumnName("月应发小计")]
public decimal TotalMonthlyPay { get; set; }
- [ExcelIgnore]
+ [ExcelColumn(Name = "年度绩效(一)")]
+ [ExcelColumnName("年度绩效(一)")]
+ public decimal AnnualPerformance1 { get; set; }
+
+ [ExcelColumn(Name = "年度绩效(二)")]
+ [ExcelColumnName("年度绩效(二)")]
+ public decimal AnnualPerformance2 { get; set; }
+
+ [ExcelColumn(Name = "目标奖")]
+ [ExcelColumnName("目标奖")]
+ public decimal TargetBonus { get; set; }
+
+ [ExcelColumn(Name = "预设项目")]
+ [ExcelColumnName("预设项目")]
+ public decimal PresetProject { get; set; }
+
+ [ExcelColumn(Name = "省养老保险基数")]
+ [ExcelColumnName("省养老保险基数")]
+ public decimal ProvincePensionBase { get; set; }
+
+ [ExcelColumn(Name = "市养老保险基数")]
+ [ExcelColumnName("市养老保险基数")]
+ public decimal CityPensionBase { get; set; }
+
+ [ExcelColumn(Name = "医疗保险基数")]
+ [ExcelColumnName("医疗保险基数")]
+ public decimal MedicalInsuranceBase { get; set; }
+
+ [ExcelColumn(Name = "公积金基数")]
+ [ExcelColumnName("公积金基数")]
+ public decimal HousingFundBase { get; set; }
+
+ [ExcelColumn(Name = "年金基数")]
+ [ExcelColumnName("年金基数")]
+ public decimal AnnuityBase { get; set; }
+
+ [ExcelColumn(Name = "上年月平均工资")]
+ [ExcelColumnName("上年月平均工资")]
+ public decimal LastYearAvgSalary { get; set; }
+
+ [ExcelColumn(Name = "全体人员市州失业、工伤保险基数")]
+ [ExcelColumnName("全体人员市州失业、工伤保险基数")]
+ public decimal CityUnemploymentInjuryBase { get; set; }
+
+ [ExcelColumn(Name = "补省养老保险单位缴纳额")]
+ [ExcelColumnName("补省养老保险单位缴纳额")]
+ public decimal SupplementProvincePensionCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣省养老保险个人缴纳额")]
+ [ExcelColumnName("补扣省养老保险个人缴纳额")]
+ public decimal SupplementProvincePensionPersonal { get; set; }
+
+ [ExcelColumn(Name = "补市养老保险单位缴纳额")]
+ [ExcelColumnName("补市养老保险单位缴纳额")]
+ public decimal SupplementCityPensionCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣市养老保险个人缴纳额")]
+ [ExcelColumnName("补扣市养老保险个人缴纳额")]
+ public decimal SupplementCityPensionPersonal { get; set; }
+
+ [ExcelColumn(Name = "补市医疗保险单位缴纳额")]
+ [ExcelColumnName("补市医疗保险单位缴纳额")]
+ public decimal SupplementMedicalCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣医疗保险个人缴纳额")]
+ [ExcelColumnName("补扣医疗保险个人缴纳额")]
+ public decimal SupplementMedicalPersonal { get; set; }
+
+ [ExcelColumn(Name = "补大额医疗费用补助单位缴纳额")]
+ [ExcelColumnName("补大额医疗费用补助单位缴纳额")]
+ public decimal SupplementCatastrophicMedicalCompany { get; set; }
+
+ [ExcelColumn(Name = "补失业保险单位缴纳额")]
+ [ExcelColumnName("补失业保险单位缴纳额")]
+ public decimal SupplementUnemploymentCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣失业保险个人缴纳额")]
+ [ExcelColumnName("补扣失业保险个人缴纳额")]
+ public decimal SupplementUnemploymentPersonal { get; set; }
+
+ [ExcelColumn(Name = "补工伤单位缴纳额")]
+ [ExcelColumnName("补工伤单位缴纳额")]
+ public decimal SupplementInjuryCompany { get; set; }
+
+ [ExcelColumn(Name = "补公积金单位缴纳额")]
+ [ExcelColumnName("补公积金单位缴纳额")]
+ public decimal SupplementHousingFundCompany { get; set; }
+
+ [ExcelColumn(Name = "补公积金个人缴纳额")]
+ [ExcelColumnName("补公积金个人缴纳额")]
+ public decimal SupplementHousingFundPersonal { get; set; }
+
+ [ExcelColumn(Name = "补企业年金单位缴纳额")]
+ [ExcelColumnName("补企业年金单位缴纳额")]
+ public decimal SupplementEnterpriseAnnuityCompany { get; set; }
+
+ [ExcelColumn(Name = "补企业年金个人缴纳额")]
+ [ExcelColumnName("补企业年金个人缴纳额")]
+ public decimal SupplementEnterpriseAnnuityPersonal { get; set; }
+
+ [ExcelColumn(Name = "雇主责任险")]
+ [ExcelColumnName("雇主责任险")]
+ public decimal EmployerLiabilityInsurance { get; set; }
+
+ [ExcelColumn(Name = "补充医疗保险")]
+ [ExcelColumnName("补充医疗保险")]
+ public decimal SupplementalMedicalInsurance { get; set; }
+
+ [ExcelColumn(Name = "残疾人保障金分摊")]
+ [ExcelColumnName("残疾人保障金分摊")]
+ public decimal DisabilityGuaranteeFund { get; set; }
+
+ [ExcelColumn(Name = "辞退补偿金")]
+ [ExcelColumnName("辞退补偿金")]
+ public decimal SeveranceCompensation { get; set; }
+
+ [ExcelColumn(Name = "其他")]
+ [ExcelColumnName("其他")]
+ public decimal Other { get; set; }
+
+ [ExcelColumn(Name = "劳务派遣工会会费营业税金")]
+ [ExcelColumnName("劳务派遣工会会费营业税金")]
+ public decimal LabourDispatchUnionFeeTax { get; set; }
+
+ [ExcelColumn(Name = "节假日福利报销费")]
+ [ExcelColumnName("节假日福利报销费")]
+ public decimal HolidayWelfareReimbursement { get; set; }
+
+ [ExcelColumn(Name = "扣平项目(加班餐费)")]
+ [ExcelColumnName("扣平项目(加班餐费)")]
+ public decimal DeductionMealFee { get; set; }
+
+ [ExcelColumn(Name = "公积金应纳税金额")]
+ [ExcelColumnName("公积金应纳税金额")]
+ public decimal HousingFundTaxable { get; set; }
+
+ [ExcelColumn(Name = "平衡个税缴费基数")]
+ [ExcelColumnName("平衡个税缴费基数")]
+ public decimal BalancedPersonalTaxBase { get; set; }
+
+ [ExcelColumn(Name = "创建人")]
+ [ExcelColumnName("创建人")]
public string CreateBy { get; set; }
- [ExcelIgnore]
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
public DateTime? CreateTime { get; set; }
[ExcelIgnore]
@@ -169,8 +314,8 @@ namespace ZR.Model.BaseInfo.Dto
[ExcelIgnore]
public DateTime? UpdateTime { get; set; }
- [ExcelColumn(Name = "Remark")]
- [ExcelColumnName("Remark")]
+ [ExcelColumn(Name = "备注")]
+ [ExcelColumnName("备注")]
public string Remark { get; set; }
diff --git a/ZR.Model/BaseInfo/Employee.cs b/ZR.Model/BaseInfo/Employee.cs
index ed87526d..fd1569ba 100644
--- a/ZR.Model/BaseInfo/Employee.cs
+++ b/ZR.Model/BaseInfo/Employee.cs
@@ -46,7 +46,7 @@ namespace ZR.Model.BaseInfo
///
/// 部门
///
- public string DeptId { get; set; }
+ public long DeptId { get; set; }
///
/// 片区
diff --git a/ZR.Model/BaseInfo/MonthSalary.cs b/ZR.Model/BaseInfo/PmsMonthSalary.cs
similarity index 50%
rename from ZR.Model/BaseInfo/MonthSalary.cs
rename to ZR.Model/BaseInfo/PmsMonthSalary.cs
index e68f78ad..05039449 100644
--- a/ZR.Model/BaseInfo/MonthSalary.cs
+++ b/ZR.Model/BaseInfo/PmsMonthSalary.cs
@@ -2,10 +2,10 @@
namespace ZR.Model.BaseInfo
{
///
- /// 每月工资明细
+ /// 每月工资明细表
///
[SugarTable("pms_month_salary")]
- public class MonthSalary
+ public class PmsMonthSalary
{
///
/// Id
@@ -14,14 +14,14 @@ namespace ZR.Model.BaseInfo
public int Id { get; set; }
///
- /// 记录月份(YYYY-MM)
+ /// 记录月份
///
public DateTime? RecordMonth { get; set; }
///
/// 人员id
///
- public int EmployeeId { get; set; }
+ public int? EmployeeId { get; set; }
///
/// 人员编码
@@ -48,21 +48,11 @@ namespace ZR.Model.BaseInfo
///
public decimal MonthlySalary { get; set; }
- ///
- /// 补发绩效工资
- ///
- public decimal PerformanceSupplement { get; set; }
-
///
/// 补发岗位工资
///
public decimal SalarySupplement { get; set; }
- ///
- /// 补发其他工资
- ///
- public decimal OtherSupplement { get; set; }
-
///
/// 年功津贴
///
@@ -73,6 +63,21 @@ namespace ZR.Model.BaseInfo
///
public decimal ComprehensiveAllowance { get; set; }
+ ///
+ /// 月预发绩效工资
+ ///
+ public decimal AdvancePerformancePay { get; set; }
+
+ ///
+ /// 补发绩效工资
+ ///
+ public decimal PerformanceSupplement { get; set; }
+
+ ///
+ /// 清算绩效工资
+ ///
+ public decimal SettlementPerformancePay { get; set; }
+
///
/// 加班工资
///
@@ -118,16 +123,6 @@ namespace ZR.Model.BaseInfo
///
public decimal MarketDevelopmentBonus { get; set; }
- ///
- /// 月预发绩效工资
- ///
- public decimal AdvancePerformancePay { get; set; }
-
- ///
- /// 清算绩效工资
- ///
- public decimal SettlementPerformancePay { get; set; }
-
///
/// 绩效扣款(项目)
///
@@ -148,6 +143,11 @@ namespace ZR.Model.BaseInfo
///
public decimal AgentOther { get; set; }
+ ///
+ /// 补发其他工资
+ ///
+ public decimal OtherSupplement { get; set; }
+
///
/// 其他固定发放
///
@@ -171,7 +171,7 @@ namespace ZR.Model.BaseInfo
///
/// 平衡应发
///
- public decimal AVGBalancePayable { get; set; }
+ public decimal BalancePayableAVG { get; set; }
///
/// 午餐补助
@@ -188,6 +188,181 @@ namespace ZR.Model.BaseInfo
///
public decimal TotalMonthlyPay { get; set; }
+ ///
+ /// 年度绩效(一)
+ ///
+ public decimal AnnualPerformance1 { get; set; }
+
+ ///
+ /// 年度绩效(二)
+ ///
+ public decimal AnnualPerformance2 { get; set; }
+
+ ///
+ /// 目标奖
+ ///
+ public decimal TargetBonus { get; set; }
+
+ ///
+ /// 预设项目
+ ///
+ public decimal PresetProject { get; set; }
+
+ ///
+ /// 省养老保险基数
+ ///
+ public decimal ProvincePensionBase { get; set; }
+
+ ///
+ /// 市养老保险基数
+ ///
+ public decimal CityPensionBase { get; set; }
+
+ ///
+ /// 医疗保险基数
+ ///
+ public decimal MedicalInsuranceBase { get; set; }
+
+ ///
+ /// 公积金基数
+ ///
+ public decimal HousingFundBase { get; set; }
+
+ ///
+ /// 年金基数
+ ///
+ public decimal AnnuityBase { get; set; }
+
+ ///
+ /// 上年月平均工资
+ ///
+ public decimal LastYearAvgSalary { get; set; }
+
+ ///
+ /// 全体人员市州失业、工伤保险基数
+ ///
+ public decimal CityUnemploymentInjuryBase { get; set; }
+
+ ///
+ /// 补省养老保险单位缴纳额
+ ///
+ public decimal SupplementProvincePensionCompany { get; set; }
+
+ ///
+ /// 补扣省养老保险个人缴纳额
+ ///
+ public decimal SupplementProvincePensionPersonal { get; set; }
+
+ ///
+ /// 补市养老保险单位缴纳额
+ ///
+ public decimal SupplementCityPensionCompany { get; set; }
+
+ ///
+ /// 补扣市养老保险个人缴纳额
+ ///
+ public decimal SupplementCityPensionPersonal { get; set; }
+
+ ///
+ /// 补市医疗保险单位缴纳额
+ ///
+ public decimal SupplementMedicalCompany { get; set; }
+
+ ///
+ /// 补扣医疗保险个人缴纳额
+ ///
+ public decimal SupplementMedicalPersonal { get; set; }
+
+ ///
+ /// 补大额医疗费用补助单位缴纳额
+ ///
+ public decimal SupplementCatastrophicMedicalCompany { get; set; }
+
+ ///
+ /// 补失业保险单位缴纳额
+ ///
+ public decimal SupplementUnemploymentCompany { get; set; }
+
+ ///
+ /// 补扣失业保险个人缴纳额
+ ///
+ public decimal SupplementUnemploymentPersonal { get; set; }
+
+ ///
+ /// 补工伤单位缴纳额
+ ///
+ public decimal SupplementInjuryCompany { get; set; }
+
+ ///
+ /// 补公积金单位缴纳额
+ ///
+ public decimal SupplementHousingFundCompany { get; set; }
+
+ ///
+ /// 补公积金个人缴纳额
+ ///
+ public decimal SupplementHousingFundPersonal { get; set; }
+
+ ///
+ /// 补企业年金单位缴纳额
+ ///
+ public decimal SupplementEnterpriseAnnuityCompany { get; set; }
+
+ ///
+ /// 补企业年金个人缴纳额
+ ///
+ public decimal SupplementEnterpriseAnnuityPersonal { get; set; }
+
+ ///
+ /// 雇主责任险
+ ///
+ public decimal EmployerLiabilityInsurance { get; set; }
+
+ ///
+ /// 补充医疗保险
+ ///
+ public decimal SupplementalMedicalInsurance { get; set; }
+
+ ///
+ /// 残疾人保障金分摊
+ ///
+ public decimal DisabilityGuaranteeFund { get; set; }
+
+ ///
+ /// 辞退补偿金
+ ///
+ public decimal SeveranceCompensation { get; set; }
+
+ ///
+ /// 其他
+ ///
+ public decimal Other { get; set; }
+
+ ///
+ /// 劳务派遣工会会费营业税金
+ ///
+ public decimal LabourDispatchUnionFeeTax { get; set; }
+
+ ///
+ /// 节假日福利报销费
+ ///
+ public decimal HolidayWelfareReimbursement { get; set; }
+
+ ///
+ /// 扣平项目(加班餐费)
+ ///
+ public decimal DeductionMealFee { get; set; }
+
+ ///
+ /// 公积金应纳税金额
+ ///
+ public decimal HousingFundTaxable { get; set; }
+
+ ///
+ /// 平衡个税缴费基数
+ ///
+ public decimal BalancedPersonalTaxBase { get; set; }
+
///
/// 创建人
///
@@ -213,7 +388,7 @@ namespace ZR.Model.BaseInfo
public DateTime? UpdateTime { get; set; }
///
- /// Remark
+ /// 备注
///
public string Remark { get; set; }
diff --git a/ZR.Model/Report/Dto/AccountingDetailsDto.cs b/ZR.Model/Report/Dto/AccountingDetailsDto.cs
new file mode 100644
index 00000000..0bc24083
--- /dev/null
+++ b/ZR.Model/Report/Dto/AccountingDetailsDto.cs
@@ -0,0 +1,347 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZR.Model.Report.Dto
+{
+ public class AccountingDetailsQueryDto : PagerInfo
+ {
+ public DateTime? BeginRecordMonth { get; set; }
+ public DateTime? EndRecordMonth { get; set; }
+ public string EmployeeCode { get; set; }
+ public string EmployeeName { get; set; }
+ }
+
+ public class AccountingDetailsDto
+ {
+
+
+ [ExcelColumn(Name = "薪资月份", Format = "yyyy-MM", Width = 20)]
+ [ExcelColumnName("薪资月份")]
+ public DateTime? RecordMonth { get; set; }
+
+ [ExcelColumn(Name = "部门名称")]
+ [ExcelColumnName("部门名称")]
+ public string DeptName { get; set; }
+
+ [ExcelColumn(Name = "人员姓名")]
+ [ExcelColumnName("人员姓名")]
+ public string EmployeeName { get; set; }
+
+ ///
+ /// 岗位工资
+ ///
+
+ [ExcelColumn(Name = "岗位工资")]
+ [ExcelColumnName("岗位工资")]
+ public decimal MonthlySalary { get; set; }
+
+ [ExcelColumn(Name = "年功津贴")]
+ [ExcelColumnName("年功津贴")]
+ public decimal SeniorityAllowance { get; set; }
+
+ [ExcelColumn(Name = "综合补贴")]
+ [ExcelColumnName("综合补贴")]
+ public decimal ComprehensiveAllowance { get; set; }
+
+ ///
+ /// 绩效工资(含预发、补发、清算)
+ ///
+ [ExcelColumn(Name = "绩效工资(含预发、补发、清算)")]
+ [ExcelColumnName("绩效工资(含预发、补发、清算)")]
+ public decimal MonthlyPerformance { get; set; }
+
+
+ [ExcelColumn(Name = "加班工资")]
+ [ExcelColumnName("加班工资")]
+ public decimal OvertimeAllowance { get; set; }
+
+ [ExcelColumn(Name = "计算机补贴")]
+ [ExcelColumnName("计算机补贴")]
+ public decimal ComputerAllowance { get; set; }
+
+ [ExcelColumn(Name = "骨干津贴")]
+ [ExcelColumnName("骨干津贴")]
+ public decimal KeyStaffAllowance { get; set; }
+
+ [ExcelColumn(Name = "证书及考试奖励")]
+ [ExcelColumnName("证书及考试奖励")]
+ public decimal CertificateAllowance { get; set; }
+
+ [ExcelColumn(Name = "通讯补助")]
+ [ExcelColumnName("通讯补助")]
+ public decimal PhoneAllowance { get; set; }
+
+ [ExcelColumn(Name = "交通补贴")]
+ [ExcelColumnName("交通补贴")]
+ public decimal TransportAllowance { get; set; }
+
+ [ExcelColumn(Name = "生活补贴")]
+ [ExcelColumnName("生活补贴")]
+ public decimal LivingAllowance { get; set; }
+
+ [ExcelColumn(Name = "租房补助")]
+ [ExcelColumnName("租房补助")]
+ public decimal HousingAllowance { get; set; }
+
+ [ExcelColumn(Name = "市场拓展奖励")]
+ [ExcelColumnName("市场拓展奖励")]
+ public decimal MarketDevelopmentBonus { get; set; }
+
+ ///
+ /// 其他应发
+ ///
+ [ExcelColumn(Name = "其他应发")]
+ [ExcelColumnName("其他应发")]
+ public decimal OtherPayable { get; set; }
+
+
+ [ExcelColumn(Name = "绩效扣款(项目)")]
+ [ExcelColumnName("绩效扣款(项目)")]
+ public decimal ProjectDeduction { get; set; }
+
+ [ExcelColumn(Name = "绩效扣款(考勤)")]
+ [ExcelColumnName("绩效扣款(考勤)")]
+ public decimal AttendanceDeduction { get; set; }
+
+ [ExcelColumn(Name = "午餐补助")]
+ [ExcelColumnName("午餐补助")]
+ public decimal LunchAllowance { get; set; }
+
+ [ExcelColumn(Name = "女员工卫生费")]
+ [ExcelColumnName("女员工卫生费")]
+ public decimal WomenAllowance { get; set; }
+
+ ///
+ /// 月应发小计
+ ///
+ [ExcelColumn(Name = "月应发小计")]
+ [ExcelColumnName("月应发小计")]
+ public decimal TotalMonthlyPay { get; set; }
+
+
+ ///
+ /// 代扣个人养老保险
+ ///
+ [ExcelColumn(Name = "代扣个人养老保险")]
+ [ExcelColumnName("代扣个人养老保险")]
+ public decimal PensionInsurance { get; set; }
+
+ ///
+ /// 代扣个人医疗保险
+ ///
+ [ExcelColumn(Name = "代扣个人医疗保险")]
+ [ExcelColumnName("代扣个人医疗保险")]
+ public decimal MedicalInsurance { get; set; }
+
+ ///
+ /// 代扣个人失业保险
+ ///
+ [ExcelColumn(Name = "代扣个人失业保险")]
+ [ExcelColumnName("代扣个人失业保险")]
+ public decimal UnemploymentInsurance { get; set; }
+
+ ///
+ /// 代扣个人公积金
+ ///
+ [ExcelColumn(Name = "代扣个人公积金")]
+ [ExcelColumnName("代扣个人公积金")]
+ public decimal HousingFund { get; set; }
+
+ ///
+ /// 代扣个人年金
+ ///
+ [ExcelColumn(Name = "代扣个人年金")]
+ [ExcelColumnName("代扣个人年金")]
+ public decimal Annuity { get; set; }
+
+ ///
+ /// 代扣个人所得税
+ ///
+ [ExcelColumn(Name = "代扣个人所得税")]
+ [ExcelColumnName("代扣个人所得税")]
+ public decimal IncomeTax { get; set; }
+
+ ///
+ /// 月应扣小计
+ ///
+ [ExcelColumn(Name = "月应扣小计")]
+ [ExcelColumnName("月应扣小计")]
+ public decimal TotalDeductions { get; set; }
+
+ ///
+ /// 实发金额
+ ///
+ [ExcelColumn(Name = "实发金额")]
+ [ExcelColumnName("实发金额")]
+ public decimal NetPayment { get; set; }
+
+ ///
+ /// 工资总额
+ ///
+ [ExcelColumn(Name = "工资总额")]
+ [ExcelColumnName("工资总额")]
+ public decimal GrossSalary { get; set; }
+
+
+ [ExcelColumn(Name = "年度绩效(一)")]
+ [ExcelColumnName("年度绩效(一)")]
+ public decimal AnnualPerformance1 { get; set; }
+
+ [ExcelColumn(Name = "年度绩效(二)")]
+ [ExcelColumnName("年度绩效(二)")]
+ public decimal AnnualPerformance2 { get; set; }
+
+ [ExcelColumn(Name = "目标奖")]
+ [ExcelColumnName("目标奖")]
+ public decimal TargetBonus { get; set; }
+
+ [ExcelColumn(Name = "预设项目")]
+ [ExcelColumnName("预设项目")]
+ public decimal PresetProject { get; set; }
+
+ [ExcelColumn(Name = "省养老保险基数")]
+ [ExcelColumnName("省养老保险基数")]
+ public decimal ProvincePensionBase { get; set; }
+
+ [ExcelColumn(Name = "市养老保险基数")]
+ [ExcelColumnName("市养老保险基数")]
+ public decimal CityPensionBase { get; set; }
+
+ [ExcelColumn(Name = "医疗保险基数")]
+ [ExcelColumnName("医疗保险基数")]
+ public decimal MedicalInsuranceBase { get; set; }
+
+ [ExcelColumn(Name = "公积金基数")]
+ [ExcelColumnName("公积金基数")]
+ public decimal HousingFundBase { get; set; }
+
+ [ExcelColumn(Name = "年金基数")]
+ [ExcelColumnName("年金基数")]
+ public decimal AnnuityBase { get; set; }
+
+ [ExcelColumn(Name = "上年月平均工资")]
+ [ExcelColumnName("上年月平均工资")]
+ public decimal LastYearAvgSalary { get; set; }
+
+ [ExcelColumn(Name = "全体人员市州失业、工伤保险基数")]
+ [ExcelColumnName("全体人员市州失业、工伤保险基数")]
+ public decimal CityUnemploymentInjuryBase { get; set; }
+
+ [ExcelColumn(Name = "补省养老保险单位缴纳额")]
+ [ExcelColumnName("补省养老保险单位缴纳额")]
+ public decimal SupplementProvincePensionCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣省养老保险个人缴纳额")]
+ [ExcelColumnName("补扣省养老保险个人缴纳额")]
+ public decimal SupplementProvincePensionPersonal { get; set; }
+
+ [ExcelColumn(Name = "补市养老保险单位缴纳额")]
+ [ExcelColumnName("补市养老保险单位缴纳额")]
+ public decimal SupplementCityPensionCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣市养老保险个人缴纳额")]
+ [ExcelColumnName("补扣市养老保险个人缴纳额")]
+ public decimal SupplementCityPensionPersonal { get; set; }
+
+ [ExcelColumn(Name = "补市医疗保险单位缴纳额")]
+ [ExcelColumnName("补市医疗保险单位缴纳额")]
+ public decimal SupplementMedicalCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣医疗保险个人缴纳额")]
+ [ExcelColumnName("补扣医疗保险个人缴纳额")]
+ public decimal SupplementMedicalPersonal { get; set; }
+
+ [ExcelColumn(Name = "补大额医疗费用补助单位缴纳额")]
+ [ExcelColumnName("补大额医疗费用补助单位缴纳额")]
+ public decimal SupplementCatastrophicMedicalCompany { get; set; }
+
+ [ExcelColumn(Name = "补失业保险单位缴纳额")]
+ [ExcelColumnName("补失业保险单位缴纳额")]
+ public decimal SupplementUnemploymentCompany { get; set; }
+
+ [ExcelColumn(Name = "补扣失业保险个人缴纳额")]
+ [ExcelColumnName("补扣失业保险个人缴纳额")]
+ public decimal SupplementUnemploymentPersonal { get; set; }
+
+ [ExcelColumn(Name = "补工伤单位缴纳额")]
+ [ExcelColumnName("补工伤单位缴纳额")]
+ public decimal SupplementInjuryCompany { get; set; }
+
+ [ExcelColumn(Name = "补公积金单位缴纳额")]
+ [ExcelColumnName("补公积金单位缴纳额")]
+ public decimal SupplementHousingFundCompany { get; set; }
+
+ [ExcelColumn(Name = "补公积金个人缴纳额")]
+ [ExcelColumnName("补公积金个人缴纳额")]
+ public decimal SupplementHousingFundPersonal { get; set; }
+
+ [ExcelColumn(Name = "补企业年金单位缴纳额")]
+ [ExcelColumnName("补企业年金单位缴纳额")]
+ public decimal SupplementEnterpriseAnnuityCompany { get; set; }
+
+ [ExcelColumn(Name = "补企业年金个人缴纳额")]
+ [ExcelColumnName("补企业年金个人缴纳额")]
+ public decimal SupplementEnterpriseAnnuityPersonal { get; set; }
+
+ [ExcelColumn(Name = "雇主责任险")]
+ [ExcelColumnName("雇主责任险")]
+ public decimal EmployerLiabilityInsurance { get; set; }
+
+ [ExcelColumn(Name = "补充医疗保险")]
+ [ExcelColumnName("补充医疗保险")]
+ public decimal SupplementalMedicalInsurance { get; set; }
+
+ [ExcelColumn(Name = "残疾人保障金分摊")]
+ [ExcelColumnName("残疾人保障金分摊")]
+ public decimal DisabilityGuaranteeFund { get; set; }
+
+ [ExcelColumn(Name = "辞退补偿金")]
+ [ExcelColumnName("辞退补偿金")]
+ public decimal SeveranceCompensation { get; set; }
+
+ [ExcelColumn(Name = "其他")]
+ [ExcelColumnName("其他")]
+ public decimal Other { get; set; }
+
+ [ExcelColumn(Name = "劳务派遣工会会费营业税金")]
+ [ExcelColumnName("劳务派遣工会会费营业税金")]
+ public decimal LabourDispatchUnionFeeTax { get; set; }
+
+ [ExcelColumn(Name = "节假日福利报销费")]
+ [ExcelColumnName("节假日福利报销费")]
+ public decimal HolidayWelfareReimbursement { get; set; }
+
+ [ExcelColumn(Name = "扣平项目(加班餐费)")]
+ [ExcelColumnName("扣平项目(加班餐费)")]
+ public decimal DeductionMealFee { get; set; }
+
+ [ExcelColumn(Name = "公积金应纳税金额")]
+ [ExcelColumnName("公积金应纳税金额")]
+ public decimal HousingFundTaxable { get; set; }
+
+ [ExcelColumn(Name = "平衡个税缴费基数")]
+ [ExcelColumnName("平衡个税缴费基数")]
+ public decimal BalancedPersonalTaxBase { get; set; }
+
+ [ExcelColumn(Name = "创建人")]
+ [ExcelColumnName("创建人")]
+ public string CreateBy { get; set; }
+
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelIgnore]
+ public string UpdateBy { get; set; }
+
+ [ExcelIgnore]
+ public DateTime? UpdateTime { get; set; }
+
+ [ExcelColumn(Name = "备注")]
+ [ExcelColumnName("备注")]
+ public string Remark { get; set; }
+ }
+}
diff --git a/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs b/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
deleted file mode 100644
index e4d3c415..00000000
--- a/ZR.Service/BaseInfo/IBaseInfoService/IMonthSalaryService.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using ZR.Model.BaseInfo.Dto;
-using ZR.Model.BaseInfo;
-
-namespace ZR.Service.BaseInfo.IBaseInfoService
-{
- ///
- /// 每月工资明细service接口
- ///
- public interface IMonthSalaryService : IBaseService
- {
- PagedInfo GetList(MonthSalaryQueryDto parm);
-
- MonthSalary GetInfo(int Id);
-
-
- MonthSalary AddMonthSalary(MonthSalary parm);
- int UpdateMonthSalary(MonthSalary parm);
-
- bool TruncateMonthSalary();
-
- (string, object, object) ImportMonthSalary(List list);
-
- PagedInfo ExportList(MonthSalaryQueryDto parm);
- }
-}
diff --git a/ZR.Service/BaseInfo/IBaseInfoService/IPmsMonthSalaryService.cs b/ZR.Service/BaseInfo/IBaseInfoService/IPmsMonthSalaryService.cs
new file mode 100644
index 00000000..1f9d5b72
--- /dev/null
+++ b/ZR.Service/BaseInfo/IBaseInfoService/IPmsMonthSalaryService.cs
@@ -0,0 +1,25 @@
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.BaseInfo;
+
+namespace ZR.Service.BaseInfo.IBaseInfoService
+{
+ ///
+ /// 每月工资明细表service接口
+ ///
+ public interface IPmsMonthSalaryService : IBaseService
+ {
+ PagedInfo GetList(PmsMonthSalaryQueryDto parm);
+
+ PmsMonthSalary GetInfo(int Id);
+
+
+ PmsMonthSalary AddPmsMonthSalary(PmsMonthSalary parm);
+ int UpdatePmsMonthSalary(PmsMonthSalary parm);
+
+ bool TruncatePmsMonthSalary();
+
+ (string, object, object) ImportPmsMonthSalary(List list);
+
+ PagedInfo ExportList(PmsMonthSalaryQueryDto parm);
+ }
+}
diff --git a/ZR.Service/BaseInfo/MonthSalaryService.cs b/ZR.Service/BaseInfo/PmsMonthSalaryService.cs
similarity index 64%
rename from ZR.Service/BaseInfo/MonthSalaryService.cs
rename to ZR.Service/BaseInfo/PmsMonthSalaryService.cs
index 818f5130..d87ab013 100644
--- a/ZR.Service/BaseInfo/MonthSalaryService.cs
+++ b/ZR.Service/BaseInfo/PmsMonthSalaryService.cs
@@ -8,24 +8,24 @@ using ZR.Service.BaseInfo.IBaseInfoService;
namespace ZR.Service.BaseInfo
{
///
- /// 每月工资明细Service业务层处理
+ /// 每月工资明细表Service业务层处理
///
- [AppService(ServiceType = typeof(IMonthSalaryService), ServiceLifetime = LifeTime.Transient)]
- public class MonthSalaryService : BaseService, IMonthSalaryService
+ [AppService(ServiceType = typeof(IPmsMonthSalaryService), ServiceLifetime = LifeTime.Transient)]
+ public class PmsMonthSalaryService : BaseService, IPmsMonthSalaryService
{
///
- /// 查询每月工资明细列表
+ /// 查询每月工资明细表列表
///
///
///
- public PagedInfo GetList(MonthSalaryQueryDto parm)
+ public PagedInfo GetList(PmsMonthSalaryQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
- //.OrderBy("RecordMonth asc")
+ //.OrderBy("RecordMonth desc")
.Where(predicate.ToExpression())
- .ToPage(parm);
+ .ToPage(parm);
return response;
}
@@ -36,7 +36,7 @@ namespace ZR.Service.BaseInfo
///
///
///
- public MonthSalary GetInfo(int Id)
+ public PmsMonthSalary GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
@@ -46,44 +46,44 @@ namespace ZR.Service.BaseInfo
}
///
- /// 添加每月工资明细
+ /// 添加每月工资明细表
///
///
///
- public MonthSalary AddMonthSalary(MonthSalary model)
+ public PmsMonthSalary AddPmsMonthSalary(PmsMonthSalary model)
{
return Insertable(model).ExecuteReturnEntity();
}
///
- /// 修改每月工资明细
+ /// 修改每月工资明细表
///
///
///
- public int UpdateMonthSalary(MonthSalary model)
+ public int UpdatePmsMonthSalary(PmsMonthSalary model)
{
return Update(model, true);
}
///
- /// 清空每月工资明细
+ /// 清空每月工资明细表
///
///
- public bool TruncateMonthSalary()
+ public bool TruncatePmsMonthSalary()
{
var newTableName = $"pms_month_salary_{DateTime.Now:yyyyMMdd}";
if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
{
Context.DbMaintenance.BackupTable("pms_month_salary", newTableName);
}
-
+
return Truncate();
}
///
- /// 导入每月工资明细
+ /// 导入每月工资明细表
///
///
- public (string, object, object) ImportMonthSalary(List list)
+ public (string, object, object) ImportPmsMonthSalary(List list)
{
var x = Context.Storageable(list)
.SplitInsert(it => !it.Any())
@@ -92,7 +92,7 @@ namespace ZR.Service.BaseInfo
.ToStorage();
var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
- string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
Console.WriteLine(msg);
//输出错误信息
@@ -109,17 +109,17 @@ namespace ZR.Service.BaseInfo
}
///
- /// 导出每月工资明细
+ /// 导出每月工资明细表
///
///
///
- public PagedInfo ExportList(MonthSalaryQueryDto parm)
+ public PagedInfo ExportList(PmsMonthSalaryQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
- .Select((it) => new MonthSalaryDto()
+ .Select((it) => new PmsMonthSalaryDto()
{
}, true)
.ToPage(parm);
@@ -132,10 +132,14 @@ namespace ZR.Service.BaseInfo
///
///
///
- private static Expressionable QueryExp(MonthSalaryQueryDto parm)
+ private static Expressionable QueryExp(PmsMonthSalaryQueryDto parm)
{
- var predicate = Expressionable.Create();
+ var predicate = Expressionable.Create();
+ DateTime monthEnd = Convert.ToDateTime(parm.RecordMonth).AddMonths(1);
+ predicate = predicate.AndIF(parm.RecordMonth != null, it => it.RecordMonth >= parm.RecordMonth && it.RecordMonth < monthEnd);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.EmployeeCode), it => it.EmployeeCode == parm.EmployeeCode);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.EmployeeName), it => it.EmployeeName == parm.EmployeeName);
return predicate;
}
}
diff --git a/ZR.Service/Report/AccountingDetailsService.cs b/ZR.Service/Report/AccountingDetailsService.cs
new file mode 100644
index 00000000..6424ac28
--- /dev/null
+++ b/ZR.Service/Report/AccountingDetailsService.cs
@@ -0,0 +1,115 @@
+using Infrastructure;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using Microsoft.AspNetCore.Http;
+using ZR.Model.BaseInfo;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.Report.Dto;
+using ZR.Model.System;
+using ZR.Repository;
+using ZR.Service.BaseInfo.IBaseInfoService;
+using ZR.Service.Report.IReportService;
+using ZR.ServiceCore.Services;
+
+namespace ZR.Service.Report
+{
+
+ ///
+ /// 核算明细
+ ///
+ [AppService(ServiceType = typeof(IAccountingDetailsService), ServiceLifetime = LifeTime.Transient)]
+ public class AccountingDetailsService : BaseService, IAccountingDetailsService
+ {
+ private readonly ISysConfigService sysConfig;
+
+ public AccountingDetailsService(ISysConfigService sysConfigService)
+ {
+ this.sysConfig = sysConfigService;
+ }
+
+ ///
+ /// 导出每月工资明细
+ ///
+ ///
+ ///
+ public PagedInfo ExportList(AccountingDetailsQueryDto parm)
+ {
+ var response = GetList(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 查询每月工资明细列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(AccountingDetailsQueryDto parm)
+ {
+
+ //省养老保险单位缴纳比例
+ var ProvincePensionRateCompany = sysConfig.GetSysConfigByKey("ProvincePensionRateCompany");
+ decimal ProvincePensionRateCompanyM = 0.16m;
+ if (ProvincePensionRateCompany!=null)
+ {
+ decimal.TryParse( ProvincePensionRateCompany.ConfigValue,out ProvincePensionRateCompanyM) ;
+ }
+ //省养老保险个人缴纳比例
+ var ProvincePensionRatePersonal = sysConfig.GetSysConfigByKey("ProvincePensionRatePersonal");
+ decimal ProvincePensionRatePersonalM = 0.08m;
+ if (ProvincePensionRatePersonal != null)
+ {
+ decimal.TryParse(ProvincePensionRatePersonal.ConfigValue, out ProvincePensionRatePersonalM);
+ }
+ var userName = HttpContextExtension.GetName(App.HttpContext);
+
+ var predicate = QueryExp(parm);
+
+ var list = Queryable()
+ .LeftJoin((m, e) => m.EmployeeId == e.Id)
+ .LeftJoin((m, e, d) => e.DeptId == d.DeptId)
+ .WhereIF(parm.BeginRecordMonth != null, m => m.RecordMonth >= parm.BeginRecordMonth)
+ .WhereIF(parm.BeginRecordMonth != null, m => m.RecordMonth >= parm.BeginRecordMonth)
+ .WhereIF(!string.IsNullOrEmpty(parm.EmployeeCode), m => m.EmployeeCode == parm.EmployeeCode)
+ .WhereIF(!string.IsNullOrEmpty(parm.EmployeeName), m => m.EmployeeName == parm.EmployeeName)
+ .Select((m, e, d) => new AccountingDetailsDto
+ {
+ MonthlySalary = m.MonthlySalary + m.SalarySupplement,
+ MonthlyPerformance = m.AdvancePerformancePay + m.PerformanceSupplement + m.SettlementPerformancePay,
+ OtherPayable = m.AgentBonus +m.AgentOther + m.OtherSupplement + m.FixedPayment
+ + m.PieceworkWage + m.ProjectPreset + m.OtherIncome + m.BalancePayableAVG,
+ //月应发小计=所有项的和
+ TotalMonthlyPay = m.MonthlySalary + m.SalarySupplement
+ + m.AdvancePerformancePay + m.PerformanceSupplement + m.SettlementPerformancePay
+ + m.AgentBonus + m.AgentOther + m.OtherSupplement + m.FixedPayment
+ + m.PieceworkWage + m.ProjectPreset + m.OtherIncome + m.BalancePayableAVG
+ + m.SeniorityAllowance + m.ComprehensiveAllowance + m.OvertimeAllowance
+ + m.ComputerAllowance + m.KeyStaffAllowance + m.CertificateAllowance + m.PhoneAllowance + m.TransportAllowance
+ + m.LivingAllowance + m.HousingAllowance + m.MarketDevelopmentBonus + m.ProjectDeduction
+ + m.AttendanceDeduction + m.LunchAllowance + m.WomenAllowance,
+ PensionInsurance = SqlFunc.Round(m.ProvincePensionBase * ProvincePensionRatePersonalM, 2) + m.SupplementProvincePensionPersonal
+ }, true)
+ .ToPage(parm);
+
+ return list;
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(AccountingDetailsQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+
+ predicate = predicate.AndIF(parm.BeginRecordMonth != null, it => it.RecordMonth >= parm.BeginRecordMonth);
+ predicate = predicate.AndIF(parm.EndRecordMonth != null, it => it.RecordMonth <= parm.EndRecordMonth);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.EmployeeCode), it => it.EmployeeCode == parm.EmployeeCode);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.EmployeeName), it => it.EmployeeName == parm.EmployeeName);
+ return predicate;
+ }
+ }
+}
diff --git a/ZR.Service/Report/IReportService/IAccountingDetailsService.cs b/ZR.Service/Report/IReportService/IAccountingDetailsService.cs
new file mode 100644
index 00000000..8d78f99b
--- /dev/null
+++ b/ZR.Service/Report/IReportService/IAccountingDetailsService.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZR.Model.BaseInfo;
+using ZR.Model.BaseInfo.Dto;
+using ZR.Model.Report.Dto;
+
+namespace ZR.Service.Report.IReportService
+{
+ public interface IAccountingDetailsService : IBaseService
+ {
+
+ PagedInfo GetList(AccountingDetailsQueryDto parm);
+ PagedInfo ExportList(AccountingDetailsQueryDto parm);
+ }
+}
--
Gitee
From 47a36f4997b78f88db9d4988ff344d8bcf239526 Mon Sep 17 00:00:00 2001
From: sl c <790825059@qq.com>
Date: Wed, 2 Jul 2025 17:15:53 +0800
Subject: [PATCH 03/29] 1
---
ZR.Admin.WebApi/appsettings.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index 4fa3a808..2b703b3e 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -38,7 +38,7 @@
"ShowDbLog": true, //是否打印db日志
"InitDb": false, //是否初始化db
"DemoMode": false, //是否演示模式
- "SingleLogin": false, //是否允许多设备/浏览器登录
+ "SingleLogin": false, //是否允许多设备/浏览器登录
"workId": 1, //雪花id唯一数字
"sqlExecutionTime": 5, //Sql执行时间超过多少秒记录日志并警报
"Upload": {
--
Gitee
From bd9d01f01f1696ea2e724bc777911105943a198b Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Tue, 22 Jul 2025 10:34:06 +0800
Subject: [PATCH 04/29] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=E8=8F=9C=E5=8D=95---=E7=9F=A5=E8=AF=86=E5=BA=93=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Knowledge/ZskQdRawdataController.cs | 269 +++++++++++
ZR.Admin.WebApi/Program.cs | 11 +-
.../PublishProfiles/FolderProfile1.pubxml | 21 +
ZR.Admin.WebApi/appsettings.json | 2 +-
.../wwwroot/ImportTemplate/ZskQdRawdata.xlsx | Bin 0 -> 4490 bytes
.../ImportTemplate/ZskSgsRequired.xlsx | Bin 0 -> 4445 bytes
ZR.Model/Knowledge/Dto/ZskQdRawdataDto.cs | 73 +++
.../Dto/ZskQdRawdataLeftSgsRequiredDto.cs | 101 ++++
ZR.Model/Knowledge/Dto/ZskSgsRequiredDto.cs | 60 +++
ZR.Model/Knowledge/ZskQdRawdata.cs | 74 +++
ZR.Model/Knowledge/ZskSgsRequired.cs | 62 +++
.../IKnowledgeService/IZskQdRawdataService.cs | 28 ++
.../IZskSgsRequiredService.cs | 25 +
ZR.Service/Knowledge/ZskQdRawdataService.cs | 444 ++++++++++++++++++
ZR.Service/Knowledge/ZskSgsRequiredService.cs | 162 +++++++
15 files changed, 1330 insertions(+), 2 deletions(-)
create mode 100644 ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
create mode 100644 ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
create mode 100644 ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskQdRawdata.xlsx
create mode 100644 ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskSgsRequired.xlsx
create mode 100644 ZR.Model/Knowledge/Dto/ZskQdRawdataDto.cs
create mode 100644 ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
create mode 100644 ZR.Model/Knowledge/Dto/ZskSgsRequiredDto.cs
create mode 100644 ZR.Model/Knowledge/ZskQdRawdata.cs
create mode 100644 ZR.Model/Knowledge/ZskSgsRequired.cs
create mode 100644 ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
create mode 100644 ZR.Service/Knowledge/IKnowledgeService/IZskSgsRequiredService.cs
create mode 100644 ZR.Service/Knowledge/ZskQdRawdataService.cs
create mode 100644 ZR.Service/Knowledge/ZskSgsRequiredService.cs
diff --git a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
new file mode 100644
index 00000000..14a41ccf
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
@@ -0,0 +1,269 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.Knowledge.Dto;
+using ZR.Model.Knowledge;
+using ZR.Service.Knowledge.IKnowledgeService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+using ZR.Service.Knowledge;
+
+//创建时间:2025-07-07
+namespace ZR.Admin.WebApi.Controllers.Knowledge
+{
+ ///
+ /// 订单知识库
+ ///
+ [Verify]
+ [Route("knowledge/ZskQdRawdata")]
+ public class ZskQdRawdataController : BaseController
+ {
+ ///
+ /// 订单知识库接口
+ ///
+ private readonly IZskQdRawdataService _ZskQdRawdataService;
+ private readonly IZskSgsRequiredService _ZskSgsRequiredService;
+
+ public ZskQdRawdataController(IZskQdRawdataService ZskQdRawdataService, IZskSgsRequiredService ZskSgsRequiredService)
+ {
+ _ZskQdRawdataService = ZskQdRawdataService;
+ _ZskSgsRequiredService = ZskSgsRequiredService;
+ }
+
+ ///
+ /// 查询订单知识库列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:list")]
+ //public IActionResult QueryZskQdRawdata([FromQuery] ZskQdRawdataQueryDto parm)
+ //{
+ // var response = _ZskQdRawdataService.GetList(parm);
+ // return SUCCESS(response);
+ //}
+
+
+ public IActionResult QueryZskQdRawdata([FromQuery] ZskQdRawdataLeftSgsRequiredQueryDto parm)
+ {
+ var response = _ZskQdRawdataService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 查询订单知识库详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:query")]
+ public IActionResult GetZskQdRawdata(long Id)
+ {
+ var response = _ZskQdRawdataService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加订单知识库
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:add")]
+ [Log(Title = "订单知识库", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddZskQdRawdata([FromBody] ZskQdRawdataDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _ZskQdRawdataService.AddZskQdRawdata(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新订单知识库
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:edit")]
+ [Log(Title = "订单知识库", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateZskQdRawdata([FromBody] ZskQdRawdataDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _ZskQdRawdataService.UpdateZskQdRawdata(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除订单知识库
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:delete")]
+ [Log(Title = "订单知识库", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteZskQdRawdata([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_ZskQdRawdataService.Delete(idArr));
+ }
+
+ ///
+ /// 导出订单知识库
+ ///
+ ///
+ [Log(Title = "订单知识库", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:export")]
+ //public IActionResult Export([FromQuery] ZskQdRawdataQueryDto parm)
+ //{
+ // parm.PageNum = 1;
+ // parm.PageSize = 100000;
+ // var list = _ZskQdRawdataService.ExportList(parm).Result;
+ // if (list == null || list.Count <= 0)
+ // {
+ // return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ // }
+ // var result = ExportExcelMini(list, "订单知识库", "订单知识库");
+ // return ExportExcel(result.Item2, result.Item1);
+ //}
+
+ public IActionResult Export([FromQuery] ZskQdRawdataQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _ZskQdRawdataService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "订单知识库", "订单知识库");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+
+ ///
+ /// 清空订单知识库
+ ///
+ ///
+ [Log(Title = "订单知识库", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_ZskQdRawdataService.TruncateZskQdRawdata());
+ }
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "订单知识库导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ //List list = new();
+ //using (var stream = formFile.OpenReadStream())
+ //{
+ // list = stream.Query(startCell: "A1").ToList();
+ //}
+
+ //return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>()));
+
+
+ try
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>()));
+ }
+ catch (Exception ex)
+ {
+
+ var message = ex.Message;
+
+ return ToResponse(ResultCode.FAIL, message);
+
+ }
+ }
+
+ ///
+ /// 订单知识库导入模板下载
+ ///
+ ///
+ [HttpGet("importTemplate")]
+ [Log(Title = "订单知识库模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "ZskQdRawdata");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importXqData")]
+ [Log(Title = "省公司每日需求表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "zsksgsrequired:import")]
+ public IActionResult ImportXqData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ //List list = new();
+ //using (var stream = formFile.OpenReadStream())
+ //{
+ // list = stream.Query(startCell: "A1").ToList();
+ //}
+
+ //return SUCCESS(_ZskSgsRequiredService.ImportZskSgsRequired(list.Adapt>()));
+
+ try
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_ZskSgsRequiredService.ImportZskSgsRequired(list.Adapt>()));
+ }
+ catch (Exception ex)
+ {
+ var message = ex.Message;
+
+ return ToResponse(ResultCode.FAIL, message);
+
+
+ }
+ }
+
+ ///
+ /// 省公司每日需求表导入模板下载
+ ///
+ ///
+ [HttpGet("importXqTemplate")]
+ [Log(Title = "省公司每日需求表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportXqTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "ZskSgsRequired");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs
index 748191d8..9e331d8a 100644
--- a/ZR.Admin.WebApi/Program.cs
+++ b/ZR.Admin.WebApi/Program.cs
@@ -1,4 +1,4 @@
-using AspNetCoreRateLimit;
+using AspNetCoreRateLimit;
using Infrastructure.Converter;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Localization;
@@ -88,6 +88,13 @@ builder.Services.AddLogo();
builder.Services.AddLocalization(options => options.ResourcesPath = "");
var app = builder.Build();
+app.UsePathBase("/dev-api"); // 全局添加/dev-api前缀
+//app.UsePathBase(""); // 清除应用程序路径前缀
+//app.MapControllers();
+app.UseStaticFiles(); // 启用静态文件服务,访问wwwroot下的文件
+app.MapControllers(); // 处理API请求
+
+
InternalApp.ServiceProvider = app.Services;
InternalApp.Configuration = builder.Configuration;
InternalApp.WebHostEnvironment = app.Environment;
@@ -153,6 +160,8 @@ if (builder.Environment.IsProduction())
//初始化字典数据
app.UseInit();
+
+
//使用swagger
app.UseSwagger();
//启用客户端IP限制速率
diff --git a/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml b/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
new file mode 100644
index 00000000..4724941d
--- /dev/null
+++ b/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
@@ -0,0 +1,21 @@
+
+
+
+
+ true
+ false
+ true
+ Release
+ Any CPU
+ FileSystem
+ D:\中通服\发布\知识库API
+ FileSystem
+ <_TargetId>Folder
+
+ net8.0
+ e5497bb4-b0c1-4794-9fae-163f626ec399
+ false
+
+
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index 2b703b3e..aa628bbe 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -1,4 +1,4 @@
-{
+{
"Logging": {
"LogLevel": {
"Default": "Information",
diff --git a/ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskQdRawdata.xlsx b/ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskQdRawdata.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..6ff473de30e973b653355b809bf359994a40b6d9
GIT binary patch
literal 4490
zcmZ`-1z3}97ak=sgwfKefHWfA9nvK+x)~ukKm{pD87-}}gft3>Fp!v(Aj+f_5NQwv
zDfwU2|HBXcw(Hru_d4&nuifW4&wb9Bjs_MsIS7P@2huQEG|g{dokM~^ATA6L2n<{;
zz3gG$e7q;0aYF*`olN8*@5?1yrMl(RQVhCHntkHEFytA81vepxwCqZSgi$V^$|9nv
z;9DcdM|)SZ%{Di+nndprJb@<24sT9%sl6{4A0Qc;^JK0npS$jmPEbEtznagG?gsrs!*fC#;%`3p+
z<%48~5d*QrgMIMiKsx_oYNNwi
znFKJ*2Nu8|1c&i?J6U_#+v)pwIlDW0^TOR=LOsay9sGo#c0-n9XH4R79eoDXYalGe
zN@vzCzi6m|!yHnzqCNItYWK)ln~P%iMVX0cM2NZdwtE1`@#RGG=isjf93qJTWuSym5&jy;HS+G69
zi#?%>$1QKmO?R>W#^F%+(|`nE$t4DX&i~@z69BXS@#9yGr`%ujlRwX^_piP=l$1tP
ze0d35A@!1G2pZwHa!JePBRX--eaRvo%n)rXD;;g?f7!l*LLth00WHnGxb6S_^U=za
z`T9z+<|6egoO+VtF#`E4$zo*oG3mwd8==~ccX8Du-Z*qE*(*Jga~p`rZRC6$=Ul8?
zSQqnFkr5Rc)A%vM;HtpBYMJ0jd_LQlQRT;B(R-FkSFJIJh=?KT_-Mdms1)@FvAZ}3w3iOtgM-D8svw6sasx1+jTZaBNtGnFA?PGSD<1LHc@WZi|*y*rEqDY1)
z>ulo5R>ElO?7PO(5Zh8x?{2Z>nJT06nl%V!sZES3mkpE#Xs#quUCF3mt45_YjE6_8
zk3LhnKIU`3O3ybt!2l`gtZ!A!c5PJfu>#BO4*bp|p2C-pXx#Y;*WAGiaVdI`?@cu*
zfvAo7oDf)z^Jq}7vo*xdIk*xF!_&KsV7)ZQ6da~EqD8?~POljn{i--|z+H>xUHA^=
z$OV%PhuS(4Q{S=YSy0EKC$OarCtt7@1N=xcQ*%Lm34+ryawwEM;dDE*t5Qg2V1E16
zstMzWbV0V|xL+WYu!+%Vs8JSbDLKTv;$nNlksY$p+(!a3xQ}EU)yPm7hp`wu2@L;0j
z?jBA4Fg7c$b9f@p7G>83R$|m%?RmXPEFVPn;1$^zDVBrgXtu>EVa4@+Misj~f&$X}
z8qEz%stHgbwls?&VO3fMKX9Ad78*ST9)2+xA^b}BB1KDj2byHKQ4)r0)hT#^`eBZh
zos+AynnE*olt8n7VN*U&e`!=So#3TzRb4H@mZHVmOMQB@MisnK!c^CEdapt`FS$RS
z&-SHUHRxB|L+%8NRtrB|XCGpqN=YcO<{NIxh)g0V!#g(4z~h=u+uzKKX}iMNm^Swu
zg^X(zd+H{!8B8GO>SMUuTwQP{^-z0f6&E-|e=5a_g4;p`CJ2-Ym@oW1W&R#suHH`e
z_CDT#XaE<16Sc^GGo$@lmJYNTyx_I**wxyW+Xp*?<7F6rv^3*XD%2^cZ))wXv@=V_
zIa+>eNIoeW&FI|-#e&|1&7q2^ofmCZk5>>~Ssl6KD^rW>L2J7cEuvz1nU9-@O0Bx_
zzg{b4Pl8wt<>P$d$*SgFHKP{I$ttriPpRBw>Bby2@0l}k=*Wi@RTSSSkAl7+s}FC@
zTtTNascvH1_t7-C*}Ru*c*(mH?!cDp9B++_FE3@mc9CfAoy%B8eEJ3D2oAilCC!g4
zALN+kxFA$PUSuKG6X90^{p9Y-CPNe9ik_*&^&zqvv1nvkI}X_;W`vn}zK;@7P67jJ
z>*Boird`cE#9E#nQ%(bnrmREXxF%{V8^SGj`5W`+YW(z4$Y|;j#Pbfe@WX*m`m0C_
zwqY+pRk4+JPacsXD86qs1&+IJNiYs?A|n`+>P^0DD!Jltcrrd~@`%1OE6yFmkD<*8
zLG(w)*19E*@n{;zB>G;L9}HW9VPcB}cDeBp2~50kiDXp~#;#nQfp$=?POizJLoTB(
z^ksbm)1r>;BW`Et?Q0syWPEXTOg8G@*_nnYLhR;1i_4@KoMb)c
zT#KuMAKU}a_4cQ?V_0p&;@gG~2g^-fO|Gq1M8F#sprr?J}fv`ihUV6NTOo3v&(5k;5
zFGm#04*|7H;0L2up)m|`0_5LkiG{0WZCl)$yJjaOzp=H=8ZKgN2eh_W6EiSmzfr1z
z!%VT$1hlj$W6d&%sjzw2$o4p3Tc{WXOXI0{DGDkj<8<vK3!J4tk*oP#s=A5`6wo40CqG1XxIF6Jm{$u&7kaRpin^kP2jS2kH^SlAm#?x+p{|C>Ty8$Qb-b}qA~Tvj
zDe_3^J;rnvCEXS`^Jnq)8g38E*$O7yYaK%E8H7Z(mSKMES)*^V(c*MgT=pB!o&*%c
zz3tU9_cm3$Lg}h#%t)@CIF@~=GI4u9E)gl_&-#TzKJDV55b9?Ci-l#5i`=^C#-|fl
z*E==l^;6f>FThwYziy!FKJJ~KN$-&XNd2i$@C@x{5(XO&
z57!fYjzeg=hw(!qc2fg!U3a<=AdGNSaTaWX?1Chb(P0>j{p(cir^LVr0@DVlpNPkF
z)`r^ljo^(0l#`bNV@e%i3^#75pO^f*D`BoF+UM!+O8a^YS}HH{vQfJ!EK>Ii@X{Aq
zXAW;7nsD3%O~pOngc;k8%Y_DH(k)9auauknwlf1qB`-U6R-}Q#5gu0i#QfY0O?X#q
zg!W?{pVsnMWJ~*IkqLkGSKt=uo%L-)Y`nlSk(IOtBGH(6L}v)f}Tnl?{(A
z)47fP=quOs%C<&}S-pJ1?6dmfPBn5{>_`*d0rY!)h{)CHuWJnC=SOH{Q11$qxaK4z
zBlu@XKfJ@v-0vNHI?T-h`o
zy*ApVLvbPT`~Gs06XPJkq0wPe<$Y?#OhGNqu(FppjMFAmN}8h>!FXDkTP1F{_QS3R
zlbF@+J@^hZ(|^W~F-+~jEg*guaX=t4Abw^F9_~K&?mm_V0iO2W(32FaPtni<^dz#1
zG$59SiW2W(F*lqW1OGZJnKr3@5G$?U&vV$yo!1I2B`^M~@a(z4l~MdBX{inR+!_
z9FCsgeu
zh3XWg5&tZ?zm~1DfM+HD6tI=xAHe??fV0kL1@Y8*68P@}2-1JZ<5`@u!f=X12MEbu
XWI{&+=iJFd1i-rtP~(?GCwKn?vr}$2
literal 0
HcmV?d00001
diff --git a/ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskSgsRequired.xlsx b/ZR.Admin.WebApi/wwwroot/ImportTemplate/ZskSgsRequired.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..5869c4de09c889266799c7298cf3c6909b8abc1d
GIT binary patch
literal 4445
zcmZ`-1z3}97ajsicSyH@gn)oJN=iz)yAfmzq)TaJ10^H`Mo6bLN(rNp7+^4JlsJ(F
z1p$$NsQ-r_`fb;{ckgwsb6>m9bDsNt&a~CBai{6fO=T%Wa
zG824n?D%M33}&{uso5y;h~T+J+>O!AnQqnjyvZSQ#G*S}W!a*!V=6)2oSlxuc)Dc-
zk7HqudN0J55amJAl=5hYGf_MyOQr9nZ1lIOc5;CAQpcCHkFuA|R)|__{BfXPNX^R$
zBg%#;4I+nPNQVa=`Y)Sq;<@=o(z@hNZyY>sVS2w_tc7RG*mcMM8-~mAF*ZQ^UrcSa
zIVut{40ACThCjd$bj8!j#>2s0&&$IZeA`pd&lM!v3n%UnA_BAx^lL=fR`av=Ql}8atbqRF-1s4L$z023rT
zjyoZ`Hw=B;{I1M&5BqN%zUh1%lEg%^NC5!iUmU#rK@LBD{HoCm__Yw#%j`PesvtyS
z3Q6JRWgLa%OBx}_c%PL^nzkR132WeG%ZG%_5ThG15If(?4&~Ge(dJ7?8E*8B@AvJa
zmFMs4Dy}ybs9ojNl>$PAbJ-tXr*wd(7W&-{)4KiOf~w?O$L?hZr4l*Up~$QT-e6Fx8
zAjJD<{{8pJ_HAf22>@e
z3R3GXv3KwI6CuJW!`{^C$#B2~r~<33;?uVbd~H|v_zT;|?KLKw(Vl+a#+zeM;b@X5
z=4cxj>2xa*#0K`j2t{UBOySvc{nKovA+bhvJe%|;R^^?Ies#cNQIwjJVcu4?a%;GN
z!1V#9beTHn_Mmd_S9=kEX_<_#m2CEHw0`4xRy!T|oks%suS)2_LPTp|!ll?GU9#_u
z)&0WJ8}BniK-JD~0{fh8$n2eiE3mQLJ=+M@i!)6L!*$0rsrky7G{PVwg$YAoP5Oz5
zU7E3rCL4}5wdAJW<1aHTZWlZUEpIq^6KXR19ciR%EU7J%;Wm$b6Ma18bU(ejLR5C>
z{m#g$3CoyF9?WXeC%}TJk;M?vaKpk%3cGBXc9FSpzkja=rS0V3r366-qP+9v*5i1
ze)b;bO|z;$sJIW`4VI`9f4a_%V5UuqE3&yV+L#uVNKlG*Y?Ow_he|ov%!amIV6UkvFEsg^*6!*B%pUqvDPAJ%l|s$|0A=R^fQvtOnXj9N
zi>H%=gO?{pG%z>e6SaW7ozZgiJ#6-#=#cxBt&M;O^0nhdmcPRc^tMpLu|rNzWZi(QtNQ-OJHkl-eX9Ad_WGQ
zk#+F7HCyTfz@fNjbelCi%F8Wj-rk$NyzZhEm3J%`UI{ve;JLNMs~p>l9nb8bijQ!S
zq$Ow(%>=6JJ+wq0n!0+#9Ix^07TA2);R?4SRqY7U;SLR%0L>dXQeyS?sfOiP0_l{x
z9^B|glR@v*Aqp4Xh%`8ekLKjbb~;k{Mfru~wZ_
z+jP3gWtqj~h6lXKL2P2232J`BrXgkJy2NG%Mf#Iw+A1WWANNGdie%#g*1~HSQ)k|i
zj;`;5G#uQo_M0D0quxvn@9fQN42+i552Lu5GF~QiGq?eJ88S1ufrhVZ*HIoVo{X+-
z(eFsTS5vaSG^8vbv;xakfLHUbjn1c{*42tygYlayZkIsb`7Fe(d6~?l`+k-P*cAsJ
zFu8sI=z9NkwTX1h^OPp;N-Zsth26@5>ZY4w4_I2w9=5HMmOFAb?(BW|#7%WaMO;A&
zvft)g+o==tl`zC8+74cxj56$r%+~yZ5&yq*Eg)?f7LSP(V=j)LU2E@Q<9lLlSAM$s
zug4#~`@`Y&2jxh@gvbExlK8>MRSPI{tT5I0Ia2Ye8+OgEP2F=-QeQdS<_yqSJN~WB
zHl)nVu(wLpejrnv6k$zGni#V*Qd%4VPRe~A&{jWG!OCdnp)@tEl2Izv?wpdqvx59G
zVc;`Hm5e9GyL0F#*wn7JmbY@ZGzl~Grm{4?OIKC$0YaKS4O*ds|7zI#_*~nK7$Vm&
z(O=u}A40!ViABiW=@cTnF#XiCRtd99x{|N7
z!^N+IYO1{|$
zG`#J;MbuFWdysZ={DgHS5XUwZ-Hw`@`h2h%!8)`JvU3#iy97UyVC0>o5gDL|wx_Vi
z!0YR`%j;hxCsHR9Zlx?Fy3}asKeMD=K~-?Kt~4oI1T#pS157sxWfC4K4-HT-w%Yru
zb*+(_Bi`OWzl-;{A}d|40Gv53U)exKPErfc_K(Zym7BfC)b`g^FYAXZY+}k_j)|T$
zI_8*mQU+T$H=GhV3gle3)@Zw1!@vqz04XRCa=Wkg_n1ymPN2Gd^X62{
zvA9@s@-t+Q5r<j5tcUTAHwJ2R=T)rU5y@kV?7Bp7Ht*9W_5Jjl)F7eUe-8okrHkg(Z+eEoT9afUo?-%cs3OZfZ@gD@=EyUrh)V
z3&;06G0+3MBv8UMUqjBzFWjtqJUZr&EzCK*2g11@!fcXN=<)$gJV_znm#e;8M1HL2
zt$X>=-Xj*`$*;;VX~|$bY}s1Jslv_9Twpr<$DETaJq$e9(2FE0(
zYTIxFb_Dq@H-PLApb(w0C5^d2p?;afl{dq0514=OLq3#VsG!%
z;m2HW@eDc6#cHzNeQo=Yg7Nb!@>0?$qG83G<=T8JldWiLA
z-n?>i-G#fA?6a3IM8+c^YQ2spBh&Qn;t_^oDJ95}$JqhlbnNQy0Cu<^^
zI>T`7JI?=C3+o)!$$0i3<0)pzetZ2ktZJ+OJMrwacbfGH^Yw4D-&usSv(_oXGfV@W
zApA3VolQM^fILm5!t~uQMf>A8c^2iYp`W6>!t^!<Q3U{Ilf#>RM+3&no^YU;@EEfdAM3v&m-_@ih4v=I;zlk^Vy;&*GdFhEtpk
aqQA<7wmL3mJOBU)Fz-@~9A}c8JpB)vU2wbr
literal 0
HcmV?d00001
diff --git a/ZR.Model/Knowledge/Dto/ZskQdRawdataDto.cs b/ZR.Model/Knowledge/Dto/ZskQdRawdataDto.cs
new file mode 100644
index 00000000..0d1739d2
--- /dev/null
+++ b/ZR.Model/Knowledge/Dto/ZskQdRawdataDto.cs
@@ -0,0 +1,73 @@
+
+namespace ZR.Model.Knowledge.Dto
+{
+ ///
+ /// 订单知识库查询对象
+ ///
+ public class ZskQdRawdataQueryDto : PagerInfo
+ {
+ public string DataSource { get; set; }
+ public string OrderNumber { get; set; }
+ public string MaterialCode { get; set; }
+ public string MaterialName { get; set; }
+ public string SpecificationModel { get; set; }
+ public string Notes { get; set; }
+ }
+
+ ///
+ /// 订单知识库输入输出对象
+ ///
+ public class ZskQdRawdataDto
+ {
+ [ExcelColumn(Name = "主键,自增ID")]
+ [ExcelColumnName("主键,自增ID")]
+ public long Id { get; set; }
+
+ [ExcelColumn(Name = "数据来源")]
+ [ExcelColumnName("数据来源")]
+ public string DataSource { get; set; }
+
+ [ExcelColumn(Name = "订单号")]
+ [ExcelColumnName("订单号")]
+ public string OrderNumber { get; set; }
+
+ [ExcelColumn(Name = "物料编码")]
+ [ExcelColumnName("物料编码")]
+ public string MaterialCode { get; set; }
+
+ [ExcelColumn(Name = "物料名称")]
+ [ExcelColumnName("物料名称")]
+ public string MaterialName { get; set; }
+
+ [ExcelColumn(Name = "下单配置编码")]
+ [ExcelColumnName("下单配置编码")]
+ public string OrderConfigurationCode { get; set; }
+
+ [ExcelColumn(Name = "规格型号")]
+ [ExcelColumnName("规格型号")]
+ public string SpecificationModel { get; set; }
+
+ [ExcelColumn(Name = "计量单位")]
+ [ExcelColumnName("计量单位")]
+ public string UnitofMeasurement { get; set; }
+
+ [ExcelColumn(Name = "实际数量")]
+ [ExcelColumnName("实际数量")]
+ public string ActualQuantity { get; set; }
+
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelColumn(Name = "最近修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("最近修改时间")]
+ public DateTime? LastEditTime { get; set; }
+
+ [ExcelColumn(Name = "备注")]
+ [ExcelColumnName("备注")]
+ public string Notes { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs b/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
new file mode 100644
index 00000000..0d5e334b
--- /dev/null
+++ b/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZR.Model.Knowledge.Dto
+{
+
+ ///
+ /// 订单知识库查询对象
+ ///
+ public class ZskQdRawdataLeftSgsRequiredQueryDto : PagerInfo
+ {
+ public string DataSource { get; set; }
+ public string OrderNumber { get; set; }
+ public string MaterialCode { get; set; }
+ public string MaterialName { get; set; }
+ public string SpecificationModel { get; set; }
+ public string Notes { get; set; }
+ public decimal RequirementforIssuanceProportion { get; set; }
+ public string AlertStatus { get; set; }
+
+ }
+
+
+ ///
+ /// 订单知识库输入输出对象
+ ///
+
+ public class ZskQdRawdataLeftSgsRequiredDto
+ {
+ [ExcelColumn(Name = "主键,自增ID")]
+ [ExcelColumnName("主键,自增ID")]
+ public long Id { get; set; }
+
+ [ExcelColumn(Name = "数据来源")]
+ [ExcelColumnName("数据来源")]
+ public string DataSource { get; set; }
+
+ [ExcelColumn(Name = "订单号")]
+ [ExcelColumnName("订单号")]
+ public string OrderNumber { get; set; }
+
+ [ExcelColumn(Name = "物料编码")]
+ [ExcelColumnName("物料编码")]
+ public string MaterialCode { get; set; }
+
+ [ExcelColumn(Name = "物料名称")]
+ [ExcelColumnName("物料名称")]
+ public string MaterialName { get; set; }
+
+ [ExcelColumn(Name = "下单配置编码")]
+ [ExcelColumnName("下单配置编码")]
+ public string OrderConfigurationCode { get; set; }
+
+ [ExcelColumn(Name = "规格型号")]
+ [ExcelColumnName("规格型号")]
+ public string SpecificationModel { get; set; }
+
+ [ExcelColumn(Name = "计量单位")]
+ [ExcelColumnName("计量单位")]
+ public string UnitofMeasurement { get; set; }
+
+ [ExcelColumn(Name = "实际数量")]
+ [ExcelColumnName("实际数量")]
+ public string ActualQuantity { get; set; }
+
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelColumn(Name = "最近修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("最近修改时间")]
+ public DateTime? LastEditTime { get; set; }
+
+ [ExcelColumn(Name = "备注")]
+ [ExcelColumnName("备注")]
+ public string Notes { get; set; }
+
+ [ExcelColumnName("需求量")]
+ public int RequiredQuantity { get; set; }
+
+
+ [ExcelColumnName("已领用量")]
+ public int QuantityIssued { get; set; }
+
+
+ [ExcelColumnName("可领用量")]
+ public int QuantityUsed{ get; set; }
+
+
+
+ [ExcelColumnName("领用占比需求")]
+ public decimal RequirementforIssuanceProportion { get; set; }
+
+
+ [ExcelColumnName("预警状态")]
+ public string AlertStatus { get; set; }
+ }
+}
diff --git a/ZR.Model/Knowledge/Dto/ZskSgsRequiredDto.cs b/ZR.Model/Knowledge/Dto/ZskSgsRequiredDto.cs
new file mode 100644
index 00000000..122fd5ac
--- /dev/null
+++ b/ZR.Model/Knowledge/Dto/ZskSgsRequiredDto.cs
@@ -0,0 +1,60 @@
+
+namespace ZR.Model.Knowledge.Dto
+{
+ ///
+ /// 省公司每日需求表查询对象
+ ///
+ public class ZskSgsRequiredQueryDto : PagerInfo
+ {
+ public decimal RequirementforIssuanceProportion { get; set; }
+ }
+
+ ///
+ /// 省公司每日需求表输入输出对象
+ ///
+ public class ZskSgsRequiredDto
+ {
+ [ExcelColumn(Name = "主键,自增ID")]
+ [ExcelColumnName("主键,自增ID")]
+ public long Id { get; set; }
+
+ [ExcelColumn(Name = "物资名称")]
+ [ExcelColumnName("物资名称")]
+ public string MaterialName { get; set; }
+
+ [ExcelColumn(Name = "物料编码")]
+ [ExcelColumnName("物料编码")]
+ public string MaterialCode { get; set; }
+
+ [ExcelColumn(Name = "规格型号")]
+ [ExcelColumnName("规格型号")]
+ public string SpecificationModel { get; set; }
+
+ [ExcelColumn(Name = "需求量")]
+ [ExcelColumnName("需求量")]
+ public string RequiredQuantity { get; set; }
+
+ [ExcelColumn(Name = "已领用量")]
+ [ExcelColumnName("已领用量")]
+ public string QuantityIssued { get; set; }
+
+ [ExcelColumn(Name = "领用占比需求")]
+ [ExcelColumnName("领用占比需求")]
+ public decimal RequirementforIssuanceProportion { get; set; }
+
+ [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("创建时间")]
+ public DateTime? CreateTime { get; set; }
+
+ [ExcelColumn(Name = "最近修改时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)]
+ [ExcelColumnName("最近修改时间")]
+ public DateTime? LastEditTime { get; set; }
+
+ [ExcelColumn(Name = "备注")]
+ [ExcelColumnName("备注")]
+ public string Notes { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Knowledge/ZskQdRawdata.cs b/ZR.Model/Knowledge/ZskQdRawdata.cs
new file mode 100644
index 00000000..d17ec5ba
--- /dev/null
+++ b/ZR.Model/Knowledge/ZskQdRawdata.cs
@@ -0,0 +1,74 @@
+
+using static System.Runtime.InteropServices.JavaScript.JSType;
+
+namespace ZR.Model.Knowledge
+{
+ ///
+ /// 订单知识库
+ ///
+ [SugarTable("zsk_qd_rawdata")]
+ public class ZskQdRawdata
+ {
+ ///
+ /// 主键,自增ID
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public long Id { get; set; }
+
+ ///
+ /// 数据来源
+ ///
+ public string DataSource { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ public string OrderNumber { get; set; }
+
+ ///
+ /// 物料编码
+ ///
+ public string MaterialCode { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ public string MaterialName { get; set; }
+
+ ///
+ /// 下单配置编码
+ ///
+ public string OrderConfigurationCode { get; set; }
+
+ ///
+ /// 规格型号
+ ///
+ public string SpecificationModel { get; set; }
+
+ ///
+ /// 计量单位
+ ///
+ public string UnitofMeasurement { get; set; }
+
+ ///
+ /// 实际数量
+ ///
+ public string ActualQuantity { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 最近修改时间
+ ///
+ public DateTime? LastEditTime { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Notes { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Knowledge/ZskSgsRequired.cs b/ZR.Model/Knowledge/ZskSgsRequired.cs
new file mode 100644
index 00000000..9d790b15
--- /dev/null
+++ b/ZR.Model/Knowledge/ZskSgsRequired.cs
@@ -0,0 +1,62 @@
+
+namespace ZR.Model.Knowledge
+{
+ ///
+ /// 省公司每日需求表
+ ///
+ [SugarTable("zsk_sgs_required")]
+ public class ZskSgsRequired
+ {
+ ///
+ /// 主键,自增ID
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public long Id { get; set; }
+
+ ///
+ /// 物资名称
+ ///
+ public string MaterialName { get; set; }
+
+ ///
+ /// 物料编码
+ ///
+ public string MaterialCode { get; set; }
+
+ ///
+ /// 规格型号
+ ///
+ public string SpecificationModel { get; set; }
+
+ ///
+ /// 需求量
+ ///
+ public int RequiredQuantity { get; set; }
+
+ ///
+ /// 已领用量
+ ///
+ public int QuantityIssued { get; set; }
+
+ ///
+ /// 领用占比需求
+ ///
+ public decimal RequirementforIssuanceProportion { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 最近修改时间
+ ///
+ public DateTime? LastEditTime { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Notes { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs b/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
new file mode 100644
index 00000000..a35f236b
--- /dev/null
+++ b/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
@@ -0,0 +1,28 @@
+using ZR.Model.Knowledge.Dto;
+using ZR.Model.Knowledge;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+
+namespace ZR.Service.Knowledge.IKnowledgeService
+{
+ ///
+ /// 订单知识库service接口
+ ///
+ public interface IZskQdRawdataService : IBaseService
+ {
+ //PagedInfo GetList(ZskQdRawdataQueryDto parm);
+ PagedInfo GetList(ZskQdRawdataLeftSgsRequiredQueryDto parm);
+
+ ZskQdRawdata GetInfo(long Id);
+
+
+ ZskQdRawdata AddZskQdRawdata(ZskQdRawdata parm);
+ int UpdateZskQdRawdata(ZskQdRawdata parm);
+
+ bool TruncateZskQdRawdata();
+
+ (string, object, object) ImportZskQdRawdata(List list);
+
+ PagedInfo ExportList(ZskQdRawdataQueryDto parm);
+ //PagedInfo ExportList(ZskQdRawdataLeftSgsRequiredQueryDto parm);
+ }
+}
diff --git a/ZR.Service/Knowledge/IKnowledgeService/IZskSgsRequiredService.cs b/ZR.Service/Knowledge/IKnowledgeService/IZskSgsRequiredService.cs
new file mode 100644
index 00000000..5e4c9d53
--- /dev/null
+++ b/ZR.Service/Knowledge/IKnowledgeService/IZskSgsRequiredService.cs
@@ -0,0 +1,25 @@
+using ZR.Model.Knowledge.Dto;
+using ZR.Model.Knowledge;
+
+namespace ZR.Service.Knowledge.IKnowledgeService
+{
+ ///
+ /// 省公司每日需求表service接口
+ ///
+ public interface IZskSgsRequiredService : IBaseService
+ {
+ PagedInfo GetList(ZskSgsRequiredQueryDto parm);
+
+ ZskSgsRequired GetInfo(long Id);
+
+
+ ZskSgsRequired AddZskSgsRequired(ZskSgsRequired parm);
+ int UpdateZskSgsRequired(ZskSgsRequired parm);
+
+ bool TruncateZskSgsRequired();
+
+ (string, object, object) ImportZskSgsRequired(List list);
+
+ PagedInfo ExportList(ZskSgsRequiredQueryDto parm);
+ }
+}
diff --git a/ZR.Service/Knowledge/ZskQdRawdataService.cs b/ZR.Service/Knowledge/ZskQdRawdataService.cs
new file mode 100644
index 00000000..1c42c9d0
--- /dev/null
+++ b/ZR.Service/Knowledge/ZskQdRawdataService.cs
@@ -0,0 +1,444 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.Knowledge.Dto;
+using ZR.Model.Knowledge;
+using ZR.Repository;
+using ZR.Service.Knowledge.IKnowledgeService;
+using static System.Runtime.InteropServices.JavaScript.JSType;
+using ZR.Model.System;
+
+namespace ZR.Service.Knowledge
+{
+ ///
+ /// 订单知识库Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IZskQdRawdataService), ServiceLifetime = LifeTime.Transient)]
+ public class ZskQdRawdataService : BaseService, IZskQdRawdataService
+ {
+ ///
+ /// 查询订单知识库列表
+ ///
+ ///
+ ///
+ //public PagedInfo GetList(ZskQdRawdataQueryDto parm)
+ //{
+ // var predicate = QueryExp(parm);
+
+ // var response = Queryable()
+ // .Where(predicate.ToExpression())
+ // .ToPage(parm);
+
+ // return response;
+ //}
+
+ public PagedInfo GetList(ZskQdRawdataLeftSgsRequiredQueryDto parm)
+ {
+
+ try
+ {
+ var predicate = QueryExp(parm);
+
+ var query = Queryable()
+ .LeftJoin((raw, req) => raw.MaterialCode == req.MaterialCode) // 左连接条件
+ .Where(predicate.ToExpression());
+
+
+ var sql = query.ToSql(); // 获取生成的SQL
+
+ var response = query.Select((raw, req) => new ZskQdRawdataLeftSgsRequiredDto
+ {
+ //// 映射ZskQdRawdata属性
+ //Id = raw.Id,
+ //DataSource = raw.DataSource,
+ //// 映射ZskSgsRequired属性(可为空)
+ //RequiredId = req == null ? null : req.Id,
+ //RequiredField1 = req?.Field1
+ Id = raw.Id,
+ DataSource = raw.DataSource,
+ OrderNumber = raw.OrderNumber,
+ MaterialCode = raw.MaterialCode,
+ MaterialName = raw.MaterialName,
+ OrderConfigurationCode = raw.OrderConfigurationCode,
+ SpecificationModel = raw.SpecificationModel,
+ UnitofMeasurement = raw.UnitofMeasurement,
+ ActualQuantity = raw.ActualQuantity,
+ CreateTime = raw.CreateTime,
+ LastEditTime = raw.LastEditTime,
+ Notes = raw.Notes,
+ //RequiredQuantity = req.RequiredQuantity,
+ //QuantityIssued = req.QuantityIssued,
+ //QuantityUsed = (req.RequiredQuantity - req.QuantityIssued).ToString(),
+ //RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
+ //AlertStatus =
+ // 映射ZskSgsRequired属性(可为空)
+ RequiredQuantity = req.RequiredQuantity,
+ QuantityIssued = req.QuantityIssued,
+ QuantityUsed = req.RequiredQuantity - req.QuantityIssued,
+ RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
+ AlertStatus =SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 80,"绿色",SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 100, "橙色","")))
+ //EndOrgName = SqlFunc.IF(_.EndOrgCode == "510117").Return("四川委托代销库").ElseIF(_.EndOrgCode == "851A0050").Return("四川市州临时库").ElseIF(_.EndOrgCode == "851A0001").Return("四川省天翼总仓").ElseIF(_.EndOrgCode == "851A0052").Return("四川强商渠道库").End("四川省天翼总仓")
+ ////根据比例设置预警状态
+ ///
+
+
+ //AlertStatus = SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "") ,//移除百分号
+
+ // // 核心修改:在 Select 中直接计算 AlertStatus
+ // AlertStatus = SqlFunc.IIF(
+ // req == null, // 处理右表为 null 的情况
+ // "绿色",
+ // SqlFunc.IIF(
+ // // 移除百分号并转换为 decimal 比较
+ // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) < 80,
+ // "绿色",
+ // SqlFunc.IIF(
+ // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) > 100,
+ // "红色",
+ // "橙色" // 80-100 之间为橙色
+ // )
+ // )
+ //)
+
+// AlertStatus = SqlFunc.IIF(
+// req == null,
+// "",
+// SqlFunc.IIF(
+// // 使用 LessThan 方法进行数值比较
+// SqlFunc.LessThan(
+// SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
+// "80"
+// ),
+// "绿色",
+// SqlFunc.IIF(
+// SqlFunc.LessThan(
+// SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
+// "100"
+// ),
+// "橙色",
+// "红色"
+// )
+// )
+//)
+
+ }).MergeTable();
+ // .Mapper(_it =>
+ //{
+
+ // if (decimal.TryParse(_it.AlertStatus, out decimal intValue))
+ // {
+ // if (intValue < 80)
+ // {
+ // _it.AlertStatus = "绿色";
+ // }
+ // else if (intValue > 100)
+ // {
+ // _it.AlertStatus = "红色";
+ // }
+ // else
+ // {
+ // _it.AlertStatus = "橙色";
+ // }
+ // }
+ // else
+ // {
+ // // 转换失败,处理错误(如设置默认值)
+ // _it.AlertStatus = "";
+ // }
+
+ //});
+
+ if (!string.IsNullOrEmpty(parm.AlertStatus))
+ {
+ var sq = response.Where(x => x.AlertStatus == parm.AlertStatus);
+
+ var m1 = sq.ToSql();
+
+ return sq.ToPage(parm);
+
+
+ }
+ else
+ {
+ return response.ToPage(parm);
+ }
+
+
+ }
+ catch (Exception ex)
+ {
+ var m =ex.Message;
+ return null;
+
+ }
+
+
+
+
+ }
+
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public ZskQdRawdata GetInfo(long Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加订单知识库
+ ///
+ ///
+ ///
+ public ZskQdRawdata AddZskQdRawdata(ZskQdRawdata model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改订单知识库
+ ///
+ ///
+ ///
+ public int UpdateZskQdRawdata(ZskQdRawdata model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 清空订单知识库
+ ///
+ ///
+ public bool TruncateZskQdRawdata()
+ {
+ var newTableName = $"zsk_qd_rawdata_{DateTime.Now:yyyyMMdd}";
+ if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ {
+ Context.DbMaintenance.BackupTable("zsk_qd_rawdata", newTableName);
+ }
+
+ return Truncate();
+ }
+ ///
+ /// 导入订单知识库
+ ///
+ ///
+ public (string, object, object) ImportZskQdRawdata(List list)
+ {
+
+ // var x = Context.Storageable(list)
+ //.SplitInsert(it => !it.Any())
+ ////.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
+ //.ToStorage();
+ // var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ // string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ // Console.WriteLine(msg);
+
+ // //输出错误信息
+ // foreach (var item in x.ErrorList)
+ // {
+ // Console.WriteLine("错误" + item.StorageMessage);
+ // }
+ // foreach (var item in x.IgnoreList)
+ // {
+ // Console.WriteLine("忽略" + item.StorageMessage);
+ // }
+
+ // return (msg, x.ErrorList, x.IgnoreList);
+
+
+
+ try
+ {
+
+
+
+ //// 定义SQL语句
+ //var sql = "INSERT INTO Users (Name, Age) VALUES (@Name, @Age)";
+
+ //// 定义参数(使用SqlSugar的SugarParameter类)
+ //var parameters = new SugarParameter[]
+ //{
+ // new SugarParameter("@Name", "张三"),
+ // new SugarParameter("@Age", 25)
+ //};
+
+ //// 将SQL和参数添加到执行队列
+ //Context.Ado.ExecuteCommand(sql, parameters);
+
+
+ #region 将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ var parameter = new SugarParameter[] { };
+
+ var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata";
+
+ var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ if (insert_sum > 0)
+ {
+
+ var del_sql = "DELETE FROM zsk_qd_rawdata";
+
+ var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
+ }
+ #endregion
+
+
+
+
+ var x = Context.Storageable(list)
+ .SplitInsert(it => !it.Any())
+ //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})指定插入列
+ .ToStorage();
+ var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ Console.WriteLine(msg);
+
+ //输出错误信息
+ foreach (var item in x.ErrorList)
+ {
+ Console.WriteLine("错误" + item.StorageMessage);
+ }
+ foreach (var item in x.IgnoreList)
+ {
+ Console.WriteLine("忽略" + item.StorageMessage);
+ }
+
+
+
+ return (msg, x.ErrorList, x.IgnoreList);
+
+ }
+ catch (Exception ex)
+ {
+ var m = ex.Message;
+ return (ex.Message, ex, ex.Source);
+ }
+ }
+
+ /////
+ ///// 导出订单知识库
+ /////
+ /////
+ /////
+ //public PagedInfo ExportList(ZskQdRawdataQueryDto parm)
+ //{
+ // var predicate = QueryExp(parm);
+
+ // var response = Queryable()
+ // .Where(predicate.ToExpression())
+ // .Select((it) => new ZskQdRawdataDto()
+ // {
+ // }, true)
+ // .ToPage(parm);
+
+ // return response;
+ //}
+
+ public PagedInfo ExportList(ZskQdRawdataQueryDto parm)
+ {
+ var predicate = QueryExp1(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .Select((it) => new ZskQdRawdataDto()
+ {
+ }, true)
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp1(ZskQdRawdataQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DataSource), it => it.DataSource.Contains(parm.DataSource));
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber), it => it.OrderNumber == parm.OrderNumber);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), it => it.MaterialCode == parm.MaterialCode);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName), it => it.MaterialName.Contains(parm.MaterialName));
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.SpecificationModel), it => it.SpecificationModel == parm.SpecificationModel);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Notes), it => it.Notes.Contains(parm.Notes));
+ return predicate;
+ }
+
+ private static Expressionable QueryExp(ZskQdRawdataLeftSgsRequiredQueryDto parm)
+ {
+ // 创建一个基于两个实体的查询条件表达式
+ //var predicate = Expressionable.Create();
+ var predicate = Expressionable.Create();
+ // 映射左表(ZskQdRawdata)的查询条件
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DataSource),
+ // (raw, req, dto) => raw.DataSource.Contains(parm.DataSource));
+
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber),
+ // (raw, req, dto) => raw.OrderNumber == parm.OrderNumber);
+
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode),
+ // (raw, req, dto) => raw.MaterialCode == parm.MaterialCode);
+
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName),
+ // (raw, req, dto) => raw.MaterialName.Contains(parm.MaterialName));
+
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.SpecificationModel),
+ // (raw, req, dto) => raw.SpecificationModel == parm.SpecificationModel);
+
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Notes),
+ // (raw, req, dto) => raw.Notes.Contains(parm.Notes));
+
+ //// 映射右表(ZskSgsRequired)的查询条件,注意处理可能为null的情况
+ //predicate = predicate.AndIF(parm.RequirementforIssuanceProportion > 0,
+ // (raw, req, dto) => req != null && req.RequirementforIssuanceProportion == parm.RequirementforIssuanceProportion);
+
+ //// 基于计算后的AlertStatus进行筛选
+ //predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.AlertStatus),
+ // (raw, req, dto) => dto.AlertStatus == parm.AlertStatus);
+
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DataSource),
+ (raw, req) => raw.DataSource.Contains(parm.DataSource));
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber),
+ (raw, req) => raw.OrderNumber == parm.OrderNumber);
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode),
+ (raw, req) => raw.MaterialCode == parm.MaterialCode);
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName),
+ (raw, req) => raw.MaterialName.Contains(parm.MaterialName));
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.SpecificationModel),
+ (raw, req) => raw.SpecificationModel == parm.SpecificationModel);
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Notes),
+ (raw, req) => raw.Notes.Contains(parm.Notes));
+
+ // 映射右表(ZskSgsRequired)的查询条件,注意处理可能为null的情况
+ predicate = predicate.AndIF(parm.RequirementforIssuanceProportion > 0,
+ (raw, req) => req.RequirementforIssuanceProportion == parm.RequirementforIssuanceProportion);
+
+ var m = parm.RequirementforIssuanceProportion.ToString();
+
+
+
+
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/Knowledge/ZskSgsRequiredService.cs b/ZR.Service/Knowledge/ZskSgsRequiredService.cs
new file mode 100644
index 00000000..51b03cc6
--- /dev/null
+++ b/ZR.Service/Knowledge/ZskSgsRequiredService.cs
@@ -0,0 +1,162 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.Knowledge.Dto;
+using ZR.Model.Knowledge;
+using ZR.Repository;
+using ZR.Service.Knowledge.IKnowledgeService;
+
+namespace ZR.Service.Knowledge
+{
+ ///
+ /// 省公司每日需求表Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IZskSgsRequiredService), ServiceLifetime = LifeTime.Transient)]
+ public class ZskSgsRequiredService : BaseService, IZskSgsRequiredService
+ {
+ ///
+ /// 查询省公司每日需求表列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(ZskSgsRequiredQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public ZskSgsRequired GetInfo(long Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加省公司每日需求表
+ ///
+ ///
+ ///
+ public ZskSgsRequired AddZskSgsRequired(ZskSgsRequired model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改省公司每日需求表
+ ///
+ ///
+ ///
+ public int UpdateZskSgsRequired(ZskSgsRequired model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 清空省公司每日需求表
+ ///
+ ///
+ public bool TruncateZskSgsRequired()
+ {
+ var newTableName = $"zsk_sgs_required_{DateTime.Now:yyyyMMdd}";
+ if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ {
+ Context.DbMaintenance.BackupTable("zsk_sgs_required", newTableName);
+ }
+
+ return Truncate();
+ }
+ ///
+ /// 导入省公司每日需求表
+ ///
+ ///
+ public (string, object, object) ImportZskSgsRequired(List list)
+ {
+
+
+ #region 将zsk_sgs_required表中的数据备份到zsk_sgs_required_bak
+
+ var parameter = new SugarParameter[] { };
+
+ var str_sql = "INSERT INTO zsk_sgs_required_bak SELECT * from zsk_sgs_required";
+
+ var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_sgs_required表中的数据备份到zsk_sgs_required_bak
+
+ if (insert_sum > 0)
+ {
+
+ var del_sql = "DELETE FROM zsk_sgs_required";
+
+ var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_sgs_required表中的数据全部删除
+ }
+ #endregion
+
+
+
+ var x = Context.Storageable(list)
+ .SplitInsert(it => !it.Any())
+ //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
+ .ToStorage();
+ var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
+
+ string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}";
+ Console.WriteLine(msg);
+
+ //输出错误信息
+ foreach (var item in x.ErrorList)
+ {
+ Console.WriteLine("错误" + item.StorageMessage);
+ }
+ foreach (var item in x.IgnoreList)
+ {
+ Console.WriteLine("忽略" + item.StorageMessage);
+ }
+
+ return (msg, x.ErrorList, x.IgnoreList);
+ }
+
+ ///
+ /// 导出省公司每日需求表
+ ///
+ ///
+ ///
+ public PagedInfo ExportList(ZskSgsRequiredQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ .Where(predicate.ToExpression())
+ .Select((it) => new ZskSgsRequiredDto()
+ {
+ }, true)
+ .ToPage(parm);
+
+ return response;
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(ZskSgsRequiredQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RequirementforIssuanceProportion.ToString()), it => it.RequirementforIssuanceProportion == parm.RequirementforIssuanceProportion);
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
--
Gitee
From 9fe71659bb219f9ef649ac90a6ebbe96769de14d Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Thu, 24 Jul 2025 15:53:49 +0800
Subject: [PATCH 05/29] =?UTF-8?q?=E5=AF=BC=E8=A1=A8=E5=AF=BC=E5=85=A5?=
=?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E5=B0=86=E5=AF=BC=E5=85=A5?=
=?UTF-8?q?=E7=9A=84=E8=A1=A8=E5=90=8D=E5=AD=98=E5=88=B0=E8=A1=A8=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Controllers/Knowledge/ZskQdRawdataController.cs | 12 +++++++++++-
ZR.Admin.WebApi/appsettings.json | 6 ++++--
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
index 14a41ccf..1ba725ed 100644
--- a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
+++ b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
@@ -184,6 +184,15 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
using (var stream = formFile.OpenReadStream())
{
list = stream.Query(startCell: "A1").ToList();
+
+ // 关键步骤:给每个 DTO 赋值文件名
+ string fileName = formFile.FileName; //获取文件名
+ foreach (var dto in list)
+ {var m = dto.DataSource;
+
+ dto.DataSource = fileName; // 将文件名存入 DTO 的 DataSource
+ }
+
}
return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>()));
@@ -219,7 +228,8 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
///
[HttpPost("importXqData")]
[Log(Title = "省公司每日需求表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
- [ActionPermissionFilter(Permission = "zsksgsrequired:import")]
+ //[ActionPermissionFilter(Permission = "zsksgsrequired:import")]
+ [ActionPermissionFilter(Permission = "zskqdrawdata:import")]
public IActionResult ImportXqData([FromForm(Name = "file")] IFormFile formFile)
{
//List list = new();
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index aa628bbe..08392a98 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -8,7 +8,8 @@
},
"dbConfigs": [
{
- "Conn": "Data Source=192.168.107.252;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;",
+ //"Conn": "Data Source=192.168.107.252;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;",
+ "Conn": "Data Source=10.218.14.130;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=Ztfgylsc@2025;port=13049;SslMode=none;Charset=utf8;",
"DbType": 0, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4
"ConfigId": "0", //多租户唯一标识
"IsAutoCloseConnection": true
@@ -19,7 +20,8 @@
"CodeGenDbConfig": {
//代码生成连接字符串,注意{dbName}为固定格式,不要填写数据库名
//"Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog={dbName};",
- "Conn": "Data Source=192.168.107.252;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;Initial Catalog={dbName};",
+ //"Conn": "Data Source=192.168.107.252;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;Initial Catalog={dbName};",
+ "Conn": "Data Source=10.218.14.130;Persist Security Info=True;User ID=root;Password=Ztfgylsc@2025;port=13049;SslMode=none;Charset=utf8;Initial Catalog={dbName};",
"DbType": 0,
"IsAutoCloseConnection": true,
"DbName": "Salary_test" //代码生成默认连接数据库,Oracle库是实例的名称
--
Gitee
From cbffdda0d11ec66ea1ebbd68dd2fac82da5c678f Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Mon, 28 Jul 2025 14:46:09 +0800
Subject: [PATCH 06/29] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=EF=BC=9A--=E6=B8=85=E7=A9=BA=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E6=BA=90=E9=80=BB=E8=BE=91=E5=92=8C=E6=95=B0=E6=8D=AE=E6=BA=90?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Knowledge/ZskQdRawdataController.cs | 27 ++-
.../PublishProfiles/FolderProfile2.pubxml | 21 +++
.../IKnowledgeService/IZskQdRawdataService.cs | 4 +-
ZR.Service/Knowledge/ZskQdRawdataService.cs | 161 ++++++++++++++++--
4 files changed, 194 insertions(+), 19 deletions(-)
create mode 100644 ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml
diff --git a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
index 1ba725ed..31de3752 100644
--- a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
+++ b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
@@ -152,10 +152,11 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
[HttpPost("clean")]
public IActionResult Clear()
{
- if (!HttpContextExtension.IsAdmin(HttpContext))
- {
- return ToResponse(ResultCode.FAIL, "操作失败");
- }
+ //允许管理员执行,不是管理员,不让执行
+ //if (!HttpContextExtension.IsAdmin(HttpContext))
+ //{
+ // return ToResponse(ResultCode.FAIL, "操作失败");
+ //}
return SUCCESS(_ZskQdRawdataService.TruncateZskQdRawdata());
}
@@ -180,13 +181,26 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
try
{
+ string fileName = "";
+
List list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query(startCell: "A1").ToList();
// 关键步骤:给每个 DTO 赋值文件名
- string fileName = formFile.FileName; //获取文件名
+ fileName = formFile.FileName; //获取文件名
+
+ if (!fileName.Contains("备货未入账") &&
+ !fileName.Contains("到货未入库") &&
+ !fileName.Contains("工程问题呆滞"))
+ {
+ // 不包含任何关键词时,返回提示
+ string message = "文件名不满足要求,请确认文件名包含:备货未入账、到货未入库、工程问题呆滞中的任意一个";
+
+ return ToResponse(ResultCode.FAIL, message);
+ }
+
foreach (var dto in list)
{var m = dto.DataSource;
@@ -195,7 +209,8 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
}
- return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>()));
+ //return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>()));
+ return SUCCESS(_ZskQdRawdataService.ImportZskQdRawdata(list.Adapt>(), fileName));
}
catch (Exception ex)
{
diff --git a/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml b/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml
new file mode 100644
index 00000000..4724941d
--- /dev/null
+++ b/ZR.Admin.WebApi/Properties/PublishProfiles/FolderProfile2.pubxml
@@ -0,0 +1,21 @@
+
+
+
+
+ true
+ false
+ true
+ Release
+ Any CPU
+ FileSystem
+ D:\中通服\发布\知识库API
+ FileSystem
+ <_TargetId>Folder
+
+ net8.0
+ e5497bb4-b0c1-4794-9fae-163f626ec399
+ false
+
+
\ No newline at end of file
diff --git a/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs b/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
index a35f236b..bc3458b1 100644
--- a/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
+++ b/ZR.Service/Knowledge/IKnowledgeService/IZskQdRawdataService.cs
@@ -20,7 +20,9 @@ namespace ZR.Service.Knowledge.IKnowledgeService
bool TruncateZskQdRawdata();
- (string, object, object) ImportZskQdRawdata(List list);
+ //(string, object, object) ImportZskQdRawdata(List list);
+
+ (string, object, object) ImportZskQdRawdata(List list, string fildName);
PagedInfo ExportList(ZskQdRawdataQueryDto parm);
//PagedInfo ExportList(ZskQdRawdataLeftSgsRequiredQueryDto parm);
diff --git a/ZR.Service/Knowledge/ZskQdRawdataService.cs b/ZR.Service/Knowledge/ZskQdRawdataService.cs
index 1c42c9d0..16b3a9ae 100644
--- a/ZR.Service/Knowledge/ZskQdRawdataService.cs
+++ b/ZR.Service/Knowledge/ZskQdRawdataService.cs
@@ -6,6 +6,7 @@ using ZR.Repository;
using ZR.Service.Knowledge.IKnowledgeService;
using static System.Runtime.InteropServices.JavaScript.JSType;
using ZR.Model.System;
+using System.Data;
namespace ZR.Service.Knowledge
{
@@ -218,19 +219,79 @@ namespace ZR.Service.Knowledge
///
public bool TruncateZskQdRawdata()
{
- var newTableName = $"zsk_qd_rawdata_{DateTime.Now:yyyyMMdd}";
- if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ //var newTableName = $"zsk_qd_rawdata_{DateTime.Now:yyyyMMdd}";
+ //if (Queryable().Any() && !Context.DbMaintenance.IsAnyTable(newTableName))
+ //{
+ // Context.DbMaintenance.BackupTable("zsk_qd_rawdata", newTableName);
+ //}
+
+ //#region 将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ //var parameter = new SugarParameter[] { };
+
+ //var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata";
+
+ //var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ //if (insert_sum > 0)
+ //{
+
+ // var del_sql = "DELETE FROM zsk_qd_rawdata";
+
+ // var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
+ //}
+ //#endregion
+
+ try
+ {
+ if (Queryable().Any())
+ {
+ //Context.DbMaintenance.BackupTable("zsk_qd_rawdata", "zsk_qd_rawdata_bak");
+
+
+
+
+ #region 将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ var parameter = new SugarParameter[] { };
+
+ var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata";
+
+ var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ if (insert_sum > 0)
+ {
+
+ var del_sql = "DELETE FROM zsk_qd_rawdata";
+
+ var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
+
+ if (del_sum > 0) { return true; }
+ else { return false; }
+ }
+ #endregion
+
+
+
+ }
+
+ return false;
+
+ }
+ catch (Exception ex )
{
- Context.DbMaintenance.BackupTable("zsk_qd_rawdata", newTableName);
+ var m = ex.Message;
+
+ return false;
+
+
}
-
- return Truncate();
}
///
/// 导入订单知识库
///
///
- public (string, object, object) ImportZskQdRawdata(List list)
+ public (string, object, object) ImportZskQdRawdata(List list, string fildName)
{
// var x = Context.Storageable(list)
@@ -275,21 +336,97 @@ namespace ZR.Service.Knowledge
//Context.Ado.ExecuteCommand(sql, parameters);
+ //#region 将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ //var parameter = new SugarParameter[] { };
+
+ //var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata";
+
+ //var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ //if (insert_sum > 0)
+ //{
+
+ // var del_sql = "DELETE FROM zsk_qd_rawdata";
+
+ // var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
+ //}
+ //#endregion
+
+
#region 将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
- var parameter = new SugarParameter[] { };
- var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata";
- var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+ var select_sql = "SELECT DISTINCT DataSource FROM zsk_qd_rawdata";
+ var select_name = Context.Ado.GetDataTable(select_sql);
+
+ bool existsTargetSource = false;
+
+ var str_name = "";
+
+ if (fildName.Contains("备货未入账"))
+ {
+ str_name = "备货未入账";
+
+ }
+ else if (fildName.Contains("到货未入库"))
+ {
+ str_name = "到货未入库";
+ }
+ else
+ {
+ str_name = "工程问题呆滞";
+ }
+
+
+ if (select_name.Rows.Count > 0)
+ {
+ foreach (DataRow row in select_name.Rows)
+ {
+ if (row["DataSource"] != DBNull.Value)
+ {
+ string dataSource = row["DataSource"].ToString();
+ // 如果包含"入库",将str设为false
+ if (dataSource.Contains(str_name))
+ {
+ existsTargetSource = true;
+ // 如果已经找到符合条件的,可提前退出循环
+ break;
+ }
+
+ }
+ }
+ }
+
+ var parameter = new SugarParameter[]
+ {
+ new SugarParameter("@DataSource", str_name)
+ };
- if (insert_sum > 0)
+ // 如果zsk_qd_rawdata表中存在相同的数据来源,需要先备份,再删除这部分相同的数据来源
+ if (existsTargetSource)
{
- var del_sql = "DELETE FROM zsk_qd_rawdata";
+ // var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata ";
+
+ //var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata WHERE DataSource LIKE '%' + @DataSource + '%'";
+ var str_sql = "INSERT INTO zsk_qd_rawdata_bak SELECT * from zsk_qd_rawdata WHERE DataSource LIKE CONCAT('%', @DataSource, '%')";
+
+ var insert_sum = Context.Ado.ExecuteCommand(str_sql, parameter); //将zsk_qd_rawdata表中的数据备份到zsk_qd_rawdata_bak
+
+ if (insert_sum > 0)
+ {
+
+ //var del_sql = "DELETE FROM zsk_qd_rawdata WHERE DataSource LIKE '%' + @DataSource + '%'";
+ var del_sql = "DELETE FROM zsk_qd_rawdata WHERE DataSource LIKE CONCAT('%', @DataSource, '%')";
+
+ var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
+ }
- var del_sum = Context.Ado.ExecuteCommand(del_sql, parameter);//将zsk_qd_rawdata表中的数据全部删除
}
+
+
#endregion
--
Gitee
From e87dfa26728d89c6fe4a183960b9d37d144ce8b2 Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Wed, 13 Aug 2025 22:58:47 +0800
Subject: [PATCH 07/29] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD--1?=
=?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?=
=?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E3=80=81=E5=AF=BC=E5=85=A5=E6=88=90?=
=?UTF-8?q?=E5=8A=9F=E6=98=BE=E7=A4=BA=EF=BC=9B2=E3=80=81=E5=BD=93?=
=?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A1=A8=E4=B8=AD=E5=AF=B9=E5=BA=94=E7=9A=84?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E7=BC=BA=E5=A4=B1=E6=97=B6=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E4=B8=80=E6=9D=A1=E5=AE=9E=E9=99=85=E6=95=B0=E9=87=8F?=
=?UTF-8?q?=E4=B8=BA0=E7=9A=84=E7=89=A9=E6=96=99=E6=95=B0=E6=8D=AE)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Infrastructure/ZR.Infrastructure.csproj | 4 +
Infrastructure/ZskDataProcessor.cs | 52 +++
.../Knowledge/ZskQdRawdataController.cs | 19 +
ZR.Admin.WebApi/appsettings.json | 3 +-
.../Dto/ZskQdRawdataLeftSgsRequiredDto.cs | 35 +-
ZR.Model/Knowledge/ZskQdRawdata.cs | 5 +
ZR.Service/Knowledge/ZskQdRawdataService.cs | 379 +++++++++++++-----
7 files changed, 393 insertions(+), 104 deletions(-)
create mode 100644 Infrastructure/ZskDataProcessor.cs
diff --git a/Infrastructure/ZR.Infrastructure.csproj b/Infrastructure/ZR.Infrastructure.csproj
index c7ee5e65..039ee5a0 100644
--- a/Infrastructure/ZR.Infrastructure.csproj
+++ b/Infrastructure/ZR.Infrastructure.csproj
@@ -23,4 +23,8 @@
+
+
+
+
diff --git a/Infrastructure/ZskDataProcessor.cs b/Infrastructure/ZskDataProcessor.cs
new file mode 100644
index 00000000..357c1f27
--- /dev/null
+++ b/Infrastructure/ZskDataProcessor.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZR.Model.Knowledge.Dto;
+
+namespace ZR.Infrastructure
+{/// 数据处理工具类
+ public class ZskDataProcessor
+ {
+ ///
+ /// 处理列表中A列数据:
+ /// - 若MaterialName列当前行为空,取前面最近的非空A列值
+ /// - 若A列当前行不为空,保持原值
+ ///
+ /// 原始数据列表
+ /// 处理后的列表
+ public static List ProcessColumnA(List dataList)
+ {
+ if (dataList == null || dataList.Count == 0)
+ return dataList;
+
+ // 记录上一个非空的A列值
+ string lastNonEmptyA = null;
+
+ foreach (var item in dataList)
+ {
+ // 判断当前MaterialName列是否为空(包含null、空字符串、纯空格)
+ bool isCurrentAEmpty = string.IsNullOrWhiteSpace(item.MaterialName);
+
+ if (!isCurrentAEmpty)
+ {
+ // 当前A列不为空:更新"上一个非空值"为当前值
+ lastNonEmptyA = item.MaterialName;
+ }
+ else
+ {
+ // 当前A列为空:用"上一个非空值"填充(如果存在)
+ if (lastNonEmptyA != null)
+ {
+ item.MaterialName = lastNonEmptyA;
+ }
+ // 若"上一个非空值"不存在(如列表开头连续空值),保持空
+ }
+ }
+
+ return dataList;
+ }
+
+ }
+}
diff --git a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
index 31de3752..bea1f7d5 100644
--- a/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
+++ b/ZR.Admin.WebApi/Controllers/Knowledge/ZskQdRawdataController.cs
@@ -6,6 +6,7 @@ using ZR.Admin.WebApi.Filters;
using MiniExcelLibs;
using static System.Runtime.InteropServices.JavaScript.JSType;
using ZR.Service.Knowledge;
+using ZR.Infrastructure;
//创建时间:2025-07-07
namespace ZR.Admin.WebApi.Controllers.Knowledge
@@ -257,12 +258,30 @@ namespace ZR.Admin.WebApi.Controllers.Knowledge
try
{
+
+ string fileName = "";
List list = new();
using (var stream = formFile.OpenReadStream())
{
list = stream.Query(startCell: "A1").ToList();
+
+ // 关键步骤:给每个 DTO 赋值文件名
+ fileName = formFile.FileName; //获取文件名
+ }
+
+
+
+ list = ZskDataProcessor.ProcessColumnA(list);
+
+ foreach (var dto in list)
+ {
+ var m = dto.Notes;
+
+ dto.Notes = fileName; // 将文件名存入 DTO 的 DataSource
}
+ list = list.Where(x => x.MaterialCode != null).ToList();
+
return SUCCESS(_ZskSgsRequiredService.ImportZskSgsRequired(list.Adapt>()));
}
catch (Exception ex)
diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json
index 08392a98..fb7f566c 100644
--- a/ZR.Admin.WebApi/appsettings.json
+++ b/ZR.Admin.WebApi/appsettings.json
@@ -9,7 +9,8 @@
"dbConfigs": [
{
//"Conn": "Data Source=192.168.107.252;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=1eZuUljjLp.1;port=3306;SslMode=none;Charset=utf8;",
- "Conn": "Data Source=10.218.14.130;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=Ztfgylsc@2025;port=13049;SslMode=none;Charset=utf8;",
+ //"Conn": "Data Source=10.218.14.130;Initial Catalog=Salary_test;Persist Security Info=True;User ID=root;Password=Ztfgylsc@2025;port=13049;SslMode=none;Charset=utf8;",
+ "Conn": "Data Source=10.218.14.130;Initial Catalog=Salary;Persist Security Info=True;User ID=root;Password=Ztfgylsc@2025;port=13049;SslMode=none;Charset=utf8;",
"DbType": 0, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4
"ConfigId": "0", //多租户唯一标识
"IsAutoCloseConnection": true
diff --git a/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs b/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
index 0d5e334b..5d0fe77f 100644
--- a/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
+++ b/ZR.Model/Knowledge/Dto/ZskQdRawdataLeftSgsRequiredDto.cs
@@ -12,15 +12,18 @@ namespace ZR.Model.Knowledge.Dto
///
public class ZskQdRawdataLeftSgsRequiredQueryDto : PagerInfo
{
- public string DataSource { get; set; }
- public string OrderNumber { get; set; }
- public string MaterialCode { get; set; }
- public string MaterialName { get; set; }
- public string SpecificationModel { get; set; }
- public string Notes { get; set; }
- public decimal RequirementforIssuanceProportion { get; set; }
- public string AlertStatus { get; set; }
-
+ public string DataSource { get; set; } //数据来源
+ public string OrderNumber { get; set; } //订单号
+ public string MaterialCode { get; set; } //物料编码
+ public string MaterialName { get; set; } //物料名称
+ public string SpecificationModel { get; set; } //规格型号
+ public string Notes { get; set; } //备注
+ public decimal RequirementforIssuanceProportion { get; set; } //领用占比需求
+ public string AlertStatus { get; set; } //预警状态
+ public string orderConfigurationCode { get; set; } //下单配置编码
+
+
+
}
@@ -97,5 +100,19 @@ namespace ZR.Model.Knowledge.Dto
[ExcelColumnName("预警状态")]
public string AlertStatus { get; set; }
+
+
+ public string SgsMaterialName { get; set; }
+
+
+ public string SgsMaterialCode { get; set;}
+
+
+
+ public string SgsSpecificationModel { get; set; }
+
+ public string SgsNotes { get; set; }
+ // 操作显示:设置默认值为true
+ public bool czxs { get; set; } = true;
}
}
diff --git a/ZR.Model/Knowledge/ZskQdRawdata.cs b/ZR.Model/Knowledge/ZskQdRawdata.cs
index d17ec5ba..827d7015 100644
--- a/ZR.Model/Knowledge/ZskQdRawdata.cs
+++ b/ZR.Model/Knowledge/ZskQdRawdata.cs
@@ -69,6 +69,11 @@ namespace ZR.Model.Knowledge
/// 备注
///
public string Notes { get; set; }
+ ///
+ /// 下单配置编码
+ ///
+
+ public string orderConfigurationCode { get; set; }
}
}
\ No newline at end of file
diff --git a/ZR.Service/Knowledge/ZskQdRawdataService.cs b/ZR.Service/Knowledge/ZskQdRawdataService.cs
index 16b3a9ae..3b60e7cc 100644
--- a/ZR.Service/Knowledge/ZskQdRawdataService.cs
+++ b/ZR.Service/Knowledge/ZskQdRawdataService.cs
@@ -43,17 +43,149 @@ namespace ZR.Service.Knowledge
.LeftJoin((raw, req) => raw.MaterialCode == req.MaterialCode) // 左连接条件
.Where(predicate.ToExpression());
+ var query1 = Queryable()
+ .RightJoin((raw, req) => raw.MaterialCode == req.MaterialCode) // 左连接条件
+ .Where(predicate.ToExpression());
+
+
var sql = query.ToSql(); // 获取生成的SQL
+ //var response = query.Select((raw, req) => new ZskQdRawdataLeftSgsRequiredDto
+ //{
+
+ // SgsMaterialCode = req.MaterialCode,
+ // SgsMaterialName = req.MaterialName,
+ // SgsSpecificationModel = req.SpecificationModel,
+
+
+ // Id = raw.Id,
+ // DataSource = raw.DataSource,
+ // OrderNumber = raw.OrderNumber,
+ // MaterialCode = raw.MaterialCode,
+ // MaterialName = raw.MaterialName,
+ // OrderConfigurationCode = raw.OrderConfigurationCode,
+ // SpecificationModel = raw.SpecificationModel,
+ // UnitofMeasurement = raw.UnitofMeasurement,
+ // ActualQuantity = raw.ActualQuantity,
+ // CreateTime = raw.CreateTime,
+ // LastEditTime = raw.LastEditTime,
+ // Notes = raw.Notes,
+ // RequiredQuantity = req.RequiredQuantity,
+ // QuantityIssued = req.QuantityIssued,
+ // QuantityUsed = req.RequiredQuantity - req.QuantityIssued,
+ // RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
+ // AlertStatus = SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 80, "绿色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 100, "橙色", "")))
+
+
+ // // // 1. 处理raw为空、req不为空的场景:特定字段取req的值,其余置空
+ // // // 2. 处理raw不为空的场景:直接取raw的值
+ // // // 3. 两者都为空:所有字段置空
+
+ // // // 主键及其他非核心字段:raw为空则置空
+ // // Id = raw != null ? raw.Id : req.Id,
+ // // OrderNumber = raw != null ? raw.OrderNumber : null,
+ // // OrderConfigurationCode = raw != null ? raw.OrderConfigurationCode : null,
+ // // UnitofMeasurement = raw != null ? raw.UnitofMeasurement : null,
+ // // CreateTime = raw != null ? raw.CreateTime : null,
+ // // LastEditTime = raw != null ? raw.LastEditTime : null,
+ // // Notes = raw != null ? raw.Notes : null,
+
+ // // // 核心字段:raw为空时取req的值(req不为空的前提下)
+ // // DataSource = raw != null
+ // //? raw.DataSource
+ // //: (req != null ? "省公司每日需求表": null), // raw空、req非空:取req.DataSource
+
+ // // MaterialCode = raw != null
+ // //? raw.MaterialCode
+ // //: (req != null ? req.MaterialCode : null), // raw空、req非空:取req.MaterialCode
+
+ // // MaterialName = raw != null
+ // //? raw.MaterialName
+ // //: (req != null ? req.MaterialName : null), // raw空、req非空:取req.MaterialName
+
+ // // SpecificationModel = raw != null
+ // //? raw.SpecificationModel
+ // //: (req != null ? req.SpecificationModel : null), // raw空、req非空:取req.SpecificationModel
+
+ // // ActualQuantity = raw != null
+ // //? raw.ActualQuantity
+ // //: "0", // raw空、req非空:固定为0
+
+ // // // 关联表字段(req的值,无论raw是否为空)
+ // // RequiredQuantity = req.RequiredQuantity,
+ // // QuantityIssued = req.QuantityIssued,
+ // // QuantityUsed = req != null ? req.RequiredQuantity - req.QuantityIssued : 0,
+ // // RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
+
+ // // // 预警状态:处理req为空的情况,避免空引用
+ // // AlertStatus = req != null
+ // //? SqlFunc.IIF(
+ // // req.RequirementforIssuanceProportion * 100 < 80, "绿色",
+ // // SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", "橙色")
+ // // )
+ // //: null
+
+
+
+
+
+
+ // //EndOrgName = SqlFunc.IF(_.EndOrgCode == "510117").Return("四川委托代销库").ElseIF(_.EndOrgCode == "851A0050").Return("四川市州临时库").ElseIF(_.EndOrgCode == "851A0001").Return("四川省天翼总仓").ElseIF(_.EndOrgCode == "851A0052").Return("四川强商渠道库").End("四川省天翼总仓")
+ // ////根据比例设置预警状态
+ // ///
+
+
+ // //AlertStatus = SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "") ,//移除百分号
+
+ // // // 核心修改:在 Select 中直接计算 AlertStatus
+ // // AlertStatus = SqlFunc.IIF(
+ // // req == null, // 处理右表为 null 的情况
+ // // "绿色",
+ // // SqlFunc.IIF(
+ // // // 移除百分号并转换为 decimal 比较
+ // // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) < 80,
+ // // "绿色",
+ // // SqlFunc.IIF(
+ // // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) > 100,
+ // // "红色",
+ // // "橙色" // 80-100 之间为橙色
+ // // )
+ // // )
+ // //)
+
+ // // AlertStatus = SqlFunc.IIF(
+ // // req == null,
+ // // "",
+ // // SqlFunc.IIF(
+ // // // 使用 LessThan 方法进行数值比较
+ // // SqlFunc.LessThan(
+ // // SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
+ // // "80"
+ // // ),
+ // // "绿色",
+ // // SqlFunc.IIF(
+ // // SqlFunc.LessThan(
+ // // SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
+ // // "100"
+ // // ),
+ // // "橙色",
+ // // "红色"
+ // // )
+ // // )
+ // //)
+
+ //}).MergeTable();
+
var response = query.Select((raw, req) => new ZskQdRawdataLeftSgsRequiredDto
{
- //// 映射ZskQdRawdata属性
- //Id = raw.Id,
- //DataSource = raw.DataSource,
- //// 映射ZskSgsRequired属性(可为空)
- //RequiredId = req == null ? null : req.Id,
- //RequiredField1 = req?.Field1
+
+ SgsMaterialCode = req.MaterialCode,
+ SgsMaterialName = req.MaterialName,
+ SgsSpecificationModel = req.SpecificationModel,
+ SgsNotes = req.Notes,
+
+
Id = raw.Id,
DataSource = raw.DataSource,
OrderNumber = raw.OrderNumber,
@@ -66,103 +198,135 @@ namespace ZR.Service.Knowledge
CreateTime = raw.CreateTime,
LastEditTime = raw.LastEditTime,
Notes = raw.Notes,
- //RequiredQuantity = req.RequiredQuantity,
- //QuantityIssued = req.QuantityIssued,
- //QuantityUsed = (req.RequiredQuantity - req.QuantityIssued).ToString(),
- //RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
- //AlertStatus =
- // 映射ZskSgsRequired属性(可为空)
RequiredQuantity = req.RequiredQuantity,
QuantityIssued = req.QuantityIssued,
QuantityUsed = req.RequiredQuantity - req.QuantityIssued,
RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
- AlertStatus =SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 80,"绿色",SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 100, "橙色","")))
- //EndOrgName = SqlFunc.IF(_.EndOrgCode == "510117").Return("四川委托代销库").ElseIF(_.EndOrgCode == "851A0050").Return("四川市州临时库").ElseIF(_.EndOrgCode == "851A0001").Return("四川省天翼总仓").ElseIF(_.EndOrgCode == "851A0052").Return("四川强商渠道库").End("四川省天翼总仓")
- ////根据比例设置预警状态
- ///
-
-
- //AlertStatus = SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "") ,//移除百分号
-
- // // 核心修改:在 Select 中直接计算 AlertStatus
- // AlertStatus = SqlFunc.IIF(
- // req == null, // 处理右表为 null 的情况
- // "绿色",
- // SqlFunc.IIF(
- // // 移除百分号并转换为 decimal 比较
- // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) < 80,
- // "绿色",
- // SqlFunc.IIF(
- // SqlFunc.ConvertToDecimal(SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", "")) > 100,
- // "红色",
- // "橙色" // 80-100 之间为橙色
- // )
- // )
- //)
-
-// AlertStatus = SqlFunc.IIF(
-// req == null,
-// "",
-// SqlFunc.IIF(
-// // 使用 LessThan 方法进行数值比较
-// SqlFunc.LessThan(
-// SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
-// "80"
-// ),
-// "绿色",
-// SqlFunc.IIF(
-// SqlFunc.LessThan(
-// SqlFunc.Replace(req.RequirementforIssuanceProportion, "%", ""),
-// "100"
-// ),
-// "橙色",
-// "红色"
-// )
-// )
-//)
-
- }).MergeTable();
- // .Mapper(_it =>
- //{
+ AlertStatus = SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 80, "绿色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 100, "橙色", "")))
- // if (decimal.TryParse(_it.AlertStatus, out decimal intValue))
- // {
- // if (intValue < 80)
- // {
- // _it.AlertStatus = "绿色";
- // }
- // else if (intValue > 100)
- // {
- // _it.AlertStatus = "红色";
- // }
- // else
- // {
- // _it.AlertStatus = "橙色";
- // }
- // }
- // else
- // {
- // // 转换失败,处理错误(如设置默认值)
- // _it.AlertStatus = "";
- // }
-
- //});
+ });
- if (!string.IsNullOrEmpty(parm.AlertStatus))
+ var response1 = query1.Select((raw, req) => new ZskQdRawdataLeftSgsRequiredDto
{
- var sq = response.Where(x => x.AlertStatus == parm.AlertStatus);
- var m1 = sq.ToSql();
+ SgsMaterialCode = req.MaterialCode,
+ SgsMaterialName = req.MaterialName,
+ SgsSpecificationModel = req.SpecificationModel,
+ SgsNotes = req.Notes,
+
+ Id = raw.Id,
+ DataSource = raw.DataSource,
+ OrderNumber = raw.OrderNumber,
+ MaterialCode = raw.MaterialCode,
+ MaterialName = raw.MaterialName,
+ OrderConfigurationCode = raw.OrderConfigurationCode,
+ SpecificationModel = raw.SpecificationModel,
+ UnitofMeasurement = raw.UnitofMeasurement,
+ ActualQuantity = raw.ActualQuantity,
+ CreateTime = raw.CreateTime,
+ LastEditTime = raw.LastEditTime,
+ Notes = raw.Notes,
+ RequiredQuantity = req.RequiredQuantity,
+ QuantityIssued = req.QuantityIssued,
+ QuantityUsed = req.RequiredQuantity - req.QuantityIssued,
+ RequirementforIssuanceProportion = req.RequirementforIssuanceProportion,
+ AlertStatus = SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 80, "绿色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 > 100, "红色", SqlFunc.IIF(req.RequirementforIssuanceProportion * 100 < 100, "橙色", "")))
+
+ });
- return sq.ToPage(parm);
+ var mergedList = response.ToList().Union(response1.ToList()).ToList();
-
- }
- else
+
+ // 1. 处理 DataSource 为空的项:补全字段
+ mergedList = mergedList.Select(item =>
+ {
+ // 判断 DataSource 是否为空(包括 null、空字符串、纯空格)
+ if (string.IsNullOrWhiteSpace(item.DataSource))
+ {
+ return new ZskQdRawdataLeftSgsRequiredDto
+ {
+ // 基础字段保持不变
+ Id = item.Id,
+ OrderNumber = item.OrderNumber,
+ OrderConfigurationCode = item.OrderConfigurationCode,
+ UnitofMeasurement = item.UnitofMeasurement,
+ CreateTime = item.CreateTime,
+ LastEditTime = item.LastEditTime,
+ Notes = item.Notes,
+ RequiredQuantity = item.RequiredQuantity,
+ QuantityIssued = item.QuantityIssued,
+ QuantityUsed = item.QuantityUsed,
+ RequirementforIssuanceProportion = item.RequirementforIssuanceProportion,
+ AlertStatus = item.AlertStatus,
+ SgsMaterialCode = item.SgsMaterialCode,
+ SgsMaterialName = item.SgsMaterialName,
+ SgsSpecificationModel = item.SgsSpecificationModel,
+
+ // 重点补全字段
+ czxs = false, //操作显示
+ DataSource = item.SgsNotes, // 固定值
+ MaterialCode = item.SgsMaterialCode, // 取自 SgsMaterialCode
+ MaterialName = item.SgsMaterialName, // 取自 SgsMaterialName
+ SpecificationModel = item.SgsSpecificationModel, // 取自 SgsSpecificationModel
+ ActualQuantity = "0" // 固定为 "0"
+ };
+ }
+ // DataSource 不为空则保持原样
+ return item;
+ }).ToList();
+
+
+ // 2. 去除 MaterialCode 为空的行(过滤无效数据)
+ mergedList = mergedList.Where(item => !string.IsNullOrWhiteSpace(item.MaterialCode)).ToList();
+
+ // 3. 二次去重(处理补全字段后可能产生的新重复项)
+ mergedList = mergedList.Distinct().ToList();
+
+
+
+
+ //if (!string.IsNullOrEmpty(parm.AlertStatus))
+ //{
+ // var sq = response.Where(x => x.AlertStatus == parm.AlertStatus);
+
+
+ // return sq.ToPage(parm);
+
+
+ //}
+ //else
+ //{
+ // return response.ToPage(parm);
+ //}
+
+
+
+ // 3. 应用AlertStatus过滤条件
+ if (!string.IsNullOrEmpty(parm.AlertStatus))
{
- return response.ToPage(parm);
+ mergedList = mergedList.Where(dto => dto.AlertStatus == parm.AlertStatus).ToList();
}
+ // 4. 手动分页(计算总条数、当前页数据)
+ int pageIndex = Math.Max(parm.PageNum, 1); // 页码校正(至少为1)
+ int pageSize = Math.Max(parm.PageSize, 10); // 页大小校正(默认10条)
+ int totalCount = mergedList.Count;
+ var pageData = mergedList
+ .Skip((pageIndex - 1) * pageSize) // 跳过前N条
+ .Take(pageSize) // 取当前页数据
+ .ToList();
+
+ // 5. 返回分页结果
+ return new PagedInfo
+ {
+ TotalNum = totalCount,
+ Result = pageData,
+ PageIndex = pageIndex,
+ PageSize = pageSize
+ };
+
+
+
}
catch (Exception ex)
@@ -549,23 +713,50 @@ namespace ZR.Service.Knowledge
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DataSource),
- (raw, req) => raw.DataSource.Contains(parm.DataSource));
+ (raw, req) => raw.DataSource.Contains(parm.DataSource)
+ ||
+ // 右表(req)不为 null 且其 DataSource 包含参数值(避免空引用)
+ (req.Notes != null && req.Notes.Contains(parm.DataSource))
+
+ );
+
+
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.OrderNumber),
(raw, req) => raw.OrderNumber == parm.OrderNumber);
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialCode),
- (raw, req) => raw.MaterialCode == parm.MaterialCode);
+ (raw, req) => raw.MaterialCode == parm.MaterialCode
+ ||
+ // 右表(req)不为 null 且其 DataSource 包含参数值(避免空引用)
+ (req.MaterialCode != null && req.MaterialCode ==parm.MaterialCode)
+
+ );
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.MaterialName),
- (raw, req) => raw.MaterialName.Contains(parm.MaterialName));
+ (raw, req) => raw.MaterialName.Contains(parm.MaterialName)
+ ||
+ // 右表(req)不为 null 且其 DataSource 包含参数值(避免空引用)
+ (req.MaterialName != null && req.MaterialName.Contains(parm.MaterialName))
+
+
+ );
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.SpecificationModel),
- (raw, req) => raw.SpecificationModel == parm.SpecificationModel);
+ (raw, req) => raw.SpecificationModel == parm.SpecificationModel
+ ||
+ // 右表(req)不为 null 且其 DataSource 包含参数值(避免空引用)
+ (req.SpecificationModel != null && req.SpecificationModel ==parm.SpecificationModel)
+
+ );
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Notes),
(raw, req) => raw.Notes.Contains(parm.Notes));
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.orderConfigurationCode),
+ (raw, req) => raw.orderConfigurationCode.Contains(parm.orderConfigurationCode));
+
// 映射右表(ZskSgsRequired)的查询条件,注意处理可能为null的情况
predicate = predicate.AndIF(parm.RequirementforIssuanceProportion > 0,
(raw, req) => req.RequirementforIssuanceProportion == parm.RequirementforIssuanceProportion);
--
Gitee
From 6cb31ae6dd8a89b09fc961937da987aa0831344f Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Thu, 21 Aug 2025 00:03:51 +0800
Subject: [PATCH 08/29] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F=EF=BC=9A=E4=BC=98=E5=8C=96bug=EF=BC=8C=E6=97=A0?=
=?UTF-8?q?=E6=B3=95=E4=BF=AE=E6=94=B9=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ZR.Model/Knowledge/ZskQdRawdata.cs | 2 +-
ZR.Service/Knowledge/ZskQdRawdataService.cs | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ZR.Model/Knowledge/ZskQdRawdata.cs b/ZR.Model/Knowledge/ZskQdRawdata.cs
index 827d7015..44ce7cae 100644
--- a/ZR.Model/Knowledge/ZskQdRawdata.cs
+++ b/ZR.Model/Knowledge/ZskQdRawdata.cs
@@ -73,7 +73,7 @@ namespace ZR.Model.Knowledge
/// 下单配置编码
///
- public string orderConfigurationCode { get; set; }
+ // public string orderConfigurationCode { get; set; }
}
}
\ No newline at end of file
diff --git a/ZR.Service/Knowledge/ZskQdRawdataService.cs b/ZR.Service/Knowledge/ZskQdRawdataService.cs
index 3b60e7cc..2d74b364 100644
--- a/ZR.Service/Knowledge/ZskQdRawdataService.cs
+++ b/ZR.Service/Knowledge/ZskQdRawdataService.cs
@@ -755,7 +755,7 @@ namespace ZR.Service.Knowledge
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.orderConfigurationCode),
- (raw, req) => raw.orderConfigurationCode.Contains(parm.orderConfigurationCode));
+ (raw, req) => raw.OrderConfigurationCode.Contains(parm.orderConfigurationCode));
// 映射右表(ZskSgsRequired)的查询条件,注意处理可能为null的情况
predicate = predicate.AndIF(parm.RequirementforIssuanceProportion > 0,
--
Gitee
From cbac83e7762b8e4417a2b733f7a57cc34f8b8c1f Mon Sep 17 00:00:00 2001
From: chentiebo <2361876293@qq.com>
Date: Tue, 16 Sep 2025 11:40:29 +0800
Subject: [PATCH 09/29] =?UTF-8?q?=E5=BA=9F=E6=97=A7=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../FjhsDetail/FjhsRecycleDetailController.cs | 296 ++++++
.../FjhsRecycleTaskHeadController.cs | 783 ++++++++++++++++
.../FjhsRecycleSamplingDetailController.cs | 571 ++++++++++++
.../Controllers/Photo/PhotoController.cs | 145 +++
ZR.Admin.WebApi/Program.cs | 8 +
ZR.Admin.WebApi/ZR.Admin.WebApi.csproj | 1 +
.../ImportTemplate/FjhsRecycleTaskHead.xlsx | Bin 0 -> 4775 bytes
.../FjhsDetail/Dto/FjhsRecycleDetailDto.cs | 433 +++++++++
ZR.Model/FjhsDetail/FjhsRecycleDetail.cs | 145 +++
.../Dto/FjhsRecycleTaskDetailDto.cs | 131 +++
.../FjhsRecycle/Dto/FjhsRecycleTaskHeadDto.cs | 407 ++++++++
ZR.Model/FjhsRecycle/FjhsRecycleTaskDetail.cs | 135 +++
ZR.Model/FjhsRecycle/FjhsRecycleTaskHead.cs | 171 ++++
.../Dto/FjhsRecycleTaskDetailImageDto.cs | 52 ++
.../FjhsRecycleTaskDetailImage.cs | 79 ++
.../Dto/FjhsRecycleSamplingDetailDto.cs | 341 +++++++
.../FjhsRecycleSamplingDetail.cs | 140 +++
ZR.Repository/BaseRepository.cs | 42 +-
ZR.Repository/IBaseRepository.cs | 5 +-
.../FjhsDetail/FjhsRecycleDetailService.cs | 527 +++++++++++
.../IFjhsRecycleDetailService.cs | 26 +
.../FjhsRecycleTaskDetailService.cs | 251 +++++
.../FjhsRecycle/FjhsRecycleTaskHeadService.cs | 868 ++++++++++++++++++
.../IFjhsRecycleTaskDetailService.cs | 28 +
.../IFjhsRecycleTaskHeadService.cs | 38 +
.../FjhsRecycleTaskDetailImageService.cs | 80 ++
.../IFjhsRecycleTaskDetailImageService.cs | 21 +
.../FjhsRecycleSamplingDetailService.cs | 548 +++++++++++
.../IFjhsRecycleSamplingDetailService.cs | 25 +
.../Services/IService/ISysUserService.cs | 9 +
ZR.ServiceCore/Services/SysUserService.cs | 18 +-
31 files changed, 6320 insertions(+), 4 deletions(-)
create mode 100644 ZR.Admin.WebApi/Controllers/FjhsDetail/FjhsRecycleDetailController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/FjhsRecycle/FjhsRecycleTaskHeadController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/FjhsRecycleSampling/FjhsRecycleSamplingDetailController.cs
create mode 100644 ZR.Admin.WebApi/Controllers/Photo/PhotoController.cs
create mode 100644 ZR.Admin.WebApi/wwwroot/ImportTemplate/FjhsRecycleTaskHead.xlsx
create mode 100644 ZR.Model/FjhsDetail/Dto/FjhsRecycleDetailDto.cs
create mode 100644 ZR.Model/FjhsDetail/FjhsRecycleDetail.cs
create mode 100644 ZR.Model/FjhsRecycle/Dto/FjhsRecycleTaskDetailDto.cs
create mode 100644 ZR.Model/FjhsRecycle/Dto/FjhsRecycleTaskHeadDto.cs
create mode 100644 ZR.Model/FjhsRecycle/FjhsRecycleTaskDetail.cs
create mode 100644 ZR.Model/FjhsRecycle/FjhsRecycleTaskHead.cs
create mode 100644 ZR.Model/FjhsRecycleImage/Dto/FjhsRecycleTaskDetailImageDto.cs
create mode 100644 ZR.Model/FjhsRecycleImage/FjhsRecycleTaskDetailImage.cs
create mode 100644 ZR.Model/FjhsRecycleSampling/Dto/FjhsRecycleSamplingDetailDto.cs
create mode 100644 ZR.Model/FjhsRecycleSampling/FjhsRecycleSamplingDetail.cs
create mode 100644 ZR.Service/FjhsDetail/FjhsRecycleDetailService.cs
create mode 100644 ZR.Service/FjhsDetail/IFjhsDetailService/IFjhsRecycleDetailService.cs
create mode 100644 ZR.Service/FjhsRecycle/FjhsRecycleTaskDetailService.cs
create mode 100644 ZR.Service/FjhsRecycle/FjhsRecycleTaskHeadService.cs
create mode 100644 ZR.Service/FjhsRecycle/IFjhsRecycleService/IFjhsRecycleTaskDetailService.cs
create mode 100644 ZR.Service/FjhsRecycle/IFjhsRecycleService/IFjhsRecycleTaskHeadService.cs
create mode 100644 ZR.Service/FjhsRecycleImage/FjhsRecycleTaskDetailImageService.cs
create mode 100644 ZR.Service/FjhsRecycleImage/IFjhsRecycleImageService/IFjhsRecycleTaskDetailImageService.cs
create mode 100644 ZR.Service/FjhsRecycleSampling/FjhsRecycleSamplingDetailService.cs
create mode 100644 ZR.Service/FjhsRecycleSampling/IFjhsRecycleSamplingService/IFjhsRecycleSamplingDetailService.cs
diff --git a/ZR.Admin.WebApi/Controllers/FjhsDetail/FjhsRecycleDetailController.cs b/ZR.Admin.WebApi/Controllers/FjhsDetail/FjhsRecycleDetailController.cs
new file mode 100644
index 00000000..cf49f4b0
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/FjhsDetail/FjhsRecycleDetailController.cs
@@ -0,0 +1,296 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.FjhsDetail.Dto;
+using ZR.Model.FjhsDetail;
+using ZR.Service.FjhsDetail.IFjhsDetailService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+using ZR.Model.FjhsRecycle;
+using ZR.Model.FjhsRecycleSampling.Dto;
+using ZR.Model.FjhsRecycleSampling;
+using ZR.Service.FjhsRecycle.IFjhsRecycleService;
+
+//创建时间:2025-09-10
+namespace ZR.Admin.WebApi.Controllers.FjhsDetail
+{
+ ///
+ /// 回收明细表
+ ///
+ [Verify]
+ [Route("FjhsDetail/FjhsRecycleDetail")]
+ public class FjhsRecycleDetailController : BaseController
+ {
+ ///
+ /// 回收明细表接口
+ ///
+ private readonly IFjhsRecycleDetailService _FjhsRecycleDetailService;
+ private readonly IFjhsRecycleTaskHeadService _FjhsRecycleTaskHeadService;
+
+ public FjhsRecycleDetailController(IFjhsRecycleDetailService FjhsRecycleDetailService, IFjhsRecycleTaskHeadService fjhsRecycleTaskHeadService)
+ {
+ _FjhsRecycleDetailService = FjhsRecycleDetailService;
+ _FjhsRecycleTaskHeadService = fjhsRecycleTaskHeadService;
+ }
+
+
+
+ ///
+ /// 更新回收任务
+ ///
+ ///
+ //[HttpPut]
+ [HttpPost("updateFjhsRecycleSamplingDetail")] // 关键:添加路由后缀,与前端URL对应
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:edit")]
+ [Log(Title = "回收任务", BusinessType = BusinessType.UPDATE)]
+ public IActionResult updateFjhsRecycleSamplingDetail([FromBody] FjhsRecycleDetailDto parm)
+ {
+
+
+ //var modal = parm.materialDetails.Adapt().ToUpdate(HttpContext);
+ //var response = _FjhsRecycleSamplingDetailService.UpdateFjhsRecycleSamplingDetail(modal);
+
+ //return ToResponse(response);
+
+
+ // 基础参数验证
+ if (parm == null)
+ {
+ return BadRequest("参数不能为空");
+ }
+
+ if (parm.materialDetails == null || !parm.materialDetails.Any())
+ {
+ return BadRequest("没有需要更新的材料详情数据");
+ }
+
+
+
+ if (parm.IsMeetRecycleCondition == "不具备")
+ {
+ parm.IsMeetRecycleCondition = "0"; // 或直接转换为整数类型 0
+ }
+ else if (parm.IsMeetRecycleCondition == "具备")
+ {
+ parm.IsMeetRecycleCondition = "1"; // 或直接转换为整数类型 1
+ }
+ else
+ {
+ parm.IsMeetRecycleCondition = "1"; // 或直接转换为整数类型 1
+
+ }
+
+
+
+ try
+ {
+
+ // 转换为实体并设置更新信息
+ var main = parm.Adapt()
+ .ToUpdate(HttpContext);
+
+ // 调用服务更新
+
+
+
+ var m = _FjhsRecycleTaskHeadService.UpdateFjhsRecycleTaskHead(main);
+
+
+ foreach (var item in parm.materialDetails)
+ {
+ // 单个项目验证
+ if (item == null /*|| item.Id <= 0*/) // 假设Id是必须的标识字段
+ {
+ return BadRequest("存在无效的材料详情记录");
+ }
+
+
+
+
+
+
+ // 转换为实体并设置更新信息
+ var modal = item.Adapt()
+ .ToUpdate(HttpContext);
+
+ // 调用服务更新
+ var updateSuccess = _FjhsRecycleDetailService
+ .UpdateFjhsRecycleDetail(modal);
+
+ // 处理单个更新失败的情况
+ if (updateSuccess <= 0)
+ {
+ return StatusCode(500, $"更新失败,ID: {item.MaterialName}");
+ }
+ }
+
+
+
+ // 所有更新成功
+ return Ok($"成功更新 {parm.materialDetails.Count} 条材料详情记录");
+ }
+ catch (Exception ex)
+ {
+ // 直接返回异常信息(生产环境建议只返回通用信息)
+ return StatusCode(500, $"系统异常:{ex.Message}");
+ }
+
+ }
+
+
+
+
+ ///
+ /// 查询回收明细表列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:list")]
+ public IActionResult QueryFjhsRecycleDetail([FromQuery] FjhsRecycleDetailQueryDto parm)
+ {
+ var response = _FjhsRecycleDetailService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询回收明细表详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:query")]
+ public IActionResult GetFjhsRecycleDetail(int Id)
+ {
+
+
+
+ try
+ {
+ var response = _FjhsRecycleDetailService.GetInfo(Id).First();
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+ catch (Exception ex)
+ {
+ var m = ex.Message;
+
+ throw;
+ }
+ }
+
+ ///
+ /// 添加回收明细表
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:add")]
+ [Log(Title = "回收明细表", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddFjhsRecycleDetail([FromBody] FjhsRecycleDetailDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _FjhsRecycleDetailService.AddFjhsRecycleDetail(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新回收明细表
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:edit")]
+ [Log(Title = "回收明细表", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateFjhsRecycleDetail([FromBody] FjhsRecycleDetailDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _FjhsRecycleDetailService.UpdateFjhsRecycleDetail(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除回收明细表
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:delete")]
+ [Log(Title = "回收明细表", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteFjhsRecycleDetail([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_FjhsRecycleDetailService.Delete(idArr));
+ }
+
+ ///
+ /// 导出回收明细表
+ ///
+ ///
+ [Log(Title = "回收明细表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:export")]
+ public IActionResult Export([FromQuery] FjhsRecycleDetailQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _FjhsRecycleDetailService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "回收明细表", "回收明细表");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ ///
+ /// 清空回收明细表
+ ///
+ ///
+ [Log(Title = "回收明细表", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_FjhsRecycleDetailService.TruncateFjhsRecycleDetail());
+ }
+
+ ///
+ /// 导入
+ ///
+ ///
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "回收明细表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "fjhsrecycledetail:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ {
+ List list = new();
+ using (var stream = formFile.OpenReadStream())
+ {
+ list = stream.Query(startCell: "A1").ToList();
+ }
+
+ return SUCCESS(_FjhsRecycleDetailService.ImportFjhsRecycleDetail(list.Adapt>()));
+ }
+
+ ///
+ /// 回收明细表导入模板下载
+ ///
+ ///
+ [HttpGet("importTemplate")]
+ [Log(Title = "回收明细表模板", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [AllowAnonymous]
+ public IActionResult ImportTemplateExcel()
+ {
+ var result = DownloadImportTemplate(new List() { }, "FjhsRecycleDetail");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/FjhsRecycle/FjhsRecycleTaskHeadController.cs b/ZR.Admin.WebApi/Controllers/FjhsRecycle/FjhsRecycleTaskHeadController.cs
new file mode 100644
index 00000000..caa52ec0
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/FjhsRecycle/FjhsRecycleTaskHeadController.cs
@@ -0,0 +1,783 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.FjhsRecycle.Dto;
+using ZR.Model.FjhsRecycle;
+using ZR.Service.FjhsRecycle.IFjhsRecycleService;
+using ZR.Admin.WebApi.Filters;
+using MiniExcelLibs;
+using ZR.Service.FjhsRecycleSampling.IFjhsRecycleSamplingService;
+using ZR.Service.FjhsRecycleSampling;
+using Aliyun.OSS;
+using ZR.Model.FjhsRecycleSampling;
+using ZR.Model.FjhsRecycleSampling.Dto;
+using Microsoft.IdentityModel.Tokens;
+using Org.BouncyCastle.Crypto;
+using ZR.Service.FjhsRecycle;
+using SqlSugar;
+using System.Collections.Generic;
+
+//创建时间:2025-08-15
+namespace ZR.Admin.WebApi.Controllers.FjhsRecycle
+{
+ ///
+ /// 回收任务主表
+ ///
+ [Verify]
+ [Route("FjhsRecycle/FjhsRecycleTaskHead")]
+ public class FjhsRecycleTaskHeadController : BaseController
+ {
+ ///
+ /// 回收任务主表接口
+ ///
+ private readonly IFjhsRecycleTaskHeadService _FjhsRecycleTaskHeadService;
+
+ private readonly IFjhsRecycleTaskDetailService _FfjhsRecycleTaskDetailService;
+ private readonly IFjhsRecycleSamplingDetailService _FjhsRecycleSamplingDetailService;
+
+ private readonly ISysUserService _sysUserService;
+
+ public FjhsRecycleTaskHeadController(IFjhsRecycleTaskHeadService FjhsRecycleTaskHeadService, IFjhsRecycleTaskDetailService FfjhsRecycleTaskDetailService, ISysUserService sysUserService, IFjhsRecycleSamplingDetailService FjhsRecycleSamplingDetailService)
+ {
+ _FjhsRecycleTaskHeadService = FjhsRecycleTaskHeadService;
+ _FfjhsRecycleTaskDetailService = FfjhsRecycleTaskDetailService;
+ _FjhsRecycleSamplingDetailService = FjhsRecycleSamplingDetailService;
+ _sysUserService = sysUserService;
+ }
+
+ ///
+ /// 查询回收任务主表列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:list")]
+ public IActionResult QueryFjhsRecycleTaskHead([FromQuery] FjhsRecycleTaskHeadQueryDto parm)
+ {
+ var response = _FjhsRecycleTaskHeadService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询回收任务主表详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:query")]
+ public IActionResult GetFjhsRecycleTaskHead(int Id)
+ {
+ var response = _FjhsRecycleTaskHeadService.GetInfo(Id).First();
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+
+
+
+ ///
+ /// 查询堪样任务表和主表详情,在这里暂时没有用,需要查前handlePreview按钮对应的逻辑
+ ///
+ ///
+ ///
+ [HttpGet("sampleList/{Id}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:query")]
+ public IActionResult getFjhsRecycleSampleList(int Id)
+ {
+ var response = _FjhsRecycleTaskHeadService.GetFjhsRecycleSampleList(Id).First();
+
+ var info = response.Adapt();
+
+ //var info = "";
+
+
+
+ return SUCCESS(info);
+ }
+
+
+
+ ///
+ /// 搬运回收清单
+ ///
+ ///
+ ///
+ [HttpGet("transport/{Id}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:query")]
+ public IActionResult transport(int Id)
+ {
+ var response = _FjhsRecycleTaskHeadService.GetFjhsRecycleSampleList(Id).First();
+
+ var info = response.Adapt();
+
+ //var info = "";
+
+
+
+ return SUCCESS(info);
+ }
+
+
+
+
+ /////
+ ///// 查询回收任务主表详情
+ /////
+ /////
+ /////
+ //[HttpGet("{Id}")]
+ //[ActionPermissionFilter(Permission = "fjhsrecycletaskhead:query")]
+ //public IActionResult getFjhsRecycleTaskMaterial(int Id)
+ //{
+ // var response = _FjhsRecycleTaskHeadService.GetInfo(Id);
+
+ // var info = response.Adapt();
+ // return SUCCESS(info);
+ //}
+
+
+
+ // 新增:获取回收任务的物料详情列表
+ ///
+ /// 查询回收任务关联的物料详情
+ ///
+ /// 回收任务主表ID(关联查询条件)
+ /// 物料详情列表
+ [HttpGet("material/{taskId}")] // 路由匹配前端的 "material/{taskId}"
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:query")] // 复用主表的查询权限
+ public IActionResult GetFjhsRecycleTaskMaterial(int taskId)
+ {
+ // 1. 调用服务层获取物料详情(根据实际业务调整方法名)
+ var materialList = _FfjhsRecycleTaskDetailService.GetInfo(taskId);
+
+ // 2. 转换为DTO(若有物料详情的DTO)
+ //var materialDtos = materialList.Adapt>();
+
+ var materialDtos = materialList.Adapt();
+
+ // 3. 返回统一格式的成功响应(与主表接口保持一致)
+ return SUCCESS(materialDtos);
+ }
+
+
+
+
+ ///
+ /// 保存回收任务后生成堪样任务
+ ///
+ /// 回收任务主键ID
+ /// 请求头中的当前用户名(用于日志和权限)
+ ///
+ [HttpPost("generateSample")] // 接口路径与前端一致
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:generateSample")] // 对应权限
+ [Log(Title = "回收任务生成堪样", BusinessType = BusinessType.OTHER)] // 日志记录
+ public IActionResult GenerateSampleTask(
+ // [FromQuery] long taskId, // 从查询参数获取回收任务ID(与前端params对应)
+ // [FromBody] List taskIds, // 接收ID数组(参数名改为taskIds,避免歧义)
+ // [FromBody] GenerateSampleRequest request, // 从请求体获取ID列表
+ [FromBody] GenerateSampleRequest taskIds,
+
+ //[FromHeader(Name = "updater")] string username) // 从请求头获取用户名
+ [FromHeader(Name = "username")] string username) // 从请求头获取用户名
+ {
+ // 1.参数校验
+ //if (taskId <= 0)
+ //{
+ // return ToResponse(ResultCode.FAIL, "回收任务ID不能为空");
+ //}
+
+ //if (taskIds == null || taskIds.Count == 0)
+ //{
+ // return ToResponse(ResultCode.FAIL, "回收任务ID列表不能为空");
+ //}
+ //if (taskIds.Any(id => id <= 0))
+ //{
+ // return ToResponse(ResultCode.FAIL, "存在无效的回收任务ID");
+ //}
+
+ if (string.IsNullOrEmpty(username))
+ {
+ return ToResponse(ResultCode.FAIL, "未获取到当前用户信息");
+ }
+
+ // var taskIds = Tools.SplitAndConvert(taskId.ToString());
+
+ try
+ {
+ foreach (var taskId1 in taskIds.TaskIds)
+ {
+
+ var response = _FjhsRecycleTaskHeadService.Getlist(taskId1.ParseToInt());
+
+
+
+
+
+ if (string.IsNullOrEmpty(response.First().Site))
+ {
+ return ToResponse(ResultCode.FAIL, "生成堪样任务前局点不能为空");
+ }
+
+ if (string.IsNullOrEmpty(response.First().DemandUnit))
+ {
+ return ToResponse(ResultCode.FAIL, "生成堪样任务前需求单位不能为空");
+ }
+
+ if (string.IsNullOrEmpty(response.First().ContactPerson))
+ {
+ return ToResponse(ResultCode.FAIL, "生成堪样任务前联系人不能为空");
+ }
+
+ if (string.IsNullOrEmpty(response.First().ContactPhone))
+ {
+ return ToResponse(ResultCode.FAIL, "生成堪样任务前联系电话不能为空");
+ }
+
+
+ foreach (var item in response)
+ {
+ var requst = new FjhsRecycleSamplingDetail
+ {
+ DocNumber = item.DocNumber,
+ MaterialName = item.materialName,
+ AssetName = item.assetName,
+ AssetCardNumber = item.assetCardNo,
+ Specification = item.specification,
+ UnitCard = item.unit,
+ EstimatedRecycleQuantity = int.Parse(item.expectedRecycleQty),
+
+
+ };
+
+
+ var modal = requst.Adapt().ToCreate(HttpContext);
+
+ var resulte = _FjhsRecycleSamplingDetailService.AddFjhsRecycleSamplingDetail(modal);
+
+ }
+
+
+
+
+
+
+ var requsetTask = new FjhsRecycleTaskHead()
+ {
+ CurrentProcessStatus = "01",
+ Id = response.First().Id,
+ };
+
+
+
+ var m =_FjhsRecycleTaskHeadService.UpdateFjhsRecycleTaskHead(requsetTask);
+
+
+ // return SUCCESS(resulte);
+ }
+ return SUCCESS("批量生成堪样任务成功");
+ }
+ catch (Exception ex)
+ {
+ var resulte = ex.Message;
+
+ throw;
+ }
+
+
+
+ }
+
+
+
+
+ ///
+ /// 添加回收任务主表
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:add")]
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddFjhsRecycleTaskHead([FromBody] FjhsRecycleTaskHeadDto parm)
+ {
+
+
+
+
+
+
+ // 2. 生成单据编号:当前年月日(yyyyMMdd) + 序号
+ // 假设序号从1开始,实际应用中可能需要从数据库获取最大序号
+ string datePart = DateTime.Now.ToString("yyyyMMdd");
+ DateTime datePart1 = DateTime.Now;
+
+ int sequence = _FjhsRecycleTaskHeadService.GetMaxSequenceByDate(datePart1); // 这里可以根据实际情况从数据库获取最新序号
+
+ var username = parm.Creator; //创建人
+ var city = _sysUserService.SelectUser(username).City; //归属地
+
+ // 3. 创建主表数据并设置相关字段
+
+
+ parm.DocNumber = $"FJ{datePart}{sequence:D4}";// 格式如:FJ202508250001 单据编号
+ parm.CurrentProcessStatus = "0"; //当前流程状态
+ parm.CurrentExpectedStatus = "1"; //当前预期状态
+ parm.BelongArea = city; //归属地
+ parm.CreateTime = datePart1; //创建时间
+
+
+
+
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _FjhsRecycleTaskHeadService.AddFjhsRecycleTaskHead(modal);
+
+ // 4 处理明细数据,可以在这里为明细设置关联的单据编号
+
+ FjhsRecycleTaskDetail marterDetail = new FjhsRecycleTaskDetail();
+
+ foreach (var detail in parm.materialDetails)
+ {
+
+
+ marterDetail.DocNumber = parm.DocNumber; // 关联主表单据编号
+ marterDetail.CreateTime = DateTime.Now;
+ marterDetail.Creator = username;//创建人
+ marterDetail.StorageTime = parm.StorageTime; //缴库时间
+ marterDetail.AssetName = detail.assetName; //资产名称
+ marterDetail.AssetCardNumber = detail.assetCardNumber; //资产卡片号
+ marterDetail.MaterialName = detail.materialName; //物料名称
+ marterDetail.UnitCard = detail.unitCard; //计量单位
+ marterDetail.Specification = detail.specification; //规格型号
+ marterDetail.ApprovedQuantity = int.Parse(detail.approvedQuantity); //预计回收数据
+
+
+ var marterDetailDate = marterDetail.Adapt().ToCreate(HttpContext);
+ var response1 = _FfjhsRecycleTaskDetailService.AddFjhsRecycleTaskDetail(marterDetailDate);
+
+
+ }
+
+
+
+
+
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 新增回收任务物料明细
+ ///
+ ///
+ //[HttpPost("addDetail/{parm}")]
+ // 修正:移除{parm},路由仅为"addDetail"(与前端路径对应)
+ [HttpPost("addDetail")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:add")]
+ [Log(Title = "回收任务物料明细", BusinessType = BusinessType.INSERT)]
+ public IActionResult addFjhsRecycleTaskDetail([FromBody] FjhsRecycleTaskDetailDto parm)
+ {
+ //var modal = parm.Adapt().ToCreate(HttpContext);
+
+ //var response = _FfjhsRecycleTaskDetailService.AddFjhsRecycleTaskDetail(modal);
+
+ //return SUCCESS(response);
+
+ try
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+ var response = _FfjhsRecycleTaskDetailService.AddFjhsRecycleTaskDetail(modal);
+ return SUCCESS(response);
+ }
+ catch (Exception ex)
+ {
+ // 日志记录
+ return StatusCode(500, "添加失败:" + ex.Message);
+ }
+
+
+
+ }
+
+
+
+
+ ///
+ /// 新增图片上传
+ ///
+ ///
+ //[HttpPost("addDetail/{parm}")]
+ // 修正:移除{parm},路由仅为"addDetail"(与前端路径对应)
+ [HttpPost("Image")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:add")]
+ [Log(Title = "回收任务物料明细", BusinessType = BusinessType.INSERT)]
+ public IActionResult uploadImageRelation([FromBody] FjhsRecycleTaskDetailDto parm)
+ {
+ //var modal = parm.Adapt().ToCreate(HttpContext);
+
+ //var response = _FfjhsRecycleTaskDetailService.AddFjhsRecycleTaskDetail(modal);
+
+ //return SUCCESS(response);
+
+ try
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+ var response = _FfjhsRecycleTaskDetailService.AddFjhsRecycleTaskDetail(modal);
+ return SUCCESS(response);
+ }
+ catch (Exception ex)
+ {
+ // 日志记录
+ return StatusCode(500, "添加失败:" + ex.Message);
+ }
+
+
+
+ }
+
+
+
+
+
+
+ ///
+ /// 更新回收任务主表
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:edit")]
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateFjhsRecycleTaskHead([FromBody] FjhsRecycleTaskHeadDto parm)
+ {
+ //var username1 = username;
+
+
+ if (parm.IsMeetRecycleCondition == "不具备")
+ {
+ parm.IsMeetRecycleCondition = "0"; // 或直接转换为整数类型 0
+ }
+ else if (parm.IsMeetRecycleCondition == "具备")
+ {
+ parm.IsMeetRecycleCondition = "1"; // 或直接转换为整数类型 1
+ }
+ else
+ {
+ parm.IsMeetRecycleCondition = "1"; // 或直接转换为整数类型 1
+
+ }
+
+
+
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _FjhsRecycleTaskHeadService.UpdateFjhsRecycleTaskHead(modal);
+
+ return ToResponse(response);
+
+
+
+ //// 1. 参数校验
+ //if (parm == null)
+ //{
+ // return ToResponse(ResultCode.FAIL, "参数不能为空");
+ //}
+
+ //if (string.IsNullOrEmpty(username))
+ //{
+ // return ToResponse(ResultCode.FAIL, "未获取到用户信息");
+ //}
+
+ //if (parm.Id <= 0)
+ //{
+ // return ToResponse(ResultCode.FAIL, "主键ID不能为空");
+ //}
+
+ //// 2. 转换DTO为实体并设置审计字段
+ //var modal = parm.Adapt();
+
+ //// 3. 设置更新人信息(关键修改点)
+ //modal.Updater = username; // 更新修改人
+ //modal.UpdateTime = DateTime.Now; // 更新修改时间
+
+ //// 4. 如果需要,可以在这里补充其他业务逻辑
+ //// 例如:验证当前用户是否有权限修改该记录
+ //// var user = _sysUserService.SelectUser(username);
+ //// if (user == null)
+ //// {
+ //// return ToResponse(ResultCode.FAIL, "用户不存在");
+ //// }
+
+ //// 5. 调用服务层执行更新操作
+ //var response = _FjhsRecycleTaskHeadService.UpdateFjhsRecycleTaskHead(modal);
+
+ //return ToResponse(response);
+
+ }
+
+
+
+
+ ///
+ /// 删除回收任务主表
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:delete")]
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteFjhsRecycleTaskHead([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_FjhsRecycleTaskHeadService.Delete(idArr));
+ }
+
+
+
+ ///
+ /// 取消回收任务主表
+ ///
+ ///
+ [HttpPost("cance/{ids}")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:cance")]
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.DELETE)]
+ public IActionResult CanceFjhsRecycleTaskHead([FromRoute] string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_FjhsRecycleTaskHeadService.CanceFjhsRecycleTaskHead(idArr));
+ }
+
+
+
+ ///
+ /// 导出回收任务主表
+ ///
+ ///
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
+ [HttpGet("export")]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:export")]
+ public IActionResult Export([FromQuery] FjhsRecycleTaskHeadQueryDto parm)
+ {
+ parm.PageNum = 1;
+ parm.PageSize = 100000;
+ var list = _FjhsRecycleTaskHeadService.ExportList(parm).Result;
+ if (list == null || list.Count <= 0)
+ {
+ return ToResponse(ResultCode.FAIL, "没有要导出的数据");
+ }
+ var result = ExportExcelMini(list, "回收任务主表", "回收任务主表");
+ return ExportExcel(result.Item2, result.Item1);
+ }
+
+ ///
+ /// 清空回收任务主表
+ ///
+ ///
+ [Log(Title = "回收任务主表", BusinessType = BusinessType.CLEAN)]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:delete")]
+ [HttpPost("clean")]
+ public IActionResult Clear()
+ {
+ if (!HttpContextExtension.IsAdmin(HttpContext))
+ {
+ return ToResponse(ResultCode.FAIL, "操作失败");
+ }
+ return SUCCESS(_FjhsRecycleTaskHeadService.TruncateFjhsRecycleTaskHead());
+ }
+
+ /////
+ ///// 导入
+ /////
+ /////
+ /////
+ //[HttpPost("importData")]
+ //[Log(Title = "回收任务主表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ //[ActionPermissionFilter(Permission = "fjhsrecycletaskhead:import")]
+ //public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile)
+ //{
+ // List list = new();
+ // using (var stream = formFile.OpenReadStream())
+ // {
+ // list = stream.Query(startCell: "A1").ToList();
+ // }
+
+ // return SUCCESS(_FjhsRecycleTaskHeadService.ImportFjhsRecycleTaskHead(list.Adapt>()));
+ //}
+
+
+ ///
+ /// 导入
+ ///
+ ///
+ /// 从请求头获取用户名
+ ///
+ [HttpPost("importData")]
+ [Log(Title = "回收任务主表导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false)]
+ [ActionPermissionFilter(Permission = "fjhsrecycletaskhead:import")]
+ public IActionResult ImportData([FromForm(Name = "file")] IFormFile formFile, [FromHeader(Name = "userName")] string username)
+ {
+ //List list = new();
+
+
+ //using (var stream = formFile.OpenReadStream())
+ //{
+ // list = stream.Query(startCell: "A1").ToList();
+ //}
+
+ //return SUCCESS(_FjhsRecycleTaskHeadService.ImportFjhsRecycleTaskHead(list.Adapt