BizCollectionMapper.xml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  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. date_format(tt1.daozhangriqi, '%Y-%m-%d') 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 arrive_date ) 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. 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.contract_id = #{conditions.contractId}
  222. AND
  223. t2.task_type_id = #{conditions.taskTypeIds[0]}
  224. <if test="conditions.receiptDateFilter != null and conditions.receiptDateFilter.size() &gt; 0 ">
  225. AND (
  226. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &gt;= #{conditions.receiptDateFilter[0]}
  227. AND
  228. DATE_FORMAT(c.arrive_date,'%Y-%m-%d') &lt;= #{conditions.receiptDateFilter[1]}
  229. )
  230. </if>
  231. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  232. AND(
  233. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  234. AND
  235. DATE_FORMAT(c.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  236. )
  237. </if>
  238. </select>
  239. <select id="getByContractOut"
  240. resultType="cn.ezhizao.project.business.collection.domain.vo.ResStatisticsVo">
  241. select tt1.*, tt2.zongjine as withdrawalAmount
  242. from (SELECT t3.NAME AS companyName,
  243. t4.`name` AS taskTypeName,
  244. t5.contract_no AS contractNo,
  245. t6.nick_name,
  246. t2.amount AS detailAllAmount,
  247. t2.payment_amount AS reallyDetailAmount,
  248. t1.verify_date AS examineTime,
  249. t2.task_type_id,
  250. t1.company_id,
  251. t1.contract_id,
  252. t1.applier_id,
  253. t7.name as typeName,
  254. t6.nick_name AS applierName
  255. FROM biz_payment t1
  256. RIGHT JOIN biz_payment_detail t2 ON t1.id = t2.payment_id
  257. LEFT JOIN biz_company t3 ON t3.id = t1.company_id
  258. LEFT JOIN biz_task_type t4 ON t4.id = t2.task_type_id
  259. LEFT JOIN biz_archive_input t5 ON t5.id = t1.contract_id
  260. LEFT JOIN sys_user t6 ON t6.user_id = t1.applier_id
  261. LEFT JOIN biz_task_type t7 on t7.id = t2.task_type_id
  262. WHERE t1.contract_id = #{conditions.contractId}
  263. AND t2.task_type_id = #{conditions.taskTypeIds[0]}
  264. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  265. AND (
  266. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  267. AND
  268. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  269. )
  270. </if>
  271. ORDER BY t1.verify_date DESC
  272. ) tt1
  273. LEFT JOIN
  274. (SELECT p.company_id,
  275. de.task_type_id,
  276. p.contract_id,
  277. sum(de.payment_amount) as zongjine
  278. FROM biz_payment p
  279. right join biz_payment_detail de ON p.id = de.payment_id
  280. WHERE p.verify_status != 4
  281. <if test="conditions.examineTimeFilter != null and conditions.examineTimeFilter.size() &gt; 0 ">
  282. AND (
  283. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &gt;= #{conditions.examineTimeFilter[0]}
  284. AND
  285. DATE_FORMAT(t1.verify_date,'%Y-%m-%d') &lt;= #{conditions.examineTimeFilter[1]}
  286. )
  287. </if>
  288. GROUP BY
  289. p.company_id,
  290. de.task_type_id,
  291. p.contract_id) tt2 on tt1.task_type_id = tt2.task_type_id and tt1.company_id = tt2.company_id and
  292. tt1.contract_id = tt2.contract_id
  293. </select>
  294. <sql id="getListSql">
  295. SELECT
  296. ai.boss,ai.party,
  297. a.id, a.flow_no, a.subsidiary_id, a.subsidiary, a.subsidiary_name, a.subsidiary_bank_account, a.form_date, a.contract_id
  298. , a.subsidiary_bank_name, a.company_id, b.name as company_name
  299. , a.is_new, a.is_project, a.project_name, a.project_no, a.project_main_name
  300. , a.amount
  301. , a.verify_status
  302. , a.arrive_amount
  303. , a.arrive_date
  304. , a.arrive_time, a.status, a.applier_id, a.verify_date, a.verify_comment
  305. , a.arrive_status, a.apply_name
  306. , a.appy_account, a.create_time, a.creator_id, a.update_time, a.updater_id
  307. , a.deleted, a.version, a.remark
  308. , a.actually_date
  309. , b.name as company_name, t5.nick_name as applier_name
  310. , ai.contract_no
  311. , (select ifnull(sum(amount), 0) from biz_collection col where col.contract_id = a.contract_id and col.status =
  312. 1) payment_amount
  313. FROM biz_collection a left join biz_company b on b.id = a.company_id
  314. left join biz_archive_input ai on ai.id = a.contract_id
  315. left join sys_user t5 on t5.user_id = a.applier_id
  316. <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
  317. a.deleted = 0 AND
  318. <if test="id != null ">
  319. a.id = #{id} AND
  320. </if>
  321. <if test="tenantId != null">
  322. a.tenant_id = #{tenantId} AND
  323. </if>
  324. <if test="contractId != null">
  325. a.contract_id = #{contractId} AND
  326. </if>
  327. <if test="contractNo != null and contractNo != ''">
  328. ai.contract_no LIKE CONCAT('%',#{contractNo},'%') AND
  329. </if>
  330. <if test="flowNo != null and formNo != '' ">
  331. a.flow_no LIKE CONCAT('%',#{flowNo},'%') AND
  332. </if>
  333. <if test="subsidiaryId != null">
  334. a.subsidiary_id = #{subsidiaryId} AND
  335. </if>
  336. <if test="subsidiary != null and subsidiary != '' ">
  337. a.subsidiary = #{subsidiary} AND
  338. </if>
  339. <if test="subsidiaryName != null and subsidiaryName != '' ">
  340. a.subsidiary_name LIKE CONCAT('%',#{subsidiaryName},'%') AND
  341. </if>
  342. <if test="subsidiaryBankAccount != null and subsidiaryBankAccount != ''">
  343. a.subsidiary_bank_account = #{subsidiaryBankAccount} AND
  344. </if>
  345. <if test="subsidiaryBankName != null and subsidiaryBankName != ''">
  346. a.subsidiary_bank_name = #{subsidiaryBankName} AND
  347. </if>
  348. <if test="companyId != null">
  349. a.company_id = #{companyId} AND
  350. </if>
  351. <if test="companyName != null and companyName != '' ">
  352. (LOCATE(#{companyName}, a.company_name) or LOCATE(#{companyName}, b.name)) AND
  353. </if>
  354. <if test="applierName != null and applierName != '' ">
  355. LOCATE(#{applierName}, t5.nick_name) AND
  356. </if>
  357. <if test="arriveAmount != null">
  358. a.arrive_amount = #{arriveAmount} AND
  359. </if>
  360. <if test="amount != null ">
  361. a.amount = #{amount} AND
  362. </if>
  363. <if test="arriveDate != null ">
  364. a.arrive_date = #{arriveDate} AND
  365. </if>
  366. <if test="actuallyDate != null">
  367. DATE_FORMAT(a.actually_date, '%Y-%m-%d') = #{actuallyDate} AND
  368. </if>
  369. <if test="startDate != null and endDate != null">
  370. (
  371. DATE_FORMAT(a.arrive_date,'%Y-%m-%d') &gt;= #{startDate}
  372. AND
  373. DATE_FORMAT(a.arrive_date,'%Y-%m-%d') &lt;= #{endDate}
  374. ) AND
  375. </if>
  376. <if test="dateFilter != null">
  377. (
  378. DATE_FORMAT(a.verify_date,'%Y-%m-%d') &gt;= #{dateFilter[0]}
  379. AND
  380. DATE_FORMAT(a.verify_date,'%Y-%m-%d') &lt;= #{dateFilter[1]}
  381. ) AND
  382. </if>
  383. <if test="arriveTime != null and arriveTime != '' ">
  384. a.arrive_time = #{arriveTime} AND
  385. </if>
  386. <if test="status != null">
  387. a.status = #{status} AND
  388. </if>
  389. <if test="arriveStatus != null">
  390. a.arrive_status = #{arriveStatus} AND
  391. </if>
  392. <if test="applyName != null and applyName != '' ">
  393. a.apply_name = #{applyName} AND
  394. </if>
  395. <if test="appyAccount != null and appyAccount != '' ">
  396. a.appy_account = #{appyAccount} AND
  397. </if>
  398. <if test="verifyDate != null">
  399. a.verify_date = #{verifyDate}
  400. </if>
  401. <if test="remark != null and remark != '' ">
  402. a.remark = #{remark} AND
  403. </if>
  404. <if test="boss != null and boss != '' ">
  405. ai.boss LIKE CONCAT('%', #{boss},'%') AND
  406. </if>
  407. <if test="party != null and party != '' ">
  408. ai.party LIKE CONCAT('%', #{party},'%') AND
  409. </if>
  410. </trim>
  411. </sql>
  412. </mapper>