wxw
2024-08-28 ec899ee7e9ead5152bd9b4c2dedd75c79cab6fb0
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
160
161
162
 
using AngleSharp.Dom;
using Furion.DatabaseAccessor;
using Microsoft.AspNetCore.SignalR;
 
namespace WCS.Application;
 
/// <summary>
/// 任务表服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
public class WcsTaskService : IDynamicApiController, ITransient
{
    private readonly SqlSugarRepository<WcsTask> _wcsTaskRep;
    private readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext;
 
    public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep, IHubContext<TaskLogHub, ITaskLogHub> taskLogHubContext)
    {
        _wcsTaskRep = wcsTaskRep;
        _taskLogHubContext = taskLogHubContext;
    }
 
    /// <summary>
    /// 分页查询任务表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Page")]
    [DisplayName("分页查询任务表")]
    public async Task<SqlSugarPagedList<WcsTaskOutput>> Page(PageWcsTaskInput input)
    {
        input.SearchKey = input.SearchKey?.Trim();
        var query = _wcsTaskRep.AsQueryable()
            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
                u.TaskNo.Contains(input.SearchKey)
            )
            .WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), u => u.TaskNo.Contains(input.TaskNo.Trim()))
            .WhereIF(input.TaskType.HasValue, u => u.TaskType == input.TaskType)
            .WhereIF(input.Status.HasValue, u => u.Status == input.Status)
            .Select<WcsTaskOutput>();
        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(AddWcsTaskInput input)
    {
        var entity = input.Adapt<WcsTask>();
        await _wcsTaskRep.InsertAsync(entity);
        return entity.Id;
    }
 
    /// <summary>
    /// 删除任务表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Delete")]
    [DisplayName("删除任务表")]
    public async Task Delete(DeleteWcsTaskInput input)
    {
        var entity = await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
        await _wcsTaskRep.FakeDeleteAsync(entity);   //假删除
        //await _wcsTaskRep.DeleteAsync(entity);   //真删除
    }
 
    /// <summary>
    /// 更新任务表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Update")]
    [DisplayName("更新任务表")]
    public async Task Update(UpdateWcsTaskInput input)
    {
        var entity = input.Adapt<WcsTask>();
        await _wcsTaskRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
    }
 
    /// <summary>
    /// 获取任务表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "Detail")]
    [DisplayName("获取任务表")]
    public async Task<WcsTask> Detail([FromQuery] QueryByIdWcsTaskInput input)
    {
        return await _wcsTaskRep.GetFirstAsync(u => u.Id == input.Id);
    }
 
    /// <summary>
    /// 获取任务表列表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpGet]
    [ApiDescriptionSettings(Name = "List")]
    [DisplayName("获取任务表列表")]
    public async Task<List<WcsTaskOutput>> List([FromQuery] PageWcsTaskInput input)
    {
        return await _wcsTaskRep.AsQueryable().Select<WcsTaskOutput>().ToListAsync();
    }
 
    /// <summary>
    /// 完成/取消任务表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost]
    [ApiDescriptionSettings(Name = "Finsh")]
    [DisplayName("完成/取消任务表")]
    [UnitOfWork]
    public async Task Finsh(UpdateWcsTaskInput input)
    {
        if (input.Status == TaskStatusEnum.Complete || input.Status == TaskStatusEnum.Cancell)
        {
            var modTask = await _wcsTaskRep.GetByIdAsync(input.Id);
            if (modTask.Status > TaskStatusEnum.Doing)
                throw Oops.Oh("任务状态异常");
            if (input.Status == TaskStatusEnum.Complete)
                modTask.IsSuccess = TaskSuccessEnum.Success;
            else
                modTask.IsSuccess = TaskSuccessEnum.Fail;
            modTask.FinishDate = DateTime.Now;
            modTask.Status = input.Status;
            await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Status, s.IsSuccess, s.FinishDate, s.UpdateTime,s.UpdateUserId,s.UpdateUserName }).ExecuteCommandAsync();
            //写入任务明细表
            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
            {
                TaskNo = modTask.TaskNo,
                PlcId = 0,
                PlcName = "",
                Status = TaskStatusEnum.Complete,
                StartLocat = modTask.StartLocate,
                EndLocat = modTask.EndLocate,
                InteractiveMsg = input.Status == TaskStatusEnum.Complete ? "任务已手动完成" : "任务已手动取消",
                PalletNo = modTask.PalletNo
            };
            await _wcsTaskRep.Context.Insertable(modTaskMonitor).ExecuteCommandAsync();
            //await _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>());
            //await _taskLogHubContext.Clients.All.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
        }
        else
        {
            throw Oops.Oh("任务状态异常");
        }
    }
 
 
 
}