liu 发布的文章

一、平台介绍

  • JeeSite 快速开发平台,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,后端基于经典组合 Spring Boot、Shiro、MyBatis,前端采用分离版 Vue3、Vite、Ant Design Vue、TypeScript、Vben Admin 最先进技术栈,或者 Beetl、Bootstrap、AdminLTE 经典开发模式。

  • 提供在线数据源管理、数据表建模、代码生成等功能,可自动创建业务模块代码工程和微服务模块代码工程,自动生成前端代码和后端代码;包括核心功能模块如:组织机构、用户、角色、岗位、管理员、权限审计、菜单及按钮权限、数据权限、模块管理、系统参数、字典管理、系统监控、数据监控等;扩展功能如:工作流引擎、内容管理、消息推送、单点登录、第三方登录、在线作业调度、对象存储、可视化数据大屏、报表设计器、在线文件预览、国际化、全文检索、统一认证服务等。

  • 本平台采用松耦合设计,微内核和插件架构,模块增减便捷,支持集群,支持 SaaS 架构,支持读写分离、分库分表、Spring Cloud 微服务架构;并内置了众多账号安全设置、密码策略、系统访问限制等安全解决方案,支持等保评测。

  • 本平台专注于为初级研发人员提供强大的支持,使他们能够高效、快速地开发出复杂的业务功能,同时为中高级人员腾出宝贵的时间,专注于更具战略性和创新性的任务。我们致力于让开发者能够全心投入业务逻辑中,而将繁琐的技术细节交由平台来封装处理。这不仅降低了技术实现的难度,还确保了系统架构的稳定性和安全性,进而帮助企业节省人力成本、缩短项目周期,并提高整体软件的安全性和质量。

  • 2013 年发布以来已被广大爱好者用到了企业、政府、医疗、金融、互联网等各个领域中,拥有:精良架构、易于扩展、大众思维的设计模式,工匠精神,用心打磨每一个细节,深入开发者的内心,并荣获开源中国《最受欢迎中国开源软件》多次奖项,期间也帮助了不少刚毕业的大学生,教师作为入门教材,快速的去实践。

  • 2019 年换代升级,我们结合了多年总结和经验,以及各方面的应用案例,对架构完成了一次全部重构,也纳入很多新的思想。不管是从开发者模式、底层架构、逻辑处理还是到用户界面,用户交互体验上都有很大的进步,在不忘学习成本、提高开发效率的情况下,安全方面也做和很多工作,包括:身份认证、密码策略、安全审计、日志收集等众多安全选项供您选择。努力为大中小微企业打造全方位企业级快速开发解决方案。

  • 2021 年终发布 Vue3 的前后分离版本,使得 JeeSite 拥有同一个后台服务 Web 来支撑分离版和全栈版两套前端技术栈。

  • 支持国产化软硬件环境,如国产芯片、操作系统、数据库、中间件、国密算法等。

#二、核心优势

  1. JeeSite 非常易于二次开发,可控性高,整体架构清晰、技术稳定而先进、源代码书写规范、经典技术会的人多、易于维护、易于扩展、安全稳定。

  2. JeeSite 功能全,知识点非常多,也非常少。因为她使用的都是一些通用的技术,通俗的设计风格,大多数基础知识点,多数人都能掌握,所以每一个 JeeSite 的功能点都非常容易掌握。只要您学会使用这些功能和组件的应用,就可以顺利的完成系统开发了。

  3. JeeSite 是一个低代码开发平台,具有较高的封装度、扩展性,封装不是限制您去做一些事情,而是在便捷的同时,也具有较好的扩展性,在不具备一些功能的情况下,JeeSite 提供了扩展接口,提供了原生调用方法。

  4. 大家都在用 Spring,也在学习 Spring 的优点,Spring 提供了较好的扩展性,可又有多少人去修改它的源代码呢,退一步说,大家去修改了 Spring 的源码,反而会对未来升级造成很大困扰,您说不是呢?这样的例子很多,所以不要纠结,我们非常注重这一点,JeeSite 也一样具备强大的扩展性。为你解决升级的困扰。

