From 47f793fcd4d851b8b9b047d2aea3fdf820da95f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AD=A3=E6=98=93?= Date: Fri, 14 Mar 2025 15:48:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=BA=93=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wms/WMentryWarehousing_productService.cs | 12 +- ZR.Tasks/TaskScheduler/Job_Blank.cs | 165 ++++++++++++++++++ 2 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 ZR.Tasks/TaskScheduler/Job_Blank.cs diff --git a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs index 524d460c..eab331ee 100644 --- a/ZR.Service/mes/wms/WMentryWarehousing_productService.cs +++ b/ZR.Service/mes/wms/WMentryWarehousing_productService.cs @@ -393,8 +393,9 @@ namespace ZR.Service.mes.wms if (isStrict && wmInfo.Remark != "临时") { // 3. 提取流水号 - string package_no = resultionPackage.PatchCode.Split("_")[1]; - + string patchCodePart = resultionPackage.PatchCode.Split("_")[1]; + // 直接在 int.TryParse 中处理转换,并在一行内完成默认值设置 + int package_no = int.TryParse(patchCodePart, out var temp) ? temp : -1; // 3.1 isStrict = TRUE 时判断是否是满箱标签 WmPackingrecord recourd = Context .Queryable() @@ -402,7 +403,7 @@ namespace ZR.Service.mes.wms // .Where(it => it.PackingCode.EndsWith(packingCode)) // .Where(it => packingCode == int.Parse(it.PackingCode.Substring(7)).ToString()) .Where(it => - package_no == int.Parse(SqlFunc.Right(it.PackingCode, 5)).ToString() + package_no == int.Parse(SqlFunc.Right(it.PackingCode, 5)) ) .Where(it => it.BFilled == true) .First(); @@ -414,7 +415,10 @@ namespace ZR.Service.mes.wms var inspect = Context .Queryable() .Where(it => it.Workorder == resultionPackage.WorkoderID) - .Where(it => it.Packcode.EndsWith(package_no)) + .Where(it => + package_no == int.Parse(SqlFunc.Right(it.Packcode, 5)) + ) + //.Where(it => it.Packcode.EndsWith(package_no)) .OrderByDescending(it => it.CreatedTime) .First(); // XXX 添加校验,如果是编号为4号的打印机打出来的就跳过GP12,满箱与测试标签校验 diff --git a/ZR.Tasks/TaskScheduler/Job_Blank.cs b/ZR.Tasks/TaskScheduler/Job_Blank.cs new file mode 100644 index 00000000..f56f233e --- /dev/null +++ b/ZR.Tasks/TaskScheduler/Job_Blank.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Infrastructure.Attribute; +using JinianNet.JNTemplate; +using Model.DBModel; +using Quartz; +using SqlSugar; +using SqlSugar.IOC; +using ZR.Model.MES.pro; +using ZR.Model.MES.pro.DTO; +using ZR.Model.MES.wms; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace ZR.Tasks.TaskScheduler +{ + /// + /// 毛坯库存调试定时扣除 + /// + /// + [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() + { + await Task.Delay(1); + //TODO 业务逻辑 + DateTime nowTime = DateTime.Now; + List 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() + .And(it => it.BlankNum == item.BlankNumber) + .And(it => it.Type == (item.Remark1.Contains("返工件") ? 2 : 1)) + .ToExpression(); + WmBlankInventory wmBlankInventory = _db.Queryable() + .Where(predicate) + .First(); + if (wmBlankInventory != null) + { + int newQuantity = wmBlankInventory.Quantity ?? 0 - item.PreviousNumber; + _db.Updateable(wmBlankInventory).SetColumns(it => it.Quantity == newQuantity); + 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 + { + Console.WriteLine("调试工单毛坯号异常"); + _db.Ado.RollbackTran(); + } + } + Console.WriteLine("毛坯调试自动出库数:" + num); + } + } + else + { + Console.WriteLine("无调试工单"); + } + } + + /// + /// 获取今日带调试的工单列表 + /// + /// + private List 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() + .And(it => it.Year == year) + .And(it => it.Week == week) + .And(it => it.Date == date) + .And(it => it.Remark2.Contains("调试")) + .And(it => it.Remark3 == "是") + .ToExpression(); + return _db.Queryable() + .Where(predicate) + .OrderBy(it => it.Sort) + .ToList(); + } + } + catch (Exception ex) + { + return null; + } + return null; + } + + /// + /// 获取今天是本年的第几周 + /// + /// + /// + static int GetWeekOfYear(DateTime date) + { + // 使用ISO 8601标准计算一年中的第几周 + return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear( + date, + CalendarWeekRule.FirstFourDayWeek, // 每年的第一周必须至少有4天属于该年 + DayOfWeek.Monday + ); // 设置一周的第一天为星期一 + } + + /// + /// 获取星期几的数字(7为周日) + /// + /// + /// + static int ConvertDayOfWeekToCustomFormat(DayOfWeek dayOfWeek) + { + // 将 DayOfWeek 枚举值转换为自定义格式:周一为1,周日为7 + if (dayOfWeek == DayOfWeek.Sunday) + { + return 7; + } + else + { + return (int)dayOfWeek + 1; + } + } + } +}