Appearance
介绍
- 添加一种单据类型在云ERP里审核
- 本次以《库内周转调拨申请单》(DBQ)举例
整体流程
- 找到 .NET 对应审核页面的查询逻辑(一般是 sqlname),以 MyBatis XML 配置文件的方式改写
- 云ERP后台直接使用
@IISMapper注解查询分公司数据(无需再经过 erp 的 java 后台中转,少一次 HTTP 调用) - 云ERP 的 Nacos 配置中加上单据类型,前端待办中心即可看到新增的标签
相应配置查询
查单据类型
DBQ,单据的billid格式是${公司编码}${单据类型}${规则序号},通过查看单号即可拿到单据类型,查询sql:SELECT BRANCHID,billid from TB_GOS_PURSTKTURNFLITTINGSUM WHERE ROWNUM < 10;通过单据类型查询
startId是PurStkTurnFlitting_Audit,查询sql:SELECT BRANCHID,startid from TB_SYS_BILLDEFINE WHERE billtypecode = 'DBQ';可以查到
Nacos 配置
在 bpm.bill.config.bill-types 下新增一段配置:
yaml
DBQ:
module-name: 采购中心
sync: false
web-erp-only: false
remark: 库内周转调拨申请单
startIds: PurStkTurnFlitting_Audit字段说明:
module-name:前端展示的分组名称(如 采购中心、销售中心)sync:是否同步审核(一般填 false)web-erp-only:是否仅云ERP处理(一般填 false)remark:单据名称备注startIds:工作流启动ID,与 IIS 侧的流程配置对应,也是 SQL 中待办过滤的条件值
只需要加
bill-types,不需要加到old-mc-bills、new-mc-bills、mc-audit-bills等分类列表中。 那些列表是控制跳转移动商务/AC系统审核的,云ERP自己审核的单据不需要配置。 参考同类单据:采购中心的 HET(采购订单)、PCJ(客户商品价格申请单)。
一般需要加的三个接口
| 接口 | 方法 | 用途 | 备注 |
|---|---|---|---|
/auditList | POST | 待办主单列表(分页,带权限过滤) | 需要加接口 |
/auditDet | POST | 勾选主单后累加查询商品明细 | 需要加接口 |
/auditInfo | GET | 单据详情(主单+明细) | 有详情的是云erp有的单子有详情页面可以公用,否则需要加接口 |
Mapper 层要点
java
@Mapper
@IISMapper // 关键注解:标记为IIS分公司查询,SQL通过HTTP下发到分公司执行
public interface PurStkTurnFlittingQueryMapper {
List<PurStkTurnFlittingAuditMapperVO> queryAuditList(PurStkTurnFlittingAuditDTO req);
List<PurStkTurnFlittingAuditDetVO> queryAuditDet(@Param("billIds") List<String> billIds);
PurStkTurnFlittingAuditMapperVO queryAuditInfo(@Param("billId") String billId);
}- 核心1:利用
@IISMapper注解实现分公司查询,最终会调用到.net项目。 - 核心2:BranchId 由
BranchIdInterceptor拦截器从请求头branchid自动设置到BranchIdContext, 前端请求无需在 Service 中手动设置。定时任务等非请求场景才需要手动 set/clear。
Mapper XML 要点
待办过滤 SQL 片段(核心,必须包含)
每个 Mapper XML 中需要内联定义待办过滤 SQL 片段(weberp-server 中没有公共 SQL 片段文件):
xml
<sql id="todoExistsFilterDistributed">
exists (
select 1 from Tb_Gos_Bpm_Ru_Todo todo
inner join (
select startid from tb_sys_bpm_cfg_base where startid = '${startId}'
union
select cb.startid from tb_sys_bpm_cfg_base cb
inner join tb_sys_bpm_cfg_relation r
on r.startid = cb.startid and r.relationcode = '${startId}' and r.relationtype = 1
) b on todo.startid = b.startid
where (todo.user_id = #{${staffIdParam}} or todo.group_id = #{${staffIdParam}})
and (todo.proc_inst_id = ${tableAlias}.workflowguid or todo.rel_proc_inst_id = ${tableAlias}.workflowguid)
and not exists (select processinstanceid, taskid
from tb_sys_workflow_async_task t
where (t.processinstanceid = todo.proc_inst_id or t.processinstanceid = todo.rel_proc_inst_id)
and t.taskid = todo.task_id)
)
</sql>列表查询(queryAuditList)引用方式
xml
<select id="queryAuditList" resultType="...MapperVO">
select ... from TB_GOS_XXX a
where a.deleteflag = 0
and
<include refid="当前Mapper全限定名.todoExistsFilterDistributed">
<property name="startId" value="与nacos的startIds一致"/>
<property name="staffIdParam" value="loginStaffId"/>
<property name="tableAlias" value="a"/>
</include>
<include refid="queryCondition"/>
order by a.pk desc
</select>三个 property 说明:
startId:与 Nacos 配置的startIds一致(如PurStkTurnFlitting_Audit)staffIdParam:DTO 中员工ID字段名(loginStaffId来自PageInfo父类)tableAlias:主表别名(如a)
注意事项
- 时间类型的序列化,目前借助了
common-web-config里的SqlOnlyInvocationHandler处理,使用了下面的LenientDateDeserializer兼容多种时间格式,需要 61 版本以上。