• odoo 分享 PostgreSQL 语句2


    ----------前提:

    1.需求是报表逻辑验证

    2.供应链pc输入需求值

    3.系统抓取产能

    4.判断产能/需求>1.15 需要提示

    5.需求描述:

    产能合法性校验处理逻辑

    1. 第一步:根据【产品/物料编码】和【ODM/OEM加工厂产线】获取MRP需求计划值。
    2. 第二步:按照【周】进行MRP需求计划值求和;
    3. 第三步:获取对应【ODM/OEM加工厂产线】的产能;
    4. 第四步:通过【MRP需求的周计划值】和【ODM/OEM加工厂产线】的产能,计算所需的产线条数;【所需产线条数】=【MRP需求的周计划值】/【ODM/OEM加工厂产线】的产能,保留4位以上小数。
    5. 第五步:按照【ODM/OEM加工厂产线】和【周次】进行【所需产线条数】的求和。
    6. 第六步:系统校验:【所需产线条数】是否存在大于对应加工厂产线的产能负荷上限(115%)的记录。如果不存在,则产能负荷校验通过。如果存在【所需产线条数】是否存在大于对应加工厂产线的产能负荷上限(115%)的记录则给出提示:确认失败。如下【ODM/OEM加工厂产线】的产能负荷率超过产能负荷上限,【ODM/OEM加工厂产线】清单为:“1%”
      1. 1%为:ODM/OEM加工厂产线的名称,存在多条时,用中文的“,”隔开。
    7. 说明:如果找不到产能,按照产能为零计算,提示产线负荷超标。

    需求地址:MRP需求计划

    ----------分析:

    1.测试理解 关联很多临时表,需要生成多个视图以方便调用

    ----------测试实现:

    With lumi_prod_line_all AS --工作日历的工厂 产线 具体某天 班制
    (
        select lpll.prod_line_id,lpll.system_id,lpl.factory_id,lpll.plan_date
        from lumi_prod_line lpl
        left join lumi_prod_line_line lpll on lpl.id=lpll.prod_line_id
        where lpll.is_fac_prod='t'
        --and plan_date ='2020-01-01'
        and lpl.STATE='confirmed'
    ), lumi_capacity_all as --产能
    (
        select lc.factory_id,lc.prod_line_id,lc.system_id,lcl.product_id,lcl.std_cap
        from lumi_capacity lc
        left join lumi_capacity_line lcl on lcl.cap_id=lc.id
        where lc.state='confirmed'
        and lc.company_id=1
    ), lumi_prod_line_and_capacity_all as
    (
        select a.factory_id,a.prod_line_id,a.system_id,
        generate_series(
            extract (week from a.plan_date)::integer,  -- 起始周
            extract (week from a.plan_date)::integer,  -- 结束周
            1) as week,
        a.plan_date,b.product_id,b.std_cap
        from lumi_prod_line_all a
        left join lumi_capacity_all b on a.factory_id=b.factory_id
        and a.prod_line_id=b.prod_line_id and a.system_id=b.system_id
      order by a.plan_date
        )
    , final_all as
    (
        select factory_id,prod_line_id,system_id,product_id,
        substring(plan_date::VARCHAR from for 4)||week as year_week,
        sum(std_cap) std_cap,
        string_agg(plan_date::VARCHAR,',' order by plan_date) as string_agg_plan_date,
        count(plan_date) as work_dates
        from lumi_prod_line_and_capacity_all
        group by factory_id,prod_line_id,system_id,product_id,year_week
     
    )
    , final_all_detail as
    (
        select rp.name factory_name,
        lpl.name prod_line_name,
        lss.name shift_system_name,
        pp.default_code,
        fa.year_week,
        fa.std_cap,
        fa.string_agg_plan_date,
        fa.work_dates
        from final_all fa
        left join res_partner rp on rp.id=fa.factory_id
        left join lumi_prod_line lpl on lpl.id=fa.prod_line_id
        left join lumi_shift_system lss on lss.id=fa.system_id
        left join product_product pp on pp.id=fa.product_id
        where pp.default_code is not null
        and fa.std_cap is not null
    )select *
    from final_all_detail

  • 相关阅读:
    Android 编程下 Eclipse 恢复被删除的文件
    Android 编程下背景图片适配工具类
    Android 编程下 Managing Your App's Memory
    Android 编程下代码之(QQ消息列表滑动删除)
    Android 编程下 Canvas and Drawables
    Android 编程下 AlarmManager
    Android 编程下去除 ListView 上下边界蓝色或黄色阴影
    Java 编程下字符串的 16 位、32位 MD5 加密
    C#枚举类型和int类型相互转换
    MVC和普通三层架构的区别
  • 原文地址:https://www.cnblogs.com/alamZ/p/13048384.html
Copyright © 2020-2023  润新知