You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.9 KiB
C#

using DS.Module.Core;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Sys.Entity;
using DS.WMS.Core.TaskInteraction.Dtos;
using DS.WMS.Core.TaskInteraction.Entity;
using DS.WMS.Core.TaskInteraction.Interface;
namespace DS.WMS.Core.TaskInteraction.Method
{
/// <summary>
/// 任务日志服务
/// </summary>
public class TaskLogService : ServiceBase, ITaskLogService
{
/// <summary>
/// 初始化
/// </summary>
/// <param name="provider"></param>
public TaskLogService(IServiceProvider provider) : base(provider)
{
}
/// <summary>
/// 读取业务日志
/// </summary>
/// <param name="id">业务ID</param>
/// <param name="businessType">业务类型</param>
/// <returns></returns>
public async Task<DataResult<List<BusinessTaskLog>>> ReadLogAsync(long id, BusinessType? businessType)
{
var list = await TenantDb.Queryable<BusinessTaskLog>().Where(x => x.BusinessId == id)
.WhereIF(businessType.HasValue, x => x.BusinessType == businessType)
.OrderBy(x => x.CreateTime).ToListAsync();
var result = DataResult<List<BusinessTaskLog>>.Success(list);
result.Count = list.Count;
return result;
}
/// <summary>
/// 写入任务日志
/// </summary>
/// <param name="request"></param>
/// <param name="remark">备注</param>
/// <returns></returns>
public async Task WriteLogAsync(TaskUpdateRequest request, string? remark = null)
{
long userId = long.Parse(User.UserId);
string userName = await Db.Queryable<SysUser>().Where(x => x.Id == userId).Select(
x => x.UserName).FirstAsync();
BusinessTaskLog taskLog = new BusinessTaskLog
{
ActionType = ActionType.StatusChanged,
BusinessId = request.BusinessId,
BusinessType = request.BusinessType,
CreateBy = long.Parse(User.UserId),
CreateTime = DateTime.Now,
TaskStatus = request.TaskStatus,
TaskType = request.TaskType,
Remark = remark,
RecvUsers = userName
};
await WriteLogAsync(taskLog);
}
/// <summary>
/// 写入任务日志
/// </summary>
/// <param name="task"></param>
/// <param name="remark">备注</param>
/// <returns></returns>
public async Task WriteLogAsync(BusinessTask task, string? remark = null)
{
string userNames = string.Empty;
if (task.RecvUserIdArray?.Length > 0)
{
var list = await Db.Queryable<SysUser>().Where(x => task.RecvUserIdArray.Contains(x.Id)).Select(
x => x.UserName).ToListAsync();
userNames = string.Join(",", list);
}
BusinessTaskLog taskLog = new BusinessTaskLog
{
ActionType = ActionType.Create,
BusinessId = task.BusinessId,
BusinessType = task.BusinessType,
CreateBy = long.Parse(User.UserId),
CreateTime = DateTime.Now,
RecvUsers = userNames,
TaskStatus = task.TaskStatus,
TaskType = task.TaskType,
Remark = remark
};
await WriteLogAsync(taskLog);
}
/// <summary>
/// 写入任务日志
/// </summary>
/// <param name="logs">任务日志</param>
/// <exception cref="ArgumentNullException"><paramref name="logs"/>为null</exception>
/// <returns></returns>
public async Task WriteLogAsync(params BusinessTaskLog[] logs)
{
ArgumentNullException.ThrowIfNull(logs, nameof(logs));
await TenantDb.Insertable(logs).ExecuteCommandAsync();
}
}
}