关于duedate补充

在jbpm 3.2.2版本中 要实现过去触发做某件事情,除了要配置流程定义和写额外的程序以外,还要将web.xml里面增加过滤器:
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>

<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.mmg</url-pattern>
</filter-mapping>
如果配置成功 则会在服务启动的时候 你的工作系统会不断的读取数据表,下面是该读取的内容:
Hibernate: select top 1 job0_.ID_ as ID1_22_, job0_.VERSION_ as VERSION3_22_, job0_.DUEDATE_ as DUEDATE4_22_, job0_.PROCESSINSTANCE_ as PROCESSI5_22_, job0_.TOKEN_ as TOKEN6_22_, job0_.TASKINSTANCE_ as TASKINST7_22_, job0_.ISSUSPENDED_ as ISSUSPEN8_22_, job0_.ISEXCLUSIVE_ as ISEXCLUS9_22_, job0_.LOCKOWNER_ as LOCKOWNER10_22_, job0_.LOCKTIME_ as LOCKTIME11_22_, job0_.EXCEPTION_ as EXCEPTION12_22_, job0_.RETRIES_ as RETRIES13_22_, job0_.NAME_ as NAME14_22_, job0_.REPEAT_ as REPEAT15_22_, job0_.TRANSITIONNAME_ as TRANSIT16_22_, job0_.ACTION_ as ACTION17_22_, job0_.GRAPHELEMENTTYPE_ as GRAPHEL18_22_, job0_.GRAPHELEMENT_ as GRAPHEL19_22_, job0_.NODE_ as NODE20_22_, job0_.CLASS_ as CLASS2_22_ from JBPM_JOB job0_ where (job0_.LOCKOWNER_ is null or job0_.LOCKOWNER_=?) and job0_.RETRIES_>0 and job0_.DUEDATE_<=? and job0_.ISSUSPENDED_<>1 order by job0_.DUEDATE_ asc

Hibernate: select top 1 job0_.ID_ as ID1_22_, job0_.VERSION_ as VERSION3_22_, job0_.DUEDATE_ as DUEDATE4_22_, job0_.PROCESSINSTANCE_ as PROCESSI5_22_, job0_.TOKEN_ as TOKEN6_22_, job0_.TASKINSTANCE_ as TASKINST7_22_, job0_.ISSUSPENDED_ as ISSUSPEN8_22_, job0_.ISEXCLUSIVE_ as ISEXCLUS9_22_, job0_.LOCKOWNER_ as LOCKOWNER10_22_, job0_.LOCKTIME_ as LOCKTIME11_22_, job0_.EXCEPTION_ as EXCEPTION12_22_, job0_.RETRIES_ as RETRIES13_22_, job0_.NAME_ as NAME14_22_, job0_.REPEAT_ as REPEAT15_22_, job0_.TRANSITIONNAME_ as TRANSIT16_22_, job0_.ACTION_ as ACTION17_22_, job0_.GRAPHELEMENTTYPE_ as GRAPHEL18_22_, job0_.GRAPHELEMENT_ as GRAPHEL19_22_, job0_.NODE_ as NODE20_22_, job0_.CLASS_ as CLASS2_22_ from JBPM_JOB job0_ where (job0_.LOCKOWNER_ is null or job0_.LOCKOWNER_=?) and job0_.RETRIES_>0 and job0_.ISSUSPENDED_<>1 order by job0_.DUEDATE_ asc