为什么说 JeeSite 比较易于学习?JeeSite 很好的把握了设计的 “度”,避免过度设计的情况。过度设计是在产品设计过程中忽略了产品和用户的实际需求,反而带来了不必要的复杂性,而忽略了系统的学习、开发和维护成本。

  • 至今 JeeSite 平台架构已经非常稳定,我们持续升级,并不失架构的先进性。

  • JeeSite 精益求精,用心打磨每一个细节,界面 UI 操作便捷,体验性好。

  • JeeSite 是一个专业的平台,是一个可以让您使用放心的平台。

  • 社区版基于 Apache License 2.0 开源协议,永久免费使用。

更多优势,请继续阅读下一章节:JeeSite 的架构特点


SSO介绍

SSO(Single sign-on):在多个相互信任的应用系统中,只需要登录一次,就可以访问其他的应用系统。

SSO的实现方式

无论是SSO还是普通登录,它们的实现都是基于Cookie-Session模式的。该模式的基本流程如下:

640.png


从上面可以看出,cookie 是服务端生成发送到浏览器端的。浏览器端将 cookie 存储在本地,并且在之后每次的用户端 HTTP 请求头中都附带的一小段数据。

而且cookie 是跟域名关联的,其对应浏览器所请求的域名

cookie有如下的重要属性:

  1. Name:单条 cookie 信息的 key 值,我们通常也是通过这个 key 值设置和获取存储在 cookie 中数据。

  2. Value:我们所说的cookie的值。

  3. Expires/Max-Age:此条 cookie 记录的到期时间。

  4. Domain:此条 cookie 的作用范围。我们知道域名是分多个级别的,如:顶级域名、二级域名、三级域名等等。domain 属性是指可以访问该 cookie 的域名。如果设置为 '.baidu.com',那么末尾是 '.baidu.com' 结束的域名都可以访问到这个 cookie,要注意必须是 '.' 开头。这产生了一个效果,那就是 '.baidu.com' 下属的子域名也可以访问这个 cookie,例如: '.tieba.baicu.com'。

1、各子系统在相同的域名下

一般情况下,企业只有一个二级域名,然后通过三级域名区分不同的系统。比如公司有个二级域名叫做:.bl.com,同时有两个业务系统分别为:.app1.bl.com和 .app2.bl.com,以及一个登录系统:.sso.bl.com。

我们要实现只在 .sso.bl.com登录,.app1.bl.com和 .app2.bl.com也就登录了。

例如,用户通过浏览器登录 .sso.bl.com系统,根据cookie-session模式可知, .sso.bl.com 的服务端的session中会记录登录状态,同时浏览器会保存cookie信息,其中cookie的Domain属性为 .sso.bl.com。

如果我们想让其他两个系统 .app1.bl.com 和 .app2.bl.com 登录,需要解决两个问题:

  • 浏览器的cookie的Domain属性是.sso.a.com,在给app1.bl.com和app2.bl.com发送请求是带不上的。

  • sso、app1和app2是不同的应用,它们的session存在自己的应用内,是不共享的。

好在解决这两个问题是比较简单的。针对第一个问题,sso登录以后,可以将cookie的域设置为二级域名 .bl.com,这样所有子域的系统都可以访问到二级域的 cookie。针对第二个问题,解决方法就是 seesion共享。

2、各子系统属于不同的域

若各个子系统属于不同的域,那么它们之间的 cookie 是无法共享的。因此需要一种新的解决方案,目前单点登录的标准流程就是 CAS。

CAS

Central Authentication Service ——— 中央认证服务,是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。

标准的CAS登录流程如下:


cas_flow_diagram.png

第一次访问app:

  1. 用户访问app系统,app系统是需要登录的,app验证cookie和session发现用户没有登录,要求用户重定向到 CAS Server,同时要携带service参数。

  2. 跳转到CAS Server,CAS Server系统发现用户也没有登录本系统,弹出用户登录页。

  3. 用户填写用户名、密码,CAS Server系统进行认证后,CAS Server生成一个该用户的SSO session存放到本地session中,并生成一个SSO session id,即TGT。最后重定向返回一个CASTGC(放在cookie内)给用户浏览器,这个TGC中包含了TGT的值。

  4. CAS Server系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。

  5. app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。

  6. 验证通过后,app系统将登录状态写入session并设置app域下的Cookie,再返回给浏览器。

  7. 用户发起请求,带上cookie,app系统校验cookie和session。通过后,返回app正确的内容给浏览器。

