From 266e4bf654c55ce2f7e9271048e4625f1b8b49f6 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期一, 29 十二月 2025 14:36:08 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/BasicService.cs |  259 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 257 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..3be1d07 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,256 @@
 
         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
+
+        static object lockObj = new object();
+        public string CreateCodeByRule(string ruleCode)
+        {
+            lock (lockObj)
+            {
+                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)
+                {
+                    throw new Exception(ex.Message);
+                }
+                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