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
{
///
/// 模具保养计划执行管理
///
[ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 700)]
[Route("api/[area]/[controller]/[action]")]
[OverideVisualDev(ModuleId)]
public class ToolMoldMaintainRecordService : IOverideVisualDevService, IDynamicApiController, ITransient
{
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
private const string ModuleId = "35902722254101";
private readonly ISqlSugarRepository _repository;
private readonly IVisualDevService _visualDevService;
private readonly IRunService _runService;
private readonly IUserManager _userManager;
public ToolMoldMaintainRecordService(ISqlSugarRepository repository,
IRunService runService,
IUserManager userManager,
IVisualDevService visualDevService)
{
_repository = repository;
_visualDevService = visualDevService;
_runService = runService;
_userManager = userManager;
OverideFuncs.GetListAsync = GetList;
// OverideFuncs.UpdateAsync = ExecuteSpotIns;
}
private async Task GetList(VisualDevModelListQueryInput input)
{
ISqlSugarClient db = _repository.AsSugarClient();
Dictionary? queryJson = (input == null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>();
string moldInfo = 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 list = await db.Queryable((a, b, c, d,e) => new object[]
{
JoinType.Left, a.mold_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(moldInfo), (a, b, c) => b.mold_code.Contains(moldInfo) || b.mold_name.Contains(moldInfo))
.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 ToolMoldMaintainRecordListOutput
{
id = a.id,
code = a.code,
mold_id = b.mold_code + "/" + b.mold_name,
mold_id_id = a.mold_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,
date_last_execute_time = SqlFunc.Subqueryable().Where(x => a.mold_id == x.mold_id && a.execute_time != null).OrderByDesc(x => x.execute_time).Select(x => x.execute_time),
modify_id = e.RealName,
modify_id_id = e.Id,
date_modify_time = a.modify_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 ToolMoldMaintainRecordHs = await db.Queryable().Where(p => list.list.Select(p => p.mold_id_id).ToList().Contains(p.mold_id)).ToListAsync();
foreach (var data in list.list)
{
data.last_execute_time = ToolMoldMaintainRecordHs.Where(x => data.mold_id_id == x.mold_id && x.execute_time != null).Any() ? ToolMoldMaintainRecordHs.Where(x => data.mold_id_id == x.mold_id && x.execute_time != null).OrderByDescending(x => x.execute_time).FirstOrDefault()!.execute_time!.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
}
return PageResult.SqlSugarPageResult(list);
}
///
/// 执行模具保养计划
///
///
[HttpPost]
public async Task ExecuteMaintain(SpotInsRecordExecuteInput input)
{
DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () =>
{
ToolMoldMaintainRecordH eqpSpotInsRecordH = _repository.GetSingle(x => x.id == input.id);
string status = eqpSpotInsRecordH.is_repeat == "1" ? SpotInsRecordExecutionStatus.TOBECHECK : SpotInsRecordExecutionStatus.COMPLETED;
_ = await _repository.UpdateAsync(x => new ToolMoldMaintainRecordH()
{
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 item in input.details)
{
_ = await _repository.AsSugarClient().Updateable()
.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);
}
///
/// 获取模具保养计划复核信息
///
///
///
[HttpPost]
public async Task GetMaintainRecordRepeatInfo(Dictionary dic)
{
string id = dic["id"];
ToolMoldMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id);
ToolMolds toolMolds = await _repository.AsSugarClient().Queryable().SingleAsync(x=>x.id==eqpSpotInsRecordH.mold_id);
List eqpSpotInsRecordDs = await _repository.AsSugarClient().Queryable()
.Where(x => x.maintain_record_id == id).ToListAsync();
Dictionary typeDic = await _repository.AsSugarClient().Queryable()
.LeftJoin((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;
});
// eqpSpotInsRecordH.mold_id = (toolMolds?.mold_code ?? "") + "/" + (toolMolds?.mold_name ?? "");
ToolMoldMaintainRecordRepeatOutput output = new()
{
model = eqpSpotInsRecordH,
details = eqpSpotInsRecordDs,
};
return output;
}
///
/// 复核模具保养计划
///
///
[HttpPost]
public async Task RepeatMaintain(MaintainRecordRepeatInput input)
{
ISqlSugarClient db = _repository.AsSugarClient();
ToolMoldMaintainRecordH toolMoldMaintainRecordH = await _repository.GetSingleAsync(x => x.id == input.id);
if (toolMoldMaintainRecordH.status == "1")
{
throw Oops.Bah("状态错误");
}
DbResult result = await db.Ado.UseTranAsync(async () =>
{
if (input != null && input.details != null)
{
foreach (Dictionary item in input.details)
{
_ = await db.Updateable()
.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 ToolMoldMaintainRecordH()
{
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 GetMaintainRecordList(EquipQueryInput input)
{
ISqlSugarClient db = _repository.AsSugarClient();
Dictionary? queryJson = new();
if (!string.IsNullOrEmpty(input.queryJson))
{
queryJson = JsonConvert.DeserializeObject>(input.queryJson);
}
SqlSugarPagedList result = await db.Queryable()
.LeftJoin((a, b) => a.mold_id == b.id)
.LeftJoin((a, b, c) => a.execute_user_id == c.Id)
.LeftJoin((a, b, c, d) => a.repeat_user_id == d.Id)
.Where(a => a.mold_id == input.mold_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),
mold_id = b.mold_code,
mold_id_id = a.mold_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_mold_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.SqlSugarPageResult(result);
}
///
/// 根据id获取保养相关信息
///
///
[HttpPost]
public async Task GetEqpMaintainRecordInfoById(Dictionary dic)
{
string id = dic.ContainsKey("id") ? dic["id"] : "";
if (string.IsNullOrEmpty(id))
{
return null;
}
ISqlSugarClient db = _repository.AsSugarClient();
return await db.Queryable()
.LeftJoin((a, b) => a.mold_id == b.id)
.Where((a, b) => a.id == id)
.Select((a, b) => new
{
a.id,
a.mold_id,
mold_code = b.mold_code,
mold_name = b.mold_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 Assign(Dictionary dic)
{
string id = dic["id"];
string executeUserId = dic["executeUserId"];
string repeat_user_id = dic["repeat_user_id"];
ToolMoldMaintainRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == id);
// if (eqpSpotInsRecordH.status == "1")
// {
_ = await _repository.UpdateAsync(x => new ToolMoldMaintainRecordH()
{
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("状态错误");
// }
}
}
}