第二次方法app:

  1. 用户发起请求,并带上 Cookie 中的 JSESSIONIDapp 服务端。

  2. app 服务端 使用 JSESSIONIDSession 中存储的数据进行校验。

  3. 校验通过,返回正确的内容,展示 app

再app登录成功的情况下,第一次访问app2:

  1. 访问 app2 服务地址,app2 请求未通过认证,重定向至 CAS Server 地址。

  2. 访问 CAS Server 地址,发送认证请求,带上 TGC 信息。

  3. CAS Server 通过 TGC中的TGT 去查找 SSO Session 的信息进行认证。

  4. 认证通过,生成票据 ST 重定向至 app2 的服务地址。

  5. app2 服务 携带 STCAS Server 进行认证。

  6. CAS Server 认证成功,返回通过的响应。

  7. app2 服务拿到成功的响应后,设置 Session,并重定向至 app2 的地址,并设置 Cookie  MOD_AUTH_CAS_S

  8. 用户浏览器 发起请求,带上 Cookie 中的 MOD_AUTH_CAS_S ,发送给app2 服务进行校验。

  9. app2 服务使用 MOD_AUTH_CAS_SSession 中存储的数据进行校验。

  10. 校验通过,返回正确的内容,展示 app2

CAS重要字段

TGT

CAS Server 创建TGT,存放在 CAS Server的 Session 里面,根据用户信息签发的。简单来说,TGT 是 SSO Session 的 ID。

TGC

创建 TGT 的同时,生成 TGC。通过 CAS Serverresponse header 的 set-cookie 字段设置 TGC,其中包含了 TGT 的信息。

ST

根据 TGT 签发的 ST,是 CAS 为用户签发的访问某一 service 的票据。在CAS Server 创建 TGT 后,生成一个 ST 将其添到重定向地址后。

为了保证ST的安全性:ST 是基于随机生成的,没有规律性。而且,CAS规定 ST 只能存活一定的时间,然后 CAS Server 会让它失效。而且,CAS 协议规定ST只能使用一次,无论 Service Ticket 验证是否成功, CASServer 都会清除服务端缓存中的该 Ticket ,从而可以确保一个 Service Ticket 不被使用两次。



作者:吾乃零陵上将军邢道荣是也
链接:https://www.jianshu.com/p/95598407fb90
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


推荐一个分布式单点登录框架XXL-SSO!

推荐一个分布式单点登录框架XXL-SSO!

后端元宇宙

后端元宇宙

关注他

有关单点登录(SSO)之前有写过两篇文章

如果说XXL-JOB你可能并不陌生,它是非常火爆的一个分布式任务调度平台。但其实在该作者还有一个非常优秀的开源项目叫XXL-SSO,这两个个项目都是1000+Star。

XXL-SSO 是一个分布式单点登录框架。只需要登录一次就可以访问所有相互信任的应用系统。 拥有"轻量级、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性。现已开放源代码,开箱即用。

这里主要是通过对XXL-SSO源码的分析,将理论和实践结合!


一、快速接入sso

1、xxl-sso特性

  1. 简洁:API直观简洁,可快速上手

  2. 轻量级:环境依赖小,部署与接入成本较低

  3. 单点登录:只需要登录一次就可以访问所有相互信任的应用系统

  4. 分布式:接入SSO认证中心的应用,支持分布式部署

  5. HA:Server端与Client端,均支持集群部署,提高系统可用性

  6. 跨域:支持跨域应用接入SSO认证中心

  7. Cookie+Token均支持:支持基于Cookie和基于Token两种接入方式,并均提供Sample项目

  8. Web+APP均支持:支持Web和APP接入

  9. 实时性:系统登陆、注销状态,全部Server与Client端实时共享

  10. CS结构:基于CS结构,包括Server"认证中心"与Client"受保护应用"

  11. 记住密码:未记住密码时,关闭浏览器则登录态失效;记住密码时,支持登录态自动延期,在自定义延期时间的基础上,原则上可以无限延期

  12. 路径排除:支持自定义多个排除路径,支持Ant表达式,用于排除SSO客户端不需要过滤的路径

