流程节点事件脚本范例说明
简介:在流程审批过程中,由于绑定业务单审核,在审核过程中触发业务点计算时,比如:数据同步、增加、删除等,均可在节点的“事件设置”调用后端维护的脚本方法!温馨提示:该文档中说明的脚本,仅在3.2.3版本以上支持!
1、入库后针对库存的新增,以及操作数据插入到操作历史场景
1.1、表设计说明
根据入库的业务场景,设计表基础数据:
1、入库主表:t_enterapply
字段:(主键:id_)
2、入库从表:t_enterdetail
字段:(外键:parent_id_)(名称:ming_cheng_)、(规格:gui_ge_) 、(有效期:you_xiao_qi_)、(批次:pi_ci_)、(耗材编号:hao_cai_bian_ma_)、(数量:shu_liang_);
3、编号耗材库存维护表:t_consumablesbasic
字段:(耗材编码:bian_ma_)、(库存:bian_ma_)
4、编号分批次关联库存明细表:t_hcpcglb
字段:(名称:ming_cheng_)、(规格:gui_ge)、(有效期:youxiao_qi_)、(批次:pi_ci_)、(编号:bian_hao_)、(生产厂家:manufacturer_)、(本次批次余量(库存):batch_num_)
5、操作历史表:t_kcczlsb
字段:(名称:ming_cheng_)、(编号:bian_hao_)、(批次:pi_ci_)、(类型:lei_xing_(默认值enter入库,outer出库,pd盘点))、(方式:fang_shi_)、(规格:gui_ge_)、(生产厂家:factory_)、(操作数量:cao_zuo_shu_liang_(入库为+数量,出库为-数量))
1.2、操作业务说明
- 在添加入库申请信息信息,根据入库的明细中的“编号”和“批次”进行库存的增加,比如入库编号A0001的产品,且批次0001,数量为5,那等流程审批结束后,针对总编号耗材表对应的编号的库存更新增加为5,在编号分批次关联库存明细表则根据编号和批次的本批次余量也更新增量为5;
- 并将入库的操作明细数据插入到操作历史表中,入库的操作数量显示为+5;
- 在编号批次关联库存表中,相同的编号和批次已存在则更新,不存在则新增。
1.3、实现方式说明
前提先在后端脚本类中“ScriptImpl.java
”维护计算库存和插入的方法,然后在在流程结束节点,编写以下代码,如下图:
- 代码范例:
import com.lc.ibps.platform.script.script.ScriptImpl.TargetTableVo;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
import com.lc.ibps.platform.script.script.ScriptImpl.ArchiveTargetTableVo;
Map<String, String> linkParams = new HashMap<>();
linkParams.put("hao_cai_bian_ma_", "bian_hao_");
linkParams.put("pi_ci_", "pi_ci_");
Map<String, String> params = new HashMap<>();
params.put("shu_liang_", "batch_num_");
TargetTableVo hcpcglbTableVo = new TargetTableVo("id_","t_enterdetail","t_hcpcglb","id_","","","","");
Map<String, String> hcpcglbFieldRelationMap = new HashMap<>();
hcpcglbTableVo.setFieldRelationMap(hcpcglbFieldRelationMap);
hcpcglbFieldRelationMap.put("ming_cheng_", "ming_cheng_");
hcpcglbFieldRelationMap.put("gui_ge_", "gui_ge_");
hcpcglbFieldRelationMap.put("you_xiao_qi_", "you_xiao_qi_");
hcpcglbFieldRelationMap.put("pi_ci_", "pi_ci_");
hcpcglbFieldRelationMap.put("hao_cai_bian_ma_", "bian_hao_");
hcpcglbFieldRelationMap.put("shu_liang_", "batch_num_");
hcpcglbFieldRelationMap.put("factory_", "manufacturer_");
Map<String, Object> hcpcglbFieldParams = new HashMap<>();
hcpcglbTableVo.setFieldParams(hcpcglbFieldParams);
scriptImpl.syncNumberDataBySql(businessKey_, "t_enterdetail", "id_", "parent_id_", "t_hcpcglb", "parent_id_", linkParams, params, true, hcpcglbTableVo);
Map<String,Object> valMaps = new HashMap<String,Object>();
valMaps.put("zhuang_tai_", "ysh");
scriptImpl.updateDataByBusValue(businessKey_,"t_enterapply",valMaps);
List<String> queryParams = new ArrayList<>();
queryParams.add("bian_hao_");
queryParams.add("SUM(batch_num_) as batchNum");
List<String> groupByParams = new ArrayList<>();
groupByParams.add("bian_hao_");
Map<String, String> updateWhereMap = new HashMap<>();
updateWhereMap.put("bian_ma_", "bian_ma_");
Map<String, String> getFieldMap = new HashMap<>();
getFieldMap.put("batchNum","ku_cun_");
getFieldMap.put("bian_hao_",null);
scriptImpl.sumNumUpdateBySql("t_hcpcglb",queryParams,null,groupByParams,getFieldMap,"t_consumablesbasic",updateWhereMap);
ArchiveTargetTableVo enterdetailVo = new ArchiveTargetTableVo(
"t_enterapply", "id_", businessKey_, "parent_id_", "t_enterdetail", "t_kcczlsb",
"id_", "shu_liang_", "cao_zuo_shu_liang_", "+{{FIELD:cao_zuo_shu_liang_}}");
Map<String, String> enterdetailFieldRelationMap = new HashMap<>();
enterdetailVo.setFieldRelationMap(enterdetailFieldRelationMap);
enterdetailFieldRelationMap.put("id_", "id_");
enterdetailFieldRelationMap.put("ming_cheng_", "ming_cheng_");
enterdetailFieldRelationMap.put("hao_cai_bian_ma_", "bian_hao_");
enterdetailFieldRelationMap.put("pi_ci_", "pi_ci_");
enterdetailFieldRelationMap.put("gui_ge_", "gui_ge_");
enterdetailFieldRelationMap.put("factory_", "factory_");
enterdetailFieldRelationMap.put("shu_liang_", "cao_zuo_shu_liang_");
Map<String, Object> enterdetailFieldParams = new HashMap<>();
enterdetailVo.setFieldParams(enterdetailFieldParams);
enterdetailFieldParams.put("lei_xing_", "enter");
enterdetailFieldParams.put("fang_shi_", "cgrk");
enterdetailFieldParams.put("zhuang_tai_", "ysh");
scriptImpl.archiveDataBySql(enterdetailVo);
1.4、代码温馨说明
1.4.1、将入库从表的信息,根据编号和批次信息是否存在进行数据更新/增加同步到t_hcpcglb表中,并根据入库的数量进行库存计算,调用的方法如下:
scriptImpl.syncNumberDataBySql(businessKey_, "t_enterdetail", "id_", "parent_id_", "t_hcpcglb", "parent_id_", linkParams, params, true, hcpcglbTableVo);
syncNumberDataBySql
传参细节说明:
1、businessKey_
:获取流程变量维护的表单主键信息,直接复制黏贴使用即可;
2、t_enterdetail
:查询入库源头表信息,即根据先查询入库的明细数据;
3、id_
:查询源头表的主键id信息,即查询入库明细表的主键id_信息;
4、parent_id_
:源头表根据外键查询相关信息,即根据外键条件查询入库明细表的数据;
5、t_hcpcglb
:根据源头表的信息插入/更新编号分批次关联库存明细表
的表名,即根据入库明细表中编号和批次信息进行更新/增加信息,并对库存进行计算;
6、parent_id_
:去除外键等于外键查询原有库存数量的信息,即传入入库明细表的关联外键字段信息;
7、linkParams
:根据关联的编号和批次信息进行查询相关的编号分批次关联库存明细表的字段,即传入入库从表(t_enterdetail)和编号分批次关联库存明细表(t_hcpcglb)的关联字段信息,如下代码所示:
Map<String, String> linkParams = new HashMap<>();
linkParams.put("hao_cai_bian_ma_", "bian_hao_");
linkParams.put("pi_ci_", "pi_ci_");
key
对应入库从表的编号和批次字段;value
对应编号分批次关联库存明细表的编号和批次字段。
8、params
:对应更新库存的相关字段信息,即根据源头表(入库从表
:t_enterdetail)查询数量字段信息,对应更新到编号分批次关联库存明细表(t_hcpcglb)的本批次库存数量字段信息 ,如下代码所示:
Map<String, String> params = new HashMap<>();
params.put("shu_liang_", "batch_num_");
key
对应入库从表的数量字段信息;value
对应编号分批次关联库存明细表的本次批次余量(库存)字段。
9、true
:true代表入库,即增加库存数量,false代表出库,即减去库存数量,因为此是入库,则传入true信息即可;
10、hcpcglbTableVo
:插入相关的字段对象参数,即根据入库明细的基本信息字段同步插入到编号分批次关联库存明细表的相关字段信息中,如下代码:
TargetTableVo hcpcglbTableVo = new TargetTableVo("id_","t_enterdetail","t_hcpcglb","id_","","","","");
Map<String, String> hcpcglbFieldRelationMap = new HashMap<>();
hcpcglbTableVo.setFieldRelationMap(hcpcglbFieldRelationMap);
hcpcglbFieldRelationMap.put("ming_cheng_", "ming_cheng_");
hcpcglbFieldRelationMap.put("gui_ge_", "gui_ge_");
hcpcglbFieldRelationMap.put("you_xiao_qi_", "you_xiao_qi_");
hcpcglbFieldRelationMap.put("pi_ci_", "pi_ci_");
hcpcglbFieldRelationMap.put("hao_cai_bian_ma_", "bian_hao_");
hcpcglbFieldRelationMap.put("shu_liang_", "batch_num_");
hcpcglbFieldRelationMap.put("factory_", "manufacturer_");
Map<String, Object> hcpcglbFieldParams = new HashMap<>();
hcpcglbTableVo.setFieldParams(hcpcglbFieldParams);
温馨说明:
1、hcpcglbTableVo成员属性对应入库从表主键,入库从表的表名,编号分批次关联库存明细表的表名,编号分批次关联库存明细表的主键 ;
2、hcpcglbFieldParams的数组中,key对应入库从表的字段,value对应编号分批次关联库存明细表的字段。
1.4.2、将多个批次同个编号入库的库存数量,根据同个编号的总库存信息更新到t_consumablesbasic表中,调用的方法如下:
scriptImpl.sumNumUpdateBySql("t_hcpcglb",queryParams,null,groupByParams,getFieldMap,"t_consumablesbasic",updateWhereMap);
- sumNumUpdateBySql细节参数说明:
1、t_hcpcglb
:查询源头表的数据信息,即查询编号分批次关联库存明细表的表名信息;
2、queryParams
:查询源头表的编号、统计数量字段信息,即查询统计编号分批次关联库存明细表的本批次数量和编号字段信息,代码如下:List<String> queryParams = new ArrayList<>(); queryParams.add("bian_hao_"); queryParams.add("SUM(batch_num_) as batchNum");
3、groupByParams
:拼接查询源头的分组字段信息,即查询根据编号分组信息,代码如下:
List<String> groupByParams = new ArrayList<>();
groupByParams.add("bian_hao_");
4、getFieldMap
:根据编号统计源头表的总库存数量,然后在根据对应的编号更新对应编号耗材库存维护表的库存信息,代码如下:
Map<String, String> getFieldMap = new HashMap<>();
getFieldMap.put("batchNum","ku_cun_");
getFieldMap.put("bian_hao_",null);
key
对应查询分批次关联库存明细表的数量和编号字段;value
对应更新编号耗材库存维护表的库存字段,(只需更新库存字段,因此只需要设置一个value值即可)。
5、t_consumablesbasic
:传递更新目标表的表名,即更新编号更新对应编号耗材库存维护表的表名;
6、updateWhereMap
:传入更新目标表的where条件字段,即根据编号更新对应的数量,传入编号耗材库存维护表的编号字段信息,代码如下:
Map<String, String> updateWhereMap = new HashMap<>();
updateWhereMap.put("bian_ma_", "bian_ma_");
key
和value
都对应更新编号耗材库存维护表的编号字段;
1.4.3、将入库的操作数据,插入到t_kcczlsb表中,调用方法如下:
scriptImpl.archiveDataBySql(enterdetailVo);
温馨说明:
ArchiveTargetTableVo enterdetailVo = new ArchiveTargetTableVo(
"t_enterapply", "id_", businessKey_, "parent_id_", "t_enterdetail", "t_kcczlsb",
"id_", "shu_liang_", "cao_zuo_shu_liang_", "+{{FIELD:cao_zuo_shu_liang_}}");
1、ArchiveTargetTableVo成员属性说明:
t_enterapply
:对应入库主表的表名;id_
:对应入库主表的主键id_字段;businessKey_
:直接复制黏贴使用,对应传递主表的主键值;parent_id_
:对应入库从表的外键字段;t_enterdetail
:对应入库从表的表名;t_kcczlsb
:对应插入操作数据的历史表名;id_
:对应操作历史表的主键字段;shu_liang_
:对应入库从表的数量字段;cao_zuo_shu_liang_
:对应操作历史表的操作数量字段;+{{FIELD:cao_zuo_shu_liang_}}
:操作数量显示规则,入库则前缀是+,cao_zuo_shu_liang_对应操作历史表字段;出库则前缀是—;
2、enterdetailFieldRelationMap细节说明:
Map<String, String> enterdetailFieldRelationMap = new HashMap<>();
enterdetailVo.setFieldRelationMap(enterdetailFieldRelationMap);
enterdetailFieldRelationMap.put("id_", "id_");
enterdetailFieldRelationMap.put("ming_cheng_", "ming_cheng_");
enterdetailFieldRelationMap.put("hao_cai_bian_ma_", "bian_hao_");
enterdetailFieldRelationMap.put("pi_ci_", "pi_ci_");
enterdetailFieldRelationMap.put("gui_ge_", "gui_ge_");
enterdetailFieldRelationMap.put("factory_", "factory_");
enterdetailFieldRelationMap.put("shu_liang_", "cao_zuo_shu_liang_");
key对应入库从表的字段信息一致;value对应操作历史表的字段信息一致;
3、enterdetailFieldParams,直接在页面获取或传入对应固定参数数组:
Map<String, Object> enterdetailFieldParams = new HashMap<>();
enterdetailVo.setFieldParams(enterdetailFieldParams);
enterdetailFieldParams.put("lei_xing_", "enter");
enterdetailFieldParams.put("fang_shi_", "cgrk");
enterdetailFieldParams.put("zhuang_tai_", "ysh");
key对应操作历史表的字段信息,value对应字段存储的值信息!