BizCollectionMapper.xml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="cn.ezhizao.project.business.collection.mapper.BizCollectionMapper">
  4. <!-- 基础的返回map 多表复杂的 自行组合 -->
  5. <resultMap id="BaseResultMap" type="cn.ezhizao.project.business.collection.domain.BizCollection">
  6. </resultMap>
  7. <!--带条件的List查询-->
  8. <select id="getList" resultMap="BaseResultMap">
  9. <include refid="getListSql"/>
  10. order by create_time desc
  11. </select>
  12. <!--带条件的List查询 数据总条数-->
  13. <select id="getTotal" resultType="java.lang.Integer">
  14. SELECT COUNT(1) FROM (<include refid="getListSql"/>) AS C
  15. </select>
  16. <select id="statistics" resultType="resStatisticsVo">
  17. SELECT
  18. tt1.actually_date,
  19. tt1.company_id as companyId,
  20. tt1.name as companyName,
  21. tt1.task_type_id as taskTypeId,
  22. tt1.typeName,
  23. tt1.contract_id as contractId,
  24. tt1.contract_no as contractNo,
  25. tt1.daozhangriqi as receiptDate,
  26. tt1.tishoukuanjine as withdrawalAmount,
  27. tt1.hetongleixing as contractType,
  28. tt1.shenqingren as applierName,
  29. tt1.shifouweixiangmu as isProject,
  30. tt1.fuwujine as detailAllAmount,
  31. tt1.shishoujine as reallyDetailAmount,
  32. tt1.daishoukuanjine as waitDetailAmount,
  33. tt1.shenheshijian as examineTime,
  34. tt1.verifyName,
  35. tt1.actually_date,
  36. tt2.zhichu as outAmount,
  37. tt1.input_start_month as inputStartMonth,
  38. tt1.input_end_month as inputEndMonth,
  39. tt1.service_num + tt1.free_num as serviceNum,
  40. tt1.projectName as projectName
  41. FROM
  42. (
  43. SELECT
  44. inputdetail.input_start_month,
  45. inputdetail.input_end_month,
  46. inputdetail.free_num,
  47. inputdetail.service_num,
  48. GROUP_CONCAT(DISTINCT c.project_name) as projectName,
  49. c.company_id,
  50. GROUP_CONCAT( DISTINCT date_format( c.actually_date, '%Y-%m-%d' )) AS actually_date,
  51. com.NAME,
  52. detail.task_type_id,
  53. GROUP_CONCAT( DISTINCT u2.nick_name ) AS verifyName,
  54. type.`name` as typeName,
  55. c.contract_id,
  56. input.contract_no,
  57. GROUP_CONCAT(DISTINCT if( c.arrive_date = '0000-00-00 00:00:00.000000',null,date_format(c.arrive_date,'%Y-%m-%d'))) AS daozhangriqi,
  58. SUM( detail.arrive_amount ) AS tishoukuanjine,
  59. GROUP_CONCAT( DISTINCT u.nick_name ) AS shenqingren,
  60. GROUP_CONCAT( DISTINCT c.project_name ) AS project_name,
  61. CASE
  62. WHEN input.contract_type = 1 THEN
  63. "续签" ELSE "新签"
  64. END AS hetongleixing,
  65. CASE
  66. WHEN c.is_project = 0 THEN '项目'
  67. WHEN c.is_project = 1 THEN '非项目'
  68. ELSE ''
  69. END AS shifouweixiangmu,
  70. detail.amount AS fuwujine,
  71. SUM( CASE WHEN c.STATUS = 1 THEN detail.arrive_amount ELSE 0 END ) AS shishoujine,
  72. (
  73. detail.amount - SUM( CASE WHEN c.STATUS = 1 THEN detail.arrive_amount ELSE 0 END )) AS
  74. daishoukuanjine,
  75. GROUP_CONCAT(
  76. IF
  77. ( c.STATUS = 1, c.verify_date, NULL )) AS shenheshijian
  78. FROM
  79. biz_collection c
  80. LEFT JOIN biz_collection_detail detail ON c.id = detail.collection_id
  81. LEFT JOIN biz_company com ON com.id = c.company_id
  82. LEFT JOIN biz_archive_input input ON input.id = c.contract_id
  83. LEFT JOIN sys_user u ON u.user_id = c.applier_id
  84. LEFT JOIN biz_task_type type on type.id = detail.task_type_id
  85. LEFT JOIN sys_user u2 on u2.user_id = c.verify_id
  86. left join biz_archive_input_detail inputdetail on c.contract_id = inputdetail.contract_id and detail.task_type_id = inputdetail.task_type_id
  87. WHERE
  88. c.deleted = 0
  89. AND c.STATUS = 1
  90. AND com.tenant_id = #{conditions.tenantId}
  91. <if test="conditions.companyName != null and conditions.companyName != ''">
  92. AND com.NAME LIKE CONCAT('%',#{conditions.companyName},'%')
  93. </if>
  94. <if test="conditions.projectName != null and conditions.projectName != ''">
  95. AND c.project_name LIKE CONCAT('%',#{conditions.projectName},'%')
  96. </if>
  97. <if test="conditions.examineName != null and conditions.examineName != ''">
  98. AND u2.nick_name LIKE CONCAT('%',#{conditions.examineName},'%')
  99. </if>
  100. <if test="conditions.contractNo != null and conditions.contractNo != ''">
  101. AND input.contract_no LIKE CONCAT('%',#{conditions.contractNo},'%')
  102. </if>
  103. <if test="conditions.taskTypeIds != null and conditions.taskTypeIds.size() &gt; 0">
  104. AND detail.task_type_id IN
  105. <foreach collection="conditions.taskTypeIds" index="index" item="item" open="(" separator="," close=")">
  106. #{item}
  107. </foreach>
  108. </if>
  109. <if test="conditions.receiptDateFilter != null and conditions.receiptDateFilter.size() ">
  110. AND (
  111. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &gt;= #{conditions.receiptDateFilter[0]}
  112. AND
  113. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &lt;= #{conditions.receiptDateFilter[1]}
  114. )
  115. </if>
  116. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() ">
  117. AND(
  118. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  119. AND
  120. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  121. )
  122. </if>
  123. <if test="conditions.actuallyDateFilter != null and conditions.actuallyDateFilter.size() ">
  124. AND(
  125. DATE_FORMAT(c.actually_date,'%Y-%m-%d') &gt;= #{conditions.actuallyDateFilter[0]}
  126. AND
  127. DATE_FORMAT(c.actually_date,'%Y-%m-%d') &lt;= #{conditions.actuallyDateFilter[1]}
  128. )
  129. </if>
  130. <if test="conditions.isProject != null">
  131. AND c.is_project = #{conditions.isProject}
  132. </if>
  133. <if test="conditions.isNew != null">
  134. AND c.is_new = #{conditions.isNew}
  135. </if>
  136. GROUP BY
  137. c.company_id,
  138. detail.task_type_id,
  139. c.contract_id
  140. order by
  141. c.create_time desc
  142. ) tt1
  143. LEFT JOIN (
  144. SELECT
  145. t1.company_id,
  146. t3.task_type_id,
  147. t1.contract_id,
  148. SUM( CASE WHEN t1.payment_status = 1 THEN t3.payment_amount ELSE 0 END ) zhichu
  149. FROM
  150. biz_payment t1
  151. LEFT JOIN biz_archive_input t2 ON t1.contract_id = t2.id
  152. LEFT JOIN biz_payment_detail t3 ON t1.id = t3.payment_id
  153. left join biz_company com on com.id = t1.company_id
  154. left join biz_archive_input input on input.id = t1.contract_id
  155. WHERE
  156. t1.deleted = 0
  157. AND t1.payment_status = 1
  158. AND t1.verify_status = 3
  159. AND com.tenant_id = #{conditions.tenantId}
  160. <if test="conditions.companyName != null and conditions.companyName != ''">
  161. AND com.NAME LIKE CONCAT('%',#{conditions.companyName},'%')
  162. </if>
  163. <if test="conditions.contractNo != null and conditions.contractNo != ''">
  164. AND input.contract_no LIKE CONCAT('%',#{conditions.contractNo},'%')
  165. </if>
  166. <if test="conditions.taskTypeIds != null and conditions.taskTypeIds.size() &gt; 0">
  167. AND t3.task_type_id IN
  168. <foreach collection="conditions.taskTypeIds" index="index" item="item" open="(" separator="," close=")">
  169. #{item}
  170. </foreach>
  171. </if>
  172. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  173. AND (
  174. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  175. AND
  176. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  177. )
  178. </if>
  179. GROUP BY
  180. t1.company_id,
  181. t3.task_type_id,
  182. t1.contract_id
  183. ) tt2 ON tt1.company_id = tt2.company_id
  184. AND tt1.task_type_id = tt2.task_type_id
  185. AND tt1.contract_id = tt2.contract_id
  186. </select>
  187. <select id="getByContractIn" resultType="cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo">
  188. SELECT
  189. t3.NAME AS companyName,
  190. t4.`name` AS taskTypeName,
  191. t5.contract_no AS contractNo,
  192. t1.arrive_date,
  193. t6.nick_name,
  194. CASE
  195. WHEN t5.contract_type = 1 THEN "续签" ELSE "新签"
  196. END AS contractType,
  197. CASE
  198. WHEN t1.is_project = 0 THEN '项目'
  199. WHEN t1.is_project = 1 THEN '非项目'
  200. ELSE ''
  201. END AS isProject,
  202. t2.amount AS detailAllAmount,
  203. CASE WHEN t1.STATUS = 1 THEN t2.arrive_amount ELSE 0 END AS reallyDetailAmount,
  204. t1.verify_date as examineTime,
  205. t1.applier_id,
  206. t6.nick_name AS applierName,
  207. t2.task_type_id,
  208. t7.name as typeName,
  209. t8.nick_name AS verifyName,
  210. t1.actually_date,
  211. if(t1.arrive_date='0000-00-00 00:00:00.000000',null,DATE_FORMAT(t1.arrive_date,'%Y-%m-%d')) as receiptDate
  212. FROM
  213. biz_collection t1 right join biz_collection_detail t2 ON t1.id = t2.collection_id
  214. LEFT JOIN biz_company t3 ON t3.id = t1.company_id
  215. LEFT JOIN biz_task_type t4 ON t4.id = t2.task_type_id
  216. LEFT JOIN biz_archive_input t5 ON t5.id = t1.contract_id
  217. LEFT JOIN sys_user t6 ON t6.user_id = t1.applier_id
  218. LEFT JOIN biz_task_type t7 on t7.id = t2.task_type_id
  219. left join sys_user t8 on t8.user_id = t1.verify_id
  220. WHERE
  221. t1.deleted = 0 and
  222. t1.contract_id = #{conditions.contractId}
  223. AND
  224. t2.task_type_id = #{conditions.taskTypeIds[0]}
  225. <if test="conditions.receiptDateFilter != null and conditions.receiptDateFilter.size() &gt; 0 ">
  226. AND (
  227. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &gt;= #{conditions.receiptDateFilter[0]}
  228. AND
  229. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &lt;= #{conditions.receiptDateFilter[1]}
  230. )
  231. </if>
  232. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  233. AND(
  234. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  235. AND
  236. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  237. )
  238. </if>
  239. </select>
  240. <select id="getByContractOut"
  241. resultType="cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo">
  242. select tt1.*, tt2.zongjine as withdrawalAmount
  243. from (SELECT t3.NAME AS companyName,
  244. t4.`name` AS taskTypeName,
  245. t5.contract_no AS contractNo,
  246. t6.nick_name,
  247. t2.amount AS detailAllAmount,
  248. t2.payment_amount AS reallyDetailAmount,
  249. t1.verify_date AS examineTime,
  250. t2.task_type_id,
  251. t1.company_id,
  252. t1.contract_id,
  253. t1.applier_id,
  254. t7.name as typeName,
  255. t6.nick_name AS applierName
  256. FROM biz_payment t1
  257. RIGHT JOIN biz_payment_detail t2 ON t1.id = t2.payment_id
  258. LEFT JOIN biz_company t3 ON t3.id = t1.company_id
  259. LEFT JOIN biz_task_type t4 ON t4.id = t2.task_type_id
  260. LEFT JOIN biz_archive_input t5 ON t5.id = t1.contract_id
  261. LEFT JOIN sys_user t6 ON t6.user_id = t1.applier_id
  262. LEFT JOIN biz_task_type t7 on t7.id = t2.task_type_id
  263. WHERE t1.contract_id = #{conditions.contractId}
  264. AND t2.task_type_id = #{conditions.taskTypeIds[0]}
  265. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  266. AND (
  267. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  268. AND
  269. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  270. )
  271. </if>
  272. ORDER BY t1.verify_date DESC
  273. ) tt1
  274. LEFT JOIN
  275. (SELECT p.company_id,
  276. de.task_type_id,
  277. p.contract_id,
  278. sum(de.payment_amount) as zongjine
  279. FROM biz_payment p
  280. right join biz_payment_detail de ON p.id = de.payment_id
  281. WHERE p.verify_status != 4 and p.verify_status != 2
  282. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  283. AND (
  284. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  285. AND
  286. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  287. )
  288. </if>
  289. GROUP BY
  290. p.company_id,
  291. de.task_type_id,
  292. p.contract_id) tt2 on tt1.task_type_id = tt2.task_type_id and tt1.company_id = tt2.company_id and
  293. tt1.contract_id = tt2.contract_id
  294. </select>
  295. <sql id="getListSql">
  296. SELECT
  297. ai.boss,ai.party,
  298. a.id, a.flow_no, a.subsidiary_id, a.subsidiary, a.subsidiary_name, a.subsidiary_bank_account, a.form_date
  299. , a.subsidiary_bank_name, a.company_id, b.name as company_name
  300. , a.is_new, a.is_project, a.project_name, a.project_no, a.project_main_name
  301. , a.amount
  302. , a.verify_status
  303. , a.arrive_amount
  304. , a.arrive_date
  305. , a.arrive_time, a.status, a.applier_id, a.verify_date, a.verify_comment
  306. , a.arrive_status, a.apply_name
  307. , a.appy_account, a.create_time, a.creator_id, a.update_time, a.updater_id
  308. , a.deleted, a.version, a.remark
  309. , a.actually_date
  310. , b.name as company_name, t5.nick_name as applier_name
  311. , ai.contract_no
  312. , (select ifnull(sum(amount), 0) from biz_collection col where col.contract_id = a.contract_id and col.status =
  313. 1) payment_amount
  314. FROM biz_collection a left join biz_company b on b.id = a.company_id
  315. left join biz_archive_input ai on ai.id = a.contract_id
  316. left join sys_user t5 on t5.user_id = a.applier_id
  317. <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
  318. a.deleted = 0 AND
  319. <if test="id != null ">
  320. a.id = #{id} AND
  321. </if>
  322. <if test="tenantId != null">
  323. a.tenant_id = #{tenantId} AND
  324. </if>
  325. <if test="contractId != null">
  326. a.contract_id = #{contractId} AND
  327. </if>
  328. <if test="contractNo != null and contractNo != ''">
  329. ai.contract_no LIKE CONCAT('%',#{contractNo},'%') AND
  330. </if>
  331. <if test="flowNo != null and formNo != '' ">
  332. a.flow_no LIKE CONCAT('%',#{flowNo},'%') AND
  333. </if>
  334. <if test="subsidiaryId != null">
  335. a.subsidiary_id = #{subsidiaryId} AND
  336. </if>
  337. <if test="subsidiary != null and subsidiary != '' ">
  338. a.subsidiary = #{subsidiary} AND
  339. </if>
  340. <if test="subsidiaryName != null and subsidiaryName != '' ">
  341. a.subsidiary_name LIKE CONCAT('%',#{subsidiaryName},'%') AND
  342. </if>
  343. <if test="subsidiaryBankAccount != null and subsidiaryBankAccount != ''">
  344. a.subsidiary_bank_account = #{subsidiaryBankAccount} AND
  345. </if>
  346. <if test="subsidiaryBankName != null and subsidiaryBankName != ''">
  347. a.subsidiary_bank_name = #{subsidiaryBankName} AND
  348. </if>
  349. <if test="companyId != null">
  350. a.company_id = #{companyId} AND
  351. </if>
  352. <if test="companyName != null and companyName != '' ">
  353. (LOCATE(#{companyName}, a.company_name) or LOCATE(#{companyName}, b.name)) AND
  354. </if>
  355. <if test="applierName != null and applierName != '' ">
  356. LOCATE(#{applierName}, t5.nick_name) AND
  357. </if>
  358. <if test="amount != null ">
  359. a.amount = #{amount} AND
  360. </if>
  361. <if test="arriveDate != null ">
  362. a.arrive_date = #{arriveDate} AND
  363. </if>
  364. <if test="actuallyDate != null">
  365. DATE_FORMAT(a.actually_date, '%Y-%m-%d') = #{actuallyDate} AND
  366. </if>
  367. <if test="startDate != null and endDate != null">
  368. (
  369. DATE_FORMAT(a.arrive_date,'%Y-%m-%d') &gt;= #{startDate}
  370. AND
  371. DATE_FORMAT(a.arrive_date,'%Y-%m-%d') &lt;= #{endDate}
  372. ) AND
  373. </if>
  374. <if test="dateFilter != null">
  375. (
  376. DATE_FORMAT(a.verify_date,'%Y-%m-%d') &gt;= #{dateFilter[0]}
  377. AND
  378. DATE_FORMAT(a.verify_date,'%Y-%m-%d') &lt;= #{dateFilter[1]}
  379. ) AND
  380. </if>
  381. <if test="arriveTime != null and arriveTime != '' ">
  382. a.arrive_time = #{arriveTime} AND
  383. </if>
  384. <if test="status != null">
  385. a.status = #{status} AND
  386. </if>
  387. <if test="arriveStatus != null">
  388. a.arrive_status = #{arriveStatus} AND
  389. </if>
  390. <if test="applyName != null and applyName != '' ">
  391. a.apply_name = #{applyName} AND
  392. </if>
  393. <if test="appyAccount != null and appyAccount != '' ">
  394. a.appy_account = #{appyAccount} AND
  395. </if>
  396. <if test="verifyDate != null">
  397. a.verify_date = #{verifyDate}
  398. </if>
  399. <if test="remark != null and remark != '' ">
  400. a.remark = #{remark} AND
  401. </if>
  402. <if test="boss != null and boss != '' ">
  403. ai.boss LIKE CONCAT('%', #{boss},'%') AND
  404. </if>
  405. <if test="party != null and party != '' ">
  406. ai.party LIKE CONCAT('%', #{party},'%') AND
  407. </if>
  408. </trim>
  409. </sql>
  410. </mapper>