2、环境

  • JDK:1.7+

  • Redis:4.0+

3、 源码地址

4、 项目结构说明

- xxl-sso-server:中央认证服务,支持集群- xxl-sso-core:Client端依赖- xxl-sso-samples:单点登陆Client端接入示例项目    - xxl-sso-web-sample-springboot:基于Cookie接入方式,供用户浏览器访问,springboot版本    - xxl-sso-token-sample-springboot:基于Token接入方式,常用于无法使用Cookie的场景使用,如APP、Cookie被禁

5、 架构图



应用系统:sso-web系统(8081端口)、sso-web系统(8082端口)(需要登录的系统)

SSO客户端:登录、退出(独立jar包给应用系统引用)

SSO服务端:登录(登录服务)、登录状态(提供登录状态校验/登录信息查询的服务)、退出(用户注销服务)

数据库:存储用户账户信息(一般使用Mysql,在当前项目中为了简便并没有查询数据库)

缓存:存储用户的登录信息(使用Redis)


二、快速接入XXL-SSO框架

1、 部署认证中心(sso-server)

只需要修改配置文件即可,配置文件位置:application.properties

## 配置redisxxl.sso.redis.address=redis://118.31.224.65:6379##  登录态有效期窗口,默认24H,当登录态有效期窗口过半时,自动顺延一个周期xxl.sso.redis.expire.minute=1440

2、 部署'单点登陆Client端接入示例项目'

这里指需要接入SSO的系统,在当前项目有xxl-sso-web-sample-springboot和 xxl-sso-token-sample-springboot两个示例项目,这里暂且以sso-web为示例。

1)、maven依赖

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-sso-core</artifactId>
    <version>${最新稳定版}</version></dependency>

2)配置 XxlSsoFilter

参考代码:com.xxl.sso.sample.config.XxlSsoConfig

@Beanpublic FilterRegistrationBean xxlSsoFilterRegistration() {
    // xxl-sso, redis init    JedisUtil.init(xxlSsoRedisAddress);
    // xxl-sso, filter init    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setName("XxlSsoWebFilter");
    registration.setOrder(1);
    registration.addUrlPatterns("/*");
    registration.setFilter(new XxlSsoWebFilter());
    registration.addInitParameter(Conf.SSO_SERVER, xxlSsoServer);
    registration.addInitParameter(Conf.SSO_LOGOUT_PATH, xxlSsoLogoutPath);
    return registration;}

3) application.properties修改

## 中央认证服务地址xxl.sso.server=http://ssoserver.com:8080/xxl-sso-server## 退出接口xxl.sso.logout.path=/logout## 排除走sso的接口xxl-sso.excluded.paths=/excludedUrl## redis地址xxl.sso.redis.address=redis://118.11.214.65:6379


三、快速验证

1、修改host文件

修改Host文件:域名方式访问认证中心,模拟跨域与线上真实环境

127.0.0.1       ssoserver.com127.0.0.1       webb.com127.0.0.1       weba.com

2、启动项目

分别运行 “xxl-sso-server” 与 “xxl-sso-web-sample-springboot”,为了验证单点登录,这里sso-web需求启动两次,只是一次是8081端口,一次是8082端口。

## 1、SSO认证中心地址:http://ssoserver.com:8080/xxl-sso-server## 2、Client01应用地址:http://weba.com:8081/xxl-sso-web-sample-springboot/## 3、Client02应用地址:http://webb.com:8082/xxl-sso-web-sample-springboot/

3、验证

SSO登录流程

正常情况下,登录流程如下:

1、访问 "Client01应用地址" ,将会自动 redirect 到 "SSO认证中心地址" 登录界面



2、成功登录后,将会自动 redirect 返回到 "Client01应用地址",并切换为已登录状态



3、此时,访问 "Client02应用地址",不需登陆将会自动切换为已登录状态



很明显Client01登录成功后,Client02无需再重新登录就可以访问了。

SSO注销流程

