From 5909649db85ff29faf983154763cc4b7301665e2 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期四, 18 十二月 2025 11:15:31 +0800
Subject: [PATCH] 新增任务调度功能及优化日志处理新增任务状态枚举值 HasSent,表示任务已发送。新增任务调度接口 `ISchedulerCenter`,定义任务调度相关方法。 新增任务工厂 `JobFactory`,通过依赖注入创建任务实例。 新增任务调度服务配置 `JobSetup`,支持依赖注入配置。 新增通用响应类 `ResponseContent`,封装任务调度操作结果。新增任务调度服务实现 `SchedulerCenterServer`,实现任务添加、暂停、恢复等功能。 新增任务信息 DTO `TaskInfoDto` 和任务计划实体类 `TasksQz`。 新增任务配置类 `JobConfig`,描述任务类型及执行间隔。 注释掉部分服务中的旧任务创建逻辑,准备替换为新调度机制。 新增 AGV 任务调度作业 `AgvTaskJob`,处理 AGV 任务调度。 新增 Quartz 中间件 `QuartzJobMiddleWare`,初始化任务调度。 在 `Program.cs` 中集成 Quartz,配置任务调度依赖注入。 优化日志记录和异常处理,提升代码可维护性和调试性。
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs | 254 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 252 insertions(+), 2 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
index ac56868..269547c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs"
@@ -1,9 +1,21 @@
-锘縰sing WIDESEA_IBasicService;
+锘縰sing SqlSugar;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_DTO.Base;
+using WIDESEA_IBasicService;
+using WIDESEA_Model.Models;
+using WIDESEA_Model.Models.Basic;
namespace WIDESEA_BasicService
{
public class BasicService : IBasicService
{
+ private readonly IUnitOfWorkManage _unitOfWorkManage;
+
public IPalletCodeInfoService PalletCodeInfoService { get; }
public ILocationInfoService LocationInfoService { get; }
@@ -14,13 +26,251 @@
public IMaterielCodeInfoService MaterielCodeInfoService { get; }
- public BasicService(ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService)
+ public IMaterialUnitService MaterialUnitService { get; }
+
+ public BasicService(IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService, IMaterielInfoService materielInfoService, IWarehouseService warehouseService, IPalletCodeInfoService palletCodeInfoService, IMaterielCodeInfoService materielCodeInfoService, IMaterialUnitService materialUnitService)
{
+ _unitOfWorkManage = unitOfWorkManage;
LocationInfoService = locationInfoService;
MaterielInfoService = materielInfoService;
WarehouseService = warehouseService;
PalletCodeInfoService = palletCodeInfoService;
MaterielCodeInfoService = materielCodeInfoService;
+ MaterialUnitService = materialUnitService;
}
+
+ #region
+ public string CreateCodeByRule(string ruleCode)
+ {
+ string code = string.Empty;
+ DateTime dataTime = DateTime.Now;
+ DateTime now = DateTime.Now;
+
+ try
+ {
+ Dt_CodeRuleConfig ruleConfig = _unitOfWorkManage.Db.Queryable<Dt_CodeRuleConfig>().Where(x => x.RuleCode == ruleCode).First();
+ if (ruleConfig.ModifyDate != null)
+ {
+ dataTime = ruleConfig.ModifyDate.Value;
+ }
+ else
+ {
+ dataTime = ruleConfig.CreateDate;
+ }
+
+ if (now.Year == dataTime.Year && now.Month == dataTime.Month && now.Day == dataTime.Day)
+ {
+ now = dataTime;
+ ruleConfig.CurrentVal = Convert.ToInt32(ruleConfig.CurrentVal) + 1;
+ }
+ else
+ {
+ ruleConfig.CurrentVal = 1;
+ }
+
+ ruleConfig.ModifyDate = DateTime.Now;
+
+ code = ruleConfig.Format;
+ code = code.Replace($"[{CodeFormatTypeEnum.YYYY}]", now.Year.ToString().PadLeft(4, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.MM}]", now.Month.ToString().PadLeft(2, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.DD}]", now.Day.ToString().PadLeft(2, '0'));
+ code = code.Replace($"[{CodeFormatTypeEnum.ST}]", ruleConfig.StartStr.ToString());
+ code = code.Replace($"[{CodeFormatTypeEnum.NUM}]", ruleConfig.CurrentVal.ToString().PadLeft(ruleConfig.Length, '0'));
+
+ _unitOfWorkManage.Db.Updateable(ruleConfig).ExecuteCommand();
+ }
+ catch (Exception ex)
+ {
+
+ }
+ return code;
+ }
+ #endregion
+
+ #region 鍗曚綅杞崲
+ /// <summary>
+ /// 鍗曚綅杞崲
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="fromUnit"></param>
+ /// <param name="toUnit"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitQuantityConvert(string materialCode, string fromUnit, string toUnit, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(fromUnit))
+ {
+ throw new Exception($"杞崲鍓嶅崟浣嶄笉鑳戒负绌�");
+ }
+
+ if (string.IsNullOrEmpty(toUnit))
+ {
+ throw new Exception($"杞崲鍚庡崟浣嶄笉鑳戒负绌�");
+ }
+
+ decimal ratio = 1;
+
+ if (fromUnit.Trim().ToLower() == toUnit.Trim().ToLower())
+ {
+ return new UnitConvertResultDTO(materialCode, fromUnit, toUnit, quantity, ratio);
+ }
+
+ Dt_MaterialUnit materialUnit = MaterialUnitService.Repository.QueryFirst(x => x.ItemNo == materialCode && x.FromUom == fromUnit && x.ToUom == toUnit);
+ if (materialUnit != null)
+ {
+ ratio = materialUnit.Ratio;
+ return new UnitConvertResultDTO(materialCode, fromUnit, toUnit, quantity, ratio);
+ }
+ else
+ {
+ materialUnit = MaterialUnitService.Repository.QueryFirst(x => x.ItemNo == materialCode && x.FromUom == toUnit && x.ToUom == fromUnit);
+ if (materialUnit == null)
+ {
+ throw new Exception($"鏈壘鍒板崟浣嶈浆鎹㈠叧绯伙紝鐗╂枡缂栧彿锛歿materialCode}锛岃浆鎹㈠墠鍗曚綅锛歿fromUnit}锛岃浆鎹㈠悗鍗曚綅锛歿toUnit}");
+ }
+ ratio = materialUnit.Ratio;
+ return new UnitConvertResultDTO(materialCode, fromUnit, toUnit, quantity, ratio);
+ }
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛岄鏂欒浆閲囪喘
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitUsageToPurchase(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.usageUOM, materielInfo.purchaseUOM, quantity);
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛岄鏂欒浆搴撳瓨
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitUsageToInventory(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.usageUOM, materielInfo.inventoryUOM, quantity);
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛岄噰璐浆搴撳瓨
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitPurchaseToInventory(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.purchaseUOM, materielInfo.inventoryUOM, quantity);
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛岄噰璐浆棰嗘枡
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitPurchaseToUsage(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.purchaseUOM, materielInfo.usageUOM, quantity);
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛屽簱瀛樿浆棰嗘枡
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitInventoryToUsage(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.inventoryUOM, materielInfo.usageUOM, quantity);
+ }
+
+ /// <summary>
+ /// 鍗曚綅杞崲锛屽簱瀛樿浆閲囪喘
+ /// </summary>
+ /// <param name="materialCode"></param>
+ /// <param name="quantity"></param>
+ /// <returns></returns>
+ /// <exception cref="Exception"></exception>
+ public UnitConvertResultDTO UnitInventoryToPurchase(string materialCode, decimal quantity)
+ {
+ if (string.IsNullOrEmpty(materialCode))
+ {
+ throw new Exception($"鐗╂枡缂栧彿涓嶈兘涓虹┖");
+ }
+
+ Dt_MaterielInfo materielInfo = MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == materialCode);
+ if (materielInfo == null)
+ {
+ throw new Exception($"鏈壘鍒扮墿鏂欎俊鎭瘂materialCode}");
+ }
+
+ return UnitQuantityConvert(materialCode, materielInfo.inventoryUOM, materielInfo.purchaseUOM, quantity);
+ }
+ #endregion
}
}
--
Gitblit v1.9.3