NumberMapper.java 6.4 KB
package com.uccc.number.mapper;



import com.uccc.number.domain.BlessNumberEntity;
import com.uccc.number.domain.StatusCount;
import com.uccc.pretty.common.Store;
import org.apache.ibatis.annotations.*;
import com.uccc.number.domain.Number;

import java.math.BigDecimal;
import java.util.List;


public interface NumberMapper {


    List<Number> getNumbers(@Param("currentPage") int currentPage, @Param("pageSize") int pageSize);

    int getNumbersCount();

    static final String NUMBERS = "numbers";
    static final String USER_BLESS = "user_bless";
    static final String BLESS_POOL = "bless_pool";
    static final String STORE = "store";

    @Update({
            "<script>",
            "UPDATE " + NUMBERS + " SET uts = now()",
            "<when test='number.seller!=null'>",
            ",seller = #{number.seller}" ,
            "</when>",
            "<when test='number.introduce!=null'>",
            ",introduce = #{number.}" ,
            "</when>",
            "<when test='number.price!=null'>",
            ",price = #{number.price}" ,
            "</when>",
            "<when test='number.basePrice!=null'>",
            ",base_price = #{number.basePrice}" ,
            "</when>",
            "<when test='number.cardBalance!=null'>",
            ",card_balance = #{number.cardBalance}" ,
            "</when>",
            "<when test='number.cardProvider!=null'>",
            ",card_provider = #{number.cardProvider}" ,
            "</when>",
            "<when test='number.city!=null'>",
            ",city = #{number.city}" ,
            "</when>",
            "<when test='number.province!=null'>",
            ",province = #{number.province}" ,
            "</when>",
            "<when test='number.status!=null'>",
            ",status = #{number.status}" ,
            "</when>",
            "<when test='number.service!=null'>",
            ",service = #{number.service}" ,
            "</when>",
            "<when test='number.agentPrice!=null'>",
            ",agent_price = #{number.agentPrice}" ,
            "</when>",
            "<when test='number.tags!=null'>",
            ",tags = #{number.tags}" ,
            "</when>",
            "<when test='number.virtualService!=null'>",
            ",virtual_service = #{number.virtualService}" ,
            "</when>",
            "<when test='number.delete!=null'>",
            ",is_delete = #{number.delete}" ,
            "</when>",
            "<when test='number.batch!=null'>",
            ",batch = #{number.batch}" ,
            "</when>",
            "where number = #{number.number}",
            "</script>"
    })
    int updateNumber(@Param("number") Number number);

    @Select({
            "<script>",
            "with c1 as (SELECT count(*)  FROM numbers numbers where is_delete = false),",
            "c2 as (SELECT count(*)  FROM numbers numbers where status = 2 and is_delete = false),",
            "c3 as (SELECT count(*) FROM numbers numbers where status = 1 and is_delete = false)",
            "select c1.count as total_count , c2.count as for_sale_count, c3.count as sold_count  from c1,c2,c3",
            "</script>"
    })
    StatusCount selectStatusCount();

    @Select({
            "<script>",
            "select count(*) from " + USER_BLESS,
            "where number = #{number} and user_id = #{userId}",
            "</script>",
    })
    int selectBlessBindByUserId(@Param("userId") Long userId, @Param("number") String number);

    @Insert({
            "<script>",
            "insert into " + USER_BLESS + " (",
            "number, user_id, bless_price,cts",
            ")",
            "values" + " (",
            "#{number}, #{userId}, #{blessPrice}, now()",
            ")",
            "</script>",
    })
    int insertUserBless(@Param("userId") Long userId, @Param("number") String number, @Param("blessPrice")BigDecimal blessPrice);

    @Delete({
            "<script>",
            "delete from " + USER_BLESS,
            "where number = #{number}",
            "<when test='userId!=null'>",
            "and user_id = #{userId}",
            "</when>",
            "</script>",
    })
    void deleteBindBlessNum(@Param("userId") Long userId, @Param("number") String number);

    @Delete({
            "<script>",
            "delete from " + BLESS_POOL,
            "where number = #{number}",
            "</script>",
    })
    int deleteBlessNum(@Param("number") String number);

    @Select({
            "<script>",
            "SELECT DISTINCT on(bp.number) * from bless_pool bp JOIN numbers n on bp.number = n.number",
            "left JOIN user_bless ub on ub.number = n.number",
            "where 1=1",
            "<when test='userId!=null'>",
            "and ub.user_id = #{userId}",
            "</when>",
            "<when test='city!=null'>",
            "and n.city = #{city}",
            "</when>",
            "<when test='province!=null'>",
            "and n.province = #{province}",
            "</when>",
            "order by bp.number desc",
            "limit #{pageSize}",
            "offset #{currentPage}",
            "</script>",
    })
    List<BlessNumberEntity> selectBlessNumList(@Param("city") String city, @Param("province") String province, @Param("userId") Long userId, @Param("pageSize") Integer pageSize, @Param("currentPage") Integer currentPage);

    @Select({
            "<script>",
            "SELECT count(DISTINCT n.number) from bless_pool bp JOIN numbers n on bp.number = n.number",
            "left JOIN user_bless ub on ub.number = n.number",
            "where 1=1",
            "<when test='userId!=null'>",
            "and ub.user_id = #{userId}",
            "</when>",
            "<when test='city!=null'>",
            "and n.city = #{city}",
            "</when>",
            "<when test='province!=null'>",
            "and n.province = #{province}",
            "</when>",
            "</script>",
    })
    int selectBlessNumListCount(@Param("city") String city, @Param("province") String province, @Param("userId") Long userId);

    @Select({
            "<script>",
            "select * from " + STORE,
            "where id = #{storeId}",
            "</script>"
    })
    Store checkStoreByMid(@Param("storeId") Long storeId);

    @Select({
            "<script>",
            "select bless_price from " + USER_BLESS,
            "where user_id = #{userId} and number=#{number}",
            "</script>",
    })
    BigDecimal selectBlessPriceByUserId(@Param("userId") Long userId, @Param("number")String number);
}