正常情况下,注销流程如下:

1、访问 "Client01应用地址" 配置的 "注销登陆path",将会自动 redirect 到 "SSO认证中心地址" 并自动注销登陆状态2、此时,访问 "Client02应用地址",也将会自动注销登陆状态


四、核心代码分析

1、SSO客户端(sso-core)拦截器

主要看sso拦截器流程就可以了

@Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        // 获取当前请求接口        String servletPath = req.getServletPath();
        // 1、是否是排除 不走sso的接口 如果是直接放行        if (excludedPaths != null && excludedPaths.trim().length() > 0) {
            for (String excludedPath : excludedPaths.split(",")) {
                String uriPattern = excludedPath.trim();

                // 支持ANT表达式                if (antPathMatcher.match(uriPattern, servletPath)) {
                    // excluded path, allow                    chain.doFilter(request, response);
                    return;
                }
            }
        }
        // 2、是否是退出登录接口 
        if (logoutPath != null
                && logoutPath.trim().length() > 0
                && logoutPath.equals(servletPath)) {

            // 2.1删除当前请求客户端的cookie            SsoWebLoginHelper.removeSessionIdByCookie(req, res);
            // 2.2重定向到sso认证服务的 退出接口            String logoutPageUrl = ssoServer.concat(Conf.SSO_LOGOUT);
            res.sendRedirect(logoutPageUrl);
            return;
        }
        // 3、校验用户(是否存在,是否过期) 这个方法下面在展开        XxlSsoUser xxlUser = SsoWebLoginHelper.loginCheck(req, res);
        // 4、令牌校验失败        if (xxlUser == null) {
            //获取当前请求地址            String link = req.getRequestURL().toString();
            // 重定向到sso认证服务的 登录接口            String loginPageUrl = ssoServer.concat(Conf.SSO_LOGIN)
                    + "?" + Conf.REDIRECT_URL + "=" + link;
            res.sendRedirect(loginPageUrl);
            return;
        }
        // ser sso user        request.setAttribute(Conf.SSO_USER, xxlUser);
        // 已经登录 放行        chain.doFilter(request, response);
        return;
    }

在看下上面的loginCheck方法

/**     * 令牌校验     *     * @return 用户信息     */
    public static XxlSsoUser loginCheck(HttpServletRequest request, HttpServletResponse response){

        //去cookie去获取xxl_sso_sessionid 其实就是之前原理篇说的token,只是名称叫法不同        String cookieSessionId = CookieUtil.getValue(request, Conf.SSO_SESSIONID);

        // 这里去redis中获取用户信息 有可能获取不到。这个方法就不粘贴了 这里有三种情况        //1、cookieSessionId为空 那么直接返回null        //2、cookieSessionId不为空,但在redis获取不到用户信息,因为存在其它系统退出后 redis删除了        //3、redis获取到了用户信息,但超过有效期了 依旧返回null        XxlSsoUser xxlUser = SsoTokenLoginHelper.loginCheck(cookieSessionId);
        if (xxlUser != null) {
            return xxlUser;
        }
        // 如果获取不到 所以已经在其它系统退出登录了 那删除cookie中的xxl_sso_sessionid        SsoWebLoginHelper.removeSessionIdByCookie(request, response);
        //如果是 sso登录成功后 回调过来的 这个时候在这里是可以获取到xxl_sso_sessionid的        String paramSessionId = request.getParameter(Conf.SSO_SESSIONID);
        xxlUser = SsoTokenLoginHelper.loginCheck(paramSessionId);
        if (xxlUser != null) {
            CookieUtil.set(response, Conf.SSO_SESSIONID, paramSessionId, false);    /
            return xxlUser;
        }
        return null;
    }

2、认证服务器(sso-server)登录接口

