批量创建料品示例代码
标签搜索
侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计收到 0 条评论
U9

批量创建料品示例代码

心底有颗枇杷树
2025-03-04 / 0 评论 / 9 阅读 / 正在检测是否收录...
  • BP名:BatchCreateItemByDTOSRVProxy
  • 命名空间:UFIDA.U9.ISV.Item.Proxy
  • dll:C:\yonyou\U9V60\Portal\ApplicationServer\Libs\UFIDA.U9.ISV.Item.Agent.dll
  • 示例代码

    using System;
    using System.Collections.Generic;
    using System.Data;
    using Cust.QR.ZJLHBP.Public;
    using UFIDA.U9.Base;
    using UFIDA.U9.Base.Organization;
    using UFIDA.U9.Base.PropertyTypes;
    using UFIDA.U9.CBO.Pub.Controller;
    using UFIDA.U9.CBO.Pub.Controller.Proxy;
    using UFIDA.U9.CBO.SCM.Item;
    using UFIDA.U9.CBO.SCM.TallyBy;
    using UFIDA.U9.ISV.Item.Proxy;
    using UFSoft.UBF.AopFrame;
    using UFSoft.UBF.Business;
    using UFSoft.UBF.PL.Engine;
    using ItemInspectionInfoDTOData = UFIDA.U9.ISV.Item.ItemInspectionInfoDTOData;
    using ItemInvInfoDTOData = UFIDA.U9.ISV.Item.ItemInvInfoDTOData;
    using ItemMasterDTOData = UFIDA.U9.ISV.Item.ItemMasterDTOData;
    using ItemMFGInfoDTOData = UFIDA.U9.ISV.Item.ItemMFGInfoDTOData;
    using ItemMRPInfoDTOData = UFIDA.U9.ISV.Item.ItemMRPInfoDTOData;
    using ItemPurchaseInfoDTOData = UFIDA.U9.ISV.Item.ItemPurchaseInfoDTOData;
    using ItemSaleInfoDTOData = UFIDA.U9.ISV.Item.ItemSaleInfoDTOData;
    
     internal partial class AutoCreateItemImpementStrategy : BaseStrategy {
          public AutoCreateItemImpementStrategy() 
    
          public override object Do(object obj) {
              AutoCreateItem bpObj = (AutoCreateItem)obj;
    
              Logger logger = Logger.GetInstance();
              //所有料品都有数据中心(00)创建然后下发
              Organization org = Organization.Finder.Find("Code = '00'");
              // 需要生成流水号的料品
              ItemMaster.EntityList itemMasters =
                  ItemMaster.Finder.FindAll(
                      string.Format("Description = '需要建流水号' and Org = '{0}' and code = '0101000001' ", org.ID));
              foreach (ItemMaster itemMaster in itemMasters) {
                  if (itemMaster.Code.Contains(".")) {
                      continue;
                  }
    
                  // 右匹配查看生成流水号的料品
                  string sql =
                      string.Format(
                          @"select id,code from CBO_ItemMaster where code like '{0}%' and DescFlexField_PrivateDescSeg15 != 'true' and org = '{1}' ORDER BY CreatedOn DESC;
    select id from CBO_ItemMaster where code like '{0}%' and org = '{1}'; ",
                          itemMaster.Code + ".",org.ID);
    
                  // 执行sql
                  DataSet dataset = PubHelper.RunSQLOutDataSet(sql, null);
    
                  // 没有创建过流水号料品
                  try {
                      if (dataset != null && dataset.Tables[1].Rows.Count <= 0) {
                          BatchCreateItemByDTOSRVProxy proxy = new BatchCreateItemByDTOSRVProxy();
                          proxy.ItemMasterDTOs = new List<ItemMasterDTOData>();
                          proxy.TargetOrgCode = Context.LoginOrg.Code;
                          proxy.TargetOrgName = Context.LoginOrg.Name;
                          for (int i = 1; i <= 50; i++) {
                              ItemMasterDTOData itemMasterDtoData = CopyItemMasterDtoData(itemMaster);
                              // 处理下料号,料号为不同  PadLeft(6, '0') 使字符串长度达到 6,不足部分填充 0。
                              itemMasterDtoData.Code = itemMaster.Code + "." + i.ToString().PadLeft(6, '0');
                              proxy.ItemMasterDTOs.Add(itemMasterDtoData);
                          }
    
                          List<ItemMasterData> itemMasterDatas = proxy.Do();
                          foreach (ItemMasterData itemMasterData in itemMasterDatas) {
                              ItemMaster master =
                                  ItemMaster.Finder.Find(string.Format("code = '{0}'", itemMasterData.Code));
                              CopyItemMaster(master);
                          }
    
                          // 结束本次循环作用于 foreach (ItemMaster itemMaster in itemMasters)这部分的代码
                          continue;
                      }
    
                      if (dataset != null && dataset.Tables[0] != null) {
                          // 剩余流水号数量不足50个
                          if (dataset.Tables[0].Rows.Count < 50 && dataset.Tables[0].Rows.Count > 0) {
                              // 差多少?
                              int balance = 50 - dataset.Tables[0].Rows.Count;
                              BatchCreateItemByDTOSRVProxy proxy = new BatchCreateItemByDTOSRVProxy();
                              proxy.ItemMasterDTOs = new List<ItemMasterDTOData>();
                              proxy.TargetOrgCode = Context.LoginOrg.Code;
                              proxy.TargetOrgName = Context.LoginOrg.Name;
                              // 最大的流水号
                              string maxLiuShui = dataset.Tables[0].Rows[0]["code"].ToString();
                              string[] result = maxLiuShui.Split('.');
                              // long 类型是数值类型,它不会存储前导零。因此,无法直接将 "000001" 转换为 long 并保留前导零。下面有处理加上前面的0
                              long liushuihao = long.Parse(result[1]);
                              for (int i = 0; i <= balance; i++) {
                                  ItemMasterDTOData itemMasterDtoData = CopyItemMasterDtoData(itemMaster);
                                  // PadLeft(6, '0') 使字符串长度达到 6,不足部分填充 0。
                                  itemMasterDtoData.Code = result[0] + "." + liushuihao++.ToString().PadLeft(6, '0');
                                  proxy.ItemMasterDTOs.Add(itemMasterDtoData);
                              }
    
                              proxy.Do();
                              }
                          }
                      }
                  }
                  catch (Exception e) {
                      logger.LogError("自动创建流水料品失败:");
                      logger.LogError(e.ToString());
                  }
              }
    
              return null;
          }
    
          private ItemMasterDTOData CopyItemMasterDtoData(ItemMaster itemMaster) {
              ItemMasterDTOData itemMasterDto = new ItemMasterDTOData();
              itemMasterDto.SysState = ObjectState.Inserted;
              itemMasterDto.Name = itemMaster.Name;
              itemMasterDto.SPECS = itemMaster.SPECS;
              itemMasterDto.Effective = new EffectiveData();
              itemMasterDto.Effective.IsEffective = true;
              itemMasterDto.Effective.EffectiveDate = DateTime.Now;
              itemMasterDto.Effective.DisableDate = DateTime.Parse("9999.12.31");
    
              if (itemMaster.MfgInfo != null) {
                  //料品生产信息
                  itemMasterDto.MfgInfo = new ItemMFGInfoDTOData();
                  itemMasterDto.MfgInfo.IsSueOverType = -1;
                  itemMasterDto.MfgInfo.BuildShrinkageRate = 1;
                  itemMasterDto.MfgInfo.IsOutputControlFlag = false;
                  //图号
                  itemMasterDto.MfgInfo.PictureCode = itemMaster.MfgInfo.PictureCode;
    
                  itemMasterDto.MfgInfo.OperateType = -1;
                  if (itemMaster.MfgInfo.ProductDepartment != null) {
                      itemMasterDto.MfgInfo.ProductDepartment = new CommonArchiveDataDTOData();
                      itemMasterDto.MfgInfo.ProductDepartment.ID = itemMaster.MfgInfo.ProductDepartment.ID;
                  }
    
                  //计划.BOM控制方式
                  if (itemMaster.MfgInfo.BomControlMode != null) {
                      itemMasterDto.MfgInfo.BomControlMode = itemMaster.MfgInfo.BomControlMode.Value;
                  }
    
                  //生产.生产数量选择
                  if (itemMaster.MfgInfo.BuildQuanSelectType != null) {
                      itemMasterDto.MfgInfo.BuildQuanSelectType = itemMaster.MfgInfo.BuildQuanSelectType.Value;
                  }
              }
    
              if (itemMaster.MrpInfo != null) {
                  //料品MRP(计划)信息
                  itemMasterDto.MrpInfo = new ItemMRPInfoDTOData();
    
    
                  itemMasterDto.MrpInfo.IsTraceRequirement = true;
                  //计划.计划方法
                  // if (itemMaster.InventoryInfo.InventoryPlanningMethod != InventoryPlanningMethodEnum.UseMRP) {
                  //     if (itemMaster.MrpInfo.MRPPlanningType != null) {
                  //         itemMasterDto.MrpInfo.MRPPlanningType = itemMaster.MrpInfo.MRPPlanningType.Value;
                  //     }
                  // }
    
                  //计划.预测控制
                  if (itemMaster.MrpInfo.ForecastContorlType != null) {
                      itemMasterDto.MrpInfo.ForecastContorlType = itemMaster.MrpInfo.ForecastContorlType.Value;
                  }
    
                  //计划.计划时界原则
                  if (itemMaster.MrpInfo.PlanningTimeFenceRuleType != null) {
                      itemMasterDto.MrpInfo.PlanningTimeFenceRuleType =
                          itemMaster.MrpInfo.PlanningTimeFenceRuleType.Value;
                  }
    
                  //计划.计划时界类型
                  if (itemMaster.MrpInfo.PlanningTimeFence != null) {
                      itemMasterDto.MrpInfo.PlanningTimeFence = itemMaster.MrpInfo.PlanningTimeFence.Value;
                  }
    
                  //计划.需求时界原则
                  if (itemMaster.MrpInfo.DemandTimeFenceRuleType != null) {
                      itemMasterDto.MrpInfo.DemandTimeFenceRuleType = itemMaster.MrpInfo.DemandTimeFenceRuleType.Value;
                  }
    
                  //计划.需求时界类型
                  if (itemMaster.MrpInfo.DemandTimeFence != null) {
                      itemMasterDto.MrpInfo.DemandTimeFence = itemMaster.MrpInfo.DemandTimeFence.Value;
                  }
    
                  //计划.发放时界类型
                  if (itemMaster.MrpInfo.ReleaseTimeFence != null) {
                      itemMasterDto.MrpInfo.ReleaseTimeFence = itemMaster.MrpInfo.ReleaseTimeFence.Value;
                  }
    
                  /*采购预提前期*/
                  itemMasterDto.MrpInfo.PurForwardProcessLT = itemMaster.MrpInfo.PurForwardProcessLT;
    
                  /*采购后提前期*/
                  itemMasterDto.MrpInfo.PurBackwardProcessLT = itemMaster.MrpInfo.PurBackwardProcessLT;
    
                  /*采购处理提前期*/
                  itemMasterDto.MrpInfo.PurProcessLT = itemMaster.MrpInfo.PurProcessLT;
                  //提前期批量
                  itemMasterDto.MrpInfo.LTBatch = itemMaster.MrpInfo.LTBatch;
    
                  //变动提前期
                  itemMasterDto.MrpInfo.VarietyLT = itemMaster.MrpInfo.VarietyLT;
    
                  /*固定提前期*/
                  itemMasterDto.MrpInfo.FixedLT = itemMaster.MrpInfo.FixedLT;
    
                  /*默认计划员*/
                  if (itemMaster.MrpInfo.Planer != null) {
                      itemMasterDto.MrpInfo.Planer = new CommonArchiveDataDTOData(itemMaster.MrpInfo.Planer.ID,
                          itemMaster.MrpInfo.Planer.Code, itemMaster.MrpInfo.Planer.Name);
                  }
    
                  /*制造提前期*/
                  itemMasterDto.MrpInfo.SumManufactureLT = itemMaster.MrpInfo.SumManufactureLT;
              }
    
              itemMasterDto.InventoryInfo = new ItemInvInfoDTOData();
              itemMasterDto.InventoryInfo.InventoryPlanningMethod = 4;
              //存储地点
              if (itemMasterDto.InventoryInfo != null) {
                  //料品库存信息
                  itemMasterDto.InventoryInfo = new ItemInvInfoDTOData();
                  itemMasterDto.InventoryInfo.Warehouse = new CommonArchiveDataDTOData();
                  if (itemMaster.InventoryInfo.Warehouse != null) {
                      itemMasterDto.InventoryInfo.Warehouse.ID = itemMaster.InventoryInfo.Warehouse.ID;
                      itemMasterDto.InventoryInfo.Warehouse.Code = itemMaster.InventoryInfo.Warehouse.Code;
                  }
    
                  itemMasterDto.InventoryInfo.WarehouseManager = new CommonArchiveDataDTOData();
                  if (itemMaster.InventoryInfo.WarehouseManager != null) {
                      itemMasterDto.InventoryInfo.WarehouseManager.Code = itemMaster.InventoryInfo.WarehouseManager.Code;
                      itemMasterDto.InventoryInfo.WarehouseManager.Name = itemMaster.InventoryInfo.WarehouseManager.Name;
                      itemMasterDto.InventoryInfo.WarehouseManager.ID = itemMaster.InventoryInfo.WarehouseManager.ID;
                  }
    
                  itemMasterDto.InventoryInfo.PurchaseControlMode = InvQtyCtlTypeEnum.MaxStockLimit.Value;
                  itemMasterDto.InventoryInfo.IsInvCalculateBySeiban = true;
                  itemMasterDto.InventoryInfo.IsBalanceByProject = false;
                  //库存规划.规划方法
                  //if (itemMaster.InventoryInfo.InventoryPlanningMethod != null) {
                  // itemMasterDto.InventoryInfo.InventoryPlanningMethod =
                  //     itemMaster.InventoryInfo.InventoryPlanningMethod.Value;
                  itemMasterDto.InventoryInfo.InventoryPlanningMethod = 4;
                  // }
    
                  //库存规划.安全存量法
                  if (itemMaster.InventoryInfo.SafetyStockType != null) {
                      itemMasterDto.InventoryInfo.SafetyStockType = itemMaster.InventoryInfo.SafetyStockType.Value;
                  }
    
                  //库存规划.安全库存量
                  itemMasterDto.InventoryInfo.SafetyStockQty = itemMaster.InventoryInfo.SafetyStockQty;
                  /*转换率加权*/
                  if (itemMaster.InventoryInfo != null) {
                      itemMasterDto.InventoryInfo.ConvertRatio = itemMaster.InventoryInfo.ConvertRatio;
                  }
    
                  if (itemMaster.InventoryInfo != null && itemMaster.InventoryInfo.LotParam != null) {
                      /*批号参数*/
                      itemMasterDto.InventoryInfo.LotParam = new CommonArchiveDataDTOData();
                      itemMasterDto.InventoryInfo.LotParam.Code = itemMaster.InventoryInfo.LotParam.Code;
                      itemMasterDto.InventoryInfo.LotParam.ID = itemMaster.InventoryInfo.LotParam.ID;
                      itemMasterDto.InventoryInfo.LotParam.Name = itemMaster.InventoryInfo.LotParam.Name;
                  }
    
                  /*序号参数*/
                  if (itemMaster.InventoryInfo != null && itemMaster.InventoryInfo.SnParam != null) {
                      itemMasterDto.InventoryInfo.SnParam = new CommonArchiveDataDTOData();
                      itemMasterDto.InventoryInfo.SnParam.ID = itemMaster.InventoryInfo.SnParam.ID;
                      itemMasterDto.InventoryInfo.SnParam.Code = itemMaster.InventoryInfo.SnParam.Code;
                      itemMasterDto.InventoryInfo.SnParam.Name = itemMaster.InventoryInfo.SnParam.Name;
                  }
    
                  /*安全库存量*/
                  if (itemMaster.InventoryInfo != null) {
                      itemMasterDto.InventoryInfo.SafetyStockQty = itemMaster.InventoryInfo.SafetyStockQty;
                  }
              }
    
              //料品质量信息
              itemMasterDto.InspectionInfo = new ItemInspectionInfoDTOData();
              itemMasterDto.InspectionInfo.ID = itemMaster.InspectionInfo.ID;
              // 描述
              // itemMasterDto.Description = itemMasterDto.Description;
    
              itemMasterDto.MainItemCategory = new CommonArchiveDataDTOData();
              itemMasterDto.MainItemCategory.Code = itemMaster.MainItemCategory.Code;
    
              //    库存单位
              itemMasterDto.InventorySecondUOM = new CommonArchiveDataDTOData();
              itemMasterDto.InventorySecondUOM.Code = itemMaster.Code;
              //    库存主单位
              itemMasterDto.InventoryUOM = new CommonArchiveDataDTOData();
              itemMasterDto.InventoryUOM.Code = itemMaster.InventorySecondUOM.Code;
              //    重量单位
              itemMasterDto.WeightUom = new CommonArchiveDataDTOData();
              itemMasterDto.WeightUom.Code = itemMaster.InventoryUOM.Code;
              //    体积单位
              itemMasterDto.BulkUom = new CommonArchiveDataDTOData();
              itemMasterDto.BulkUom.Code = itemMaster.InventoryUOM.Code;
    
              itemMasterDto.SalesUOM = new CommonArchiveDataDTOData();
              itemMasterDto.SalesUOM.Code = itemMaster.SalesUOM.Code;
    
              itemMasterDto.PurchaseUOM = new CommonArchiveDataDTOData();
              itemMasterDto.PurchaseUOM.Code = itemMaster.PurchaseUOM.Code;
    
              itemMasterDto.PriceUOM = new CommonArchiveDataDTOData();
              itemMasterDto.PriceUOM.Code = itemMaster.PriceUOM.Code;
    
              itemMasterDto.ManufactureUOM = new CommonArchiveDataDTOData();
              itemMasterDto.ManufactureUOM.Code = itemMaster.ManufactureUOM.Code;
    
              itemMasterDto.CostUOM = new CommonArchiveDataDTOData();
              itemMasterDto.CostUOM.Code = itemMaster.CostUOM.Code;
    
              //    领料单位
              itemMasterDto.MaterialOutUOM = new CommonArchiveDataDTOData();
              itemMasterDto.MaterialOutUOM.Code = itemMaster.MaterialOutUOM.Code;
    
              itemMasterDto.ItemFormAttribute = itemMaster.ItemFormAttribute.Value;
    
              itemMasterDto.IsInventoryEnable = true; //可库存交易
              itemMasterDto.IsPurchaseEnable = true; // 可采购
              itemMasterDto.IsSalesEnable = true; //可销售
              itemMasterDto.IsBOMEnable = true; //可BOM
              itemMasterDto.IsMRPEnable = true; //可MRP
              itemMasterDto.IsVMIEnable = true; //VMI标志
    
              itemMasterDto.IsOutsideOperationEnable = itemMaster.IsOutsideOperationEnable; //可委外
    
              itemMasterDto.IsBuildEnable = itemMaster.IsBuildEnable; //可生产
    
    
              itemMasterDto.IsVarRatio = true;
    
              if (itemMaster.PurchaseInfo != null) {
                  //料品采购信息
                  itemMasterDto.PurchaseInfo = new ItemPurchaseInfoDTOData();
                  //理货规则
                  TallyBy putawayRule = TallyBy.FindByCode(Context.LoginOrg, "1");
                  if (putawayRule != null)
                      itemMasterDto.PurchaseInfo.ReceiptModeAllowModify = true;
                  itemMasterDto.PurchaseInfo.PriceSource = 2;
                  itemMasterDto.PurchaseInfo.ReceiptMode = itemMaster.PurchaseInfo.ReceiptMode.Value;
                  itemMasterDto.PurchaseInfo.IsNeedRequest = false;
                  itemMasterDto.PurchaseInfo.ReceiptRule = new CommonArchiveDataDTOData();
                  itemMasterDto.PurchaseInfo.ReceiptRule.Code = "1";
                  //采购.配额供应商
                  if (itemMaster.PurchaseInfo.QuotaSupplier != null) {
                      itemMasterDto.PurchaseInfo.QuotaSupplier = itemMaster.PurchaseInfo.QuotaSupplier.Value;
                  }
    
                  //采购.收货方式
                  if (itemMaster.PurchaseInfo.ReceiptType != null) {
                      itemMasterDto.PurchaseInfo.ReceiptType = itemMaster.PurchaseInfo.ReceiptType.Value;
                  }
              }
    
              //料品销售信息
              if (itemMaster.SaleInfo != null) {
                  itemMasterDto.SaleInfo = new ItemSaleInfoDTOData();
                  itemMasterDto.SaleInfo.SupplyOrg = new CommonArchiveDataDTOData();
                  itemMasterDto.SaleInfo.SupplyOrg.Code = Context.LoginOrg.Code;
                  if (itemMaster.SaleInfo.LimitPriceMode != null) {
                      itemMasterDto.SaleInfo.LimitPriceMode = itemMaster.SaleInfo.LimitPriceMode.Value;
                  }
    
                  //销售.供应来源
                  if (itemMaster.SaleInfo.SupplySource != null) {
                      itemMasterDto.SaleInfo.SupplySource = itemMaster.SaleInfo.SupplySource.Value;
                  }
    
                  //销售.供应类型
                  if (itemMaster.SaleInfo.DemandTransType != null) {
                      itemMasterDto.SaleInfo.DemandTransType = itemMaster.SaleInfo.DemandTransType.Value;
                  }
              }
    
    
              //转换率策略
              if (itemMaster.ConverRatioRule != null) {
                  itemMasterDto.ConverRatioRule = itemMaster.ConverRatioRule.Value;
              }
    
              //双单位
              itemMasterDto.IsDualUOM = itemMaster.IsDualUOM;
    
              //多单位
              itemMasterDto.IsMultyUOM = itemMaster.IsMultyUOM;
    
              //库存单位重量
              itemMasterDto.Weight = itemMaster.Weight;
    
              // itemMasterDto.MrpInfo = new ItemMRPInfoDTOData();
    
    
              /*财务分类*/
              if (itemMaster.AssetCategory != null) {
                  itemMasterDto.AssetCategory = new CommonArchiveDataDTOData();
                  itemMasterDto.AssetCategory.ID = itemMaster.AssetCategory.ID;
                  itemMasterDto.AssetCategory.Code = itemMaster.AssetCategory.Code;
                  itemMasterDto.AssetCategory.Name = itemMaster.AssetCategory.Name;
              }
    
              /*专用料*/
              itemMasterDto.IsSpecialItem = itemMaster.IsSpecialItem;
    
              return itemMasterDto;
          }
      }
0

评论 (0)

取消