using System.Threading.Tasks;
using Datory;
using GxPress.EnumConst;
using System.Transactions;
namespace GxPress.Service.Implement
{
public partial class FlowService
{
///
/// 撤回
///
///
///
public async Task RecallAsync(int flowId, int userId)
{
try
{
using (var transactions = new TransactionScope())
{
var flow = await _flowRepository.GetAsync(flowId);
if (flow == null || flow.UserId != userId)
throw new Common.Exceptions.BusinessException("非本人操作!");
var query = Q.NewQuery();
query.Where(nameof(Entity.Notice.SourceId), flowId);
query.Where(nameof(Entity.Notice.TypeValue), AllTypeConst.MySubmitted.GetHashCode());
query.Where(nameof(Entity.Notice.UserId), userId);
var notice = await _noticeRepository.GetAsync(query);
if (notice == null)
return false;
//删除middle
query = Q.NewQuery();
query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
query.Where(nameof(Entity.Middle.Middle.MiddleId), notice.Id);
query.WhereNot(nameof(Entity.Middle.Middle.UserId), flow.UserId);
await middleRepository.DeleteAsync(query);
//修改状态
query = Q.NewQuery();
query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
query.Where(nameof(Entity.Middle.Middle.MiddleId), notice.Id);
query.Where(nameof(Entity.Middle.Middle.UserId), flow.UserId);
query.Set(nameof(Entity.Middle.Middle.IsRecall), true);
await middleRepository.UpdateAsync(query);
transactions.Complete();
}
}
catch
{
return false;
}
return true;
}
}
}