Merge branch 'dev' of https://git.tuotong-tech.com/tnb/tnb.server into dev
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
namespace Tnb.ProductionMgr.Entities.Dto
|
||||
{
|
||||
public class AddAndonInput
|
||||
{
|
||||
public string andon_type_id { get; set; }
|
||||
|
||||
public string andon_info_id { get; set; }
|
||||
|
||||
public string andon_breakdown_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace Tnb.ProductionMgr.Entities.Dto
|
||||
{
|
||||
public class AndonPadListInput
|
||||
{
|
||||
public string andon_type_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 页码.
|
||||
/// </summary>
|
||||
public int currentPage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 页容量.
|
||||
/// </summary>
|
||||
public int pageSize { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace Tnb.ProductionMgr.Entities.Dto
|
||||
{
|
||||
public class AndonPadListOutput
|
||||
{
|
||||
public string id { get; set; }
|
||||
public string andon_info_name { get; set; }
|
||||
public string promoter_name { get; set; }
|
||||
public string repair_name { get; set; }
|
||||
public string? promoter_time { get; set; }
|
||||
public string? response_time { get; set; }
|
||||
public string? start_repair_time { get; set; }
|
||||
public string? end_repair_time { get; set; }
|
||||
public string? confirm_time { get; set; }
|
||||
}
|
||||
}
|
||||
48
ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AndonInfo.cs
Normal file
48
ProductionMgr/Tnb.ProductionMgr.Entities/Entity/AndonInfo.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.ProductionMgr.Entities.Entity
|
||||
{
|
||||
[SugarTable("andon_info")]
|
||||
public partial class AndonInfo : BaseEntity<string>
|
||||
{
|
||||
public AndonInfo()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
public string? region_name { get; set; }
|
||||
|
||||
public string? name { get; set; }
|
||||
|
||||
public string? push_rule_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 故障类别
|
||||
/// </summary>
|
||||
public string? andon_type { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 故障
|
||||
/// </summary>
|
||||
public string? breakdown_id { get; set; }
|
||||
public string? status { get; set; }
|
||||
public string? personnel { get; set; }
|
||||
public string? position { get; set; }
|
||||
public string? role { get; set; }
|
||||
public string? repair { get; set; }
|
||||
|
||||
public string? create_id { get; set; }
|
||||
public DateTime? create_time { get; set; }
|
||||
public string? modify_id { get; set; }
|
||||
public DateTime? modify_time { get; set; }
|
||||
public string? remark { get; set; }
|
||||
public string? send_config_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -36,5 +36,14 @@ namespace Tnb.ProductionMgr.Entities
|
||||
public string? modify_id { get; set; }
|
||||
public DateTime? modify_time { get; set; }
|
||||
public string? remark { get; set; }
|
||||
public string? andon_type_id { get; set; }
|
||||
public string? andon_info_id { get; set; }
|
||||
public string? repair_id { get; set; }
|
||||
|
||||
public DateTime? response_time { get; set; }
|
||||
public DateTime? start_repair_time { get; set; }
|
||||
public DateTime? end_repair_time { get; set; }
|
||||
public DateTime? confirm_time { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using JNPF.Common.Contracts;
|
||||
using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.ProductionMgr.Entities
|
||||
{
|
||||
[SugarTable("andon_type")]
|
||||
public partial class AndonType : BaseEntity<string>
|
||||
{
|
||||
public AndonType()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string? name { get; set; }
|
||||
|
||||
public string? remark { get; set; }
|
||||
|
||||
public string? create_id { get; set; }
|
||||
public DateTime? create_time { get; set; }
|
||||
public string? modify_id { get; set; }
|
||||
public DateTime? modify_time { get; set; }
|
||||
/// <summary>
|
||||
/// 所属组织
|
||||
/// </summary>
|
||||
public string? org_id { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using Tnb.ProductionMgr.Entities.Dto;
|
||||
|
||||
namespace Tnb.ProductionMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 安灯记录服务
|
||||
/// </summary>
|
||||
public interface IAndonRecordService
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据安灯类别获取安灯记录列表
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> GetAndonPadList(AndonPadListInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 新增一条andon记录
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> AddAndon(AddAndonInput input);
|
||||
|
||||
/// <summary>
|
||||
/// 响应andon
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> ResponseAndon(Dictionary<string,string> dic);
|
||||
|
||||
/// <summary>
|
||||
/// 开始处理andon
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> StartAndon(Dictionary<string,string> dic);
|
||||
|
||||
/// <summary>
|
||||
/// 结束处理andon
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> EndAndon(Dictionary<string,string> dic);
|
||||
|
||||
/// <summary>
|
||||
/// 确认andon
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> ConfirmAndon(Dictionary<string,string> dic);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
|
||||
namespace Tnb.ProductionMgr.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 安灯类别服务
|
||||
/// </summary>
|
||||
public interface IAndonTypeService
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取所有安灯类别和对应记录数
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Task<dynamic> GetAndonTypeAndRecords();
|
||||
|
||||
}
|
||||
}
|
||||
324
ProductionMgr/Tnb.ProductionMgr/AndonRecordService.cs
Normal file
324
ProductionMgr/Tnb.ProductionMgr/AndonRecordService.cs
Normal file
@@ -0,0 +1,324 @@
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Dtos.Message;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Filter;
|
||||
using JNPF.Common.Security;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.Message.Entitys.Entity;
|
||||
using JNPF.Message.Service;
|
||||
using JNPF.Systems.Entitys.Permission;
|
||||
using JNPF.TaskScheduler;
|
||||
using JNPF.TaskScheduler.Entitys.Dto.TaskScheduler;
|
||||
using JNPF.TaskScheduler.Entitys.Model;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using SqlSugar;
|
||||
using Tnb.ProductionMgr.Entities;
|
||||
using Tnb.ProductionMgr.Entities.Dto;
|
||||
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
|
||||
using Tnb.ProductionMgr.Entities.Entity;
|
||||
using Tnb.ProductionMgr.Interfaces;
|
||||
using Tnb.BasicData.Entities;
|
||||
using JNPF.Systems.Entitys.System;
|
||||
using JNPF.Message.Entitys.Entity;
|
||||
using MessageTemplateEntity = JNPF.Message.Entitys.Entity.MessageTemplateEntity;
|
||||
|
||||
namespace Tnb.ProductionMgr
|
||||
{
|
||||
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)]
|
||||
[Route("api/[area]/[controller]/[action]")]
|
||||
public class AndonRecordService: IAndonRecordService, IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
private SendMessageService _sendMessageService;
|
||||
private readonly TimeTaskService _timeTaskService;
|
||||
|
||||
public AndonRecordService(ISqlSugarRepository<AndonRecords> repository,
|
||||
SendMessageService sendMessageService,
|
||||
TimeTaskService timeTaskService,
|
||||
IUserManager userManager)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_sendMessageService = sendMessageService;
|
||||
_timeTaskService = timeTaskService;
|
||||
_db = repository.AsSugarClient();
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> GetAndonPadList(AndonPadListInput input)
|
||||
{
|
||||
var result = await _db.Queryable<AndonRecords>()
|
||||
.LeftJoin<AndonInfo>((a, b) => a.andon_info_id == b.id)
|
||||
.LeftJoin<UserEntity>((a, b, c) => a.repair_id == c.Id)
|
||||
.LeftJoin<UserEntity>((a, b, c, d) => a.create_id == d.Id)
|
||||
.Where((a, b, c, d) => a.andon_type_id == input.andon_type_id)
|
||||
.Select((a, b, c, d) => new AndonPadListOutput
|
||||
{
|
||||
id = a.id,
|
||||
andon_info_name = b.name,
|
||||
promoter_name = d.RealName,
|
||||
repair_name = c.RealName,
|
||||
promoter_time = a.create_time == null ? "" : a.create_time.Value.ToString("yyyy-MM-dd hh:mm:ss"),
|
||||
response_time = a.response_time == null ? "" : a.response_time.Value.ToString("yyyy-MM-dd hh:mm:ss"),
|
||||
start_repair_time = a.start_repair_time == null ? "" : a.start_repair_time.Value.ToString("yyyy-MM-dd hh:mm:ss"),
|
||||
end_repair_time = a.end_repair_time == null ? "" : a.end_repair_time.Value.ToString("yyyy-MM-dd hh:mm:ss"),
|
||||
confirm_time = a.confirm_time == null ? "" : a.confirm_time.Value.ToString("yyyy-MM-dd hh:mm:ss"),
|
||||
}).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
|
||||
return PageResult<AndonPadListOutput>.SqlSugarPageResult(result);
|
||||
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> AddAndon(AddAndonInput input)
|
||||
{
|
||||
AndonInfo andonInfo = await _db.Queryable<AndonInfo>().SingleAsync(x => x.id == input.andon_info_id);
|
||||
AndonRecords andonRecords = input.Adapt<AndonRecords>();
|
||||
DbResult<bool> result = await _db.Ado.UseTranAsync(async () =>
|
||||
{
|
||||
|
||||
andonRecords.create_time = DateTime.Now;
|
||||
andonRecords.create_id = _userManager.UserId;
|
||||
|
||||
|
||||
List<string> toUsers = new List<string>();
|
||||
|
||||
if (!string.IsNullOrEmpty(andonInfo.personnel))
|
||||
{
|
||||
toUsers.AddRange(JsonConvert.DeserializeObject<List<string>>(andonInfo.personnel));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(andonInfo.position))
|
||||
{
|
||||
|
||||
toUsers.AddRange(_db.Queryable<UserRelationEntity>().Where(x => andonInfo.position.Contains(x.Id)).Select(s => s.UserId).ToList());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(andonInfo.role))
|
||||
{
|
||||
|
||||
toUsers.AddRange(_db.Queryable<UserRelationEntity>().Where(x => andonInfo.role.Contains(x.Id)).Select(s => s.UserId).ToList());
|
||||
}
|
||||
|
||||
if (toUsers.Count() > 0)
|
||||
{
|
||||
List<MessageSendModel> list = await _sendMessageService.SendTest(andonInfo.send_config_id);
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
item.toUser = toUsers;
|
||||
}
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
await _sendMessageService.SendMessage(item, new Dictionary<string, object>());
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
BasPushRuleH basPushRuleH = await _db.Queryable<BasPushRuleH>().SingleAsync(x=>x.id==andonInfo.push_rule_id);
|
||||
BasPushRuleD basPushRuleD = await _db.Queryable<BasPushRuleD>().FirstAsync(x => x.push_rule_id == andonInfo.push_rule_id && x.ordinal == 1);
|
||||
if (basPushRuleH?.enabled == 1)
|
||||
{
|
||||
string sendConfigId = basPushRuleD?.send_config_id ?? "";
|
||||
List<MessageSendModel> sendModels = await GetSendParamJson(sendConfigId);
|
||||
|
||||
if (sendModels != null && sendModels.Count > 0)
|
||||
{
|
||||
DateTime executeTime = DateTime.Now.AddMinutes(basPushRuleD.interval);
|
||||
// string cron = $"0 {executeTime.Minute} {executeTime.Hour} {executeTime.Day} {executeTime.Month} ? {executeTime.Year}";
|
||||
string cron = $"0 {executeTime.Minute} {executeTime.Hour} {executeTime.Day} {executeTime.Month} ?";
|
||||
|
||||
var comtentModel = new ContentModel();
|
||||
// comtentModel.cron = (2 * 60).ToString();
|
||||
comtentModel.cron = cron;
|
||||
comtentModel.interfaceId = "";
|
||||
comtentModel.interfaceName = "";
|
||||
comtentModel.parameter = new List<InterfaceParameter>();
|
||||
comtentModel.localHostTaskId = "PushMsgTimeWorker/PushMsg";
|
||||
comtentModel.startTime = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
// comtentModel.endTime = DateTimeOffset.Now.AddSeconds(3).ToUnixTimeMilliseconds().ToString();
|
||||
comtentModel.TenantId = _userManager?.TenantId;
|
||||
comtentModel.TenantDbName = _userManager?.TenantDbName;
|
||||
comtentModel.ConnectionConfig = _userManager?.ConnectionConfig;
|
||||
comtentModel.Token = _userManager?.ToKen;
|
||||
|
||||
// foreach (var item in sendModels)
|
||||
// {
|
||||
// }
|
||||
//
|
||||
TimeTaskCrInput timeTaskCrInput = new TimeTaskCrInput()
|
||||
{
|
||||
enCode = DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||||
fullName = "andon推送消息" + DateTime.Now.ToString("yyyyMMddHHmmss"),
|
||||
executeType = "3",
|
||||
executeContent = comtentModel.ToJsonString(),
|
||||
description = JsonConvert.SerializeObject(sendModels[0].paramJson),
|
||||
sortCode = 9999,
|
||||
enabledMark = 1,
|
||||
};
|
||||
|
||||
await _timeTaskService.Create(timeTaskCrInput,false);
|
||||
|
||||
TimeTaskEntity timeTaskEntity = await _db.Queryable<TimeTaskEntity>().Where(x => x.EnCode == timeTaskCrInput.enCode).FirstAsync();
|
||||
|
||||
BasPushRuleLog basPushRuleLog = new BasPushRuleLog()
|
||||
{
|
||||
push_rule_id = andonInfo.push_rule_id,
|
||||
timetask_id = timeTaskEntity?.Id,
|
||||
biz_id = andonRecords.id,
|
||||
ordinal = 1,
|
||||
is_push = 1,
|
||||
};
|
||||
|
||||
await _db.Insertable<BasPushRuleLog>(basPushRuleLog).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!result.IsSuccess) throw Oops.Oh(ErrorCode.COM1008);
|
||||
return result.IsSuccess ? "发起成功" : result.ErrorMessage;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> ResponseAndon(Dictionary<string,string> dic)
|
||||
{
|
||||
string id = dic.ContainsKey("id") ? dic["id"] : "";
|
||||
AndonRecords andonRecords = await _db.Queryable<AndonRecords>().SingleAsync(x => x.id == id);
|
||||
if (andonRecords != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(andonRecords.repair_id))
|
||||
{
|
||||
UserEntity user = await _db.Queryable<UserEntity>().SingleAsync(x => x.Id == andonRecords.repair_id);
|
||||
throw Oops.Bah($"{user.RealName}已响应");
|
||||
}
|
||||
else
|
||||
{
|
||||
await _db.Updateable<AndonRecords>()
|
||||
.SetColumns(x => x.repair_id == _userManager.UserId)
|
||||
.SetColumns(x=>x.response_time==DateTime.Now)
|
||||
.ExecuteCommandAsync();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Bah($"无该andon记录");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> StartAndon(Dictionary<string, string> dic)
|
||||
{
|
||||
string id = dic.ContainsKey("id") ? dic["id"] : "";
|
||||
AndonRecords andonRecords = await _db.Queryable<AndonRecords>().SingleAsync(x => x.id == id);
|
||||
if (andonRecords != null)
|
||||
{
|
||||
await _db.Updateable<AndonRecords>()
|
||||
.SetColumns(x=>x.start_repair_time==DateTime.Now)
|
||||
.ExecuteCommandAsync();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Bah($"无该andon记录");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> EndAndon(Dictionary<string, string> dic)
|
||||
{
|
||||
string id = dic.ContainsKey("id") ? dic["id"] : "";
|
||||
AndonRecords andonRecords = await _db.Queryable<AndonRecords>().SingleAsync(x => x.id == id);
|
||||
if (andonRecords != null)
|
||||
{
|
||||
await _db.Updateable<AndonRecords>()
|
||||
.SetColumns(x=>x.end_repair_time==DateTime.Now)
|
||||
.ExecuteCommandAsync();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Bah($"无该andon记录");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> ConfirmAndon(Dictionary<string, string> dic)
|
||||
{
|
||||
string id = dic.ContainsKey("id") ? dic["id"] : "";
|
||||
AndonRecords andonRecords = await _db.Queryable<AndonRecords>().SingleAsync(x => x.id == id);
|
||||
if (andonRecords != null)
|
||||
{
|
||||
await _db.Updateable<AndonRecords>()
|
||||
.SetColumns(x=>x.confirm_time==DateTime.Now)
|
||||
.ExecuteCommandAsync();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Bah($"无该andon记录");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<List<MessageSendModel>> GetSendParamJson(string id)
|
||||
{
|
||||
var list = await _db.Queryable<MessageSendTemplateEntity, MessageTemplateEntity>((a, b) => new JoinQueryInfos(JoinType.Left, a.TemplateId == b.Id))
|
||||
.Where((a, b) => a.SendConfigId == id && a.DeleteMark == null && b.DeleteMark == null)
|
||||
.Select((a, b) => new MessageSendModel
|
||||
{
|
||||
accountConfigId = a.AccountConfigId,
|
||||
id = a.Id,
|
||||
messageType = SqlFunc.Subqueryable<MessageDataTypeEntity>().Where(u => u.Type == "1" && u.EnCode == a.MessageType).Select(u => u.FullName),
|
||||
msgTemplateName = b.FullName,
|
||||
sendConfigId = a.SendConfigId,
|
||||
templateId = a.TemplateId,
|
||||
}).ToListAsync();
|
||||
foreach (var item in list)
|
||||
{
|
||||
// 是否存在参数.
|
||||
var flag = await _db.Queryable<MessageSmsFieldEntity>().AnyAsync(x => x.TemplateId == item.templateId && x.DeleteMark == null);
|
||||
if (flag)
|
||||
{
|
||||
item.paramJson = await _db.Queryable<MessageTemplateParamEntity, MessageTemplateEntity, MessageSmsFieldEntity>((a, b, c) => new JoinQueryInfos(JoinType.Left, a.TemplateId == b.Id, JoinType.Left, a.TemplateId == c.TemplateId))
|
||||
.Where((a, b, c) => a.TemplateId == item.templateId && a.DeleteMark == null && b.DeleteMark == null && a.Field == c.Field && a.Field != "@flowLink")
|
||||
.Select((a, b) => new MessageSendParam
|
||||
{
|
||||
field = a.Field,
|
||||
fieldName = a.FieldName,
|
||||
id = a.Id,
|
||||
templateCode = b.TemplateCode,
|
||||
templateId = a.TemplateId,
|
||||
templateName = b.FullName,
|
||||
templateType = b.TemplateType
|
||||
}).ToListAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
item.paramJson = await _db.Queryable<MessageTemplateParamEntity, MessageTemplateEntity>((a, b) => new JoinQueryInfos(JoinType.Left, a.TemplateId == b.Id))
|
||||
.Where((a, b) => a.TemplateId == item.templateId && a.DeleteMark == null && b.DeleteMark == null && a.Field != "@flowLink")
|
||||
.Where((a, b) => b.Title.Contains(a.Field) || b.Content.Contains(a.Field))
|
||||
.Select((a, b) => new MessageSendParam
|
||||
{
|
||||
field = a.Field,
|
||||
fieldName = a.FieldName,
|
||||
id = a.Id,
|
||||
templateCode = b.TemplateCode,
|
||||
templateId = a.TemplateId,
|
||||
templateName = b.FullName,
|
||||
templateType = b.TemplateType
|
||||
}).ToListAsync();
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
45
ProductionMgr/Tnb.ProductionMgr/AndonTypeService.cs
Normal file
45
ProductionMgr/Tnb.ProductionMgr/AndonTypeService.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Filter;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.Systems.Entitys.Permission;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Tnb.BasicData.Entities;
|
||||
using Tnb.EquipMgr.Interfaces;
|
||||
using Tnb.ProductionMgr.Entities;
|
||||
using Tnb.ProductionMgr.Entities.Dto;
|
||||
using Tnb.ProductionMgr.Entities.Dto.PrdManage;
|
||||
using Tnb.ProductionMgr.Entities.Entity;
|
||||
using Tnb.ProductionMgr.Interfaces;
|
||||
|
||||
namespace Tnb.ProductionMgr
|
||||
{
|
||||
[ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)]
|
||||
[Route("api/[area]/[controller]/[action]")]
|
||||
public class AndonTypeService : IAndonTypeService, IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly ISqlSugarClient _db;
|
||||
private readonly IUserManager _userManager;
|
||||
public AndonTypeService(ISqlSugarRepository<AndonType> repository,IUserManager userManager)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_db = repository.AsSugarClient();
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
public async Task<dynamic> GetAndonTypeAndRecords()
|
||||
{
|
||||
var result = await _db.Queryable<AndonType>()
|
||||
.Select((a) => new
|
||||
{
|
||||
andon_type_id = a.id,
|
||||
andon_type_name = a.name,
|
||||
record_count = SqlFunc.Subqueryable<AndonRecords>().Where(x=>x.andon_type_id==a.id).Count(),
|
||||
}).ToListAsync();
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user