当前云星空系统的即时库存WebAPI接口功能不足,需通过SQL视图方式重新封装数据源,包括计算可用量、库存单位数量、生产日期和有效期等。创建视图后,通过二开单据绑定视图并发布新的WebAPI接口,实现直接查询这些数据,无需换算或写插件,扩展性强且配置简单。注意查询性能可能因视图查询而异,可优化视图以提高效率。
当前云星空系统提供的标准即时库存WebAPI接口不能直接查询可用量、库存单位数量、启用了批号附属信息的生产日期、有效期至等数据,即便有的能通过换算可以取到,但用起来也不太方便,这里通过SQL视图方式重新封装下数据源,在视图中计算好可用量、各单位数量以及生产日期、有效期至等数据,然后以二开单据绑定视图方式提供新的WebAPI接口,此方式优点主要有:
1)可用量、库存单位数量等数据直接可用,不用自己在换算;
2)不用写插件,简单配置即可,容易上手;
3)没有是否是多租户的限制,通用性较强;
4)较强可扩展性,可以根据需要在BOS中给二开单据添加基础资料属性字段;
二开实现步骤
1、创建SQL视图(这里以SQL SERVER为例)
CREATE VIEW V_STK_INVENTORY_CUS AS SELECT a.FID , a.FSTOCKORGID , a.FKEEPERTYPEID , a.FKEEPERID , a.FOWNERTYPEID , a.FOWNERID , a.FSTOCKID , a.FSTOCKLOCID , a.FAUXPROPID , a.FSTOCKSTATUSID , a.FLOT , a.FBOMID , a.FMTONO , a.FPROJECTNO , (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FPRODUCEDATE ELSE a.FPRODUCEDATE END) FPRODUCEDATE , (CASE WHEN d.FISEXPPARTOFLOT='1' THEN e.FEXPIRYDATE ELSE a.FEXPIRYDATE END) FEXPIRYDATE , a.FBASEUNITID , a.FBASEQTY , a.FSECQTY , a.FSTOCKUNITID , a.FMATERIALID , (CASE WHEN d.FSTOREURNUM=0 THEN a.FBASEQTY ELSE a.FBASEQTY*d.FSTOREURNOM/d.FSTOREURNUM END) FQTY , (CASE WHEN d.FSTOREURNUM=0 THEN ISNULL(b.FBASELOCKQTY, 0) ELSE ISNULL(b.FBASELOCKQTY, 0)*d.FSTOREURNOM/d.FSTOREURNUM END) FLOCKQTY , a.FSECUNITID , 'STK_INVENTORYCUS' AS FOBJECTTYPEID , (CASE WHEN d.FSTOREURNUM=0 THEN (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0)) ELSE (a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0))*d.FSTOREURNOM/d.FSTOREURNUM END) FAVBQTY , a.FUPDATETIME , a.FISEFFECTIVED, ISNULL(b.FBASELOCKQTY, 0) FBASELOCKQTY , ISNULL(b.FSECLOCKQTY, 0) FSECLOCKQTY , ( a.FBASEQTY - ISNULL(b.FBASELOCKQTY, 0) ) FBASEAVBQTY , ( a.FSECQTY - ISNULL(b.FSECLOCKQTY, 0) ) FSECAVBQTY FROM T_STK_INVENTORY a INNER JOIN T_BD_MATERIAL c ON c.FMASTERID=a.FMATERIALID and c.FUSEORGID=a.FSTOCKORGID INNER JOIN T_BD_MATERIALSTOCK d ON d.FMATERIALID=c.FMATERIALID LEFT JOIN T_BD_LOTMASTER e on e.FLOTID=a.FLOT LEFT JOIN ( SELECT TKE.FSUPPLYINTERID , SUM(ISNULL(TKE.FBASEQTY, 0)) AS FBASELOCKQTY , SUM(ISNULL(TKE.FSECQTY, 0)) AS FSECLOCKQTY FROM T_PLN_RESERVELINKENTRY TKE WHERE TKE.FSUPPLYFORMID = 'STK_Inventory' AND TKE.FBASEQTY > 0 AND (( TKE.FLINKTYPE = '4' AND 1= ( SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0) ) OR (1=1 AND 0=(SELECT COUNT(1) FROM T_BAS_SYSPARAMETER WHERE fparameterobjid='MFG_PLNParam' AND fparameters.exist('/BillHead[IsEnableReserve="True"]')=0)) ) GROUP BY TKE.FSUPPLYINTERID ) b ON b.FSUPPLYINTERID = a.FID;
2、新建二开即时库存单据
新增的二开单据字段与【即时库存】保持一致,所以可以直接用复制方式新增,这里需要注意单据编号的问题,需要与视图中的FOBJECTTYPEID一致,如下图所示:
3、绑定视图
4、发布到主控台
5、测试效果
查询时可直接使用 FQTY、FAVBQTY等字段作为最终查询结果使用。
*注:由于这种方式是基于视图的查询,性能方面与基于表的查询是存在区别的,如出现二开接口查询性能与标准接口查询性能差别较大情况,可尝试创建索引视图(SQL SERVER)\物化视图(Oracle)
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *