Files
BMS/bms-back/bms-system/src/main/resources/mapper/price/PrcZoneDetailMapper.xml
T
2026-09-28 10:02:38 +08:00

119 lines
4.6 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.bms.price.mapper.PrcZoneDetailMapper">
<resultMap type="PrcZoneDetail" id="PrcZoneDetailResult">
<id property="detailId" column="detail_id" />
<result property="zoneId" column="zone_id" />
<result property="postcode" column="postcode" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectPrcZoneDetailVo">
select detail_id, zone_id, postcode, create_time, update_time
from prc_zone_detail
</sql>
<select id="selectPrcZoneDetailById" parameterType="Long" resultMap="PrcZoneDetailResult">
<include refid="selectPrcZoneDetailVo"/>
where detail_id = #{detailId}
</select>
<select id="selectPrcZoneDetailList" parameterType="PrcZoneDetail" resultMap="PrcZoneDetailResult">
<include refid="selectPrcZoneDetailVo"/>
<where>
<if test="zoneId != null">
AND zone_id = #{zoneId}
</if>
<if test="postcode != null and postcode != ''">
AND postcode like concat('%', #{postcode}, '%')
</if>
</where>
order by postcode asc, detail_id asc
</select>
<select id="countByZoneId" parameterType="Long" resultType="int">
select count(1) from prc_zone_detail where zone_id = #{zoneId}
</select>
<select id="countByRegionId" parameterType="Long" resultType="int">
select count(1) from prc_zone_detail d
inner join prc_zone z on z.zone_id = d.zone_id
where z.region_id = #{regionId}
</select>
<insert id="insertPrcZoneDetail" parameterType="PrcZoneDetail" useGeneratedKeys="true" keyProperty="detailId">
insert into prc_zone_detail (
<if test="zoneId != null">zone_id,</if>
<if test="postcode != null and postcode != ''">postcode,</if>
create_time
) values (
<if test="zoneId != null">#{zoneId},</if>
<if test="postcode != null and postcode != ''">#{postcode},</if>
sysdate()
)
</insert>
<insert id="insertPrcZoneDetailBatch">
insert into prc_zone_detail (zone_id, postcode, create_time) values
<foreach collection="list" item="item" separator=",">
(#{item.zoneId}, #{item.postcode}, sysdate())
</foreach>
</insert>
<update id="updatePrcZoneDetail" parameterType="PrcZoneDetail">
update prc_zone_detail
<set>
<if test="zoneId != null">zone_id = #{zoneId},</if>
<if test="postcode != null and postcode != ''">postcode = #{postcode},</if>
update_time = sysdate()
</set>
where detail_id = #{detailId}
</update>
<delete id="deletePrcZoneDetailByIds" parameterType="Long">
delete from prc_zone_detail where detail_id in
<foreach item="detailId" collection="array" open="(" separator="," close=")">
#{detailId}
</foreach>
</delete>
<delete id="deletePrcZoneDetailByZoneId" parameterType="Long">
delete from prc_zone_detail where zone_id = #{zoneId}
</delete>
<delete id="deletePrcZoneDetailByRegionId" parameterType="Long">
delete d from prc_zone_detail d
inner join prc_zone z on z.zone_id = d.zone_id
where z.region_id = #{regionId}
</delete>
<select id="selectZoneByCountryPostcode" resultType="com.bms.price.domain.PrcZone">
select z.zone_id as zoneId,
z.region_id as regionId,
z.country_code as countryCode,
z.zone_code as zoneCode,
z.zone_name as zoneName,
z.zone_sort as zoneSort,
z.remark as remark,
z.create_time as createTime,
z.update_time as updateTime
from prc_zone_detail d
inner join prc_zone z on z.zone_id = d.zone_id
where upper(ifnull(z.country_code,'')) = upper(#{countryCode})
and (
replace(upper(ifnull(d.postcode,'')), ' ', '') = replace(upper(#{postcode}), ' ', '')
or replace(upper(#{postcode}), ' ', '') like concat(replace(upper(ifnull(d.postcode,'')), ' ', ''), '%')
)
order by
case when replace(upper(ifnull(d.postcode,'')), ' ', '') = replace(upper(#{postcode}), ' ', '') then 0 else 1 end,
char_length(replace(ifnull(d.postcode,''), ' ', '')) desc,
d.detail_id asc
limit 1
</select>
</mapper>