ContractMapper.xml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  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="com.fjhx.sale.mapper.contract.ContractMapper">
  4. <select id="getPage" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  5. SELECT *
  6. FROM (SELECT t1.*,
  7. IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) AS amountCNY,
  8. CASE
  9. WHEN (IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) - t1.sumClaimMoney) &lt;= 0 THEN
  10. 20
  11. WHEN t1.sumClaimMoney = 0 THEN
  12. 0
  13. ELSE 10
  14. END AS refundStatusNew
  15. FROM (SELECT t1.*,
  16. c.name customerName,
  17. us.nick_name salesmanName,
  18. (SELECT IFNULL(SUM(IFNULL(cc.money_cny, IFNULL(cc.money, 0) * IFNULL(arw.rate, 1))), 0)
  19. FROM claim_contract cc
  20. left join claim c on cc.claim_id = c.id
  21. LEFT JOIN bytesailing_account.account_running_water arw on c.business_id = arw.id
  22. WHERE cc.contract_id = t1.id) AS sumClaimMoney
  23. FROM contract t1
  24. left join bytesailing_customer.customer c on t1.buy_corporation_id = c.id
  25. left join bytesailing_base.sys_user us on c.user_id = us.user_id) t1) t1
  26. ${ew.customSqlSegment}
  27. </select>
  28. <select id="getHeadStatistic" resultType="java.util.Map">
  29. SELECT
  30. IFNULL( SUM( t1.amountCNY ), 0 ) AS sumAmount,
  31. IFNULL( SUM( sumClaimMoney ), 0 ) AS sumClaimMoney,
  32. count( 1 ) AS `count`,
  33. GROUP_CONCAT( DISTINCT t1.buy_corporation_id ) AS customerList
  34. FROM
  35. (SELECT t1.*,
  36. IFNULL(t1.amount, 0) * IFNULL(t1.rate, 0) AS amountCNY,
  37. CASE
  38. WHEN ( IFNULL( t1.amount, 0 ) * IFNULL( t1.rate, 0 ) - t1.sumClaimMoney ) &lt;= 0 THEN
  39. 20
  40. WHEN t1.sumClaimMoney = 0 THEN
  41. 0
  42. ELSE 10
  43. END AS refundStatusNew
  44. FROM (SELECT t1.*,
  45. (SELECT IFNULL(SUM(IFNULL(cc.money, 0) * IFNULL(arw.rate, 1)), 0)
  46. FROM claim_contract cc
  47. left join claim c on cc.claim_id = c.id
  48. LEFT JOIN bytesailing_account.account_running_water arw on c.business_id = arw.id
  49. WHERE cc.contract_id = t1.id) AS sumClaimMoney,
  50. c.name customerName,
  51. us.nick_name salesmanName
  52. FROM contract t1
  53. left join bytesailing_customer.customer c on t1.buy_corporation_id = c.id
  54. left join bytesailing_base.sys_user us on c.user_id = us.user_id) t1) t1
  55. ${ew.customSqlSegment}
  56. </select>
  57. <select id="getProfitClearingPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
  58. SELECT t1.id AS contractId,
  59. us1.nick_name userName,
  60. t1.*
  61. FROM contract t1
  62. LEFT JOIN bytesailing_customer.customer cu on t1.buy_corporation_id = cu.id and cu.del_flag = 0
  63. LEFT JOIN bytesailing_base.sys_user us1 ON cu.user_id = us1.user_id and us1.del_flag = 0
  64. ${ew.customSqlSegment}
  65. </select>
  66. <select id="getProfitBudgetPage" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
  67. SELECT (select GROUP_CONCAT(id) from contract_product WHERE contract_id = t1.id) AS contractProductIds,
  68. t1.id AS contractId,
  69. t1.`code`,
  70. t1.buy_corporation_id,
  71. us1.nick_name userName,
  72. t1.amount,
  73. t1.currency,
  74. t1.currency_rate_json,
  75. t1.rate AS rate,
  76. t2.*,
  77. IFNULL(t1.budget_money, 0) AS budgetMoney,
  78. cu.name customerName
  79. FROM contract t1
  80. LEFT JOIN contract_budget t2 ON t1.id = t2.contract_id
  81. LEFT JOIN bytesailing_customer.customer cu on t1.buy_corporation_id = cu.id and cu.del_flag = 0
  82. LEFT JOIN bytesailing_base.sys_user us1 ON cu.user_id = us1.user_id and us1.del_flag = 0
  83. ${ew.customSqlSegment}
  84. </select>
  85. <select id="getProfitBudgetHeadStatistic" resultType="com.fjhx.sale.entity.contract.vo.ContractBudgetVo">
  86. SELECT t1.id AS contractId,
  87. t1.amount,
  88. t1.currency,
  89. t1.currency_rate_json,
  90. t1.rate AS rate,
  91. t2.*
  92. FROM contract t1
  93. LEFT JOIN contract_budget t2 ON t1.id = t2.contract_id
  94. LEFT JOIN bytesailing_customer.customer cu on t1.buy_corporation_id = cu.id and cu.del_flag = 0
  95. LEFT JOIN bytesailing_base.sys_user us1 ON cu.user_id = us1.user_id and us1.del_flag = 0
  96. ${ew.customSqlSegment}
  97. </select>
  98. <select id="getNoPackContractByCustomerId" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  99. SELECT
  100. *
  101. FROM
  102. (
  103. SELECT
  104. t1.*,
  105. t2.quantity AS cpQuantity,
  106. ( SELECT IFNULL( SUM( pd.pack_quantity * pdd.quantity ), 0 ) FROM pack_detail_product pdd LEFT JOIN pack_detail
  107. pd ON pdd.pack_detail_id = pd.id WHERE pdd.contract_product_id = t2.id ) AS sumPackQuantity
  108. FROM
  109. contract t1
  110. LEFT JOIN contract_product t2 ON t1.id = t2.contract_id
  111. <where>
  112. <if test="customerId neq null and customerId neq '' ">
  113. buy_corporation_id = #{customerId}
  114. </if>
  115. </where>
  116. ) t1
  117. WHERE t1.sumPackQuantity &lt; t1.cpQuantity
  118. AND t1.`status`=30
  119. GROUP BY t1.id
  120. </select>
  121. <select id="getSalesTotal" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  122. SELECT
  123. SUM( amount ) AS sumAmount,
  124. SUM( contractCount ) AS contractCount
  125. FROM
  126. (
  127. SELECT
  128. SUM( amount * rate ) amount,
  129. count(*) contractCount
  130. FROM
  131. contract
  132. WHERE
  133. buy_corporation_id = #{id}
  134. AND STATUS BETWEEN 0
  135. AND 87
  136. AND is_show != 1
  137. AND is_change = 0
  138. AND del_flag = 0
  139. GROUP BY
  140. buy_corporation_id UNION ALL
  141. SELECT
  142. SUM( amount * rate ) amount,
  143. count(*) contractCount
  144. FROM
  145. sample
  146. WHERE
  147. buy_corporation_id = #{id}
  148. AND STATUS BETWEEN 0
  149. AND 87
  150. AND is_show != 1
  151. AND is_change = 0
  152. AND del_flag = 0
  153. GROUP BY
  154. buy_corporation_id
  155. ) t1
  156. </select>
  157. <select id="getSalesTotalList" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  158. SELECT
  159. *
  160. FROM
  161. (
  162. SELECT
  163. currency,
  164. sell_corporation_id,
  165. id,
  166. "外销合同" AS type,
  167. create_time,
  168. create_user,
  169. `code`,
  170. buy_corporation_id,
  171. advance_ratio,
  172. amount,
  173. rate,
  174. amount * rate AS amountCNY,
  175. (
  176. SELECT
  177. IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
  178. FROM
  179. claim_contract cc
  180. LEFT JOIN claim c ON cc.claim_id = c.id
  181. LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
  182. WHERE
  183. cc.contract_id = t1.id
  184. ) AS sumClaimMoney
  185. FROM
  186. contract t1
  187. WHERE
  188. buy_corporation_id = #{id}
  189. AND STATUS BETWEEN 0
  190. AND 87
  191. AND is_show != 1
  192. AND is_change = 0
  193. AND del_flag = 0 UNION ALL
  194. SELECT
  195. currency,
  196. sell_corporation_id,
  197. id,
  198. "样品单" AS type,
  199. create_time,
  200. create_user,
  201. `code`,
  202. buy_corporation_id,
  203. advance_ratio,
  204. amount,
  205. rate,
  206. amount * rate AS amountCNY,
  207. (
  208. SELECT
  209. IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
  210. FROM
  211. claim_contract cc
  212. LEFT JOIN claim c ON cc.claim_id = c.id
  213. LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
  214. WHERE
  215. cc.contract_id = t1.id
  216. ) AS sumClaimMoney
  217. FROM
  218. sample t1
  219. WHERE
  220. buy_corporation_id = #{id}
  221. AND STATUS BETWEEN 0
  222. AND 87
  223. AND is_show != 1
  224. AND is_change = 0
  225. AND del_flag = 0
  226. ) t1
  227. </select>
  228. <select id="getAmount" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  229. SELECT
  230. SUM(amount) amount,
  231. DATE_FORMAT(create_time,'%Y-%m') time
  232. FROM
  233. contract
  234. WHERE
  235. buy_corporation_id = #{id}
  236. and (DATE_FORMAT(create_time,'%Y-%m') >= #{beginTime} and #{endTime} >= DATE_FORMAT(create_time,'%Y-%m'))
  237. GROUP BY
  238. TIME
  239. </select>
  240. <select id="contractStatistics" resultType="com.fjhx.sale.entity.sale.vo.SaleQuotationVo">
  241. SELECT
  242. COUNT(*) count,
  243. ifnull(c.`status`,-1) status,
  244. ifnull(DATE_FORMAT(sq.create_time,'%Y-%m'),-1) time
  245. FROM
  246. bytesailing_customer.customer c
  247. left JOIN contract sq ON sq.buy_corporation_id = c.id
  248. ${ew.customSqlSegment}
  249. </select>
  250. <select id="countrySalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
  251. SELECT
  252. sum(cc.amount) amount,
  253. COUNT(cc.buy_country_id) count,
  254. ai.name countryName
  255. FROM
  256. contract cc
  257. LEFT JOIN bytesailing_base.customize_area ai ON cc.buy_country_id = ai.id
  258. ${ew.customSqlSegment}
  259. </select>
  260. <select id="customSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
  261. SELECT
  262. sum(cc.amount) amount,
  263. bc.name corporationName
  264. FROM
  265. contract cc
  266. LEFT JOIN bytesailing_customer.customer bc ON cc.buy_corporation_id = bc.id
  267. ${ew.customSqlSegment}
  268. </select>
  269. <select id="salesmanSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
  270. SELECT
  271. SUM(cc.amount) amount,
  272. su.nick_name userName
  273. FROM
  274. contract cc
  275. LEFT JOIN bytesailing_base.sys_user su ON cc.create_user = su.user_id
  276. ${ew.customSqlSegment}
  277. </select>
  278. <select id="productSalesStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
  279. SELECT
  280. SUM(cp.amount) amount,
  281. pi.name productName
  282. FROM
  283. contract_product cp
  284. LEFT JOIN bytesailing_item.product_info pi ON cp.product_id = pi.id
  285. ${ew.customSqlSegment}
  286. </select>
  287. <select id="salesVolumeStatistics" resultType="com.fjhx.sale.entity.contract.dto.ContractDto">
  288. SELECT SUM(cp.quantity) quantity,
  289. pi.name productName
  290. FROM contract_product cp
  291. LEFT JOIN bytesailing_item.product_info pi ON cp.product_id = pi.id
  292. ${ew.customSqlSegment}
  293. </select>
  294. <select id="getAccountRunningWaterByContractId"
  295. resultType="com.fjhx.account.entity.account.vo.AccountRunningWaterVo">
  296. SELECT arw.id,
  297. arw.create_time,
  298. ap.type,
  299. arw.currency,
  300. pad.money amount,
  301. pad.remark remarks,
  302. am.`name` accountManagementName,
  303. am.account_opening accountManagementOpening,
  304. arw.`name`,
  305. arw.status
  306. FROM contract c
  307. JOIN bytesailing_purchase.purchase p ON p.data_resource_id = c.id AND p.del_flag = 0
  308. JOIN bytesailing_purchase.pay_detail `pad` ON pad.purchase_id = p.id AND pad.del_flag = 0
  309. JOIN bytesailing_purchase.pay pa ON pad.pay_id = pa.id AND pa.del_flag = 0
  310. JOIN bytesailing_account.account_payment ap ON ap.business_id = pa.id AND ap.del_flag = 0
  311. JOIN bytesailing_account.account_running_water arw ON arw.business_id = ap.id AND arw.del_flag = 0
  312. LEFT JOIN bytesailing_account.account_management am
  313. ON arw.account_management_id = am.id AND am.del_flag = 0
  314. WHERE c.id = #{contractId}
  315. UNION ALL
  316. SELECT arw.id,
  317. arw.create_time,
  318. ap.type,
  319. arw.currency,
  320. arfd.amount,
  321. arfd.remarks,
  322. am.`name` accountManagementName,
  323. am.account_opening accountManagementOpening,
  324. arw.`name`,
  325. arw.status
  326. FROM contract c
  327. JOIN bytesailing_account.account_request_funds_detail arfd
  328. ON arfd.contract_id = c.id AND arfd.del_flag = 0
  329. JOIN bytesailing_account.account_payment ap
  330. ON ap.business_id = arfd.account_request_funds_id AND ap.del_flag = 0
  331. JOIN bytesailing_account.account_running_water arw ON arw.business_id = ap.id AND arw.del_flag = 0
  332. LEFT JOIN bytesailing_account.account_management am
  333. ON arw.account_management_id = am.id AND am.del_flag = 0
  334. WHERE c.id = #{contractId}
  335. group by arfd.id
  336. UNION ALL
  337. SELECT arw.id,
  338. arw.create_time,
  339. 30 type,
  340. arw.currency,
  341. clc.money,
  342. arw.remarks,
  343. am.`name` accountManagementName,
  344. am.account_opening accountManagementOpening,
  345. arw.`name`,
  346. arw.status
  347. FROM bytesailing_account.account_running_water arw
  348. JOIN claim cl ON cl.business_id = arw.id
  349. JOIN claim_contract clc ON clc.claim_id = cl.id
  350. JOIN contract c ON clc.contract_id = c.id
  351. LEFT JOIN bytesailing_account.account_management am
  352. ON arw.account_management_id = am.id AND am.del_flag = 0
  353. WHERE arw.del_flag = 0
  354. AND c.id = #{contractId}
  355. </select>
  356. <select id="getContractAndSamplePagez" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  357. SELECT
  358. *
  359. FROM
  360. (
  361. SELECT
  362. t1.id,
  363. t1.sell_corporation_id,
  364. t1.contract_type,
  365. 1 AS dataType,
  366. t1.`code`,
  367. t1.buy_corporation_id,
  368. t1.version,
  369. t1.amount,
  370. t1.create_user,
  371. t1.create_time,
  372. t1.refund_status,
  373. t1.`status`,
  374. (
  375. SELECT
  376. IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
  377. FROM
  378. claim_contract cc
  379. LEFT JOIN claim c ON cc.claim_id = c.id
  380. LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
  381. WHERE
  382. cc.contract_id = t1.id
  383. ) AS sumClaimMoney
  384. FROM
  385. contract t1
  386. WHERE
  387. t1.`status` >= 30
  388. AND t1.`status` &lt; 88
  389. AND t1.is_show != 1
  390. AND t1.is_change = 0
  391. UNION
  392. SELECT
  393. t1.id,
  394. t1.sell_corporation_id,
  395. 3 AS contract_type,
  396. 2 AS dataType,
  397. t1.`code`,
  398. t1.buy_corporation_id,
  399. t1.versions AS version,
  400. t1.amount,
  401. t1.create_user,
  402. t1.create_time,
  403. IF
  404. ( sumClaimMoney >= t1.amount, 20, IF ( sumClaimMoney != 0, 10, 0 ) ) AS refund_status,
  405. t1.`status`,
  406. t1.sumClaimMoney
  407. FROM
  408. (
  409. SELECT
  410. t1.*,
  411. (
  412. SELECT
  413. IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
  414. FROM
  415. claim_contract cc
  416. LEFT JOIN claim c ON cc.claim_id = c.id
  417. LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
  418. WHERE
  419. cc.contract_id = t1.id
  420. ) AS sumClaimMoney
  421. FROM
  422. sample t1
  423. WHERE
  424. t1.`status` >= 30
  425. AND t1.`status` &lt; 88
  426. AND t1.is_show != 1
  427. AND t1.is_change = 0
  428. ) AS t1
  429. ) t1
  430. ${ew.customSqlSegment}
  431. </select>
  432. <update id="updateContract" parameterType="com.fjhx.sale.entity.contract.po.Contract">
  433. update contract
  434. <set>
  435. <if test="id != null">id = #{id},</if>
  436. <if test="status != null">status = #{status},</if>
  437. <if test="isChange != null">is_change = #{isChange},</if>
  438. <if test="isShow != null">is_show = #{isShow},</if>
  439. <if test="oldContractId != null">old_contract_id = #{oldContractId},</if>
  440. <if test="approvedDate != null">approved_date = DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s'),</if>
  441. update_time = sysdate()
  442. </set>
  443. where id = #{upId}
  444. </update>
  445. <select id="getExportCopyList" resultType="com.fjhx.sale.entity.contract.vo.ContractVo">
  446. SELECT * FROM (SELECT
  447. t1.*,
  448. CASE
  449. WHEN t1.purchaseAmountCNY &lt; t1.amountCNY AND t1.sumClaimMoney &lt; t1.amountCNY THEN 10
  450. WHEN t1.purchaseAmountCNY &lt; t1.amountCNY AND t1.sumClaimMoney >= t1.amountCNY THEN 20
  451. WHEN t1.purchaseAmountCNY >= t1.amountCNY AND t1.sumClaimMoney &lt; t1.amountCNY THEN 30
  452. WHEN t1.purchaseAmountCNY >= t1.amountCNY AND t1.sumClaimMoney >= t1.amountCNY THEN 40
  453. ELSE 88
  454. END AS orderStatus
  455. FROM
  456. (
  457. SELECT
  458. t1.*,
  459. IFNULL( t1.amount * t1.rate, 0 ) AS amountCNY,
  460. <if test="documentaryType neq null ">
  461. (SELECT count(1) FROM ehsd_purchase p LEFT JOIN ehsd_documentary pd ON p.id = pd.business_id WHERE p.data_resource_id = t1.id AND pd.documentary_type = #{documentaryType}) AS documentaryCount,
  462. </if>
  463. IFNULL(t1.advance_ratio,0)*IFNULL(t1.amount,0)/100 AS earnest,
  464. ( SELECT create_time FROM claim_contract WHERE contract_id = t1.id ORDER BY create_time ASC LIMIT 1) AS claimTime,
  465. ( SELECT count( 1 ) FROM ehsd_purchase WHERE `status` = 30 AND data_resource_id = t1.id ) AS purchaseCount,
  466. ( SELECT IFNULL(SUM(amount*rate),0) FROM ehsd_purchase WHERE `status` = 30 AND data_resource_id = t1.id) AS purchaseAmountCNY,
  467. ( SELECT count( 1 ) FROM pack_detail WHERE FIND_IN_SET( contract_ids, t1.id ) AND shipment_status = 1 ) AS packCount,
  468. (
  469. SELECT
  470. IFNULL( SUM( IFNULL( cc.money, 0 ) * IFNULL( arw.rate, 1 )), 0 )
  471. FROM
  472. claim_contract cc
  473. LEFT JOIN claim c ON cc.claim_id = c.id
  474. LEFT JOIN bytesailing_account.account_running_water arw ON c.business_id = arw.id
  475. WHERE
  476. cc.contract_id = t1.id
  477. ) AS sumClaimMoney
  478. FROM
  479. contract t1
  480. WHERE `status` = 30
  481. ) t1
  482. ) t1
  483. ${ew.customSqlSegment}
  484. </select>
  485. </mapper>