Schema 设计思路
2018-01-18 本文已影响0人
慧灵儿
关于设计材料管理概要视图的核心因素有两点:
- 展示有效且已完成单据的关键信息
- 体现同项目下各个材料管理流程的关联性
由于在入库表中多个入库单和一个申购单相对应,但是有且只有一个入库单是有效的。所以只能根据入库表和收货表关联后的入库状态来判断有效入库,只有状态值是42时才认为其有效。(出库与入库类似)
关键点:
- 理想情况下,只有申请到申购可能存在一对多的关系,其余均为一对一。
- 实际情况中,
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,以及前端模板视图。
这些类遵循框架的约定,且比较简单,此处不再赘述。