Schema 设计思路

2018-01-18  本文已影响0人  慧灵儿

关于设计材料管理概要视图的核心因素有两点:

  1. 展示有效且已完成单据的关键信息
  2. 体现同项目下各个材料管理流程的关联性
P80118-151909.jpg

由于在入库表中多个入库单和一个申购单相对应,但是有且只有一个入库单是有效的。所以只能根据入库表和收货表关联后的入库状态来判断有效入库,只有状态值是42时才认为其有效。(出库与入库类似)

关键点:

  1. 理想情况下,只有申请到申购可能存在一对多的关系,其余均为一对一。
  2. 实际情况中,
    1). 申请可能存在多条记录,以最新的一条记录为有效申请记录。
    2). 申购可能存在多条记录,通过与BPM_PRO_RUN表关联来判断有效性,流程状态为“审批通过(2)”时认为其有效,
    3). 入库可能存在多条记录,通过与WS_RECEIPTOBJECT表关联来判断有效性,RMBILLSTATUS为42时认为其有效,
    4). 出库与入库类似。

根据各个流程环节,依次关联查询:
申请---->申购---->入库---->出库

根据以上分析,构造下面SQL语句

SELECT *
FROM (SELECT
        A.F_PROJECTCODE         PROJECT_CODE,
        A.F_APPLYNO             APPLY_NO,
        B.F_APPLYNO             APPLY_PURCHASE_NO,
        B.F_ORDERNO             ORDER_NO,
        B.F_ORDERROWNO          ORDER_ROW_NO,
        B.F_ORDERROWMNY         ORDER_ROW_MONEY,
        B.F_APPLYDEP            APPLY_DEPARTMENT,
        C.F_INSTOCKNO           IN_STORAGE_NO,
        C.RMBILLNUM             RM_BILL_NUM,
        C.BILLSTATUS            RM_BILL_STATUS,
        D.F_OUTSTOCKNO          OUT_STORAGE_NO,
        D.REQUESTMATERIALNUM    REQUEST_MATERIAL_NUM,
        D.REQUESTMATERIALSTATUS REQUEST_MATERIAL_STATUS,
        ROWNUM                  NUM
      FROM (
             -- 申请表
             SELECT
               X.F_APPLYNO,
               X.F_PROJECTCODE
             FROM W_MATERIAL_APPLYXY X
             WHERE X.F_ISLASTEST != 0
           ) A

        -- 左连接申购,排除无效记录,审批通过被认为是唯一有效记录
        LEFT JOIN (
                    SELECT
                      X.F_APPLYNO,
                      X.F_PROJECTCODE,
                      X.F_ORDERNO,
                      X.F_ORDERROWNO,
                      X.F_ORDERROWMNY,
                      X.F_APPLYDEP
                    FROM W_MATERIAL_APPLYBUYXY X
                      LEFT JOIN BPM_PRO_RUN Y ON Y.RUNID = X.FLOWRUNID_
                    WHERE Y.STATUS = 2
                  ) B ON A.F_PROJECTCODE = B.F_PROJECTCODE
        LEFT JOIN
        -- 左连接入库记录,排除无效记录,状态42被认为是唯一有效单据
        (
          SELECT
            X.F_APPLYBUYNO,
            X.F_INSTOCKNO,
            Y.RMBILLNUM,
            Y.BILLSTATUS
          FROM (
                 SELECT
                   OUTRMBILLNUM,
                   RMBILLNUM,
                   BILLSTATUS
                 FROM WS_RECEIPTOBJECT
                 WHERE BILLSTATUS = 42
               ) Y LEFT JOIN W_MATERIALINSTOCKXY X ON X.F_INSTOCKNO = Y.OUTRMBILLNUM

        ) C ON C.F_APPLYBUYNO = B.F_APPLYNO

        -- 左连接出库记录,排除无效记录,状态42被认为是唯一有效单据
        LEFT JOIN
        (
          SELECT
            X.F_INSTOCKNO,
            X.F_OUTSTOCKNO,
            Y.REQUESTMATERIALNUM,
            Y.REQUESTMATERIALSTATUS
          FROM (
                 SELECT
                   OUTREQUESTMATERIALNUM,
                   REQUESTMATERIALNUM,
                   REQUESTMATERIALSTATUS
                 FROM WS_REQUESTOBJECT
                 WHERE REQUESTMATERIALSTATUS = 42
               ) Y LEFT JOIN W_MATERIALOUTSTOCKXY X ON X.F_OUTSTOCKNO = Y.OUTREQUESTMATERIALNUM

        ) D ON D.F_INSTOCKNO = C.F_INSTOCKNO);

将其创建为视图,之后编写实体类,Repository,Service,和Controller,以及前端模板视图。
这些类遵循框架的约定,且比较简单,此处不再赘述。

上一篇 下一篇

猜你喜欢

热点阅读