Bonus-Cloud-Houqin/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/v3/AccInfoMapper.xml

788 lines
32 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bonus.canteen.core.account.v3.mapper.AccInfoMapper">
<sql id="queryPageAccInfoWhereSql">
<where>
t1.acc_status in
<foreach collection="infoParam.accStatusList" item="accStatus" separator="," open="(" close=")">
#{accStatus}
</foreach>
<if test="infoParam.keyword != null and infoParam.keyword != ''">
<include refid="cust_fuzzy_query"></include>
</if>
<if test="infoParam.psnType != null">
and t2.psn_type = #{infoParam.psnType}
</if>
<if test="infoParam.custId != null">
and t2.cust_id = #{infoParam.custId}
</if>
<if test="infoParam.orgIdList != null and infoParam.orgIdList.size() > 0">
and t2.dept_id in
<foreach collection="infoParam.orgIdList" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>
<if test="infoParam.psnTypeList != null and infoParam.psnTypeList.size() > 0">
and t2.psn_type in
<foreach collection="infoParam.psnTypeList" item="psnType" separator="," open="(" close=")">
#{psnType}
</foreach>
</if>
<if test="infoParam.walletType != null and infoParam.walletMinAmount != null">
<if test="infoParam.walletType == 0">
and t4.accBalTotal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 1">
and t4.walletBal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 2">
and t4.subsidyBal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 4">
and t4.redEnvelope <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
</if>
<if test="infoParam.walletType != null and infoParam.walletMaxAmount != null">
<if test="infoParam.walletType == 0">
and t4.accBalTotal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 1">
and t4.walletBal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 2">
and t4.subsidyBal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 4">
and t4.redEnvelope <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
</if>
<if test="infoParam.startDateTime != null">
and t1.uptime <![CDATA[ >= ]]> #{infoParam.startDateTime}
</if>
<if test="infoParam.endDateTime != null">
and t1.uptime <![CDATA[ <= ]]> #{infoParam.endDateTime}
</if>
</where>
</sql>
<!-- &lt;!&ndash; 查询账户信息-list&ndash;&gt;-->
<!-- <select id="queryListAccInfo" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoPageVO">-->
<!-- SELECT-->
<!-- t1.uptime,-->
<!-- t1.acc_id,-->
<!-- t2.cust_id,-->
<!-- t2.cust_num,-->
<!-- t2.cust_name,-->
<!-- t2.mobile,-->
<!-- t6.org_full_name,-->
<!-- t2.psn_type,-->
<!-- t5.psn_type_name,-->
<!-- t1.scope,-->
<!-- t1.acc_status,-->
<!-- t1.end_date-->
<!-- FROM acc_info t1-->
<!-- INNER JOIN cust_info t2 ON t1.cust_id = t2.cust_id-->
<!-- LEFT JOIN cust_psn_type t5 on t5.psn_type = t2.psn_type-->
<!-- LEFT JOIN cust_org t6 on t6.org_id = t2.org_id-->
<!-- <include refid="queryPageAccInfoWhereSqlV2">-->
<!-- </include>-->
<!-- <choose>-->
<!-- <when test="infoParam.startDateTime != null or infoParam.endDateTime != null">-->
<!-- order by t1.uptime desc-->
<!-- </when>-->
<!-- <otherwise>-->
<!-- order by t2.id desc-->
<!-- </otherwise>-->
<!-- </choose>-->
<!-- </select>-->
<sql id="queryPageAccInfoWhereSqlV2">
<where>
t1.acc_status in
<foreach collection="infoParam.accStatusList" item="accStatus" separator="," open="(" close=")">
#{accStatus}
</foreach>
<if test="infoParam.keyword != null and infoParam.keyword != ''">
<include refid="cust_fuzzy_query"></include>
</if>
<if test="infoParam.psnType != null">
and t2.psn_type = #{infoParam.psnType}
</if>
<if test="infoParam.custId != null">
and t2.cust_id = #{infoParam.custId}
</if>
<if test="infoParam.orgIdList != null and infoParam.orgIdList.size() > 0">
and t2.org_id in
<foreach collection="infoParam.orgIdList" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>
<if test="infoParam.psnTypeList != null and infoParam.psnTypeList.size() > 0">
and t2.psn_type in
<foreach collection="infoParam.psnTypeList" item="psnType" separator="," open="(" close=")">
#{psnType}
</foreach>
</if>
<if test="infoParam.startDateTime != null">
and t1.uptime <![CDATA[ >= ]]> #{infoParam.startDateTime}
</if>
<if test="infoParam.endDateTime != null">
and t1.uptime <![CDATA[ <= ]]> #{infoParam.endDateTime}
</if>
<if test="infoParam.walletType != null">
AND EXISTS(
SELECT null FROM
(
SELECT
cust_id,
SUM( CASE WHEN wallet_id = 1 THEN wallet_bal ELSE 0 END ) AS walletBal,
SUM( CASE WHEN wallet_id = 2 THEN wallet_bal ELSE 0 END ) AS subsidyBal,
SUM( CASE WHEN wallet_id = 4 THEN wallet_bal ELSE 0 END ) AS redEnvelope,
SUM( a.wallet_bal ) + SUM( a.frozen_balance ) accBalTotal
FROM
acc_wallet_info a
GROUP BY
cust_id
) AS t4
<where>
t4.cust_id = t1.cust_id
<if test="infoParam.walletMinAmount != null">
<if test="infoParam.walletType == 0">
and t4.accBalTotal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 1">
and t4.walletBal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 2">
and t4.subsidyBal <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
<if test="infoParam.walletType == 4">
and t4.redEnvelope <![CDATA[ >= ]]> #{infoParam.walletMinAmount}
</if>
</if>
<if test="infoParam.walletMaxAmount != null">
<if test="infoParam.walletType == 0">
and t4.accBalTotal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 1">
and t4.walletBal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 2">
and t4.subsidyBal <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
<if test="infoParam.walletType == 4">
and t4.redEnvelope <![CDATA[ <= ]]> #{infoParam.walletMaxAmount}
</if>
</if>
</where>
)
</if>
</where>
</sql>
<!-- 分页查询账户信息-金额汇总数据-->
<select id="queryPageAccInfoSum" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoPageVO">
SELECT
SUM( t4.accBalTotal ) AS accBalTotal,
SUM( t4.walletBal ) AS walletBal,
SUM( t4.subsidyBal ) AS subsidyBal,
SUM( t4.redEnvelope ) AS redEnvelope,
SUM( t4.accFreezeBalTotal ) AS accFreezeBalTotal
FROM acc_info t1
INNER JOIN sys_user t2 ON t1.cust_id = t2.cust_id
LEFT JOIN
(
SELECT
cust_id,
SUM( CASE WHEN wallet_id = 1 THEN wallet_bal ELSE 0 END ) AS walletBal,
SUM( CASE WHEN wallet_id = 2 THEN wallet_bal ELSE 0 END ) AS subsidyBal,
SUM( CASE WHEN wallet_id = 4 THEN wallet_bal ELSE 0 END ) AS redEnvelope,
SUM( a.wallet_bal ) AS accAvailableBal,
SUM( a.frozen_balance ) AS accFreezeBalTotal,
SUM( a.wallet_bal ) + SUM( a.frozen_balance ) AS accBalTotal
FROM acc_wallet_info a
GROUP BY cust_id
) AS t4 ON t4.cust_id = t1.cust_id
<include refid="queryPageAccInfoWhereSql">
</include>
</select>
<!-- <select id="queryAccIdByParam" resultType="java.lang.Long">-->
<!-- SELECT t1.acc_id-->
<!-- FROM acc_info t1-->
<!-- LEFT JOIN cust_info t2 ON t1.cust_id = t2.cust_id-->
<!-- <include refid="queryPageAccInfoWhereSql">-->
<!-- </include>-->
<!-- </select>-->
<update id="updateStateByOverdue">
UPDATE acc_info
SET acc_status = #{changeStatus}
WHERE end_date <![CDATA[<]]> #{overdueDate}
AND acc_status in
<foreach collection="oldStatusList" item="accStatus" separator="," open="(" close=")">
#{accStatus}
</foreach>
</update>
<!-- <select id="listAccInfoVOByCustIdList" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoVO">-->
<!-- <include refid="base_acc_infoVO_sql">-->
<!-- </include>-->
<!-- WHERE ai.cust_id in-->
<!-- <foreach collection="custIdList" item="custId" separator="," open="(" close=")">-->
<!-- #{custId}-->
<!-- </foreach>-->
<!-- </select>-->
<!-- 查询存在冻结余额的账户列表-->
<select id="queryFrozenAccPage" resultType="com.bonus.canteen.core.account.v3.web.vo.AccExistFrozenListVO">
SELECT ai.cust_id,
t2.cust_num,
t2.nick_name as cust_name,
t2.phonenumber as mobile,
# t2.org_full_name,
t2.psn_type,
cpt.psn_type_name
FROM acc_info ai
INNER JOIN sys_user t2 ON t2.cust_id = ai.cust_id
LEFT JOIN cust_psn_type cpt ON cpt.psn_type = t2.psn_type
<where>
<if test="infoParam.custState != null">
t2.status = #{infoParam.custState}
</if>
<if test="infoParam.accStatus != null">
AND ai.acc_status = #{infoParam.accStatus}
</if>
<if test="infoParam.psnType != null">
AND t2.psn_type = #{infoParam.psnType}
</if>
<if test="infoParam.orgIdList != null and infoParam.orgIdList.size() > 0">
and t2.dept_id in
<foreach collection="infoParam.orgIdList" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>
<if test="infoParam.keyword != null and infoParam.keyword != ''">
<include refid="cust_fuzzy_query"></include>
</if>
AND EXISTS(
SELECT awi.wallet_id
FROM acc_wallet_info awi
WHERE awi.acc_id = ai.acc_id
AND awi.frozen_balance <![CDATA[>]]> 0
)
</where>
ORDER BY t2.cust_num
</select>
<select id="getSumScopeByAccIdList" resultType="java.lang.Long">
SELECT SUM(scope)
FROM acc_info
WHERE
acc_id in
<foreach collection="accIdList" item="accId" separator="," open="(" close=")">
#{accId}
</foreach>
</select>
<select id="getAccInfoDetailVOV2" resultType="com.bonus.canteen.core.account.v3.api.vo.AccInfoDetailVO">
SELECT
a.cust_id,
SUM(a.wallet_bal) accBalTotal,
MIN(t2.nick_name) AS custName,
MIN(t1.acc_id) AS accId
FROM
acc_wallet_info a
INNER JOIN acc_info t1 ON a.cust_id = t1.cust_id
INNER JOIN sys_user t2 ON a.cust_id = t2.cust_id
WHERE
t1.acc_status = 1
AND t2.status = 0
GROUP BY a.cust_id
ORDER BY a.cust_id
</select>
<!-- 账户批量操作查询账户信息 -->
<select id="queryPageAccInfoForBatch" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoPageVO">
SELECT t1.acc_id,
t2.cust_id,
t2.cust_num,
t2.nick_name as cust_name,
t2.phonenumber as mobile,
# t2.org_full_name,
t2.psn_type,
t7.psn_type_name,
t1.acc_status,
t1.end_date
FROM sys_user t2
INNER JOIN acc_info t1 ON t1.cust_id = t2.cust_id
LEFT JOIN cust_psn_type t7 on t7.psn_type = t2.psn_type
<include refid="queryPageAccInfoWhereSql">
</include>
order by t2.create_time desc
</select>
<!-- 通过人员id查询账户信息-->
<!-- <select id="getAccInfoOpenPOByCustId" resultType="com.bonus.canteen.core.account.v3.po.AccInfoOpenPO">-->
<!-- <include refid="query_accInfo_open_sql"></include>-->
<!-- WHERE t1.cust_id = #{custId}-->
<!-- </select>-->
<!-- 通过人员id集合查询账户信息-->
<!-- <select id="queryPageAccInfoOpenPO" resultType="com.bonus.canteen.core.account.v3.po.AccInfoOpenPO">-->
<!-- <include refid="query_accInfo_open_sql"></include>-->
<!-- <where>-->
<!-- <if test="custIdList != null and custIdList.size() > 0">-->
<!-- and t1.cust_id in-->
<!-- <foreach collection="custIdList" item="custId" separator="," open="(" close=")">-->
<!-- #{custId}-->
<!-- </foreach>-->
<!-- </if>-->
<!-- </where>-->
<!-- </select>-->
<!-- 查询账户信息-open-->
<!-- <sql id="query_accInfo_open_sql">-->
<!-- SELECT t1.acc_id,-->
<!-- t2.cust_name AS accName,-->
<!-- t1.cust_id,-->
<!-- t1.acc_status,-->
<!-- t2.cust_third_id,-->
<!-- t3.org_id,-->
<!-- t3.org_name-->
<!-- FROM acc_info AS t1-->
<!-- LEFT JOIN cust_info AS t2 ON t1.cust_id = t2.cust_id-->
<!-- LEFT JOIN cust_org AS t3 ON t2.org_id = t3.org_id-->
<!-- </sql>-->
<!-- 获取账户状态和卡片信息-->
<select id="queryAccStatusAndCard" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoVO">
SELECT t1.cust_id,
t1.acc_status
WHERE t1.cust_id in
<foreach collection="custIdList" item="custId" separator="," open="(" close=")">
#{custId}
</foreach>
</select>
<!-- 通过用户Id集合获取账户状态,用户基本信息-->
<!-- <select id="queryAccBaseInfoList" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoVO">-->
<!-- SELECT-->
<!-- t1.cust_id,-->
<!-- t1.acc_status,-->
<!-- t2.cust_num,-->
<!-- t2.cust_name,-->
<!-- t2.mobile,-->
<!-- t3.psn_type_name,-->
<!-- t4.org_full_name-->
<!-- FROM-->
<!-- acc_info t1-->
<!-- LEFT JOIN cust_info AS t2 ON t2.cust_id = t1.cust_id-->
<!-- LEFT JOIN cust_psn_type t3 ON t3.psn_type = t2.psn_type-->
<!-- LEFT JOIN cust_org t4 ON t4.org_id = t2.org_id-->
<!-- WHERE t1.cust_id in-->
<!-- <foreach collection="custIdList" item="custId" separator="," open="(" close=")">-->
<!-- #{custId}-->
<!-- </foreach>-->
<!-- </select>-->
<select id="listAccStateOverdue" resultType="java.lang.Long">
SELECT cust_id
FROM acc_info
WHERE end_date <![CDATA[<]]> #{overdueDate}
AND acc_status in
<foreach collection="oldStatusList" item="accStatus" separator="," open="(" close=")">
#{accStatus}
</foreach>
</select>
<select id="accOpenCountStatistics" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCountVO">
SELECT A.accNums,B.depositTotal from (
SELECT count(1) as accNums FROM `acc_info` WHERE crtime BETWEEN #{accCountParam.startTime} and #{accCountParam.endTime} ) A,
(SELECT SUM(deposit) as depositTotal FROM `acc_card` WHERE card_status in (1, 4) and crtime BETWEEN #{accCountParam.startTime} and #{accCountParam.endTime} ) B
</select>
<!-- 销户统计账户数和押金总额-->
<select id="accCloseCountStatistics" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCountVO">
SELECT count(a.id) as accNums ,sum(b.deposit) as depositTotal from acc_info a
JOIN acc_card_hist b on a.cust_id=b.cust_id
WHERE a.acc_status=3 and b.record_type=2 and a.uptime BETWEEN #{accCountParam.startTime} and #{accCountParam.endTime}
</select>
<!-- 查询账户数统计-->
<select id="accCountStatistics" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCountStatisticsVO">
SELECT a.*,b.*,c.*,d.*
FROM
(
SELECT
ifnull(SUM( CASE WHEN acc_status = 1 THEN 1 ELSE 0 END ),0) AS normalCount,
ifnull(SUM( CASE WHEN acc_status = 2 THEN 1 ELSE 0 END ),0) AS deactivateCount,
ifnull(SUM( CASE WHEN acc_status = 4 THEN 1 ELSE 0 END ),0) AS expireCount
FROM acc_info ai
LEFT JOIN sys_user ci ON ci.cust_id = ai.cust_id
WHERE ai.uptime <![CDATA[<=]]> #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) a,
( SELECT count(*) AS startCount
FROM acc_info ai
LEFT JOIN sys_user ci ON ci.cust_id = ai.cust_id
WHERE ai.crtime <![CDATA[<=]]> #{param.startTime}
<include refid="query_acc_org_auth_sql"></include>
) b,
( SELECT count(*) AS closedCount
FROM acc_info ai
LEFT JOIN sys_user ci ON ci.cust_id = ai.cust_id
WHERE ai.acc_status = 3 and ai.uptime BETWEEN #{param.startTime} AND #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) c,
( SELECT count(*) AS openCount
FROM acc_info ai
LEFT JOIN sys_user ci ON ci.cust_id = ai.cust_id
WHERE ai.crtime BETWEEN #{param.startTime} AND #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) d
</select>
<!-- 查询账户数统计-按照组织分组-->
<!-- <select id="accCountStatisticsV2" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCountStatisticsVO">-->
<!-- SELECT-->
<!-- g.org_id,-->
<!-- IFNULL(t2.startCount,0) AS startCount,-->
<!-- IFNULL(t1.endCount,0) AS endCount,-->
<!-- IFNULL(t1.normalCount,0) AS normalCount,-->
<!-- IFNULL(t1.deactivateCount,0) AS deactivateCount,-->
<!-- IFNULL(t1.expireCount,0) AS expireCount,-->
<!-- IFNULL(t3.openCount,0) AS openCount,-->
<!-- IFNULL(t4.closedCount,0) AS closedCount-->
<!-- FROM-->
<!-- cust_org g-->
<!-- LEFT JOIN (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS endCount,-->
<!-- IFNULL( SUM( CASE WHEN acc_status = 1 THEN 1 ELSE 0 END ), 0 ) AS normalCount,-->
<!-- IFNULL( SUM( CASE WHEN acc_status = 2 THEN 1 ELSE 0 END ), 0 ) AS deactivateCount,-->
<!-- IFNULL( SUM( CASE WHEN acc_status = 4 THEN 1 ELSE 0 END ), 0 ) AS expireCount-->
<!-- FROM-->
<!-- acc_info ai-->
<!-- INNER JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- WHERE ai.uptime <![CDATA[<=]]> #{param.endTime}-->
<!-- AND ai.acc_status IN (1,2,4)-->
<!-- GROUP BY ci.org_id-->
<!-- ) t1 ON t1.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS startCount-->
<!-- FROM acc_info ai-->
<!-- INNER JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- WHERE ai.crtime <![CDATA[<=]]> #{param.startTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t2 ON t2.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS openCount-->
<!-- FROM acc_info ai-->
<!-- INNER JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- WHERE ai.crtime BETWEEN #{param.startTime} AND #{param.endTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t3 ON t3.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS closedCount-->
<!-- FROM acc_info ai-->
<!-- INNER JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- WHERE ai.acc_status = 3-->
<!-- and ai.uptime BETWEEN #{param.startTime} AND #{param.endTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t4 ON t4.org_id = g.org_id-->
<!-- </select>-->
<!-- 查询账户卡片统计-->
<select id="accCardStatistics" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCardStatisticsVO">
SELECT a.*,b.*,c.*,d.*
FROM
(
SELECT
ifnull(SUM( CASE WHEN card_status = 1 THEN 1 ELSE 0 END ),0) AS normalCount,
ifnull(SUM( CASE WHEN card_status = 4 THEN 1 ELSE 0 END ),0) AS lossCount
FROM acc_card ac
LEFT JOIN sys_user ci ON ci.cust_id = ac.cust_id
WHERE ac.uptime <![CDATA[<=]]> #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) a,
( SELECT count(*) AS startCount
FROM acc_card ac
LEFT JOIN sys_user ci ON ci.cust_id = ac.cust_id
WHERE ac.crtime <![CDATA[<=]]> #{param.startTime}
<include refid="query_acc_org_auth_sql"></include>
) b,
( SELECT count(*) AS intervalLossCount
FROM acc_card ac
LEFT JOIN sys_user ci ON ci.cust_id = ac.cust_id
WHERE ac.card_status = 4 and ac.uptime BETWEEN #{param.startTime} AND #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) c,
( SELECT count(*) AS intervalOpenCount
FROM acc_card ac
LEFT JOIN sys_user ci ON ci.cust_id = ac.cust_id
WHERE ac.crtime BETWEEN #{param.startTime} AND #{param.endTime}
<include refid="query_acc_org_auth_sql"></include>
) d
</select>
<!-- 查询账户卡片统计-按照组织分组-->
<!-- <select id="accCardStatisticsV2" resultType="com.bonus.canteen.core.account.v3.api.vo.AccCardStatisticsVO">-->
<!-- SELECT-->
<!-- g.org_id,-->
<!-- IFNULL(t2.startCount,0) AS startCount,-->
<!-- IFNULL(t1.endCount,0) AS endCount,-->
<!-- IFNULL(t1.normalCount,0) AS normalCount,-->
<!-- IFNULL(t1.lossCount,0) AS lossCount,-->
<!-- IFNULL(t3.intervalLossCount,0) AS intervalLossCount,-->
<!-- IFNULL(t4.intervalOpenCount,0) AS intervalOpenCount-->
<!-- FROM-->
<!-- cust_org g-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS endCount,-->
<!-- IFNULL(SUM( CASE WHEN card_status = 1 THEN 1 ELSE 0 END ),0) AS normalCount,-->
<!-- IFNULL(SUM( CASE WHEN card_status = 4 THEN 1 ELSE 0 END ),0) AS lossCount-->
<!-- FROM acc_card ac-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ac.cust_id-->
<!-- WHERE ac.card_status IN (1,4) AND ac.uptime <![CDATA[<=]]> #{param.endTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t1 ON t1.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS startCount-->
<!-- FROM acc_card ac-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ac.cust_id-->
<!-- WHERE ac.crtime <![CDATA[<=]]> #{param.startTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t2 ON t2.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS intervalLossCount-->
<!-- FROM acc_card ac-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ac.cust_id-->
<!-- WHERE ac.card_status = 4 and ac.uptime BETWEEN #{param.startTime} AND #{param.endTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t3 ON t3.org_id = g.org_id-->
<!-- LEFT JOIN-->
<!-- (-->
<!-- SELECT-->
<!-- ci.org_id,-->
<!-- count(*) AS intervalOpenCount-->
<!-- FROM acc_card ac-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ac.cust_id-->
<!-- WHERE ac.crtime BETWEEN #{param.startTime} AND #{param.endTime}-->
<!-- GROUP BY ci.org_id-->
<!-- ) t4 ON t4.org_id = g.org_id-->
<!-- </select>-->
<!-- 查询账户统计-组织权限sql-->
<sql id="query_acc_org_auth_sql">
<if test="'1'.toString() != authPO.roleType.toString()">
and EXISTS (
SELECT null
FROM mgr_role_org it1
LEFT JOIN sys_role it2 ON it2.role_id = it1.role_id
LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id
WHERE it2.del_flag = 0
AND it2.role_key = #{authPO.roleCode}
AND it1.half_select = 1
AND it3.user_id = #{authPO.userId}
AND it1.org_id = ci.dept_id
)
</if>
</sql>
<!-- 移动端工作台:获取账户列表-->
<select id="queryPageAccInfoForAppWork" resultType="com.bonus.canteen.core.account.v3.app.vo.AppWorkAccInfoVO">
SELECT
t2.cust_id,
t2.cust_num,
t2.nick_name as cust_name,
t2.phonenumber as mobile,
# t2.org_full_name,
t2.psn_type,
t5.psn_type_name,
t1.acc_status,
t1.end_date,
t4.accAvailableBal,
t4.accFreezeBalTotal,
t4.accAvailableBal + t4.accFreezeBalTotal as accBalTotal,
t4.walletBal,
t4.frozenWallet,
t4.subsidyBal,
t4.frozenSub,
t4.redEnvelope
FROM acc_info t1
LEFT JOIN sys_user t2 ON t1.cust_id = t2.cust_id
LEFT JOIN
(
SELECT
cust_id,
SUM( CASE WHEN wallet_id = 1 THEN wallet_bal ELSE 0 END ) AS walletBal,
SUM( CASE WHEN wallet_id = 1 THEN frozen_balance ELSE 0 END ) AS frozenWallet,
SUM( CASE WHEN wallet_id = 2 THEN wallet_bal ELSE 0 END ) AS subsidyBal,
SUM( CASE WHEN wallet_id = 2 THEN frozen_balance ELSE 0 END ) AS frozenSub,
SUM( CASE WHEN wallet_id = 4 THEN wallet_bal ELSE 0 END ) AS redEnvelope,
SUM( a.wallet_bal ) AS accAvailableBal,
SUM( a.frozen_balance ) AS accFreezeBalTotal
FROM acc_wallet_info a
GROUP BY cust_id
) AS t4 ON t4.cust_id = t1.cust_id
LEFT JOIN cust_psn_type t5 on t5.psn_type = t2.psn_type
<where>
t1.acc_status in
<foreach collection="infoParam.accStatusList" item="accStatus" separator="," open="(" close=")">
#{accStatus}
</foreach>
<if test="infoParam.psnTypeList != null and infoParam.psnTypeList.size() > 0">
and t2.psn_type in
<foreach collection="infoParam.psnTypeList" item="psnType" separator="," open="(" close=")">
#{psnType}
</foreach>
</if>
<if test="infoParam.orgIdList != null and infoParam.orgIdList.size() > 0">
and t2.dept_id in
<foreach collection="infoParam.orgIdList" item="orgId" separator="," open="(" close=")">
#{orgId}
</foreach>
</if>
<if test="infoParam.keyword != null and infoParam.keyword != ''">
<include refid="cust_fuzzy_query"></include>
</if>
</where>
ORDER BY t2.create_time desc
</select>
<!-- 查询对应时间内账户数量-->
<select id="queryAccInfoExpiredCount" resultType="java.lang.Integer">
SELECT count( a.id ) FROM acc_info a
WHERE a.acc_status = #{accStatus} AND a.uptime BETWEEN #{startDateTime} and #{endDateTime}
</select>
<!-- 关联用户模糊查询-->
<sql id="cust_fuzzy_query">
and (t2.cust_num LIKE CONCAT('%', #{infoParam.keyword},'%')
or t2.nick_name = #{infoParam.keyword,typeHandler=com.bonus.canteen.core.common.encrypt.SM4EncDecHandler}
or t2.phonenumber = #{infoParam.keyword,typeHandler=com.bonus.canteen.core.common.encrypt.SM4EncDecHandler}
# or t2.mobile_suffix = #{infoParam.keyword,typeHandler=com.bonus.canteen.core.common.encrypt.SM4EncDecHandler}
or t2.nick_name_like LIKE CONCAT('%',#{infoParam.keyword,typeHandler=com.bonus.canteen.core.common.encrypt.CipherQueryLikeHandler},'%')
)
</sql>
<!-- 查询账户信息-->
<!-- 查询账户信息-->
<select id="queryAccStatusByCustIdList" resultType="com.bonus.canteen.core.account.v3.mq.send.model.AccStatusChangeModel">
SELECT nick_name as cust_name,
cust_id
FROM sys_user
WHERE cust_id in
<foreach collection="custIdList" item="custId" separator="," open="(" close=")">
#{custId}
</foreach>
</select>
<select id="getAccInfoVOByCustId" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoVO">
<include refid="base_acc_infoVO_sql">
</include>
WHERE ai.cust_id = #{custId}
</select>
<sql id="base_acc_infoVO_sql">
SELECT ai.id,
ai.acc_id,
ai.cust_id,
ai.end_date,
ai.acc_status,
ci.cust_num,
ci.nick_name as cust_name,
ci.phonenumber as mobile,
ci.psn_type,
cpt.psn_type_name,
ci.dept_id as org_id
FROM acc_info ai
LEFT JOIN sys_user ci ON ci.cust_id = ai.cust_id
LEFT JOIN cust_psn_type cpt ON cpt.psn_type = ci.psn_type
LEFT JOIN sys_dept co ON co.dept_id = ci.dept_id
</sql>
<!-- <sql id="base_acc_infoVO_sql">-->
<!-- SELECT ai.id,-->
<!-- ai.acc_id,-->
<!-- ai.cust_id,-->
<!-- ai.end_date,-->
<!-- ai.acc_status,-->
<!-- ci.cust_num,-->
<!-- ci.cust_name,-->
<!-- ci.mobile,-->
<!-- ci.psn_type,-->
<!-- cpt.psn_type_name,-->
<!-- ci.org_id,-->
<!-- co.org_full_name,-->
<!-- ci.cust_third_id-->
<!-- FROM acc_info ai-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- LEFT JOIN cust_psn_type cpt ON cpt.psn_type = ci.psn_type-->
<!-- LEFT JOIN cust_org co ON co.org_id = ci.org_id-->
<!-- </sql>-->
<!-- <select id="getAccInfoVOByCustId" resultType="com.bonus.canteen.core.account.v3.web.vo.AccInfoVO">-->
<!-- SELECT ai.id,-->
<!-- ai.acc_id,-->
<!-- ai.cust_id,-->
<!-- ai.end_date,-->
<!-- ai.acc_status,-->
<!-- ci.cust_num,-->
<!-- ci.cust_name,-->
<!-- ci.mobile,-->
<!-- ci.psn_type,-->
<!-- cpt.psn_type_name,-->
<!-- ci.org_id,-->
<!-- co.org_full_name,-->
<!-- ci.cust_third_id-->
<!-- FROM acc_info ai-->
<!-- LEFT JOIN cust_info ci ON ci.cust_id = ai.cust_id-->
<!-- LEFT JOIN cust_psn_type cpt ON cpt.psn_type = ci.psn_type-->
<!-- LEFT JOIN cust_org co ON co.org_id = ci.org_id-->
<!-- WHERE ai.cust_id = #{custId}-->
<!-- </select>-->
<!-- &lt;!&ndash; 查询账户信息&ndash;&gt;-->
<!-- <select id="queryAccStatusByCustIdList" resultType="com.bonus.canteen.core.account.v3.mq.send.model.AccStatusChangeModel">-->
<!-- SELECT cust_name,-->
<!-- cust_id-->
<!-- FROM cust_info-->
<!-- WHERE cust_id in-->
<!-- <foreach collection="custIdList" item="custId" separator="," open="(" close=")">-->
<!-- #{custId}-->
<!-- </foreach>-->
<!-- </select>-->
</mapper>