/**     * sso认证中心 登录接口     */
    @RequestMapping(Conf.SSO_LOGIN)
    public String login(Model model, HttpServletRequest request, HttpServletResponse response) {

        // 同样的 该判断sso上有没有全局会话 
        XxlSsoUser xxlUser = SsoWebLoginHelper.loginCheck(request, response);
        //如果 其它系统登录成功过 这个就不回为null 直接再带上xxl_sso_sessionid=xxx 重定向到之前接口        //也不用在登录了        if (xxlUser != null) {
            // success redirect            String redirectUrl = request.getParameter(Conf.REDIRECT_URL);
            if (redirectUrl!=null && redirectUrl.trim().length()>0) {

                String sessionId = SsoWebLoginHelper.getSessionIdByCookie(request);
                String redirectUrlFinal = redirectUrl + "?" + Conf.SSO_SESSIONID + "=" + sessionId;;
                return "redirect:" + redirectUrlFinal;
            } else {
                return "redirect:/";
            }
        }
        //只有全局会话不存在 才会跳转登录页面 
        model.addAttribute("errorMsg", request.getParameter("errorMsg"));
        model.addAttribute(Conf.REDIRECT_URL, request.getParameter(Conf.REDIRECT_URL));
        return "login";
    }

3、认证服务器(sso-server)退出接口

@RequestMapping(Conf.SSO_LOGOUT)
    public String logout(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
        // 退出操作        SsoWebLoginHelper.logout(request, response);
        // 跳转到登录页        redirectAttributes.addAttribute(Conf.REDIRECT_URL, request.getParameter(Conf.REDIRECT_URL));
        return "redirect:/login";
    }

再来看下 logout 方法做了哪些事情

public static void logout(HttpServletRequest request,
                              HttpServletResponse response) {

        String cookieSessionId = CookieUtil.getValue(request, Conf.SSO_SESSIONID);
        if (cookieSessionId==null) {
            return;
        }
        //1、删除全局缓存 redis中 清除cookieSessionId,这样其它系统在令牌校验的时候 会失败。即一处退出,处处退出。        String storeKey = SsoSessionIdHelper.parseStoreKey(cookieSessionId);
        if (storeKey != null) {
            SsoLoginStore.remove(storeKey);
        }
        //2、清除全局会话 
        CookieUtil.remove(request, response, Conf.SSO_SESSIONID);
    }

整个核心代码的逻辑都在这里了,其实结合上一篇的理论篇,理解起来就一点也不复杂了。

声明: 公众号如需转载该篇文章,发表文章的头部一定要 告知是转至公众号: 后端元宇宙。同时也可以问本人要markdown原稿和原图片。其它情况一律禁止转载!


(一)制造企业数字化转型

制造业数字化企业转型是指企业通过采用先进的数字化技术,如工业4.0、智能制造、工业物联网、大数据、人工智能等,对传统的生产方式、产品设计、制造流程、服务模式和管理方法进行全面革新。这一转型过程不仅提升了企业的运营效率和产品质量,还增强了企业的创新能力和市场竞争力,实现了从传统制造向智能化、自动化、信息化的现代制造的跨越。

(二)数字化制造—PLM/MES/ERP集成(业务流)
数字化制造中的PLM(Product Lifecycle Management,产品生命周期管理)、MES(Manufacturing Execution System,制造执行系统)和ERP(Enterprise Resource Planning,企业资源计划)的集成是实现智能制造的关键步骤。这种集成通过业务流和数据流的无缝连接,提高了制造过程的效率、灵活性和响应速度。以下是业务流中各系统间的一些关键交互:

图片

  1. 设计数据接收:PLM系统提供产品设计数据,这些数据被MES和ERP系统用来计划生产和准备必要的资源。

  2. 工艺分工:MES接收来自PLM的设计数据,并将其转化为具体的工艺流程和工作指导。

  3. 生成生产计划:ERP系统根据市场需求、库存状态和资源可用性生成生产计划,这些计划随后被MES用来安排具体的生产任务。

  4. BOM管理:PLM系统管理产品的Bill of Materials(物料清单),MES和ERP使用这些信息来安排物料采购和生产。

  5. 订单管理:ERP系统管理客户订单,MES根据这些订单生成具体的生产工单。

  6. 计划排程:MES根据ERP的生产计划和资源情况,进行详细的生产排程。

  7. 生产过程监控:MES监控生产过程,确保生产按计划进行,并实时反馈生产状态。

  8. 质量管理:MES跟踪产品质量,确保生产符合质量标准,并将质量数据反馈给PLM和ERP系统。

  9. 物料管理和追溯:MES和ERP系统共同管理物料的采购、存储和使用,确保物料的可追溯性。

  10. 设备运维管理:MES监控设备状态,进行预防性维护,并将设备使用情况反馈给ERP系统。

  11. 人员管理:MES管理操作员的技能和认证,确保人员符合生产任务的要求。

  12. 生产统计和反馈:MES收集生产数据,如产量、效率和异常情况,并将这些数据反馈给ERP系统,用于进一步的分析和决策。

