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 ...@@ -8,6 +8,6 @@ namespace Domain.TakeStock.Repository
{ {
int CreateOrder(TakeStockSchedule order, List<TakeStockOrder> orders); 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 ...@@ -27,11 +27,16 @@ namespace Service.TakeStock
private readonly ITakeStockScheduleRepository _scheduleRepository; private readonly ITakeStockScheduleRepository _scheduleRepository;
private readonly IRepository<TakeStockOrder> _orderRepository; private readonly IRepository<TakeStockOrder> _orderRepository;
private readonly IRepository<TakeStockOrderLog> _logRepository; private readonly IRepository<TakeStockOrderLog> _logRepository;
private readonly IRepository<AuditProcessLog> _auditProcessLogRepository;
private readonly IRepository<AuditProcessSteps> _auditProcessStepsRepository;
private readonly IHttpClientFactory _httpClientFactory; private readonly IHttpClientFactory _httpClientFactory;
private readonly int _delay = 3; private readonly int _delay = 3;
private readonly IBus _bus; 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._httpClientFactory = httpClientFactory;
//this.mqClient = mqClient; //this.mqClient = mqClient;
...@@ -39,6 +44,8 @@ namespace Service.TakeStock ...@@ -39,6 +44,8 @@ namespace Service.TakeStock
this._orderRepository = orderRepository; this._orderRepository = orderRepository;
this._logRepository = logRepository; this._logRepository = logRepository;
this._bus = bus; this._bus = bus;
_auditProcessLogRepository = auditProcessLogRepository;
_auditProcessStepsRepository = auditProcessStepsRepository;
} }
/// <summary> /// <summary>
...@@ -73,17 +80,89 @@ namespace Service.TakeStock ...@@ -73,17 +80,89 @@ namespace Service.TakeStock
item.State = TSOrderState.冻结库存; item.State = TSOrderState.冻结库存;
item.LastModificationTime = DateTime.Now; item.LastModificationTime = DateTime.Now;
} }
int scheduleId = _scheduleRepository.CreateOrderAndFreezeStock(schedule, orders); var auditProcessLogList = AddAuditProcessLog(schedule);
int scheduleId = _scheduleRepository.CreateOrderAndFreezeStock(schedule, orders, auditProcessLogList);
if (scheduleId <= 0) if (scheduleId <= 0)
{ {
await PostData<WMSResponseDto<bool>, RequestDto<List<FreezeStockInputDot>>>(requestData, "TakeStockScheduleService/BatchEnabledStock"); await PostData<WMSResponseDto<bool>, RequestDto<List<FreezeStockInputDot>>>(requestData, "TakeStockScheduleService/BatchEnabledStock");
return new ReturnPlanDto() { IsSuccess = true, Message = "创建计划单失败!" }; 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 = "" }; return new ReturnPlanDto() { IsSuccess = true, Message = "" };
} }
/// <summary> /// <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添加盘点作业 /// 根据计划Id添加盘点作业
/// </summary> /// </summary>
/// <param name="scheduleId"></param> /// <param name="scheduleId"></param>
...@@ -839,12 +918,46 @@ namespace Service.TakeStock ...@@ -839,12 +918,46 @@ namespace Service.TakeStock
return result; return result;
} }
var voidgoodsCount = findSchedules.Count(x => x.TakeStockType == TakeStockType.Voidgoods); var voidgoodsCount = findSchedules.Count(x => x.TakeStockType == TakeStockType.Voidgoods);
var auditUserNames = "赵鹏,姚晓婷"; if (voidgoodsCount > 1)
if (voidgoodsCount > 0 && !auditUserNames.Contains(inputDto.AuditUserName))
{ {
result.Message = $"作废单请找{auditUserNames}审核!"; result.Message = $"作废盘点只能审核单条数据!";
return result; 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.审核不通过) if (inputDto.State == TSScheduleState.审核不通过)
{ {
foreach (var item in findSchedules) foreach (var item in findSchedules)
......
...@@ -60,7 +60,7 @@ namespace SqlSugar ...@@ -60,7 +60,7 @@ namespace SqlSugar
public void Migration() public void Migration()
{ {
Db.CodeFirst.SetStringDefaultLength(20/*设置varchar默认长度为200*/) 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 ...@@ -16,16 +16,16 @@ namespace TakeStock.SqlSugar.Repository.TakeStock
public int CreateOrder(TakeStockSchedule schedule, List<TakeStockOrder> orders) public int CreateOrder(TakeStockSchedule schedule, List<TakeStockOrder> orders)
{ {
try try
{ {
client.Ado.BeginTran(); client.Ado.BeginTran();
int scheduleId = InsertAndGetId(schedule); int scheduleId = InsertAndGetId(schedule);
for (int i = 0; i < orders.Count; i++) for (int i = 0; i < orders.Count; i++)
{ {
var order = orders[i]; var order = orders[i];
order.ScheduleId = scheduleId; order.ScheduleId = scheduleId;
order = client.Insertable(order).ExecuteReturnEntity(); order = client.Insertable(order).ExecuteReturnEntity();
} }
client.Ado.CommitTran(); client.Ado.CommitTran();
return scheduleId; return scheduleId;
} }
...@@ -36,7 +36,7 @@ namespace TakeStock.SqlSugar.Repository.TakeStock ...@@ -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 try
{ {
...@@ -47,9 +47,14 @@ namespace TakeStock.SqlSugar.Repository.TakeStock ...@@ -47,9 +47,14 @@ namespace TakeStock.SqlSugar.Repository.TakeStock
var order = orders[i]; var order = orders[i];
order.ScheduleId = scheduleId; order.ScheduleId = scheduleId;
order = client.Insertable(order).ExecuteReturnEntity(); 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); client.Insertable(log);
} }
foreach (var item in auditProcessLogs)
{
item.RelationDataId = scheduleId;
var processLog = client.Insertable(item).ExecuteReturnEntity();
}
client.Ado.CommitTran(); client.Ado.CommitTran();
return scheduleId; 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