精华内容
下载资源
问答
  • 而且,至今为止,已有很多工厂物流等各大企业公司会选择使用重型横梁货架来对货物进行存贮与摆放,它的结构比较复杂,空间利用率相对较高,所以受到了广大消费者的青睐。对此,今天我们就来说说海格里斯仓储货架厂所...

    从当今各大企业、厂家及物业行业可以看出,横梁式货架是重型仓储货架的代表,其因横梁货架上多数放置的是以托盘为承载面的货物,所以它又被称为托盘货架。而且,至今为止,已有很多工厂物流等各大企业公司会选择使用重型横梁货架来对货物进行存贮与摆放,它的结构比较复杂,空间利用率相对较高,所以受到了广大消费者的青睐。对此,今天我们就来说说海格里斯仓储货架厂所生产的横梁货架的结构特点以及优势有哪些?
    在这里插入图片描述
    海格里斯横梁货架结构与其它厂家不同,即结构特点如下:
    1、海格里斯横梁货架安全牢固可靠,结构简单美观。且可根据场地情况任意调整安装,再者就是货物出入库不受先后顺序的影响,更加的方便快捷。这种类型的货架一般广泛应用于以托盘货物集装存储、叉车机械存取的仓储模式;
    2、横梁货架结构中的柱片多采用立柱、横撑、斜撑以螺栓连接而成,其中柱片与抱焊横梁采用插接组合式结构组成货架框架,横梁与立柱之间采用安全销固定,这种结构方式不仅便于运输搬运,而且可以根据货物高度以75mm或50mm步距上下自由调整货架每层空间高度,以此来满足不同货物高度的存放要求;
    3、使用海格里斯横梁货架时可随着立柱、横梁规格的大小决定层载要求,其中横梁采用专用C型抱扣梁结构,就这种货架横梁具有惯性矩大、层载能力强、抗冲击性能强、自身重量轻造价低的特点;
    4、横梁货架中的立柱均采用十三折边装用货架型材,单根立柱高度可达12米,横梁式货架的可塑性非常大,且具有惯性距大、承载能力强、抗冲击性能强等优点,采用“先自动冲孔后冷弯成型”技术,避免因立柱应力集中而可能导致立柱出现裂纹失效情况,同时在横梁货架基础上搭建抽屉式模具货架、阁楼货架、窄巷道货架、双深度货架、压入式货架、自动化立体库货架等;
    5、横梁货架结构中的隔撑,它是连接背靠背两排货架,以此来增加货架的稳定性,且采用的是矩管隔撑,无需焊接,具有连接强度好,外型美观的特点;
    6、使用海格里斯横梁货架不仅能有效地提高仓库的储藏高度,还能提高仓库的空间利用率;
    7、在横梁货架上还可以配置立柱护脚、防撞杆、防撞护栏等,这样的防护设备可以有效的防止叉车在通道内行驶撞到货架立柱;同时为了提高托盘用于货架的安全,还可在横梁上配置横梁搁挡、钢层板、木板、层板网等附属设施;
    8、横梁货架造价低且易安装,它自身还具有一定的灵活性和通用性,且在一定程度上可以有效地改善企业的经济效益;
    9、因横梁货架可以便捷的拣选到任何一个货位所存储的货物,所以存储货物便捷,同时还可以满足任何货物任何库房使用。
    在这里插入图片描述

    海格里斯横梁货架设计时需要注意的事项:
    海格里斯作为一家专业的仓储货架生产厂家,提醒客户在横梁式货架以及库区设计的时候应该要注意以下几点:
    1)重量:这里所说的重量是指货物的重量(里面还含有托盘及料箱);
    2)尺寸:尺寸是指托盘的尺寸及货物的尺寸;
    3)高度:一定要注意叉车的提升高度及库房的可利用净高;
    4)叉车:必须要注意叉车的参数以及转弯半径(转弯半径会直接影响到货架与货架之间的设计距离),同时也要注意叉车存取物时的进叉方向;
    5)存储区:这里所指的是存储区的建筑情况;
    7)进出模式:货物进出库的方向以及要求;
    8)托盘:托盘的种类是否符合上架条件(九脚货架不宜上架)。
    在这里插入图片描述

    海格里斯横梁货架在仓库使用中优势:
    1.横梁式货架能适应各种货物的存放,且可以将仓库上层空间利用最大化;
    2.它能根据货物的尺寸设计货架单元,使得每一个卡板都能单独存放在货架单元内;
    3.横梁货架先进先出的管理模式可以加大货物流通量大、装卸迅速,且可以调整横梁的高度,以满足每种不同货物高度;
    4.横梁货架的配套使用的装配工具简单,运作成本低,能快速安装与拆装;
    5.海格里斯横梁式货架能使用不同的仓库结构,货物流通速度快等。
    海格里斯横梁货架对比其它厂家最大一个优势在于:防晒防暴防雨防腐蚀性强
    海格里斯货架属于高耐蚀性货架,它还添加了Al、Mg、Ni、Cr等合金的特种钢材,而一定范围内Al、Mg、Ni、Cr含量增加使钢板比普板板耐蚀性提高几倍到十几倍。再者就是防腐货架的表面处理在整个生产过程中起到举足轻重的作用,海格里斯防腐货架在机加工前处理,加工中设备的调试,机加工后处理,表面钝化处理,涂装方式都是经过层层严格把关,得以保证货架的防腐性能,并且针对涂层密封的问题,还采用高耐腐蚀性涂料二次涂装的工艺,这大大提高了涂层的密封性。以及最后的安装过程中使用的防腐配套附件以及使用后日常的运维也保证了货架的耐腐蚀能力。海格里斯防腐货架类型多种多样,一般都是经过腐蚀处理、磨砂、酸洗、磷化、外表喷塑粉等加工处理制作完成,它提供有横梁式货架,穿梭式,牛腿式,贯通式等等防腐货架,添加有这种防腐原材料的货架,不但具有更好的耐蚀性,还在危废处理行业中起到了特殊的作用,它可以大大降低了危废企业固定资产的投入成本,同时也减少了因更换货架给企业带来的管理、时间成本。
    海格里斯横梁货架合作项目案例:(案例图)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 仓储管理就是对仓库及仓库内的物资所进行的管理,是仓储机构为了充分利用所具有的仓储资源提供高效的仓储服务所进行的计划、组织、控制和协调过程。 仓储管理内涵是随着其在社会经济领域中的作用不断扩大而变化。...

    “仓”也称为仓库,存放物品的建筑和场地,可以为房屋建筑、大型容器、洞穴或者特定的场地等,具有存放和保护物品的功能;“储”表示收存以备使用,具有收存、保管、交付使用的意思。“仓储”则为利用仓库存放、储存未及时使用的物品行为。仓储管理就是对仓库及仓库内的物资所进行的管理,是仓储机构为了充分利用所具有的仓储资源提供高效的仓储服务所进行的计划、组织、控制和协调过程。

    仓储管理内涵是随着其在社会经济领域中的作用不断扩大而变化。仓储管理,是指对仓库及其库存物品的管理。仓储系统是石油工程企业生产运行系统中不可缺少的子系统。

    1 石油工程企业仓储管理的现状

    1.1 仓储技术发展不平衡

    石油工程企业的大部分仓储操作仍旧靠人工操作,物资出入库依然是人工搬运,物资摆放采用货架式手工填单,这种仓储技术方面发展的不平衡状态,严重地影响着石油工程企业仓储管理整体的运作效率。

    1.2 仓储人才缺乏,仓储管理人才更不多

    发展物资仓储管理,既需要掌握一定专业技术的人才,也需要善于操作的运用型人才,更需要仓储管理型人才,而目前石油工程企业大部分管理人员都是转岗培训人员,仓储管理型人才缺乏严重。

    2 石油工程企业实施ERP仓储信息化的意义

    2.1 合理整合仓储的空间

    在对仓库进行管理时,物品的安排与摆放具有重要的意义,合理的安排与摆放,会减少库存管理中的工作难度,使管理工作的质量更高。在使用基于ERP的仓储信息化管理模式后,就可以利用ERP技术,建立有效的库房模型,根据建立的库房模型,并结合最优化理论,将物品摆放位置进行合理的设计,对物品的摆放设计出合理的顺序,准确的定位出物品的安排与摆放位置,在对物品进行管理时,能够快速、准确的寻找物品的位置,提高了管理工作效率。

    2.2 实现仓储管理的自动化目标

    在当前阶段中,任何领域的工作,都向着自动化的方向发展,这种情况下,对仓储管理也具有同样的要求。使用ERP的仓储信息化管理模式之后,可以达到这一要求。而使用该管理模式,在进行管理时,ERP系统对物品的管理,会根据物品入库的数量以及产品出库的数量,自动的得出物品的剩余数量,同时将物品的存货状况体现出来。

    3 石油工程企业ERP仓储信息化管理模式研究的内涵

    在当前阶段中,我国的经济得到了飞速的发展,促进了企业不断地进步,对企业内部结构的要求越来越高,为了使其达到现代化的要求,就需要逐渐的对企业内部结构进行整合,在整个生产的过程中,逐渐的调整成为了三个部门,分别为采购部、仓储部以及生产运行部等,对这些部门有效的进行管理,可以使生产工作进行得更好,有效的增加企业的经济效益。

    4 石油工程企业基于ERP的仓储信息化管理模式实施对策

    4.1 引入无线射频识别技术

    当今,世界各国都加大了对科学研究的投入力度,使得科学技术得到了飞速的发展,这种情况下,随着无线射频识别技术不断的研究,使其不断地完善,被广泛的应用到了各个领域当中。所谓的无线射频识别技术,就是在通信的过程中,不需要在不同设备之间建立出机械接触或光学接触,利用设备发出的微波,对信息进行传递以及读取。因此,为了使基于ERP的仓储信息化管理模式进一步发展,就可以在其中应用到这一技术。在管理的过程中,将材料或产品的信息输入到计算机中后,产生出类似二维码的标签,并将其粘贴到材料或者产品上,在电磁场的作用下,就会将标签中的信息传递到相应的处理设备中,相应的设备就可以根据传递回的信息来对产品或者是材料进行管理,这样,不仅可以达到自动辨识的目的,而且还能时时刻刻的对产品与材料进行跟踪,有效的增加了管理质量。

    4.2 引入商业智能技术

    所谓商业智能技术,不仅仅只是一种软件或工具,而是在工作的过程中,针对不同的问题,提出相应的解决方案。所以说,商业智能化技术不是一个单一的技术,而是将数据仓库、数据挖掘和联机分析处理等技术结合到一起,对数据进行更好的处理。因此,为了使基于ERP的仓储信息化管理模式更加的完善,就可以将商业智能化技术加入进去。这时在对仓储进行管理时,不论是在任何地点,任何时间下,都能够对产品进行管理。

    4.3 规范仓储作业方式

    首先,制定完善的管理制度,使仓库内部各类物品设备归类有序,做好账物相符;管理制度主要包括岗位责任制、物资管理保养制度、物资进出库管理制度、安全管理制度以及巡回检查制度等。其次,规范操作流程,基于ERP的仓储信息化管理模式下对入库、储存、出库、库存盘点进行有效管理。

    4.4 科学合理储备物资,提高仓储管理质量

    石油工程企业应全面分析生产和消耗数据,为现场生产进度制定合理恰当的储备定额,从而精准控制与严格把握物资存储量。加强物资管理绩效考核,使物资储备定额既不过量也不短缺,所储备的物资与资金都得以充分利用。此外,还要提高库存周转次数,充分使用仓储库房,避免不必要的人力资源浪费,有效提升石油工程企业物资仓储管理水平,通过转变方式调整库存结构,提高仓储管理质量,降低运营成本促进企业效益提升。

    4.5 制定培训计划,提高人员素质

    制定科学、可行的培训计划是保证石油工程人员学习顺利实施的前提。通过制定学习计划,确定相关人员需要掌握的知识和技能范围,明确参与学习的对象和完成的时间。针对全体成员的通用课程,包括基础理论、作业制度流程、安全理论实践等课程模块,在制定培训课程的基础上,根据课程的基础性、重要性因素,结合人员的实际需求和工作时间,对课程的培训时间进行合理安排。

    4.6 采用仓储信息化管理技术使物流管理进入盈利模式

    根据石油工程企业特点建立仓储管理信息系统。并对入库单、销售单、领用单等分别建立数据库,保证企业仓储的物资发生额能够得到准确的记录,对数据库的记录要定期维护、更新。采取措施拓宽企业信息通道,保证信息交流通常,及时进行信息共享,全企业信息形成网形系统,使仓储物资得到统一、有序的管理。

    当前,ERP应用在物资管理中的优势已经得到了认可,对企业而言,能够优化内部管理模式,提升工作效率,进而推动物流管理工作中对任务的调配和协调,使企业管理进入全新的局面中。

    5 结束语

    综上所述,在仓储管理的过程中,使用有效的管理方法能够使管理工作的质量得到提升,企业获得效益最大化。虽然目前对基于ERP的仓储信息化管理模式进行了一定的应用,起到了很好的效果,但是,随着社会的发展,企业对仓储管理工作的要求会更加的严格,石油工程企业需要不断加强仓储信息化管理模式的研究,使信息化与仓储管理有机结合,提升企业运行效益。

    展开全文
  • 仓储的作用 仓储的概念请自行搜索了解,我认为它最大的作用就是解耦。没有仓储,就只能直接使用EF数据库上下文对象来操作数据库,而为了“能使用EF数据库上下文对象来操作数据库(各实体库)...

    基于EntityFramework的数据访问层,我计划细分成数据核心、数据接口和数据实现。

    其中数据核心已经在前几个章节中创建,那么在这篇日志里,将演示数据仓储(接口和实现)的实现及封装架构的整个过程。

     

    仓储的作用

    仓储的概念请自行搜索了解,我认为它最大的作用就是解耦。没有仓储,就只能直接使用EF数据库上下文对象来操作数据库,而为了“能使用EF数据库上下文对象来操作数据库(各实体库)”,就必须把实体关联给EF数据库上下文。例如MasterEntityContext中的DbSet属性:

      1 /// <summary>
      2 /// 用户
      3 /// </summary>
      4 public DbSet<SysUser> Users { get; set; }
      5 
      6 /// <summary>
      7 /// 角色
      8 /// </summary>
      9 public DbSet<SysRole> Roles { get; set; }

    只有这样,我们才能在初始化EF数据库上下文对象之后,通过对象来访问相应的实体库,比如登录判定中那句代码:

      1 var db = new MasterEntityContext("matrixkey");
      2 var entity = db.Users.Where(w => w.UserName == model.UserName).FirstOrDefault();

    上述代码中的db.Users,其中Users对象,就是EF数据库上下文中定义的属性。

    在WebUI层直接使用数据访问层的核心对象,这无疑是非常不正确的。在后面的日志中,我们将增加业务逻辑层,作为数据访问层和WebUI层的桥梁。

    但是若没有仓储,即使有了业务逻辑层,仍然只能通过直接使用EF数据库上下文对象的方式来操作数据库,这就需要:

    1、在业务层中暴露EF数据库上下文对象

    2、在业务层中引用EntityFramework

    这依旧很糟糕,有了EF数据库上下文对象,就等于有了一切。不能让业务层拥有一切,也不能让业务层引用EntityFramework。

    于是就需要仓储作为“EF数据库上下文和业务层之间的桥梁”。对于业务层而言,仓储才是真正的数据访问层,业务层根本不知道EF数据库上下文的存在,它不关心数据访问层中究竟是谁提供了数据库访问的能力,无论是EF或是dapper或是源生的ADO.NET,它只关心数据访问层是否执行了它要操作的动作。

    总之,业务层是无关数据驱动的,不能把EF暴露给业务层。仓储的实现,解耦了数据核心层和业务层,并且在下一章节中,还将解耦数据实体层和数据核心层。可见仓储最大的作用就是解耦。

     

    用户仓储的简易实现

    在解决方案下新建类库项目,名称S.Framework.DataAchieve。再创建相应的文件夹进行区分,结构如下图:

    image

    在Master下创建用户仓储类,名称SysUserRepository。上面说过,仓储是桥梁,是为其他需要获取数据的项目层提供代理服务的,那么在仓储类中,需要定义EF数据库上下文对象,以及通过该上下文对象对数据库的各种操作的方法的封装。

    毫无疑问,数据实现层需要引用“数据实体层、数据核心层”。

    这里以“用户登录功能”作为范例,一步一步演示用户仓储中的代码的演变:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using System.Data.Entity;
      7 using System.Data.Entity.Infrastructure;
      8 
      9 using S.Framework.Entity.Master;
     10 using S.Framework.DataCore.EntityFramework.EntityContexts;
     11 
     12 namespace S.Framework.DataAchieve.EntityFramework.Repositories.Master
     13 {
     14     /// <summary>
     15     /// 用户仓储
     16     /// </summary>
     17     public class SysUserRepository
     18     {
     19 
     20     }
     21 }
     22 
    用户仓储类-0

    定义数据库上下文对象:

      1 /// <summary>
      2 /// 数据库上下文
      3 /// </summary>
      4 private MasterEntityContext Db
      5 {
      6     get;
      7     set;
      8 }
    数据库上下文对象

    数据库上下文对象作为最核心的内容,只允许在当前类中被设置和获取,因此该属性的访问修饰符设置为private。

    定义用户仓储的构造方法,并在方法中初始化数据库上下文对象:

      1 public SysUserRepository()
      2 {
      3     this.Db = new MasterEntityContext("matrixkey");
      4 }

    “用户登录功能”中需要根据用户名获取用户实体,可以在仓储中定义该方法:

      1 /// <summary>
      2 /// 根据用户名获取用户实体
      3 /// </summary>
      4 /// <param name="userName">用户名</param>
      5 /// <returns>用户实体</returns>
      6 public SysUser GetByUserName(string userName)
      7 {
      8     return this.Db.Users.Where(w => w.UserName == userName).FirstOrDefault();
      9 }

    理论上来说,用户仓储已经完成。

     

    用户仓储功能检验结果

    先在WebUI项目中增加对数据实现层(S.Framework.DataAchieve)的引用(对数据核心层的引用继续留着,因为数据库初始化策略的设置要用到核心层,等会会把数据库初始化设置从核心层移出去,那时再移除WebUI层对数据核心层的引用)。

    把“用户登录功能”的代码调整为对用户仓储的调用,将

      1 var db = new MasterEntityContext("matrixkey");
      2 var entity = db.Users.Where(w => w.UserName == model.UserName).FirstOrDefault();

    修改为:

      1 var rep = new SysUserRepository();
      2 var entity = rep.GetByUserName(model.UserName);

    编译运行,用admin和123456进行登录,成功跳转至首页。

     

    解耦数据核心层与WebUI层

    上面说到,由于数据库初始化策略及其设置,都定义在数据核心层中,所以WebUI层需要依赖数据核心层。不能忍,必须解耦,方法是将数据库初始化策略及其设置类,移动到数据实现层中,如下图:

    image

    此时可以把数据核心层中EntityFramework文件夹下的Migrations、Initializes子文件夹删除。然后调整WebUI层中Global的命名空间即可。

    编译,可能会有“找不到命名空间”的报错,原因是旧命名空间不存在了,删除这条using即可。

    编译生成无误,然后移除WebUI层对数据核心层的引用吧。

    由于数据库初始化类调整过,因此需要删除数据库让EF重新创建一次。删除数据库,重新去登录页面尝试登录。

     

    仓储的完善

    对实体的常用操作,可以简单地归纳为“特定查询、添加、更新、删除”,这几类操作是每一个实体仓储都需要包含的,因此可以通过封装来精简代码量。

    建立一个仓储基本类,名称BaseRepository,将通用的部分在基本类中实现,如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using System.Linq.Expressions;
      7 
      8 using S.Framework.Entity;
      9 using S.Framework.DataCore.EntityFramework.EntityContexts;
     10 
     11 namespace S.Framework.DataAchieve.EntityFramework
     12 {
     13     public abstract class BaseRepository<TEntity> where TEntity : class, new()
     14     {
     15         private System.Data.Entity.DbContext Db { get; set; }
     16 
     17         private System.Data.Entity.DbSet<TEntity> DbSet { get { return this.Db.Set<TEntity>(); } }
     18 
     19         public BaseRepository()
     20         {
     21             this.Db = new MasterEntityContext("matrixkey");
     22         }
     23 
     24         /// <summary>
     25         /// 主键查询
     26         /// </summary>
     27         /// <param name="keyValues">键值</param>
     28         /// <returns>实体</returns>
     29         public virtual TEntity Find(IEnumerable<object> keyValues)
     30         {
     31             if (keyValues == null || keyValues.Count() == 0)
     32             {
     33                 throw new ArgumentException("参数有误。");
     34             }
     35             keyValues = keyValues.Where(keyValue => keyValue != null);
     36             return this.DbSet.Find(keyValues);
     37         }
     38 
     39         /// <summary>
     40         /// 主键查询
     41         /// </summary>
     42         /// <param name="keyValues">键值</param>
     43         /// <returns>实体</returns>
     44         public virtual TEntity Find(params object[] keyValues)
     45         {
     46             if (keyValues == null || keyValues.Count() == 0)
     47             {
     48                 throw new ArgumentException("参数有误。");
     49             }
     50 
     51             return this.DbSet.Find(keyValues);
     52         }
     53 
     54         /// <summary>
     55         /// 获取 <see cref="TEntity"/> 的Linq查询器
     56         /// </summary>
     57         /// <returns></returns>
     58         protected IQueryable<TEntity> Query()
     59         {
     60             return this.DbSet.AsQueryable();
     61         }
     62 
     63         /// <summary>
     64         /// 获取 <see cref="TEntity"/> 的Linq查询器
     65         /// </summary>
     66         /// <param name="predicate">查询条件</param>
     67         /// <returns>数据查询器</returns>
     68         protected IQueryable<TEntity> Query(Expression<Func<TEntity, bool>> predicate)
     69         {
     70             return this.DbSet.Where(predicate);
     71         }
     72 
     73         /// <summary>
     74         /// 添加实体
     75         /// </summary>
     76         /// <param name="entity">实体</param>
     77         public void Add(TEntity entity)
     78         {
     79             if (entity == null)
     80             { return; }
     81 
     82             this.DbSet.Add(entity);
     83         }
     84 
     85         /// <summary>
     86         /// 批量添加实体
     87         /// </summary>
     88         /// <param name="entities">实体集合</param>
     89         public void AddRange(IEnumerable<TEntity> entities)
     90         {
     91             if (entities == null || entities.Count() == 0)
     92             { return; }
     93 
     94             System.Data.Entity.DbSet<TEntity> set = this.DbSet;
     95             bool autoDetectChangesEnabled = this.Db.Configuration.AutoDetectChangesEnabled;
     96             this.Db.Configuration.AutoDetectChangesEnabled = false;
     97 
     98             foreach (TEntity entity in entities)
     99             {
    100                 if (entity == null)
    101                 { continue; }
    102 
    103                 set.Add(entity);
    104             }
    105 
    106             this.Db.Configuration.AutoDetectChangesEnabled = autoDetectChangesEnabled;
    107         }
    108 
    109         /// <summary>
    110         /// 更改实体
    111         /// </summary>
    112         /// <param name="entity">实体对象</param>
    113         public void Update(TEntity entity)
    114         {
    115             if (entity == null)
    116             { return; }
    117 
    118             System.Data.Entity.Infrastructure.DbEntityEntry<TEntity> entry = this.Db.Entry(entity);
    119             if (entry.State == System.Data.Entity.EntityState.Detached)
    120             {
    121                 this.DbSet.Attach(entity);
    122             }
    123             entry.State = System.Data.Entity.EntityState.Modified;
    124         }
    125 
    126         /// <summary>
    127         /// 批量更改实体
    128         /// </summary>
    129         /// <param name="entities">实体集合</param>
    130         public void UpdateRange(IEnumerable<TEntity> entities)
    131         {
    132             if (entities == null || entities.Count() == 0)
    133             { return; }
    134 
    135             var set = this.DbSet;
    136             bool autoDetectChangesEnabled = this.Db.Configuration.AutoDetectChangesEnabled;
    137             this.Db.Configuration.AutoDetectChangesEnabled = false;
    138 
    139             foreach (TEntity entity in entities)
    140             {
    141                 if (entity == null)
    142                 { continue; }
    143 
    144                 System.Data.Entity.Infrastructure.DbEntityEntry<TEntity> entry = this.Db.Entry(entity);
    145                 if (entry.State == System.Data.Entity.EntityState.Detached)
    146                 {
    147                     set.Attach(entity);
    148                 }
    149                 entry.State = System.Data.Entity.EntityState.Modified;
    150             }
    151 
    152             this.Db.Configuration.AutoDetectChangesEnabled = autoDetectChangesEnabled;
    153         }
    154 
    155         /// <summary>
    156         /// 主键删除实体
    157         /// </summary>
    158         /// <param name="key">键值</param>
    159         public void Delete(object key)
    160         {
    161             if (key == null || string.IsNullOrWhiteSpace(key.ToString()))
    162             { return; }
    163 
    164             TEntity entity = this.Find(key);
    165 
    166             this.Delete(entity);
    167         }
    168 
    169         /// <summary>
    170         /// 删除实体
    171         /// </summary>
    172         /// <param name="entity">实体</param>
    173         public void Delete(TEntity entity)
    174         {
    175             if (entity == null)
    176             { return; }
    177 
    178             System.Data.Entity.DbSet<TEntity> set = this.DbSet;
    179             System.Data.Entity.Infrastructure.DbEntityEntry<TEntity> entry = this.Db.Entry(entity);
    180             if (entry.State == System.Data.Entity.EntityState.Detached)
    181             {
    182                 set.Attach(entity); set.Remove(entity);
    183             }
    184             else
    185             { entry.State = System.Data.Entity.EntityState.Deleted; }
    186         }
    187 
    188         /// <summary>
    189         /// 批量删除实体
    190         /// </summary>
    191         /// <param name="entities">实体集合</param>
    192         public void DeleteRange(IEnumerable<TEntity> entities)
    193         {
    194             if (entities == null || entities.Count() == 0)
    195             { return; }
    196             var set = this.DbSet;
    197 
    198             bool autoDetectChangesEnabled = this.Db.Configuration.AutoDetectChangesEnabled;
    199             this.Db.Configuration.AutoDetectChangesEnabled = false;
    200 
    201             foreach (TEntity entity in entities)
    202             {
    203                 if (entity == null)
    204                 { continue; }
    205 
    206                 System.Data.Entity.Infrastructure.DbEntityEntry<TEntity> entry = this.Db.Entry(entity);
    207                 if (entry.State == System.Data.Entity.EntityState.Detached)
    208                 {
    209                     set.Attach(entity);
    210                 }
    211                 else
    212                 {
    213                     entry.State = System.Data.Entity.EntityState.Deleted;
    214                 }
    215             }
    216 
    217             this.Db.Configuration.AutoDetectChangesEnabled = autoDetectChangesEnabled;
    218         }
    219     }
    220 }
    221 
    仓储基本类

    注意仓储基本类的修饰符以及类中各属性、方法等成员的访问修饰符,要充分理解abstract、private、protected、public的使用原因。不了解泛型的读者请自行查阅相关资料。

    现在让用户仓储类继承仓储基本类,并删除“在父类中已经实现的成员几相关代码”,用户仓储类将变得非常简单:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 using S.Framework.Entity.Master;
      8 
      9 namespace S.Framework.DataAchieve.EntityFramework.Repositories.Master
     10 {
     11     /// <summary>
     12     /// 用户仓储
     13     /// </summary>
     14     public class SysUserRepository : BaseRepository<SysUser>
     15     {
     16         /// <summary>
     17         /// 根据用户名获取用户实体
     18         /// </summary>
     19         /// <param name="userName">用户名</param>
     20         /// <returns>用户实体</returns>
     21         public SysUser GetByUserName(string userName)
     22         {
     23             return this.Query(w => w.UserName == userName).FirstOrDefault();
     24         }
     25     }
     26 }
     27 
    新的仓储基本类

    编译运行,再次进行登录,成功跳转至首页。

     

    现在为角色实体创建仓储类试试,简单吧。

    但同时也引出新问题:手动为每个实体创建实体仓储是个重复又机械的体力活,是否可以像“实体配置类”那样也用T4模板来自动生成?

    当然可以。过程和“利用T4自动生成实体配置类”一样,模板不同而已,这里一笔带过,直接贴出“仓储模板”和“执行器”的相关代码:

      1 <#+
      2 // <copyright file="Repository.tt" company="">
      3 //  Copyright © . All Rights Reserved.
      4 // </copyright>
      5 
      6 public class Repository : CSharpTemplate
      7 {
      8     private string _modelName;
      9     private string _prefixName;
     10 
     11     public Repository(string modelName, string prefixName)
     12     {
     13         this._modelName = modelName;
     14         this._prefixName = prefixName;
     15     }
     16 	public override string TransformText()
     17 	{
     18 		base.TransformText();
     19 #>
     20 using System;
     21 using System.Collections.Generic;
     22 using System.Linq;
     23 using System.Text;
     24 using System.Threading.Tasks;
     25 
     26 using S.Framework.Entity.<#= _prefixName #>;
     27 
     28 namespace S.Framework.DataAchieve.EntityFramework.Repositories.<#= _prefixName #>
     29 {
     30 	/// <summary>
     31     /// 实体仓储
     32     /// </summary>
     33     public partial class <#= _modelName #>Repository : BaseRepository<<#= _modelName #>>
     34 	{
     35 
     36 	}
     37 }
     38 <#+
     39         return this.GenerationEnvironment.ToString();
     40 	}
     41 }
     42 #>
     43 
    实体仓储模板
      1 <#@ template language="C#" debug="True" #>
      2 <#@ assembly name="System.Core" #>
      3 <#@ output extension="cs" #>
      4 <#@ import namespace="System.IO" #>
      5 <#@ import namespace="System.Text" #>
      6 <#@ import namespace="System.Reflection" #>
      7 <#@ import namespace="System.Linq" #>
      8 <#@ import namespace="System.Collections.Generic" #>
      9 <#@ include file="T4Toolbox.tt" #>
     10 <#@ include file="Repository.tt" #>
     11 <#
     12 
     13     string coreName = "S.Framework", projectName = coreName + ".DataAchieve", entityProjectName = coreName + ".Entity";
     14     string entityBaseModelName = entityProjectName + ".EntityBaseModel";
     15     string entityBaseModelNameForReflection = entityProjectName + ".EntityModelBaseForReflection";
     16     //当前完整路径
     17     string currentPath = Path.GetDirectoryName(Host.TemplateFile);
     18     //T4文件夹的父级文件夹路径
     19     string projectPath = currentPath.Substring(0, currentPath.IndexOf(@"\T4"));
     20     //解决方案路径
     21     string solutionFolderPath = currentPath.Substring(0, currentPath.IndexOf(@"\" + projectName));
     22 
     23     //加载数据实体.dll
     24     string entityFilePath = string.Concat(solutionFolderPath, ("\\"+ entityProjectName +"\\bin\\Debug\\" + entityProjectName + ".dll"));
     25     byte[] fileData = File.ReadAllBytes(entityFilePath);
     26     Assembly assembly = Assembly.Load(fileData);
     27     //反射出实体类,不知道为啥此处不能成功判定“是否继承EntityModelBaseForReflection类”
     28     //因此只能通过名称比较的方式来判定
     29     IEnumerable<Type> modelTypes = assembly.GetTypes().Where(m => m.IsClass && !m.IsAbstract && (m.BaseType.FullName.Equals(entityBaseModelName) || m.BaseType.FullName.Equals(entityBaseModelNameForReflection)));
     30 
     31     //循环实体类
     32     List<string> prefixNames = new List<string>();
     33     foreach (Type item in modelTypes)
     34     {
     35         //找 实体文件夹 名称
     36         string tempNamespace= item.Namespace, nameSpaceWithoutProjectName = tempNamespace.Substring(entityProjectName.Length);
     37         if(nameSpaceWithoutProjectName.IndexOf(".") != 0 || nameSpaceWithoutProjectName.LastIndexOf(".") > 0)
     38         { continue; }
     39 
     40         //是否直接继承实体基本类
     41         bool purity = item.BaseType.FullName.Equals(entityBaseModelNameForReflection);
     42         //实体所在的数据库标识名称
     43         string targetName = nameSpaceWithoutProjectName.Substring(1);
     44         if(!prefixNames.Any(a => a == targetName)){ prefixNames.Add(targetName); }
     45         //目标文件的路径和名称(嵌套Generate文件夹是为了标识T4生成的类文件)
     46         string fileName= targetName + @"\Generate\" + item.Name + "Repository.cs";
     47 
     48         //仓储文件
     49         string folderName= @"\Repositories\";
     50         Repository repository = new Repository(item.Name, targetName);
     51         repository.Output.Encoding = Encoding.UTF8;
     52         string path = projectPath + folderName + fileName;
     53         repository.RenderToFile(path);
     54     }
     55 #>
     56 
    模板执行器文件

    通过T4模板生成的实体仓储文件,结构如下图:

    image

     

    下一篇日志,将演示数据实体层和数据核心层的解耦。

     

    截止本章节,项目源码下载:点击下载(存在百度云盘中)

    转载于:https://www.cnblogs.com/matrixkey/p/5569228.html

    展开全文
  • 今天,我们就跟着海格里斯仓储中心一起来具体了解一下超市货架! 那什么是超市货架? 超市货架( The supermarket shelves),即在超市里摆放货物的担架,最早的货架在中国也就是人们常说的柜台了有铁制的木质的...

    随着人民生活水平的提高,超市这个行业异常火爆,它已经基本替代了小卖部,成为人们购物的主要场所。而且它的客流量也是相当大的,其里面的商品不仅齐全种类也是相当多,但同时超市的发展也带动了超市货架的发展。众所周知,超市货架的功能就是除了存储功能外,就是陈列不同的商品。今天,我们就跟着海格里斯仓储中心一起来具体了解一下超市货架!
    在这里插入图片描述

    那什么是超市货架?
    超市货架( The supermarket shelves),即在超市里摆放货物的担架,最早的货架在中国也就是人们常说的柜台了有铁制的木质的还有玻璃的等等多种多样。
    在这里插入图片描述

    超市货架结构特点:
    一、一般来说,超市货架品种规格尺寸,都是按客户要求设计生产而来;
    二、货架的整体结构:一般全部为扣接形成,层数可自由增减,安装快捷方便。
    三、超市货架材料质量:超市货架选材方面一般均采用优质冷轧A3钢板,其钢材为国家标准型号SS400;
    四、货架立柱:超市货架立柱都是用优质冷轧SS400钢板冷拉成形管,其方管截面尺寸一般为7040(长宽),料厚2.5mm,单面受力为600Kg;
    五、层板:它都是采用优质冷轧SS400,料厚大概范围为0.8mm,底部有焊加强筋,用起来安全且可靠,且层板每层承载重范围为150到250kg;
    六、托臂:顾名思义,托臂是用来拖住层板的,也有很多人称它为羊角片。
    七、挡板:挡板一般用于连接两个基脚的底部,主要是为了防止商品掉进货架底部。
    八、灯箱:灯箱摆放在金属货架上面,它不仅有照明作用,还是一个很好的广告促销牌;同时能够增添超市货架档次。
    九、基脚:基脚可以说是立柱的“脚底板”,起到支撑立柱的作用,也是稳定货架的主要部件之一。
    在这里插入图片描述

    超市货架本身的特点:
    1)整体的超市货架看起来更美观大方、结构牢固、规格多样;
    2)超市货架的设计造型具有时代气派,同时超市货架的单双面货架也可以进行相互结合,且单面货架可与转角配套结合,而双面也可与半圆配套结合;层间距之间还可任意调节;
    3)当超市货架与现代卖场环境融为一体后,则开创了商业的全新概念;
    4)对于超市货架来说,它加高了托臂的根部,增加了承托能力,使层板的宽度、长度加大,满足了大型商场特大商品的容量;
    5)超市货架的表面一般均采用环氧树脂静电喷塑处理,有多种颜色,并具有极强防腐、防锈效果;
    6)其实超市货架在安装方面更加的方便,且多种挂具还可以任一选择;
    7)超市货架的立柱与基脚连体焊接,这样便加大了货架保险系数,同时也防止货架在受重壮态下产生渐变,消除了商场隐患;
    8)对于超市货架,它的通用性好,且配有各种商品陈列专用配件,同时也比较适合综合性超级市场的需求;
    9)超市货架的表面处理一般会通过抛丸除锈、除油、表面喷塑。
    在这里插入图片描述

    超市货架可以给我们带来哪些方便之处?
    1、使用超市货架陈列商品,可以更高效的利用有限的营业空间,从而把商品布置得井井有条,便于顾客一目了然,同时把商品信息更快地传送给顾客;
    2、超市货架还可以通过商品的感性特点,以此来激发并加强客户购买的决心,同时超市货架也是售货员向顾客提供高水准的服务的基本经营设施;
    3、用超市货架陈列商品,可以有效的对商品做到防潮、防尘、防盗、防破坏等措施,以此提高物资存储质量;
    4、若可以充分的利用好超市货架的功能,它不仅给超市带来效益,还能使空间更合理化。
    在这里插入图片描述

    当我们在使用及护理超市货架时,也要注意以下几点:
    1、在超市货架的使用中,清洁是基本,且只有外观整洁干净的超市货架才能吸引消费者,同时在保证干净整洁的情况下,超市货架的使用者也应定期对超市货架进行检查,以此保证超市货架的使用正常;
    2、一般情况下,人类的平均视觉是由110度到120度,可视宽度范围为1.5m到2m,在店铺内步行购物时的视角为60度,可视范围为1m,对此商家应结合消费者的视觉习惯,在使用超市货架时要保障产品的陈列情况,用来提高用户的购买率;
    3、一般的超市货架一共5层,从上往下数第3,第4,第5是销量最大的货架,尤其第3层和消费者视线基本平行,伸手可得,最便于消费者挑选,也销量最大,所以,货架的这几层一定要多注意进行使用及护理;

    展开全文
  • 不读后悔:风口上的仓储自动

    千次阅读 2020-07-29 07:00:00
    导语大家好,我是智能仓储物流技术研习社的社长,老K。随着电商行业的崛起,现实的商业和工业环境也发生了翻天覆地的变化,仓储物流技术也被更多的应用其中。这背后究竟是怎么发生的,未来究竟会变成...
  • 随着业务规模的不断发展,机...针对这种情况,研究设计出一套全方位感知、安全同步传输、可视重现的高效智慧仓储管理系统甚为必要。智慧仓储是现代智慧物流的核心技术之一,由高层货架、巷道式堆垛或多穿车、多种...
  • 仓储自动搬运机器人

    2021-01-12 11:04:23
    仓储自动搬运机器人是近代自动控制领域出现的一项高新技术,涉及到了力学,机械学,电器液压气压技术,自动控制技术,传感器...仓储自动搬运机器人特点:1、自动程度高由计算机、电控设备、磁气感应、激光反射板等...
  • 基于RFID仓库管理体系,在盘点数据读取信息量、读写功能、保密性、智能、光遮蔽、环境适应性、辨认速度、通行速度、读取距离、使用寿命、多标签辨认等方面具有显著优势,并且与传统条形码和二维码相比,可以避免...
  • 015 仓储物流设备的节能降耗技术盘点 刚刚手机收到一条公益短信:本周是2018年节能宣传周,主题是“节能降耗,保卫蓝天”。让我们积极行动起来,建设美丽中国,共享碧水蓝天。工业和信息部、国家发展改革委。 ...
  • 那么要如何在有限的空间里有效的提高仓库空间利用率呢?1、仓位规划要素分析:为了大幅度的提高仓库的利用率,科学、合理的仓位规划是必不可少的重要环节,也是最大限度利用空间的一种手段。仓位规划主要包括面积...
  • 一种基于计算机视觉的物流仓储监控方法【技术领域】[0001] 本发明涉及的是一种基于计算机视觉的智能监控方法,属于计算机视觉中的目标 检测与跟踪领域。通过把视频帧的光照不变性特征和基于循环矩阵的核方法相结合,...
  • 近几年来,国家倡导绿色物流,在整个物流仓储运输中,由于货物数量庞大,监管人员无法进行货物的入库,出库,盘点等一些列需求,人工盘点费时费力,还会容易出现错误.如果货物被盗,也不能及时清查.这就不符合绿色物流的理念....
  •  1、高架存储,节约土地:RFID仓储装备系统利用高层货架储存货物,最大限度地利用空间,可大幅度降低土地成本。与普通仓库相比,一般智能立体仓库可以节省60%以上的土地面积。  2、无人作业,节省人工:RFID仓储...
  • 今天,海格里斯仓储货架中心所要说的便是冷库后推式货架。 后推式货架又称压入式货架,它采用的是轨道和托盘小车相结合方式存取,将轨道沿货架进深方向并按一定的倾斜度数设在横梁上,轨道上可叠放多台小车,当进货...
  • (4)品质街道 在街道空间更新中,强化不同部门、不同设计单位、不同工作环节间的沟通协调,注重全流程、各工作间的协作,实现无边界、一体化设计,最大化利用、美化街道空间,提升街道的品质。 采用多功能灯杆满足...
  • 网购给你带来了多大的便利?近年来网上购物的飞速发展离不开强大的物流业支撑,自动化仓储系统的建立助力了现代物流体系的高效运作,而其中系统性的库存运营则起到了关键作用,本期《技术的真相》让我们...
  • 中国联通数据中心总经理王志军在Rancher举办的ECIC大会上的演讲实录,分享了中国联通为何开始进行平台容器化并如何运用Kubernetes对9000台的服务器数据节点进行最大化利用和合理调度,进而提升了60%的基础资源利用率...
  • 自动立体库被称为自动智能立体库,同时它也被称为智能立体仓储,其在结构方面主要由货架、巷道式堆垛起重机(堆垛机)、入(出)库工作站台、调度控制系统以及管理系统组成。 自动立体库的系统特点: 它是...
  • 充分利用库房空间,库房内可以有效利用约80%-85%的空间; 4.适合不同种类产品可以分层灵活存取; 5.相比较驶入架,贯通架,结构更稳固,安全系数更高; 6.可实现先进先出和先进后出; 7.可自动整理,盘点。 海格里斯...
  • 大秦岭研究院 赵国平 生态空间一词最早出现在党的十八大报告中,提出“生产空间集约高效,生活空间宜居适度、生态空间山清水秀”的总体目标,这也是最早提出的“三生空间”的概念。随后直到2017年2月生态空间的概念...
  • 随着近代商业的繁荣发展,越来越多的仓储中心希望能在有限的厂房空间里放置最大量的货物。最初没有仓库搬运机械的时期,最简单的多放货物的办法就是托盘货物分片区放置在地面上,或者用叉车将货物挑到几层货架里...
  • 智能仓储装备系统是综合利用计算机、自动、云计算、互联网和物联网等高科技技术,将高位立体货架、巷道堆垛机、升降设备、自动出入库输送装备、自动分拣系统装备、室内搬运车、机器人等设备进行系统集成,形成具有...
  • 慧仓摩天轮快速密集存储系统 以立库为核心的方案,不管其存取设备是多层穿梭车还是蜘蛛拣选机器人,它们的共同特点都是充分利用仓储的垂直空间,且存取设备是在存储框架内移动,不需要额外的场地。因此能大大提升...
  • WMS仓储管理系统是仓储管理的核心管理软件工具,可以有效的组织和管理人员、空间和设备,进行高效出入库、存储和拣选,加速库存周转,最大限度的利用仓库资源,提高物流作业效率和准确性,实现仓库的精细管理,...
  • 同时,它所配套使用的叉车无需进入巷道,节省了时间,提高人员及货物的安全性,还提升了库房内货物存取效率充分利用库房空间,库房内可以利用约80%~85的空间; 这种类型的货架适合不同种类货物的存取,还可以实现...
  • 服务器虚拟

    2021-07-31 10:12:21
    优点:百分百备份,最高的数据安全保障 缺点:磁盘空间利用率低 RAID 3 带奇偶校验码的并行阵列 增加校验驱动器 优点:通过简单的异或运算进行数据备份 磁盘数量越多,数据备份的成本越低 缺点:需要专用的盘做数据...
  • 基于 HTML5 WebGL 的 3D 仓储管理系统

    千次阅读 2018-01-09 11:14:45
    仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息、资源、行为、存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求。从财务软件、进销存软件CIMS...
  • 仓储物流管理广泛应用于各个行业,设计及建立健全整套的仓储管理流程,提高仓储周转效率,减少运营资金的占用,使冻结的资产变成现金,减少由于仓储淘汰所造成的成本,是企业提高生产效率的重要环节。 仓储管理系统...
  • 电商仓储

    2017-02-28 10:57:27
    仓储物流 ,就是利用自建或租赁库房、场地,储存、保管、装卸搬运、配送货物。传统的仓储定义是从物资储备的角度给出的。现代“仓储”不是传统意义上的“仓库”、“仓库管理”,而是在经济全球与供应链一体背景...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,490
精华内容 1,396
关键字:

仓储空间利用的最大化

友情链接: HDDKEY.zip