payne
2024-04-25 3fa9d2b0420f4d39849f72e6a04b5cb40823fa0d
iWare_RawMaterialWarehouse_Wms/Admin.NET.Application/Service/WmsBase/WmsMaterial/WmsMaterialService.cs
@@ -13,6 +13,7 @@
using System.Web;
using System.ComponentModel;
using System.Data;
using Microsoft.CodeAnalysis;
namespace Admin.NET.Application
{
    /// <summary>
@@ -31,6 +32,8 @@
        private readonly IRepository<BaseCustomer, MasterDbContextLocator> _baseCustomerRep;
        private readonly IRepository<WmsSubstituteGood, MasterDbContextLocator> _wmsSubstituteGoodRep;
        private readonly IRepository<WmsControlRuleDetail, MasterDbContextLocator> _wmsControlRuleDetailRep;
        private readonly IRepository<WmsMaterialType, MasterDbContextLocator> _wmsMaterialTypeRep;
        private readonly IRepository<WmsUnit, MasterDbContextLocator> _wmsUnitRep;
        public WmsMaterialService(
            IRepository<WmsMaterial,MasterDbContextLocator> wmsMaterialRep
            ,IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep
@@ -40,6 +43,8 @@
            , IRepository<BaseCustomer, MasterDbContextLocator> baseCustomerRep
            , IRepository<WmsSubstituteGood, MasterDbContextLocator> wmsSubstituteGoodRep
            , IRepository<WmsControlRuleDetail, MasterDbContextLocator> wmsControlRuleDetailRep
            , IRepository<WmsMaterialType, MasterDbContextLocator> wmsMaterialTypeRep
            , IRepository<WmsUnit, MasterDbContextLocator> wmsUnitRep
        )
        {
            _wmsMaterialRep = wmsMaterialRep;
@@ -50,6 +55,8 @@
            _baseCustomerRep = baseCustomerRep;
            _wmsSubstituteGoodRep = wmsSubstituteGoodRep;
            _wmsControlRuleDetailRep = wmsControlRuleDetailRep;
            _wmsMaterialTypeRep = wmsMaterialTypeRep;
            _wmsUnitRep = wmsUnitRep;
        }
        /// <summary>
        /// 分页查询物料信息
@@ -227,19 +234,27 @@
            var controlRuleld = input.ControlRuleld;
            wmsMaterial.ControlRuleId = controlRuleld;
            //获取物料类型
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>();
            if(wmsMaterialType==null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}物料类型不存在");
            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
            //往来关系信息
            var baseCustomerList = input.BaseCustomerList.Adapt<List<BaseCustomer>>();
            //物料客户关联关系
            var materialCustomerList=new List<WmsMaterialCustomer>();
            foreach (var baseCustomer in baseCustomerList)
            {
                var _custCode= await SerialUtil.GetSerial(EnumSerialType.客户编号);
                materialCustomerList.Add(new WmsMaterialCustomer()
                {
                    CreatedTime = DateTime.Now,
                    CreatedUserId = CurrentUserInfo.UserId,
                    CreatedUserName = CurrentUserInfo.Name,
                    CustChinaName = baseCustomer.CustChinaName,
                    CustCode = baseCustomer.CustCode,
                    CustCode = _custCode,
                    CustEnglishName = baseCustomer.CustEnglishName,
                    CustId = baseCustomer.Id,
                    MaterialCode = wmsMaterial.MaterialCode,
@@ -256,9 +271,13 @@
            //替代品信息
            var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
            var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode)&&u.IsDeleted==false&&u.IsDisabled==false).ProjectToType<WmsMaterialOutput>().ToListAsync();
            foreach (var item in substituteGoodList)
            {
                item.SubstituteCode = Yitter.IdGenerator.YitIdHelper.NextId().ToString();//TODO 要调用生成 编号的方法 先用雪花ID
                var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f=>f.MaterialCode== item.SubstituteMaterialCode);
                item.SubstituteCode =  await SerialUtil.GetSerial(EnumSerialType.替代品编号);
                item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称
            }
            wmsMaterial.UpdatedUserId = SysHelper.GetUserId();
@@ -309,7 +328,11 @@
            //控制规则信息
            var controlRuleld = input.ControlRuleld;
            wmsMaterial.ControlRuleId = controlRuleld;
            //获取物料类型
            var wmsMaterialType = (await _wmsMaterialTypeRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == wmsMaterial.MaterialType)).Adapt<WmsMaterialTypeOutput>();
            if (wmsMaterialType == null) throw Oops.Oh($"ID{wmsMaterial.MaterialType}物料类型不存在");
            wmsMaterial.MaterialTypeName = wmsMaterialType.MaterialTypeName;
            //删除物料客户关联关系
            var oldaterialCustomerList = await _wmsMaterialCustomerRep.DetachedEntities.Where(w => w.MaterialId == wmsMaterial.Id).ToListAsync();
