diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpEquipCheckRecord.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpEquipCheckRecord.cs new file mode 100644 index 00000000..e5c97036 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpSpEquipCheckRecord.cs @@ -0,0 +1,127 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.EquipMgr.Entities; + +/// +/// 特种设备检验登记记录表 +/// +[SugarTable("eqp_sp_equip_check_record")] +public partial class EqpSpEquipCheckRecord : BaseEntity +{ + public EqpSpEquipCheckRecord() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 设备id + /// + public string? equip_id { get; set; } + + /// + /// 证书编号 + /// + public string? license_code { get; set; } + + /// + /// 经办人id + /// + public string? oper_user_id { get; set; } + + /// + /// 送检时间 + /// + public DateTime? send_time { get; set; } + + /// + /// 领证时间 + /// + public DateTime? get_time { get; set; } + + /// + /// 检验结果 + /// + public int? check_result { get; set; } + + /// + /// 提前预警时间 + /// + public int? warm_time { get; set; } + + /// + /// 提前预警时间单位 + /// + public int? warn_unit { get; set; } + + /// + /// 有效开始时间 + /// + public DateTime? start_time { get; set; } + + /// + /// 有效结束时间 + /// + public DateTime? end_time { get; set; } + + /// + /// 下次检验时间 + /// + public DateTime? next_check_time { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 状态 0 待检验 1 已检验 + /// + public string status { get; set; } + + /// + /// 证书名称 + /// + public string? license_name { get; set; } + + /// + /// 证书附件 + /// + public string? attachment { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + +} diff --git a/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpSpEquipCheckRecordService.cs b/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpSpEquipCheckRecordService.cs new file mode 100644 index 00000000..2028c41f --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Interfaces/IEqpSpEquipCheckRecordService.cs @@ -0,0 +1,9 @@ +using Tnb.EquipMgr.Entities; + +namespace Tnb.EquipMgr.Interfaces +{ + public interface IEqpSpEquipCheckRecordService + { + public Task Register(EqpSpEquipCheckRecord entity); + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpSpEquipCheckRecordService.cs b/EquipMgr/Tnb.EquipMgr/EqpSpEquipCheckRecordService.cs new file mode 100644 index 00000000..8dff5cee --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr/EqpSpEquipCheckRecordService.cs @@ -0,0 +1,56 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Enums; +using JNPF.Common.Security; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.FriendlyException; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Tnb.EquipMgr.Entities; +using Tnb.EquipMgr.Entities.Dto; +using Tnb.EquipMgr.Interfaces; + +namespace Tnb.EquipMgr +{ + /// + /// 设备维修延期 + /// + [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + public class EqpSpEquipCheckRecordService : IEqpSpEquipCheckRecordService, IDynamicApiController, ITransient + { + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + + public EqpSpEquipCheckRecordService(ISqlSugarRepository repository, + IUserManager userManager) + { + _repository = repository; + _userManager = userManager; + } + + [HttpPost] + public async Task Register(EqpSpEquipCheckRecord entity) + { + if (await _repository.IsAnyAsync(x => x.equip_id == entity.equip_id)) + { + throw Oops.Bah("该设备已存在检验计划"); + } + + if (entity.warn_unit == 1)//月 + { + entity.next_check_time = entity.end_time.Value.AddMonths(-entity.warm_time.Value); + }else if (entity.warn_unit == 2)//天 + { + entity.next_check_time = entity.end_time.Value.AddDays(-entity.warm_time.Value); + } + + entity.id = SnowflakeIdHelper.NextId(); + entity.create_time = DateTime.Now; + entity.create_id = _userManager.UserId; + entity.org_id = _userManager.GetUserInfo().Result.organizeId; + await _repository.InsertAsync(entity); + + } + } +} \ No newline at end of file diff --git a/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpEquipCheckPlanTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpEquipCheckPlanTimeWorker.cs new file mode 100644 index 00000000..c65ee76e --- /dev/null +++ b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpEquipCheckPlanTimeWorker.cs @@ -0,0 +1,68 @@ +using JNPF.Common.Security; +using JNPF.Logging; +using SqlSugar; +using Tnb.EquipMgr.Entities; + +namespace JNPF.TaskScheduler.Listener +{ + /// + /// 生成特种设备检验计划 + /// + public class GenerateSpEquipCheckPlanTimeWorker : ISpareTimeWorker + { + private ISqlSugarRepository _repository => App.GetService>(); + + [SpareTime("0 0 0 * * ?", "生成特种设备检验计划", ExecuteType = SpareTimeExecuteTypes.Serial,StartNow = false)] + public void GenerateSpotInspectionPlan(SpareTimer timer, long count) + { + Log.Information("----------------------开始生成特种设备检验计划----------------------"); + + try + { + var db = _repository.AsSugarClient(); + + List ids = _repository.GetList(x => x.status == "0").Select(x => x.equip_id).Distinct() + .ToList(); + + List list = db.Queryable().GroupBy(x=>new + { + x.equip_id, + }).Where(x => x.status == "1" && !ids.Contains(x.equip_id))//排除有未检验的 + .Select(x=>new + { + equip_id = x.equip_id, + create_time = SqlFunc.AggregateMax(x.create_time), + + }) + .MergeTable() + .LeftJoin((x,y)=>x.equip_id==y.equip_id && x.create_time==y.create_time) + .Select((x,y)=>y) + .ToList(); + + List insertList = new List(); + if (list != null && list.Count > 0) + { + foreach (var item in list) + { + insertList.Add(new EqpSpEquipCheckRecord() + { + id = SnowflakeIdHelper.NextId(), + equip_id = item.equip_id, + status = "0" + }); + } + + _repository.InsertRange(insertList); + } + } + catch (Exception e) + { + Console.WriteLine(e.Message); + Log.Error(e.Message); + } + + + Log.Information("----------------------结束生成特种设备检验计划----------------------"); + } + } +} \ No newline at end of file