333 lines
16 KiB
C#
333 lines
16 KiB
C#
using JNPF.Common.Core.Manager;
|
|
using JNPF.Common.Enums;
|
|
using JNPF.Common.Filter;
|
|
using JNPF.Common.Security;
|
|
using JNPF.DependencyInjection;
|
|
using JNPF.DynamicApiController;
|
|
using JNPF.FriendlyException;
|
|
using JNPF.Systems.Entitys.Permission;
|
|
using JNPF.Systems.Entitys.System;
|
|
using JNPF.VisualDev;
|
|
using JNPF.VisualDev.Entitys.Dto.VisualDevModelData;
|
|
using JNPF.VisualDev.Interfaces;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
using SqlSugar;
|
|
using Tnb.BasicData;
|
|
using Tnb.EquipMgr.Entities;
|
|
using Tnb.EquipMgr.Entities.Dto;
|
|
using Tnb.EquipMgr.Interfaces;
|
|
|
|
namespace Tnb.EquipMgr
|
|
{
|
|
/// <summary>
|
|
/// 设备保养计划执行管理
|
|
/// </summary>
|
|
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
|
|
[Route("api/[area]/[controller]/[action]")]
|
|
[OverideVisualDev(ModuleId)]
|
|
public class EqpMaintainRecordService : IOverideVisualDevService, IEqpMaintainRecordService, IDynamicApiController, ITransient
|
|
{
|
|
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
|
|
private const string ModuleId = "26304609081109";
|
|
private readonly ISqlSugarRepository<EqpMaintainRecordH> _repository;
|
|
private readonly IVisualDevService _visualDevService;
|
|
private readonly IRunService _runService;
|
|
private readonly IUserManager _userManager;
|
|
|
|
public EqpMaintainRecordService(ISqlSugarRepository<EqpMaintainRecordH> repository,
|
|
IRunService runService,
|
|
IUserManager userManager,
|
|
IVisualDevService visualDevService)
|
|
{
|
|
_repository = repository;
|
|
_visualDevService = visualDevService;
|
|
_runService = runService;
|
|
_userManager = userManager;
|
|
OverideFuncs.GetListAsync = GetList;
|
|
// OverideFuncs.UpdateAsync = ExecuteSpotIns;
|
|
}
|
|
|
|
private async Task<object> GetList(VisualDevModelListQueryInput input)
|
|
{
|
|
ISqlSugarClient db = _repository.AsSugarClient();
|
|
Dictionary<string, object>? queryJson = (input == null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary<string, object>() : input.queryJson.ToObject<Dictionary<string, object>>();
|
|
string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : "";
|
|
string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : "";
|
|
DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["start_time"]) : null;
|
|
DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString() == "" ? null : Convert.ToDateTime(queryJson["end_time"]) : null;
|
|
|
|
if (string.IsNullOrEmpty(input.sidx))
|
|
{
|
|
input.sidx = "a.create_time";
|
|
input.sort = "desc";
|
|
}
|
|
else
|
|
{
|
|
input.sidx = "a." + input.sidx;
|
|
}
|
|
|
|
SqlSugarPagedList<EqpMaintainRecordListOutput> list = await db.Queryable<EqpMaintainRecordH, EqpEquipment, UserEntity, UserEntity,UserEntity>((a, b, c, d,e) => new object[]
|
|
{
|
|
JoinType.Left, a.equip_id == b.id,
|
|
JoinType.Left, a.execute_user_id == c.Id,
|
|
JoinType.Left, a.repeat_user_id == d.Id,
|
|
JoinType.Left, a.modify_id == e.Id,
|
|
})
|
|
.WhereIF(!string.IsNullOrEmpty(status), (a, b, c) => a.status == status)
|
|
.WhereIF(!string.IsNullOrEmpty(equioInfo), (a, b, c) => b.code.Contains(equioInfo) || b.name.Contains(equioInfo))
|
|
.WhereIF(status == "3" && start_time != null, a => a.execute_time >= start_time)
|
|
.WhereIF(status == "3" && end_time != null, a => a.execute_time <= end_time)
|
|
.OrderBy($"{input.sidx} {input.sort}")
|
|
.Select((a, b, c, d,e) => new EqpMaintainRecordListOutput
|
|
{
|
|
id = a.id,
|
|
code = a.code,
|
|
equip_id = b.code + "/" + b.name,
|
|
equip_id_id = a.equip_id,
|
|
status = a.status,
|
|
result = a.result == "1" ? "合格" : "不合格",
|
|
repeat_result = a.repeat_result == "1" ? "合格" : "不合格",
|
|
date_create_time = a.create_time,
|
|
date_execute_time = a.execute_time,
|
|
date_repeat_time = a.repeat_time,
|
|
execute_user_id = c.RealName,
|
|
execute_user_id_id = a.execute_user_id,
|
|
repeat_user_id = d.RealName,
|
|
repeat_user_id_id = a.repeat_user_id,
|
|
result_remark = a.result_remark,
|
|
repeat_remark = a.repeat_remark,
|
|
modify_id = e.RealName,
|
|
modify_id_id = e.Id,
|
|
date_modify_time = a.modify_time ,
|
|
date_last_execute_time = SqlFunc.Subqueryable<EqpMaintainRecordH>().Where(x => a.equip_id == x.equip_id && a.execute_time != null).OrderByDesc(x => x.execute_time).Select(x => x.execute_time)
|
|
})
|
|
.Mapper(a =>
|
|
{
|
|
a.status = a.status == "1" ? "待执行" : a.status == "2" ? "待复核" : "已完成";
|
|
a.create_time = a.date_create_time == null ? "" : a.date_create_time.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
a.execute_time = a.date_execute_time == null ? "" : a.date_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
a.repeat_time = a.date_repeat_time == null ? "" : a.date_repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
a.last_execute_time = a.date_last_execute_time == null ? "" : a.date_last_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
a.modify_time = a.date_modify_time == null ? "" : a.date_modify_time.Value.ToString("yyyy-MM-dd HH:mm:ss");
|
|
})
|
|
.ToPagedListAsync(input?.currentPage ?? 1, input?.pageSize ?? 50);
|
|
var EqpMaintainRecordHs = await db.Queryable<EqpMaintainRecordH>().Where(p => list.list.Select(p => p.equip_id_id).ToList().Contains(p.equip_id)).ToListAsync();
|
|
foreach (var data in list.list)
|
|
{
|
|
data.last_execute_time = EqpMaintainRecordHs.Where(x => data.equip_id_id == x.equip_id && x.execute_time != null).Any() ? EqpMaintainRecordHs.Where(x => data.equip_id_id == x.equip_id && x.execute_time != null).OrderByDescending(x => x.execute_time).FirstOrDefault()!.execute_time!.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
}
|
|
return PageResult<EqpMaintainRecordListOutput>.SqlSugarPageResult(list);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 执行设备保养计划
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<dynamic> ExecuteMaintain(SpotInsRecordExecuteInput input)
|
|
{
|
|
DbResult<bool> result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
|
|
{
|
|
EqpMaintainRecordH eqpSpotInsRecordH = _repository.GetSingle(x => x.id == input.id);
|
|
string status = eqpSpotInsRecordH.is_repeat == "1" ? SpotInsRecordExecutionStatus.TOBECHECK : SpotInsRecordExecutionStatus.COMPLETED;
|
|
_ = await _repository.UpdateAsync(x => new EqpMaintainRecordH()
|
|
{
|
|
result = input.result,
|
|
attachment = input.attachment,
|
|
result_remark = input.result_remark,
|
|
status = status,
|
|
execute_time = DateTime.Now,
|
|
execute_user_id = _userManager.UserId
|
|
}, x => x.id == input.id);
|
|
|
|
if (input != null && input.details != null)
|
|
{
|
|
foreach (Dictionary<string, string> item in input.details)
|
|
{
|
|
_ = await _repository.AsSugarClient().Updateable<EqpMaintainRecordD>()
|
|
.SetColumns(x => x.result == item["result"])
|
|
.SetColumnsIF(item.ContainsKey("maintain_descrip"), x => x.maintain_descrip == item["maintain_descrip"])
|
|
.Where(x => x.id == item["id"])
|
|
.ExecuteCommandAsync();
|
|
}
|
|
}
|
|
|
|
|
|
});
|
|
|
|
return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : (dynamic)(result.IsSuccess ? "执行成功" : result.ErrorMessage);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取设备保养计划复核信息
|
|
/// </summary>
|
|
/// <param name="dic"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<MaintainRecordRepeatOutput> GetMaintainRecordRepeatInfo(Dictionary<string, string> dic)
|
|
{
|
|
string id = dic["id"];
|
|
EqpMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id);
|
|
List<EqpMaintainRecordD> eqpSpotInsRecordDs = await _repository.AsSugarClient().Queryable<EqpMaintainRecordD>()
|
|
.Where(x => x.maintain_record_id == id).ToListAsync();
|
|
Dictionary<string, object> typeDic = await _repository.AsSugarClient().Queryable<DictionaryTypeEntity>()
|
|
.LeftJoin<DictionaryDataEntity>((a, b) => a.Id == b.DictionaryTypeId)
|
|
.Where((a, b) => a.EnCode == DictConst.EqpMaintainType)
|
|
.Select((a, b) => new
|
|
{
|
|
b.EnCode,
|
|
b.FullName
|
|
})
|
|
.MergeTable()
|
|
.ToDictionaryAsync(it => it.EnCode, it => it.FullName);
|
|
eqpSpotInsRecordDs.ForEach(x =>
|
|
{
|
|
x.maintain_type = typeDic.ContainsKey(x.maintain_type) ? typeDic[x.maintain_type] + "" : x.maintain_type;
|
|
});
|
|
MaintainRecordRepeatOutput output = new()
|
|
{
|
|
model = eqpSpotInsRecordH,
|
|
details = eqpSpotInsRecordDs,
|
|
};
|
|
return output;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 复核设备保养计划
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<string> RepeatMaintain(MaintainRecordRepeatInput input)
|
|
{
|
|
ISqlSugarClient db = _repository.AsSugarClient();
|
|
EqpMaintainRecordH eqpMaintainRecordH = await _repository.GetSingleAsync(x => x.id == input.id);
|
|
if (eqpMaintainRecordH.status == "1")
|
|
{
|
|
throw Oops.Bah("状态错误");
|
|
}
|
|
DbResult<bool> result = await db.Ado.UseTranAsync(async () =>
|
|
{
|
|
|
|
if (input != null && input.details != null)
|
|
{
|
|
foreach (Dictionary<string, string> item in input.details)
|
|
{
|
|
_ = await db.Updateable<EqpMaintainRecordD>()
|
|
.SetColumnsIF(item.ContainsKey("repeat_descrip"), x => x.repeat_descrip == item["repeat_descrip"])
|
|
.SetColumns(x => x.repeat_result == item["repeat_result"])
|
|
.Where(x => x.id == item["id"]).ExecuteCommandAsync();
|
|
}
|
|
}
|
|
|
|
if (input != null)
|
|
{
|
|
_ = await _repository.UpdateAsync(x => new EqpMaintainRecordH()
|
|
{
|
|
fhattachment=input.attachment,
|
|
repeat_result = input.repeat_result,
|
|
repeat_remark = input.repeat_remark,
|
|
repeat_user_id = _userManager.UserId,
|
|
repeat_time = DateTime.Now,
|
|
status = SpotInsRecordExecutionStatus.COMPLETED
|
|
}, x => x.id == input.id);
|
|
}
|
|
});
|
|
|
|
return !result.IsSuccess ? throw Oops.Oh(ErrorCode.COM1008) : result.IsSuccess ? "复核成功" : result.ErrorMessage;
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<dynamic> GetMaintainRecordList(EquipQueryInput input)
|
|
{
|
|
ISqlSugarClient db = _repository.AsSugarClient();
|
|
Dictionary<string, string>? queryJson = new();
|
|
if (!string.IsNullOrEmpty(input.queryJson))
|
|
{
|
|
queryJson = JsonConvert.DeserializeObject<Dictionary<string, string>>(input.queryJson);
|
|
}
|
|
SqlSugarPagedList<EquipMaintainRecordQueryOutput> result = await db.Queryable<EqpMaintainRecordH>()
|
|
.LeftJoin<EqpEquipment>((a, b) => a.equip_id == b.id)
|
|
.LeftJoin<UserEntity>((a, b, c) => a.execute_user_id == c.Id)
|
|
.LeftJoin<UserEntity>((a, b, c, d) => a.repeat_user_id == d.Id)
|
|
.Where(a => a.equip_id == input.equip_id)
|
|
.Select((a, b, c, d) => new EquipMaintainRecordQueryOutput
|
|
{
|
|
id = a.id,
|
|
attachment = a.attachment,
|
|
fhattachment= a.fhattachment,
|
|
create_time = a.create_time == null ? null : a.create_time.Value.ToString(DbTimeFormat.MM),
|
|
equip_id = b.code,
|
|
equip_id_id = a.equip_id,
|
|
repeat_remark = a.repeat_remark,
|
|
repeat_result = a.repeat_result == "1" ? "合格" : "不合格",
|
|
repeat_time = a.repeat_time == null ? null : a.repeat_time.Value.ToString(DbTimeFormat.MM),
|
|
repeat_user_id = d.RealName,
|
|
result = a.result == "1" ? "合格" : "不合格",
|
|
result_remark = a.result_remark,
|
|
maintain_tem_equip_id = a.maintain_tem_equip_id,
|
|
execute_time = a.execute_time == null ? null : a.execute_time.Value.ToString(DbTimeFormat.MM),
|
|
execute_user_id = c.RealName,
|
|
status = SqlFunc.IF(a.status.Equals("1")).Return("待执行").ElseIF(a.status.Equals("2")).Return("待复核").ElseIF(a.status.Equals("3")).Return("已完成").End("")
|
|
}).ToPagedListAsync(input.currentPage, input.pageSize);
|
|
|
|
return PageResult<EquipMaintainRecordQueryOutput>.SqlSugarPageResult(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据id获取保养相关信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<dynamic?> GetEqpMaintainRecordInfoById(Dictionary<string, string> dic)
|
|
{
|
|
string id = dic.ContainsKey("id") ? dic["id"] : "";
|
|
if (string.IsNullOrEmpty(id))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
ISqlSugarClient db = _repository.AsSugarClient();
|
|
return await db.Queryable<EqpMaintainRecordH>()
|
|
.LeftJoin<EqpEquipment>((a, b) => a.equip_id == b.id)
|
|
.Where((a, b) => a.id == id)
|
|
.Select((a, b) => new
|
|
{
|
|
a.id,
|
|
a.equip_id,
|
|
equip_code = b.code,
|
|
equip_name = b.name,
|
|
create_time = a.create_time == null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
a.result_remark,
|
|
a.result,
|
|
a.status,
|
|
}).FirstAsync();
|
|
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<string> Assign(Dictionary<string, string> dic)
|
|
{
|
|
string id = dic["id"];
|
|
string executeUserId = dic["executeUserId"];
|
|
string repeat_user_id = dic["repeat_user_id"];
|
|
EqpMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id);
|
|
// if (eqpSpotInsRecordH.status == "1")
|
|
// {
|
|
_ = await _repository.UpdateAsync(x => new EqpMaintainRecordH()
|
|
{
|
|
execute_user_id = executeUserId,
|
|
repeat_user_id = repeat_user_id,
|
|
modify_id = _userManager.UserId,
|
|
modify_time = DateTime.Now
|
|
}, x => x.id == id);
|
|
return "指派成功";
|
|
// }
|
|
// else
|
|
// {
|
|
// throw Oops.Bah("状态错误");
|
|
// }
|
|
|
|
}
|
|
}
|
|
} |