IPC-610
2024-10-16 c9259bb264b7ca591a326f0297020c3b07b5076b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using Admin.NET.Core.Service;
using Microsoft.AspNetCore.SignalR;
 
namespace WCS.Application;
 
/// <summary>
/// 报警信息表服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
public class WcsAlarmInfoService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WcsAlarmInfo> _wcsAlarmInfoRep;
    private readonly IHubContext<PlcHub, IPlcHub> _plcHubContext;
    private readonly SysDictDataService _dictDataService;
    public WcsAlarmInfoService(SqlSugarRepository<WcsAlarmInfo> wcsAlarmInfoRep, IHubContext<PlcHub, IPlcHub> plcHubContext, SysDictDataService dictDataService)
    {
        _wcsAlarmInfoRep = wcsAlarmInfoRep;
        _plcHubContext = plcHubContext;
        _dictDataService = dictDataService;
    }
 
    /// <summary>
    /// 分页查询报警信息表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Page")]
    [DisplayName("分页查询报警信息表")]
    public async Task<SqlSugarPagedList<WcsAlarmInfoOutput>> Page(PageWcsAlarmInfoInput input)
    {
        input.SearchKey = input.SearchKey?.Trim();
        var query = _wcsAlarmInfoRep.AsQueryable()
            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
                u.StationNum.Contains(input.SearchKey)
            )
            .WhereIF(!string.IsNullOrWhiteSpace(input.PlcIP), u => u.PlcIP.Contains(input.PlcIP.Trim()))
            .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
            .WhereIF(input.Type.HasValue, u => u.Type == input.Type)
            .Select<WcsAlarmInfoOutput>();
        return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
    }
 
 
    /// <summary>
    /// 增加报警信息表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Add")]
    [DisplayName("增加报警信息表")]
    public async Task<long> Add(AddWcsAlarmInfoInput input)
    {
        var entity = input.Adapt<WcsAlarmInfo>();
        entity.Status = YesNoEnum.N;
        await _wcsAlarmInfoRep.InsertAsync(entity);
        return entity.Id;
    }
 
    /// <summary>
    /// 删除报警信息表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Delete")]
    [DisplayName("删除报警信息表")]
    public async Task Delete(DeleteWcsAlarmInfoInput input)
    {
        var entity = await _wcsAlarmInfoRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        await _wcsAlarmInfoRep.FakeDeleteAsync(entity);   //假删除
        //await _wcsAlarmInfoRep.DeleteAsync(entity);   //真删除
    }
 
    /// <summary>
    /// 更新报警信息表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Update")]
    [DisplayName("更新报警信息表")]
    public async Task Update(UpdateWcsAlarmInfoInput input)
    {
        var entity = input.Adapt<WcsAlarmInfo>();
        await _wcsAlarmInfoRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
    }
 
    /// <summary>
    /// 获取报警信息表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "Detail")]
    [DisplayName("获取报警信息表")]
    public async Task<WcsAlarmInfo> Detail([FromQuery] QueryByIdWcsAlarmInfoInput input)
    {
        return await _wcsAlarmInfoRep.GetFirstAsync(u => u.Id == input.Id);
    }
 
    /// <summary>
    /// 获取报警信息表列表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "List")]
    [DisplayName("获取报警信息表列表")]
    public async Task<List<WcsAlarmInfoOutput>> List([FromQuery] PageWcsAlarmInfoInput input)
    {
        return await _wcsAlarmInfoRep.AsQueryable()
            .WhereIF(!input.Status.IsNullOrEmpty(), s => s.Status == input.Status)
            .Select<WcsAlarmInfoOutput>().ToListAsync();
    }
 
 
    /// <summary>
    /// 复位报警
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Reset")]
    [DisplayName("复位报警")]
    public async Task Reset(ResetInput input)
    {
        //测试推数据用的
        //await _plcHubContext.Clients.All.PublicAlarm(new List<WcsAlarmInfo>() { new WcsAlarmInfo() { Id = 100, StationNum = "260", AlarmCode = "MB102", AlarmName = "有物品遮挡", AlarmTime = DateTime.Now, Status = YesNoEnum.Y } });
        //await _plcHubContext.Clients.All.PublicAlarm(new WcsAlarmInfo() { Id = 100, StationNum = "260", AlarmCode = "MB102", AlarmName = "有物品遮挡", AlarmTime = DateTime.Now, Status = YesNoEnum.Y });
        var modPlc = await _wcsAlarmInfoRep.Context.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == (input.layer.ToString() + "层托盘输送线")).FirstAsync();
        if (modPlc == null)
            throw Oops.Bah("未找到输送线PLC");
        var listDict = await _dictDataService.GetDataList("reset_alarm");
        var value = listDict.FirstOrDefault(s => s.Code == input.layer.ToString());
        if (value == null)
            throw Oops.Bah("未找到复位地址,请在字典管理中设置");
        PLCUtil modUtil = new PLCUtil(modPlc);
        switch (input.layer)
        {
            case 1:
                break;
            case 2:
                {
                    modUtil.SetPlcDBValue(PLCDataTypeEnum.Bit, value.Value, "1");
                }
                break;
            case 3:
                break;
            default:
                break;
        }
        modUtil.Close();
 
    }
 
 
}