164 lines
6.3 KiB
C#
Raw Normal View History

using Infrastructure.Attribute;
2025-03-14 15:48:57 +08:00
using Quartz;
using SqlSugar;
using SqlSugar.IOC;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Threading.Tasks;
2025-03-14 15:48:57 +08:00
using ZR.Model.MES.pro;
using ZR.Model.MES.wms;
namespace ZR.Tasks.TaskScheduler
{
/// <summary>
/// 毛坯库存调试定时扣除
///
/// </summary>
[AppService(ServiceType = typeof(Job_Blank), ServiceLifetime = LifeTime.Scoped)]
public class Job_Blank : JobBase, IJob
{
//private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public async Task Execute(IJobExecutionContext context)
{
await ExecuteJob(context, async () => await Run());
}
public async Task Run()
{
2025-03-19 15:13:28 +08:00
Console.WriteLine("=================执行毛坯调试自动出库===============");
2025-03-14 15:48:57 +08:00
await Task.Delay(1);
//TODO 业务逻辑
DateTime nowTime = DateTime.Now;
List<ProWorkorder_v2> proWorkorders = GetDodayWorkOrder();
if (proWorkorders.Count > 0)
{
int num = 0;
foreach (var item in proWorkorders)
{
using (var _db = DbScoped.SugarScope)
{
_db.Ado.BeginTran();
var predicate = Expressionable
.Create<WmBlankInventory>()
.And(it => it.BlankNum == item.BlankNumber)
2025-05-28 18:26:48 +08:00
.And(it => it.Type == (item.Remark1.Contains("返工") ? 2 : 1))
2025-03-14 15:48:57 +08:00
.ToExpression();
WmBlankInventory wmBlankInventory = _db.Queryable<WmBlankInventory>()
.Where(predicate)
.First();
if (wmBlankInventory != null)
{
int newQuantity = wmBlankInventory.Quantity ?? 0 - item.PreviousNumber;
2025-03-19 15:13:28 +08:00
wmBlankInventory.Quantity = newQuantity;
_db.Updateable(wmBlankInventory).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
2025-03-14 15:48:57 +08:00
WmBlankRecord res =
new()
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
FkBlankInventoryId = wmBlankInventory.Id,
BlankNum = wmBlankInventory.BlankNum,
ChangeQuantity = item.PreviousNumber,
Type = 2,
Status = 1,
ActionTime = nowTime,
Remark =
"自动添加备注:工单主键"
+ item.Id
+ ",上件数"
+ item.PreviousNumber
+ "每日调试自动毛坯出库。",
CreatedBy = "系统",
CreatedTime = nowTime
};
//添加库存记录
_db.Insertable(res).ExecuteCommand();
_db.Ado.CommitTran();
num++;
}
else
{
2025-03-19 15:13:28 +08:00
Console.WriteLine("调试工单毛坯号异常:" + item.BlankNumber);
2025-03-14 15:48:57 +08:00
_db.Ado.RollbackTran();
}
}
}
2025-03-19 15:13:28 +08:00
Console.WriteLine("每日毛坯调试自动出库数:" + num);
2025-03-14 15:48:57 +08:00
}
else
{
Console.WriteLine("无调试工单");
}
}
/// <summary>
/// 获取今日带调试的工单列表
/// </summary>
/// <returns></returns>
private List<ProWorkorder_v2> GetDodayWorkOrder()
{
try
{
var today = DateTime.Now;
int year = today.Year;
int week = GetWeekOfYear(today);
int date = ConvertDayOfWeekToCustomFormat(today.DayOfWeek);
using (var _db = DbScoped.SugarScope)
{
var predicate = Expressionable
.Create<ProWorkorder_v2>()
.And(it => it.Year == year)
.And(it => it.Week == week)
.And(it => it.Date == date)
.And(it => !it.Remark1.Contains("不扣"))
2025-03-14 15:48:57 +08:00
.And(it => it.Remark2.Contains("调试"))
2025-03-19 15:13:28 +08:00
// .And(it => it.Remark3 == "是")
2025-03-14 15:48:57 +08:00
.ToExpression();
return _db.Queryable<ProWorkorder_v2>()
.Where(predicate)
.OrderBy(it => it.Sort)
.ToList();
}
}
catch (Exception)
2025-03-14 15:48:57 +08:00
{
return null;
}
}
/// <summary>
/// 获取今天是本年的第几周
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
static int GetWeekOfYear(DateTime date)
{
// 使用ISO 8601标准计算一年中的第几周
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
date,
CalendarWeekRule.FirstFourDayWeek, // 每年的第一周必须至少有4天属于该年
DayOfWeek.Monday
); // 设置一周的第一天为星期一
}
/// <summary>
/// 获取星期几的数字7为周日
/// </summary>
/// <param name="dayOfWeek"></param>
/// <returns></returns>
static int ConvertDayOfWeekToCustomFormat(DayOfWeek dayOfWeek)
{
// 将 DayOfWeek 枚举值转换为自定义格式周一为1周日为7
if (dayOfWeek == DayOfWeek.Sunday)
{
return 7;
}
else
{
2025-03-19 15:13:28 +08:00
return (int)dayOfWeek;
2025-03-14 15:48:57 +08:00
}
}
}
}