(三)数字化制造—PLM/MES/ERP集成(数据流)
数字化制造中的PLM(产品生命周期管理)、MES(制造执行系统)和ERP(企业资源计划)的集成在数据流方面表现为各系统之间数据的实时交换和共享,以确保生产活动与企业战略和运营目标一致。以下是数据流中的关键点:

图片

  1. ERP系统

    • 生产计划:ERP系统制定生产计划,并将其传递给MES系统。

    • 库存管理:ERP跟踪库存水平,确保物料的及时补充。

    • 设备管理:ERP记录设备信息和维护计划,以支持MES的设备调度。

    • 人力资源:ERP管理员工信息和技能,为MES的人员调度提供数据支持。

  2. MES系统

    • 工作订单和计划:MES接收ERP的生产计划,并将其转化为具体的工作订单。

    • 物料跟踪和追溯:MES跟踪物料使用情况,确保物料的准确性和可追溯性。

    • 详细流程图和说明:MES提供生产流程的详细描述,指导生产活动。

    • 资源管理:MES管理生产所需的各种资源,包括设备、工具和人员。

  3. PLM系统

    • 3D模型和BOM:PLM提供产品的3D模型和物料清单,这些数据被MES用于生产准备。

    • 工艺设计:PLM中的工艺设计信息被MES用于指导生产过程。

    • 技术文档:PLM中的技术文档和工程变更请求(ECR)被MES用于确保生产遵循最新设计。

  4. 数据交换

    • XML/HTTP:PLM和MES之间通过XML和HTTP等技术进行数据交换。

    • 接口服务:各系统之间通过定义良好的接口服务进行通信和数据同步。

  5. 生产数据收集

    • MES收集生产过程中的各种数据,如产量、质量、设备状态等,并反馈给ERP和PLM。

  6. 闭环反馈

    • 实际制造数据:MES收集实际制造数据,反馈给PLM,以支持设计优化和产品改进。

    • 质量数据:MES收集质量数据,反馈给PLM和ERP,以支持质量控制和改进。

  7. 系统集成

    • 通过集成,各系统能够共享数据,减少冗余,提高数据的一致性和准确性。

(四)数字化工厂MOM核心指标

数字化工厂的制造运营管理(MOM)系统的核心指标(KPIs)是衡量制造过程性能的关键因素,它们帮助企业监控、优化并改进生产活动。以下是一些主要的MOM核心指标:

图片

  1. 新产品开发效率

    • 产品设计周期:从概念到完成设计的时间。

    • 新产品导入周期:新产品从设计到生产线的时间。

  2. 新产品的导入效率

    • 工单下达效率:下达工单的速度和准确性。

    • 工单按时完成率:在预定时间内完成工单的比例。

  3. 生产的执行过程效率

    • 平均异常处理时间:处理生产异常所需的平均时间。

    • 设备的利用率:设备实际使用时间与总可用时间的比例。

  4. 生产过程异常处理效率

    • 原材料的质量:原材料的合格率和质量水平。

    • 生产产品良率:生产出的产品中合格品的比例。

  5. 质量

    • 产品设计质量:设计阶段的质量控制能力。

    • 基础数据质量:生产过程中使用的基础数据的准确性。

    • 业务数据质量:业务流程中数据的准确性和完整性。

  6. 成本

    • 原材料的库存成本:原材料库存的持有成本。

    • 在制品的成本:生产过程中半成品的价值。

    • 返工成本:因质量问题导致的额外生产成本。

    • 业务沟通成本:协调生产活动所需的沟通成本。

  7. 人员能力的提升

    • 人员的技能达成率:员工达到预定技能水平的比例。

    • 产品退回率:因质量问题被退回的产品比例。

  8. 设备性能

    • 设备综合效率(OEE):衡量设备效率的综合指标,包括可用率、性能效率和质量率。

  9. 生产调度

    • 生产计划的准确性:生产计划与实际生产符合的程度。

    • 生产调度的响应时间:对生产变更做出调整的速度。

  10. 物料管理

    • 物料准时交付率:供应商按计划交付物料的准确性。

    • 物料库存周转率:库存物料的周转速度。

  11. 生产监控

    • 实时生产数据的准确性:监控系统提供的数据的准确性。

    • 生产过程的可视化程度:生产过程的可见性和监控能力。

  12. 客户满意度

    • 交货期(Delivery):产品交付给客户的速度和准时性。

    • 客户反馈响应时间:对客户反馈的处理速度。