@@ -325,13 +348,14 @@
            var materialCustomerList = new List<WmsMaterialCustomer>();
            foreach (var baseCustomer in baseCustomerList)
            {
                var _custCode = await SerialUtil.GetSerial(EnumSerialType.客户编号);
                materialCustomerList.Add(new WmsMaterialCustomer()
                {
                    CreatedTime = DateTime.Now,
                    CreatedUserId = CurrentUserInfo.UserId,
                    CreatedUserName = CurrentUserInfo.Name,
                    CustChinaName = baseCustomer.CustChinaName,
                    CustCode = baseCustomer.CustCode,
                    CustCode = _custCode,
                    CustEnglishName = baseCustomer.CustEnglishName,
                    CustId = baseCustomer.Id,
                    MaterialCode = wmsMaterial.MaterialCode,
@@ -354,10 +378,15 @@
            //替代品信息
            var substituteGoodList = input.SubstituteGoodList.Adapt<List<WmsSubstituteGood>>();
            List<string> materialCodes = substituteGoodList.Select(s => s.SubstituteMaterialCode).ToList();
            var wmsSubstituteMaterialInfoList = await _wmsMaterialRep.DetachedEntities.Where(u => materialCodes.Contains(u.MaterialCode) && u.IsDeleted == false && u.IsDisabled == false).ProjectToType<WmsMaterialOutput>().ToListAsync();
            foreach (var item in substituteGoodList)
            {
                item.SubstituteCode = Yitter.IdGenerator.YitIdHelper.NextId().ToString();//TODO 要调用生成 编号的方法 先用雪花ID
                var substituteMaterialInfo = wmsSubstituteMaterialInfoList.FirstOrDefault(f => f.MaterialCode == item.SubstituteMaterialCode);
                item.SubstituteCode = await SerialUtil.GetSerial(EnumSerialType.替代品编号);
                item.SubstituteMaterialName = substituteMaterialInfo.MaterialName;//替代品物料名称
            }
            if (materialCustomerList?.Count > 0)
            {
@@ -433,11 +462,8 @@
                var _MaterialName = "";//物料名称
                var _MaterialCode = "";//物料编号
                var _ErpCode = "";//ERP编号
                var _MaterialTypeName = "";//物料类型名称
                var _MaterialTypeDescr = "";//物料类型描述
                var _MaterialType = "";//物料类型
                var _MaterialGroup = "";//物料组
                var _ABCClassName = "";//ABC分类名称
                var _ABCClass = "";//ABC分类
                var _MaterialSpec = "";//物料规格
                var _InPlaceCode = "";//默认入库库位
@@ -459,11 +485,8 @@
                _MaterialName = row["物料名称"]?.ToString();
                _MaterialCode = row["物料编号"]?.ToString();
                _ErpCode = row["ERP编号"]?.ToString();
                _MaterialTypeName = row["物料类型名称"]?.ToString();
                _MaterialTypeDescr = row["物料类型描述"]?.ToString();
                _MaterialType = row["物料类型"]?.ToString();
                _MaterialGroup = row["物料组"]?.ToString();
                _ABCClassName = row["ABC分类名称"]?.ToString();
                _ABCClass = row["ABC分类"]?.ToString();
                _MaterialSpec = row["物料规格"]?.ToString();
                _InPlaceCode = row["默认入库库位"]?.ToString();
@@ -506,14 +529,7 @@
                {
                    addItem.ErpCode = (string)_ErpCode;
                }
                if (!string.IsNullOrEmpty(_MaterialTypeName))
                {
                    addItem.MaterialTypeName = (string)_MaterialTypeName;
                }
                if (!string.IsNullOrEmpty(_MaterialTypeDescr))
                {
                    addItem.MaterialTypeDescr = (string)_MaterialTypeDescr;
                }
                if (string.IsNullOrEmpty(_MaterialType))
                {
@@ -522,26 +538,15 @@
                if (!string.IsNullOrEmpty(_MaterialType))
                {
                    System.Int32 enumMaterialType = default(System.Int32);
                    if (!Enum.TryParse<System.Int32>(_MaterialType, out enumMaterialType) && !string.IsNullOrEmpty(_MaterialType))
                    {
                        throw Oops.Oh($"第{index}行[物料类型]{_MaterialType}值不正确!");
                    }
                    else
                    {
                        addItem.MaterialType = enumMaterialType;
                    }
                    //TODO  根据物料类型ID获取物料类型
                    addItem.MaterialType = 0;
                    addItem.MaterialTypeName = "";
                }
                if (!string.IsNullOrEmpty(_MaterialGroup))
                {
                    addItem.MaterialGroup = (string)_MaterialGroup;
                }
                if (!string.IsNullOrEmpty(_ABCClassName))
                {
                    addItem.ABCClassName = (string)_ABCClassName;
                }
                if (!string.IsNullOrEmpty(_ABCClass))
                {
                    Admin.NET.Core.ABCClassEnum enumABCClass = default(Admin.NET.Core.ABCClassEnum);
@@ -611,38 +616,7 @@
                    }
                }
                if (!string.IsNullOrEmpty(_BatchRuleId))
                {
                    if (!long.TryParse(_BatchRuleId, out long outBatchRuleId) && !string.IsNullOrEmpty(_BatchRuleId))
                    {
                        throw Oops.Oh($"第{index}行[批次属性规则]{_BatchRuleId}值不正确!");
                    }
                    if (outBatchRuleId <= 0 && !string.IsNullOrEmpty(_BatchRuleId))
                    {
                        throw Oops.Oh($"第{index}行[批次属性规则]{_BatchRuleId}值不能小于等于0!");
                    }
                    else
                    {
                        addItem.BatchRuleId = outBatchRuleId;
                    }
                }
                if (!string.IsNullOrEmpty(_ControlRuleId))
                {
                    if (!long.TryParse(_ControlRuleId, out long outControlRuleId) && !string.IsNullOrEmpty(_ControlRuleId))
                    {
                        throw Oops.Oh($"第{index}行[控制属性规则]{_ControlRuleId}值不正确!");
                    }
                    if (outControlRuleId <= 0 && !string.IsNullOrEmpty(_ControlRuleId))
                    {
                        throw Oops.Oh($"第{index}行[控制属性规则]{_ControlRuleId}值不能小于等于0!");
                    }
                    else
                    {
                        addItem.ControlRuleId = outControlRuleId;
                    }
                }
                if (!string.IsNullOrEmpty(_IsDisabled))
                {
                    if (!_IsDisabled.Equals("是") && !_IsDisabled.Equals("否"))