using System.Threading.Tasks;
using Datory;
using GxPress.EnumConst;
using System.Transactions;
using System.Linq;
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);
var notices = await _noticeRepository.GetAllAsync(query);
if (notices == null || notices.Count() == 0)
return false;
var notice = notices.FirstOrDefault(n => n.UserId == userId);
if (notice == null)
return false;
query = Q.NewQuery();
query.Where(nameof(Entity.Notice.Id), notice.Id);
query.Set(nameof(Entity.Notice.IsRecall), true);
await _noticeRepository.UpdateAsync(query);
//删除middle
query = Q.NewQuery();
query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Inbox.GetHashCode());
query.WhereIn(nameof(Entity.Middle.Middle.MiddleId), notices.Select(n => n.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), notices.Select(n => n.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;
}
}
}