46页PPT,篇幅有限仅展示部分。

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片


(一)电装行业智能制造

集团的信息化规划项目旨在通过深度诊断和转型蓝图设计,提升集团在化工、物流、金融等领域的管控与服务能力。项目包括业务架构、应用架构、数据架构、技术架构以及信息化管控体系的设计,目标是实现集团总部的资本化运作和产业板块的集约化发展。通过构建计划预算、投资管理体系、风险内控、运营分析、财务服务、人资服务、协同办公及信息技术服务体系,集团将优化资源配置,提升管理效率和市场响应速度。同时,项目还涉及财务共享服务中心、人力资源共享服务中心的建设,以及信息技术服务体系的完善,确保信息化建设与集团战略目标相匹配,支持集团的长远发展。

(二)集团信息化规划核心内容

传化集团的信息化规划项目是一项全面的战略计划,旨在通过信息化手段提升集团的整体运营效率和管理能力。以下是该项目核心内容的详细介绍:

  1. 业务架构设计:明确集团的业务流程和管理要求,包括战略目标、管理目标和发展挑战,以及如何通过信息化手段实现这些目标。

  2. 应用架构设计:构建应用系统架构蓝图,包括对现有系统的替代、优化和新建,以支持集团的业务需求和管理决策。

  3. 数据架构设计:确立数据管理和数据治理的框架,确保数据的一致性、准确性和可用性,支持业务决策和运营分析。

  4. 技术架构设计:规划技术平台和基础设施,包括数据中心、网络、安全等,以支撑应用架构和数据架构的实施。

  5. 信息化管控体系设计:建立信息化管理体系和流程,包括制度、标准、组织结构和人员职责,确保信息化项目的顺利实施和运行。

  6. 计划预算体系:通过构建计划预算管理系统,实现预算编制、审批、下达、支付管理等全过程控制,加强战略指导和目标分解能力。

  7. 投资管理体系:建立健全的投资项目库,实现投资信息收集、年度投资计划、投资决策、项目执行和后评价的全生命周期管理。

  8. 风险内控体系:构建风险管理和审计监察体系,通过信息化手段固化流程,实现风险控制点的设置和风险分析机制的建立。

  9. 运营分析体系:建立决策分析平台,整合产业运营和发展信息,提供数据分析和管理决策支持。

  10. 财务服务体系:基于财务管理框架,实现财务组织的集中管控,包括会计核算、资金管理、预算管理和资产管理。

  11. 人资服务体系:建立人力资源管理信息技术体系,提高人力资源管理效率,包括招聘、培训、绩效考核等。

  12. 协同办公及综合服务体系:提供统一的办公环境和业务管理平台,包括企业门户、知识管理、邮件和统一通信系统等。

  13. 信息技术服务体系:实现IT服务管理的流程化、服务化和可视化,提升运维管理效率。

  14. 共享服务中心建设:设计和建设财务和人力资源的共享服务中心,实现服务的标准化和集约化管理。

  15. 信息化项目建设路线图和预算:明确信息化建设的阶段性目标、实施计划和预算安排,确保项目的有序推进。

整个信息化规划项目围绕提升集团管控能力、优化资源配置、加强风险管理、提高决策效率等核心目标,通过综合运用信息技术,推动集团业务的创新和发展。

167页PPT,篇幅有限仅展示部分。

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片

图片