这样,一个成功的超时触发事件便完成
CREATE TABLE #PDTB ( [实际收款日期] DATE, -- ORCT.TaxDate [收款补充代码] NVARCHAR(50), -- ORCT.SupplCode [应收过账日期] DATE, -- OINV.DocDate [应收补充代码] NVARCHAR(50), -- OINV.SupplCode [合同号] NVARCHAR(100), -- OINV.NumAtCard [客户代码] NVARCHAR(50), -- OCRD.CardCode [客户分组] NVARCHAR(50), -- OCRD.U_CardGroup [业务员代码] INT, -- OSLP.SlpCode [业务员姓名] NVARCHAR(100), -- OSLP.SlpName [部门] NVARCHAR(50), -- OSLP.U_department [交货日期] DATE, -- ODLN.DocDate [理论最晚收款日期] DATE, [收款天数] INT, [得分] INT ); WITH SDTB AS ( SELECT T1.TaxDate, T1.SupplCode AS ORCTSupplCode, T2.DocDate AS OINVDocDate, T2.SupplCode AS OINVSupplCode, T2.NumAtCard, T2.CardCode, D1.U_CardGroup, T2.SlpCode, P1.SlpName, P1.U_department, odln.DocDate AS ODLNDate, CASE WHEN D1.U_CardGroup IN ('工业客户', '医院客户', '政府客户') THEN DATEADD(DAY, 180, COALESCE(odln.DocDate, T2.DocDate)) ELSE DATEADD(DAY, 90, COALESCE(odln.DocDate, T2.DocDate)) END AS DueDate, ROW_NUMBER() OVER (PARTITION BY T2.DocEntry ORDER BY T1.TaxDate DESC) AS PR FROM OITR R0 INNER JOIN ITR1 R1 ON R1.ReconNum = R0.ReconNum AND R0.Canceled = 'N' INNER JOIN ORCT T1 ON T1.DocEntry = R1.SrcObjAbs AND T1.ObjType = R1.SrcObjTyp AND T1.Canceled = 'N' INNER JOIN ITR1 R2 ON R2.ReconNum = R0.ReconNum INNER JOIN OINV T2 ON T2.DocEntry = R2.SrcObjAbs AND T2.ObjType = R2.SrcObjTyp AND T2.Canceled = 'N' INNER JOIN OCRD D1 ON T2.CardCode = D1.CardCode INNER JOIN OSLP P1 ON T2.SlpCode = P1.SlpCode AND P1.U_Department IN ('上海办','生命科学部','工业部','天津办','基础科研部','沈阳办','烟台办','广州办','成都办','商务部') LEFT JOIN INV1 ON INV1.DocEntry = T2.DocEntry LEFT JOIN DLN1 ON DLN1.DocEntry = INV1.BaseEntry AND DLN1.LineNum = INV1.BaseLine AND DLN1.ObjType = INV1.BaseType LEFT JOIN ODLN ON DLN1.DocEntry = ODLN.DocEntry WHERE T2.DocTotal = T2.PaidToDate AND T2.DocDate >= '2021-01-01' ) INSERT INTO #PDTB ( [实际收款日期], [收款补充代码], [应收过账日期], [应收补充代码], [合同号], [客户代码], [客户分组], [业务员代码], [业务员姓名], [部门], [交货日期], [理论最晚收款日期], [收款天数], [得分] ) SELECT TaxDate AS [实际收款日期], ORCTSupplCode AS [收款补充代码], OINVDocDate AS [应收过账日期], OINVSupplCode AS [应收补充代码], NumAtCard AS [合同号], CardCode AS [客户代码], U_CardGroup AS [客户分组], SlpCode AS [业务员代码], SlpName AS [业务员姓名], U_department AS [部门], ODLNDate AS [交货日期], DueDate AS [理论最晚收款日期], DATEDIFF(DAY, DueDate, TaxDate) AS [收款天数], CASE WHEN DATEDIFF(DAY, DueDate, TaxDate) <= 0 THEN 5 WHEN DATEDIFF(DAY, DueDate, TaxDate) BETWEEN 1 AND 15 THEN 4 WHEN DATEDIFF(DAY, DueDate, TaxDate) BETWEEN 16 AND 30 THEN 3 WHEN DATEDIFF(DAY, DueDate, TaxDate) BETWEEN 31 AND 45 THEN 2 WHEN DATEDIFF(DAY, DueDate, TaxDate) BETWEEN 46 AND 60 THEN 1 ELSE 0 END AS [得分] FROM SDTB WHERE PR = 1; SELECT * FROM #PDTB; SELECT [业务员代码], [业务员姓名], [部门], COUNT(*) AS [总笔数], AVG([得分] * 1.0) AS [平均得分], SUM(CASE WHEN [收款天数] <= 0 THEN 1 ELSE 0 END) AS [按时回款笔数], SUM(CASE WHEN [收款天数] BETWEEN 1 AND 15 THEN 1 ELSE 0 END) AS [延迟1-15天], SUM(CASE WHEN [收款天数] BETWEEN 16 AND 30 THEN 1 ELSE 0 END) AS [延迟16-30天], SUM(CASE WHEN [收款天数] BETWEEN 31 AND 45 THEN 1 ELSE 0 END) AS [延迟31-45天], SUM(CASE WHEN [收款天数] BETWEEN 46 AND 60 THEN 1 ELSE 0 END) AS [延迟46-60天], SUM(CASE WHEN [收款天数] >= 61 THEN 1 ELSE 0 END) AS [延迟61天及以上] FROM #PDTB GROUP BY [业务员代码], [业务员姓名], [部门] ORDER BY [平均得分] DESC; DROP TABLE #PDTB; 这个代码针对一笔应收对应多笔收款的时候是怎么处理的
09-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值