diff --git a/ZR.Admin.WebApi/Controllers/Business/CamWorkerController.cs b/ZR.Admin.WebApi/Controllers/Business/CamWorkerController.cs
new file mode 100644
index 0000000..47e22a0
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/Business/CamWorkerController.cs
@@ -0,0 +1,100 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+using ZR.Service.Business.IBusinessService;
+
+//创建时间:2025-08-18
+namespace ZR.Admin.WebApi.Controllers.Business
+{
+ ///
+ /// 工作人员记录
+ ///
+ [Route("business/CamWorker")]
+ public class CamWorkerController : BaseController
+ {
+ ///
+ /// 工作人员记录接口
+ ///
+ private readonly ICamWorkerService _CamWorkerService;
+
+ public CamWorkerController(ICamWorkerService CamWorkerService)
+ {
+ _CamWorkerService = CamWorkerService;
+ }
+
+ ///
+ /// 查询工作人员记录列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "camworker:list")]
+ public IActionResult QueryCamWorker([FromQuery] CamWorkerQueryDto parm)
+ {
+ var response = _CamWorkerService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询工作人员记录详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "camworker:query")]
+ public IActionResult GetCamWorker(long Id)
+ {
+ var response = _CamWorkerService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加工作人员记录
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "camworker:add")]
+ [Log(Title = "工作人员记录", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddCamWorker([FromBody] CamWorkerDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _CamWorkerService.AddCamWorker(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新工作人员记录
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "camworker:edit")]
+ [Log(Title = "工作人员记录", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateCamWorker([FromBody] CamWorkerDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _CamWorkerService.UpdateCamWorker(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除工作人员记录
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "camworker:delete")]
+ [Log(Title = "工作人员记录", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteCamWorker([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_CamWorkerService.Delete(idArr));
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/Business/CamWorkrecordController.cs b/ZR.Admin.WebApi/Controllers/Business/CamWorkrecordController.cs
new file mode 100644
index 0000000..165e25a
--- /dev/null
+++ b/ZR.Admin.WebApi/Controllers/Business/CamWorkrecordController.cs
@@ -0,0 +1,100 @@
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+using ZR.Service.Business.IBusinessService;
+
+//创建时间:2025-08-18
+namespace ZR.Admin.WebApi.Controllers.Business
+{
+ ///
+ /// 工作记录
+ ///
+ [Route("business/CamWorkrecord")]
+ public class CamWorkrecordController : BaseController
+ {
+ ///
+ /// 工作记录接口
+ ///
+ private readonly ICamWorkrecordService _CamWorkrecordService;
+
+ public CamWorkrecordController(ICamWorkrecordService CamWorkrecordService)
+ {
+ _CamWorkrecordService = CamWorkrecordService;
+ }
+
+ ///
+ /// 查询工作记录列表
+ ///
+ ///
+ ///
+ [HttpGet("list")]
+ [ActionPermissionFilter(Permission = "camworkrecord:list")]
+ public IActionResult QueryCamWorkrecord([FromQuery] CamWorkrecordQueryDto parm)
+ {
+ var response = _CamWorkrecordService.GetList(parm);
+ return SUCCESS(response);
+ }
+
+
+ ///
+ /// 查询工作记录详情
+ ///
+ ///
+ ///
+ [HttpGet("{Id}")]
+ [ActionPermissionFilter(Permission = "camworkrecord:query")]
+ public IActionResult GetCamWorkrecord(int Id)
+ {
+ var response = _CamWorkrecordService.GetInfo(Id);
+
+ var info = response.Adapt();
+ return SUCCESS(info);
+ }
+
+ ///
+ /// 添加工作记录
+ ///
+ ///
+ [HttpPost]
+ [ActionPermissionFilter(Permission = "camworkrecord:add")]
+ [Log(Title = "工作记录", BusinessType = BusinessType.INSERT)]
+ public IActionResult AddCamWorkrecord([FromBody] CamWorkrecordDto parm)
+ {
+ var modal = parm.Adapt().ToCreate(HttpContext);
+
+ var response = _CamWorkrecordService.AddCamWorkrecord(modal);
+
+ return SUCCESS(response);
+ }
+
+ ///
+ /// 更新工作记录
+ ///
+ ///
+ [HttpPut]
+ [ActionPermissionFilter(Permission = "camworkrecord:edit")]
+ [Log(Title = "工作记录", BusinessType = BusinessType.UPDATE)]
+ public IActionResult UpdateCamWorkrecord([FromBody] CamWorkrecordDto parm)
+ {
+ var modal = parm.Adapt().ToUpdate(HttpContext);
+ var response = _CamWorkrecordService.UpdateCamWorkrecord(modal);
+
+ return ToResponse(response);
+ }
+
+ ///
+ /// 删除工作记录
+ ///
+ ///
+ [HttpPost("delete/{ids}")]
+ [ActionPermissionFilter(Permission = "camworkrecord:delete")]
+ [Log(Title = "工作记录", BusinessType = BusinessType.DELETE)]
+ public IActionResult DeleteCamWorkrecord([FromRoute]string ids)
+ {
+ var idArr = Tools.SplitAndConvert(ids);
+
+ return ToResponse(_CamWorkrecordService.Delete(idArr, "删除工作记录"));
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs
index 479ed7d..8c79cb6 100644
--- a/ZR.Admin.WebApi/Controllers/CommonController.cs
+++ b/ZR.Admin.WebApi/Controllers/CommonController.cs
@@ -5,10 +5,15 @@ using Microsoft.Extensions.Options;
using MiniExcelLibs;
using ZR.Infrastructure.IPTools;
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
using ZR.Model.Dto;
using ZR.Model.System;
using ZR.ServiceCore.Resources;
+using ZR.Service.Business.IBusinessService;
+using ZR.Service.Business;
+using System.Threading.Tasks;
namespace ZR.Admin.WebApi.Controllers
{
@@ -28,6 +33,15 @@ namespace ZR.Admin.WebApi.Controllers
public readonly ISysDeptService _deptService;
public readonly ISysDictDataService sysDictDataService;
///
+ /// 工作记录接口
+ ///
+ private readonly ICamWorkrecordService _CamWorkrecordService;
+
+ ///
+ /// 工作人员记录接口
+ ///
+ private readonly ICamWorkerService _CamWorkerService;
+ ///
/// CommonController 构造函数
///
///
@@ -41,7 +55,9 @@ namespace ZR.Admin.WebApi.Controllers
IWebHostEnvironment webHostEnvironment,
ISysFileService fileService,
ISysDeptService deptService,
- ISysDictDataService sysDictDataService)
+ ISysDictDataService sysDictDataService,
+ ICamWorkrecordService _CamWorkrecordService,
+ ICamWorkerService camWorkerService)
{
WebHostEnvironment = webHostEnvironment;
SysFileService = fileService;
@@ -49,6 +65,8 @@ namespace ZR.Admin.WebApi.Controllers
_localizer = stringLocalizer;
_deptService = deptService;
this.sysDictDataService = sysDictDataService;
+ this._CamWorkrecordService = _CamWorkrecordService;
+ _CamWorkerService = camWorkerService;
}
///
@@ -228,5 +246,43 @@ namespace ZR.Admin.WebApi.Controllers
return SUCCESS(new { logo = file?.AccessUrl ?? "", deptList, construction = list });
}
+
+ ///
+ /// 添加工作记录
+ ///
+ ///
+ [HttpPost]
+ [Route("/addworkrecord")]
+ public async Task AddCamWorkRecord([FromBody] CamRecordWorkDto parm)
+ {
+ if (parm.Workers == null || parm.Workers.Count == 0)
+ {
+ return ToResponse(ResultCode.PARAM_ERROR, "请选择工作人员");
+ }
+ if (string.IsNullOrEmpty(parm.Image))
+ {
+ return ToResponse(ResultCode.PARAM_ERROR, "请上传图片");
+ }
+ var modal = parm.Adapt().ToCreate(HttpContext);
+ modal.CreateTime = DateTime.Now;
+ modal.UpdateTime = DateTime.Now;
+ modal = await _CamWorkrecordService.Insertable(modal).ExecuteReturnEntityAsync();
+ var response = _CamWorkrecordService.AddCamWorkrecord(modal);
+ var workid = response.Id;
+ var workers = new List();
+ foreach (var item in parm.Workers)
+ {
+ var worker = new CamWorker()
+ {
+ WorkrecordId = workid,
+ WorkerName = item,
+ CreateTime = DateTime.Now,
+ UpdateTime = DateTime.Now
+ };
+ workers.Add(worker);
+ }
+ _CamWorkerService.AsInsertable(workers).ExecuteCommand();
+ return SUCCESS(response);
+ }
}
}
diff --git a/ZR.Model/Business/CamWorker.cs b/ZR.Model/Business/CamWorker.cs
new file mode 100644
index 0000000..f94b58d
--- /dev/null
+++ b/ZR.Model/Business/CamWorker.cs
@@ -0,0 +1,37 @@
+
+namespace ZR.Model.Business
+{
+ ///
+ /// 工作人员记录
+ ///
+ [SugarTable("cam_worker")]
+ public class CamWorker
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public long Id { get; set; }
+
+ ///
+ /// 施工记录Id
+ ///
+ public int WorkrecordId { get; set; }
+
+ ///
+ /// 人员
+ ///
+ public string WorkerName { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Business/CamWorkrecord.cs b/ZR.Model/Business/CamWorkrecord.cs
new file mode 100644
index 0000000..eda2b91
--- /dev/null
+++ b/ZR.Model/Business/CamWorkrecord.cs
@@ -0,0 +1,72 @@
+
+namespace ZR.Model.Business
+{
+ ///
+ /// 工作记录
+ ///
+ [SugarTable("cam_workrecord")]
+ public class CamWorkrecord
+ {
+ ///
+ /// 主键
+ ///
+ [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+ public int Id { get; set; }
+
+ ///
+ /// 部门名称
+ ///
+ public string DeptName { get; set; }
+
+ ///
+ /// 图片
+ ///
+ public string ImageUrl { get; set; }
+
+ ///
+ /// 拍照时间
+ ///
+ public DateTime? RecordTime { get; set; }
+
+ ///
+ /// 经度
+ ///
+ public string Longitude { get; set; }
+
+ ///
+ /// 纬度
+ ///
+ public string Latitude { get; set; }
+
+ ///
+ /// 拍照地址
+ ///
+ public string Address { get; set; }
+
+ ///
+ /// 工作内容
+ ///
+ public string Content { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public string StatusName { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remarks { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? CreateTime { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ public DateTime? UpdateTime { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Business/Dto/CamWorkerDto.cs b/ZR.Model/Business/Dto/CamWorkerDto.cs
new file mode 100644
index 0000000..31cde2c
--- /dev/null
+++ b/ZR.Model/Business/Dto/CamWorkerDto.cs
@@ -0,0 +1,32 @@
+
+namespace ZR.Model.Business.Dto
+{
+ ///
+ /// 工作人员记录查询对象
+ ///
+ public class CamWorkerQueryDto : PagerInfo
+ {
+ }
+
+ ///
+ /// 工作人员记录输入输出对象
+ ///
+ public class CamWorkerDto
+ {
+ [Required(ErrorMessage = "主键不能为空")]
+ public long Id { get; set; }
+
+ [Required(ErrorMessage = "施工记录Id不能为空")]
+ public int WorkrecordId { get; set; }
+
+ [Required(ErrorMessage = "人员不能为空")]
+ public string WorkerName { get; set; }
+
+ public DateTime? CreateTime { get; set; }
+
+ public DateTime? UpdateTime { get; set; }
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/ZR.Model/Business/Dto/CamWorkrecordDto.cs b/ZR.Model/Business/Dto/CamWorkrecordDto.cs
new file mode 100644
index 0000000..fefca1c
--- /dev/null
+++ b/ZR.Model/Business/Dto/CamWorkrecordDto.cs
@@ -0,0 +1,106 @@
+
+namespace ZR.Model.Business.Dto
+{
+ ///
+ /// 工作记录查询对象
+ ///
+ public class CamWorkrecordQueryDto : PagerInfo
+ {
+ public string DeptName { get; set; }
+ public string Address { get; set; }
+ public string Content { get; set; }
+ public string StatusName { get; set; }
+ }
+
+ ///
+ /// 工作记录输入输出对象
+ ///
+ public class CamWorkrecordDto
+ {
+ [Required(ErrorMessage = "主键不能为空")]
+ public int Id { get; set; }
+
+ public string DeptName { get; set; }
+
+ public string ImageUrl { get; set; }
+
+ public DateTime? RecordTime { get; set; }
+
+ public string Longitude { get; set; }
+
+ public string Latitude { get; set; }
+
+ public string Address { get; set; }
+
+ public string Content { get; set; }
+
+ public string StatusName { get; set; }
+
+ public string Remarks { get; set; }
+
+ public DateTime? CreateTime { get; set; }
+
+ public DateTime? UpdateTime { get; set; }
+
+
+
+ [ExcelColumn(Name = "状态")]
+ public string StatusNameLabel { get; set; }
+ }
+
+ ///
+ ///
+ ///
+ public class CamRecordWorkDto
+ {
+ ///
+ /// 部门名称
+ ///
+ public string DeptName { get; set; }
+
+ ///
+ /// 图片地址
+ ///
+ public string Image { get; set; }
+
+ ///
+ /// 工作记录时间
+ ///
+ public DateTime? RecordTime { get; set; }
+
+ ///
+ /// 经度
+ ///
+ public string Longitude { get; set; }
+
+ ///
+ /// 纬度
+ ///
+ public string Latitude { get; set; }
+
+ ///
+ /// 工作地点
+ ///
+ public string Address { get; set; }
+
+ ///
+ /// 工作内容
+ ///
+ public string Content { get; set; }
+
+ ///
+ /// 状态
+ ///
+ public string StatusName { get; set; }
+
+ ///
+ ///备注
+ ///
+ public string Remarks { get; set; }
+
+ ///
+ ///
+ ///
+ public List Workers { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/Business/CamWorkerService.cs b/ZR.Service/Business/CamWorkerService.cs
new file mode 100644
index 0000000..faf010e
--- /dev/null
+++ b/ZR.Service/Business/CamWorkerService.cs
@@ -0,0 +1,80 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 工作人员记录Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(ICamWorkerService), ServiceLifetime = LifeTime.Transient)]
+ public class CamWorkerService : BaseService, ICamWorkerService
+ {
+ ///
+ /// 查询工作人员记录列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(CamWorkerQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ //.OrderBy("Id desc")
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public CamWorker GetInfo(long Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加工作人员记录
+ ///
+ ///
+ ///
+ public CamWorker AddCamWorker(CamWorker model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改工作人员记录
+ ///
+ ///
+ ///
+ public int UpdateCamWorker(CamWorker model)
+ {
+ return Update(model, true);
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(CamWorkerQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/Business/CamWorkrecordService.cs b/ZR.Service/Business/CamWorkrecordService.cs
new file mode 100644
index 0000000..f0e26ca
--- /dev/null
+++ b/ZR.Service/Business/CamWorkrecordService.cs
@@ -0,0 +1,84 @@
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+
+namespace ZR.Service.Business
+{
+ ///
+ /// 工作记录Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(ICamWorkrecordService), ServiceLifetime = LifeTime.Transient)]
+ public class CamWorkrecordService : BaseService, ICamWorkrecordService
+ {
+ ///
+ /// 查询工作记录列表
+ ///
+ ///
+ ///
+ public PagedInfo GetList(CamWorkrecordQueryDto parm)
+ {
+ var predicate = QueryExp(parm);
+
+ var response = Queryable()
+ //.OrderBy("Id desc")
+ .Where(predicate.ToExpression())
+ .ToPage(parm);
+
+ return response;
+ }
+
+
+ ///
+ /// 获取详情
+ ///
+ ///
+ ///
+ public CamWorkrecord GetInfo(int Id)
+ {
+ var response = Queryable()
+ .Where(x => x.Id == Id)
+ .First();
+
+ return response;
+ }
+
+ ///
+ /// 添加工作记录
+ ///
+ ///
+ ///
+ public CamWorkrecord AddCamWorkrecord(CamWorkrecord model)
+ {
+ return Insertable(model).ExecuteReturnEntity();
+ }
+
+ ///
+ /// 修改工作记录
+ ///
+ ///
+ ///
+ public int UpdateCamWorkrecord(CamWorkrecord model)
+ {
+ return Update(model, true, "修改工作记录");
+ }
+
+ ///
+ /// 查询导出表达式
+ ///
+ ///
+ ///
+ private static Expressionable QueryExp(CamWorkrecordQueryDto parm)
+ {
+ var predicate = Expressionable.Create();
+
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.DeptName), it => it.DeptName == parm.DeptName);
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Address), it => it.Address.Contains(parm.Address));
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Content), it => it.Content.Contains(parm.Content));
+ predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.StatusName), it => it.StatusName == parm.StatusName);
+ return predicate;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ZR.Service/Business/IBusinessService/ICamWorkerService.cs b/ZR.Service/Business/IBusinessService/ICamWorkerService.cs
new file mode 100644
index 0000000..8bb97ed
--- /dev/null
+++ b/ZR.Service/Business/IBusinessService/ICamWorkerService.cs
@@ -0,0 +1,21 @@
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 工作人员记录service接口
+ ///
+ public interface ICamWorkerService : IBaseService
+ {
+ PagedInfo GetList(CamWorkerQueryDto parm);
+
+ CamWorker GetInfo(long Id);
+
+
+ CamWorker AddCamWorker(CamWorker parm);
+ int UpdateCamWorker(CamWorker parm);
+
+
+ }
+}
diff --git a/ZR.Service/Business/IBusinessService/ICamWorkrecordService.cs b/ZR.Service/Business/IBusinessService/ICamWorkrecordService.cs
new file mode 100644
index 0000000..96d33ac
--- /dev/null
+++ b/ZR.Service/Business/IBusinessService/ICamWorkrecordService.cs
@@ -0,0 +1,21 @@
+using ZR.Model.Business.Dto;
+using ZR.Model.Business;
+
+namespace ZR.Service.Business.IBusinessService
+{
+ ///
+ /// 工作记录service接口
+ ///
+ public interface ICamWorkrecordService : IBaseService
+ {
+ PagedInfo GetList(CamWorkrecordQueryDto parm);
+
+ CamWorkrecord GetInfo(int Id);
+
+
+ CamWorkrecord AddCamWorkrecord(CamWorkrecord parm);
+ int UpdateCamWorkrecord(CamWorkrecord parm);
+
+
+ }
+}