Commit 6f46aebe by zhoujinhui

新增作废审核

parent da0e5782
using SqlSugar;
using System;
namespace Domain.TakeStock
{
/// <summary>
/// 审核日志
/// </summary>
[SugarTable("audit_process_log")]
public class AuditProcessLog: FullAuditedEntity
{
/// <summary>
/// 审核日志Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 模板id
/// </summary>
public int TemplateId { get; set; }
/// <summary>
/// 关系数据Id 盘点计划id
/// </summary>
public int RelationDataId { get; set; }
/// <summary>
/// 审核顺序
/// </summary>
public int AuditSequence { get; set; }
/// <summary>
/// 审核用户Id
/// </summary>
public int AuditUserId { get; set; }
/// <summary>
/// 审核用户名
/// </summary>
public string AuditUserName { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditDateTime { get; set; }
/// <summary>
/// 审核状态(0-待审核, 1 -审核通过,-1 驳回)
/// </summary>
public AuditStatusEnum AuditStatus { get; set; }
/// <summary>
/// 审核说明
/// </summary>
public string AuditExplain { get; set; }
}
}
using SqlSugar;
namespace Domain.TakeStock
{
/// <summary>
/// 审核步骤
/// </summary>
[SugarTable("audit_process_steps")]
public class AuditProcessSteps: FullAuditedEntity
{
/// <summary>
/// 审核日志Id
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 模板id
/// </summary>
public int TemplateId { get; set; }
/// <summary>
/// 审核顺序
/// </summary>
public int AuditSequence { get; set; }
/// <summary>
/// 审核用户Id
/// </summary>
public int AuditUserId { get; set; }
/// <summary>
/// 审核用户名
/// </summary>
public string AuditUserName { get; set; }
}
}
using System.ComponentModel;
namespace Domain.TakeStock
{
/// <summary>
/// 审核状态
/// </summary>
public enum AuditStatusEnum
{
/// <summary>
/// 待审核
/// </summary>
[Description("待审核")]
CheckPending = 0,
/// <summary>
/// 审核通过
/// </summary>
[Description("审核通过")]
Approved = 1,
/// <summary>
/// 审核不通过
/// </summary>
[Description("审核不通过")]
AuditFailed = -1
}
}
using SqlSugar;
using System;
namespace Domain.TakeStock
{
public class FullAuditedEntity
{
/// <summary>
/// 创建人Id
/// </summary>
public int CreatorUserId { get; set; }
/// <summary>
/// 创建人姓名
/// </summary>
public string CreateUserName { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 最后修改人id
/// </summary>
[SugarColumn(IsNullable = true)]
public int? LastModifierUserId { get; set; }
/// <summary>
/// 删除时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? DeletionTime { get; set; }
/// <summary>
/// 删除用户Id
/// </summary>
[SugarColumn(IsNullable = true)]
public int? DeleterUserId { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public bool IsDeleted { get; set; }
}
}
......@@ -8,6 +8,6 @@ namespace Domain.TakeStock.Repository
{
int CreateOrder(TakeStockSchedule order, List<TakeStockOrder> orders);
int CreateOrderAndFreezeStock(TakeStockSchedule schedule, List<TakeStockOrder> orders);
int CreateOrderAndFreezeStock(TakeStockSchedule schedule, List<TakeStockOrder> orders, List<AuditProcessLog> auditProcessLogs);
}
}
......@@ -27,11 +27,16 @@ namespace Service.TakeStock
private readonly ITakeStockScheduleRepository _scheduleRepository;
private readonly IRepository<TakeStockOrder> _orderRepository;
private readonly IRepository<TakeStockOrderLog> _logRepository;
private readonly IRepository<AuditProcessLog> _auditProcessLogRepository;
private readonly IRepository<AuditProcessSteps> _auditProcessStepsRepository;
private readonly IHttpClientFactory _httpClientFactory;
private readonly int _delay = 3;
private readonly IBus _bus;
public TakeStockService(IHttpClientFactory httpClientFactory, ITakeStockScheduleRepository scheduleRepository, IRepository<TakeStockOrder> orderRepository, IRepository<TakeStockOrderLog> logRepository, IBus bus)
public TakeStockService(IHttpClientFactory httpClientFactory, ITakeStockScheduleRepository scheduleRepository,
IRepository<TakeStockOrder> orderRepository, IRepository<TakeStockOrderLog> logRepository, IBus bus,
IRepository<AuditProcessLog> auditProcessLogRepository,
IRepository<AuditProcessSteps> auditProcessStepsRepository)
{
this._httpClientFactory = httpClientFactory;
//this.mqClient = mqClient;
......@@ -39,6 +44,8 @@ namespace Service.TakeStock
this._orderRepository = orderRepository;
this._logRepository = logRepository;
this._bus = bus;
_auditProcessLogRepository = auditProcessLogRepository;
_auditProcessStepsRepository = auditProcessStepsRepository;
}
/// <summary>
......@@ -73,17 +80,89 @@ namespace Service.TakeStock
item.State = TSOrderState.冻结库存;
item.LastModificationTime = DateTime.Now;
}
int scheduleId = _scheduleRepository.CreateOrderAndFreezeStock(schedule, orders);
var auditProcessLogList = AddAuditProcessLog(schedule);
int scheduleId = _scheduleRepository.CreateOrderAndFreezeStock(schedule, orders, auditProcessLogList);
if (scheduleId <= 0)
{
await PostData<WMSResponseDto<bool>, RequestDto<List<FreezeStockInputDot>>>(requestData, "TakeStockScheduleService/BatchEnabledStock");
return new ReturnPlanDto() { IsSuccess = true, Message = "创建计划单失败!" };
}
else
{
if (schedule.TakeStockType == TakeStockType.Voidgoods)
{
SendMsg($"{schedule.CreatorUserName}-已创建盘点作废计划单-{schedule.Code},请一级审核人:@{auditProcessLogList.First().AuditUserName},及时处理!");
}
}
return new ReturnPlanDto() { IsSuccess = true, Message = "" };
}
/// <summary>
/// 新增审核人流程记录
/// </summary>
/// <param name="userName"></param>
/// <param name="scheduleId"></param>
private List<AuditProcessLog> AddAuditProcessLog(TakeStockSchedule schedule)
{
var resultList = new List<AuditProcessLog>();
if (schedule.TakeStockType != TakeStockType.Voidgoods) return resultList;
var findSteps = _auditProcessStepsRepository.GetAllList(x => x.TemplateId == 1 && !x.IsDeleted).OrderBy(x => x.AuditSequence).ToList();
foreach (var item in findSteps)
{
resultList.Add(new AuditProcessLog
{
AuditSequence = item.AuditSequence,
AuditStatus = AuditStatusEnum.CheckPending,
AuditUserId = item.AuditUserId,
AuditUserName = item.AuditUserName,
CreateUserName = schedule.CreatorUserName,
CreationTime = DateTime.Now,
CreatorUserId = 0,
TemplateId = item.TemplateId
});
}
return resultList;
}
public static void SendMsg(string message, bool isSendAll = false)
{
try
{
var weChatUrl = $"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1e28d2ce-358e-4748-a0e9-6f280a53a6c5";
var chatData = new
{
msgtype = "text",
text = new
{
content = message,
mentioned_list = new string[] { isSendAll ? "@all" : string.Empty }
},
};
var chatStr = JsonConvert.SerializeObject(chatData);
var chatResult = PostJsonAsync(weChatUrl, chatStr).Result;
}
catch (Exception) { }
}
/// <summary>
/// Json Post方法
/// </summary>
/// <param name="url"></param>
/// <param name="jsonData"></param>
/// <returns></returns>
public static async Task<string> PostJsonAsync(string url, string jsonData)
{
using (HttpClient _httpClient = new HttpClient())
{
HttpContent httpContent = new StringContent(jsonData);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var response = await _httpClient.PostAsync(url, httpContent);
return await response.Content.ReadAsStringAsync();
}
}
/// <summary>
/// 根据计划Id添加盘点作业
/// </summary>
/// <param name="scheduleId"></param>
......@@ -839,12 +918,46 @@ namespace Service.TakeStock
return result;
}
var voidgoodsCount = findSchedules.Count(x => x.TakeStockType == TakeStockType.Voidgoods);
var auditUserNames = "赵鹏,姚晓婷";
if (voidgoodsCount > 0 && !auditUserNames.Contains(inputDto.AuditUserName))
if (voidgoodsCount > 1)
{
result.Message = $"作废单请找{auditUserNames}审核!";
result.Message = $"作废盘点只能审核单条数据!";
return result;
}
if (voidgoodsCount > 0)
{
var findAuditProcessLogList = _auditProcessLogRepository.GetAllList(x => x.RelationDataId == findSchedules[0].Id && !x.IsDeleted).OrderBy(x => x.AuditSequence).ToList();
if (findAuditProcessLogList == null || findAuditProcessLogList.Count <= 0)
{
result.Message = $"作废单审核信息不存在!";
return result;
}
var findAuditProcessLog = findAuditProcessLogList.FirstOrDefault(x => x.AuditStatus == AuditStatusEnum.CheckPending);
if (findAuditProcessLog.AuditUserName != inputDto.AuditUserName)
{
result.Message = $"当前作废单请找{findAuditProcessLog.AuditUserName}审核!";
return result;
}
findAuditProcessLog.AuditStatus = inputDto.State == TSScheduleState.审核不通过 ? AuditStatusEnum.AuditFailed : AuditStatusEnum.Approved;
findAuditProcessLog.AuditDateTime = DateTime.Now;
findAuditProcessLog.AuditUserId = 0;
findAuditProcessLog.AuditExplain = inputDto.AuditExplain;
findAuditProcessLog.LastModificationTime = DateTime.Now;
findAuditProcessLog.LastModifierUserId = 0;
await _auditProcessLogRepository.UpdateAsync(findAuditProcessLog, "AuditStatus", "AuditExplain", "AuditDateTime", "AuditUserId", "LastModificationTime", "LastModifierUserId");
if (inputDto.State != TSScheduleState.审核不通过 && findAuditProcessLog.AuditSequence != findAuditProcessLogList.Count)
{
var item = findSchedules.First();
item.AuditDateTime = DateTime.Now;
item.AuditExplain = inputDto.AuditExplain;
item.AuditUserId = inputDto.AuditUserId;
item.AuditUserName = inputDto.AuditUserName;
await _scheduleRepository.UpdateAsync(item, "AuditDateTime", "AuditExplain", "AuditUserId", "AuditUserName");
var model = findAuditProcessLogList.Where(x => x.AuditSequence == (findAuditProcessLog.AuditSequence + 1)).First();
SendMsg($"盘点作废计划单-{item.Code}一级审核通过,请二级审核人:@{model.AuditUserName},及时处理!");
result.IsSuccess = true;
return result;
}
}
if (inputDto.State == TSScheduleState.审核不通过)
{
foreach (var item in findSchedules)
......
......@@ -60,7 +60,7 @@ namespace SqlSugar
public void Migration()
{
Db.CodeFirst.SetStringDefaultLength(20/*设置varchar默认长度为200*/)
.InitTables(typeof(TakeStockSchedule), typeof(TakeStockOrder), typeof(TakeStockOrderLog));//执行完数据库就有这个表了
.InitTables(typeof(TakeStockSchedule), typeof(TakeStockOrder), typeof(TakeStockOrderLog), typeof(AuditProcessLog), typeof(AuditProcessSteps));//执行完数据库就有这个表了
}
}
}
\ No newline at end of file
......@@ -16,16 +16,16 @@ namespace TakeStock.SqlSugar.Repository.TakeStock
public int CreateOrder(TakeStockSchedule schedule, List<TakeStockOrder> orders)
{
try
{
{
client.Ado.BeginTran();
int scheduleId = InsertAndGetId(schedule);
for (int i = 0; i < orders.Count; i++)
{
var order = orders[i];
var order = orders[i];
order.ScheduleId = scheduleId;
order = client.Insertable(order).ExecuteReturnEntity();
}
order = client.Insertable(order).ExecuteReturnEntity();
}
client.Ado.CommitTran();
return scheduleId;
}
......@@ -36,7 +36,7 @@ namespace TakeStock.SqlSugar.Repository.TakeStock
}
}
public int CreateOrderAndFreezeStock(TakeStockSchedule schedule, List<TakeStockOrder> orders)
public int CreateOrderAndFreezeStock(TakeStockSchedule schedule, List<TakeStockOrder> orders, List<AuditProcessLog> auditProcessLogs)
{
try
{
......@@ -47,9 +47,14 @@ namespace TakeStock.SqlSugar.Repository.TakeStock
var order = orders[i];
order.ScheduleId = scheduleId;
order = client.Insertable(order).ExecuteReturnEntity();
var log = new TakeStockOrderLog { OrderId = order.Id, State = TSOrderState.冻结库存, Content = "冻结库存成功。" , CreationTime =DateTime.Now};
var log = new TakeStockOrderLog { OrderId = order.Id, State = TSOrderState.冻结库存, Content = "冻结库存成功。", CreationTime = DateTime.Now };
client.Insertable(log);
}
foreach (var item in auditProcessLogs)
{
item.RelationDataId = scheduleId;
var processLog = client.Insertable(item).ExecuteReturnEntity();
}
client.Ado.CommitTran();
return scheduleId;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment