Ver Fonte

couponIssue

liujunchi há 3 anos atrás
pai
commit
eddfaa1b2a

+ 59 - 3
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponIssueController.java

@@ -1,10 +1,19 @@
 package com.yonge.cooleshow.admin.controller.coupon;
 
 
+import com.yonge.cooleshow.admin.io.request.coupon.CouponIssueVo;
+import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.stereotype.Controller;
+import javax.validation.Valid;
+import java.time.Instant;
 
 /**
  * <p>
@@ -14,9 +23,56 @@ import org.springframework.stereotype.Controller;
  * @author Eric
  * @since 2022-09-02
  */
-@Controller
+@RestController
 @RequestMapping("/couponIssue")
 @Api(value = "优惠券发放信息", tags = "优惠券发放信息")
 public class CouponIssueController {
 
+    @Autowired
+    private CouponIssueService couponIssueService;
+
+    /**
+     * 优惠券发放分页信息
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询优惠券发放分页")
+    public HttpResponseResult<PageInfo<CouponIssueVo.CouponIssuePageInfo>> queryCouponIssuePageInfo(@RequestBody @Valid CouponIssueVo.PageRequest request) {
+
+        return null;
+    }
+
+
+    /**
+     * 优惠券课发放用户分页信息
+     */
+    @PostMapping("/userPage")
+    @ApiOperation(value = "优惠券课发放用户分页信息")
+    public HttpResponseResult<PageInfo<CouponIssueVo.CouponIssueUserPageInfo>> queryCouponIssueUserPageInfo(@RequestBody @Valid CouponIssueVo.CouponIssueUserRequest request) {
+
+        return null;
+    }
+
+
+    @PostMapping("/issueUser")
+    @ApiOperation(value = "发送优惠券")
+    public HttpResponseResult<Boolean> issueCoupon(@RequestBody @Valid CouponIssueVo.CouponIssueUserParam param) {
+        // couponIssueService.issueCoupon()
+
+        return null;
+    }
+
+    @PostMapping("/withdraw/{couponIssueId}")
+    @ApiOperation(value = "撤回优惠券")
+    public HttpResponseResult<Boolean> withdrawCoupon(@PathVariable Long couponIssueId) {
+        CouponIssue couponIssue = couponIssueService.getById(couponIssueId);
+        if (couponIssue == null) {
+            return HttpResponseResult.failed("未找到数据");
+        }
+        if (couponIssue.getUseState().equals(CouponUseStateEnum.USED)) {
+            return HttpResponseResult.failed("优惠券已被使用");
+        }  else if(couponIssue.getEndTime().compareTo(Instant.now().getEpochSecond()) <0) {
+            return HttpResponseResult.failed("优惠券已过期");
+        }
+        return HttpResponseResult.status(couponIssueService.withdrawCoupon(couponIssueId));
+    }
 }

+ 343 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java

@@ -0,0 +1,343 @@
+package com.yonge.cooleshow.admin.io.request.coupon;
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.dto.UserParam;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-02
+ */
+public class CouponIssueVo {
+
+    @ApiModel(value = "优惠券发放信息分页请求", description = "优惠券发放信息分页请求")
+    public static class PageRequest extends QueryInfo {
+
+        @ApiModelProperty(value = "优惠券id",required = true)
+        @NotNull(message = "优惠券id不能为空")
+        private Long couponId;
+
+        // 真实姓名/昵称/手机号/编号
+        @ApiModelProperty("真实姓名/昵称/手机号/编号")
+        private String keyword;
+
+        // 客户端 TEACHER  STUDENT
+        @ApiModelProperty("客户端 TEACHER  STUDENT")
+        private ClientEnum client;
+
+        // 发放方式 PLATFORM AVTIVITY
+        @ApiModelProperty("发放方式 PLATFORM:后台发放 AVTIVITY:活动领取")
+        private SendTypeEnum issueWay;
+
+        //使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        //  发放开始时间
+        @ApiModelProperty("发放开始时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        private Date issueStartTime;
+
+        // 发放结束时间
+        @ApiModelProperty("发放结束时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        private Date issueEndTime;
+
+        //  使用开始时间
+        @ApiModelProperty("使用开始时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        private Date usedStartTime;
+
+        // 使用结束时间
+        @ApiModelProperty("使用结束时间")
+        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+        private Date usedEndTime;
+
+        public Long getCouponId() {
+            return couponId;
+        }
+
+        public void setCouponId(Long couponId) {
+            this.couponId = couponId;
+        }
+
+        public String getKeyword() {
+            return keyword;
+        }
+
+        public void setKeyword(String keyword) {
+            this.keyword = keyword;
+        }
+
+        public ClientEnum getClient() {
+            return client;
+        }
+
+        public void setClient(ClientEnum client) {
+            this.client = client;
+        }
+
+        public SendTypeEnum getIssueWay() {
+            return issueWay;
+        }
+
+        public void setIssueWay(SendTypeEnum issueWay) {
+            this.issueWay = issueWay;
+        }
+
+        public CouponUseStateEnum getUseState() {
+            return useState;
+        }
+
+        public void setUseState(CouponUseStateEnum useState) {
+            this.useState = useState;
+        }
+
+        public Date getIssueStartTime() {
+            return issueStartTime;
+        }
+
+        public void setIssueStartTime(Date issueStartTime) {
+            this.issueStartTime = issueStartTime;
+        }
+
+        public Date getIssueEndTime() {
+            return issueEndTime;
+        }
+
+        public void setIssueEndTime(Date issueEndTime) {
+            this.issueEndTime = issueEndTime;
+        }
+
+        public Date getUsedStartTime() {
+            return usedStartTime;
+        }
+
+        public void setUsedStartTime(Date usedStartTime) {
+            this.usedStartTime = usedStartTime;
+        }
+
+        public Date getUsedEndTime() {
+            return usedEndTime;
+        }
+
+        public void setUsedEndTime(Date usedEndTime) {
+            this.usedEndTime = usedEndTime;
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+
+
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(value = "优惠券信息分页信息", description = "优惠券信息分页信息")
+    public static class CouponIssuePageInfo implements Serializable {
+
+        @ApiModelProperty("用户id")
+        private Long userId;
+
+        @ApiModelProperty("优惠券发放id")
+        private Long couponIssueId;
+
+        @ApiModelProperty("用户实名")
+        private String realName;
+
+        @ApiModelProperty("用户昵称")
+        private String username;
+
+        @ApiModelProperty("客户端类型 TEACHER :老师端 STUDENT:学生端")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("订单号")
+        private String orderNo;
+
+        @ApiModelProperty("有效期开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("有效期结束时间")
+        private Date endTime;
+
+        @ApiModelProperty("发放时间")
+        private Date issueTime;
+
+        @ApiModelProperty("使用时间")
+        private Date useTime;
+
+        @ApiModelProperty("发放途径PLATFORM:后台发放 ACTIVITY:活动领取")
+        private SendTypeEnum issueWay;
+
+        @ApiModelProperty("发放人昵称")
+        private String issueUsername;
+
+        @ApiModelProperty("发放人实名")
+        private String issueRealName;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+    }
+
+    @ApiModel("优惠券发放用户分页查询")
+    public static class CouponIssueUserRequest extends QueryInfo {
+
+        @ApiModelProperty(value = "优惠券id",required = true)
+        @NotNull(message = "优惠券id不能为空")
+        private Long couponId;
+
+        // 真实姓名/昵称/手机号/编号
+        @ApiModelProperty("真实姓名/昵称/手机号/编号")
+        private String keyword;
+
+        // 客户端 TEACHER  STUDENT
+        @ApiModelProperty("客户端 TEACHER  STUDENT")
+        private ClientEnum client;
+
+        public Long getCouponId() {
+            return couponId;
+        }
+
+        public void setCouponId(Long couponId) {
+            this.couponId = couponId;
+        }
+
+        public String getKeyword() {
+            return keyword;
+        }
+
+        public void setKeyword(String keyword) {
+            this.keyword = keyword;
+        }
+
+        public ClientEnum getClient() {
+            return client;
+        }
+
+        public void setClient(ClientEnum client) {
+            this.client = client;
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+
+    @ApiModel("发放优惠券用户分页数据")
+    public static class CouponIssueUserPageInfo {
+
+        @ApiModelProperty("用户id")
+        private Long userId;
+
+        @ApiModelProperty("实名")
+        private String realName;
+
+        @ApiModelProperty("昵称")
+        private String username;
+
+        @ApiModelProperty("客户端")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("手机号")
+        private String phone;
+
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
+
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+        public ClientEnum getClientType() {
+            return clientType;
+        }
+
+        public void setClientType(ClientEnum clientType) {
+            this.clientType = clientType;
+        }
+
+        public String getPhone() {
+            return phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+    }
+
+    @ApiModel("发送优惠券")
+    public static class CouponIssueUserParam {
+
+        @ApiModelProperty(value = "优惠券id",required = true)
+        @NotNull(message = "优惠券id不能为空")
+        private Long couponId;
+
+        @ApiModelProperty("用户信息")
+        @Size(min = 1,message = "请选择发送优惠券用户")
+        private List<UserParam> userParam;
+
+        public Long getCouponId() {
+            return couponId;
+        }
+
+        public void setCouponId(Long couponId) {
+            this.couponId = couponId;
+        }
+
+        public List<UserParam> getUserParam() {
+            return userParam;
+        }
+
+        public void setUserParam(List<UserParam> userParam) {
+            this.userParam = userParam;
+        }
+
+
+    }
+}

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserParam.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-02
+ */
+@ApiModel("用户信息")
+public class UserParam{
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("客户端类型 TEACHER :老师 STUDENT:学生")
+    private ClientEnum clientType;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CouponIssue.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
 
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -46,7 +47,7 @@ public class CouponIssue implements Serializable {
 
     @ApiModelProperty("使用状态")
     @TableField("use_state_")
-    private String useState;
+    private CouponUseStateEnum useState;
 
     @ApiModelProperty("使用时间")
     @TableField("use_time_")

+ 35 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SendTypeEnum.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 状态,-1,发送失败;0,待发送;1,发送中;2,发送完成
+ */
+public enum SendTypeEnum implements BaseEnum<String, SendTypeEnum> {
+
+    PLATFORM("PLATFORM"),
+    ACTIVITY("ACTIVITY"),
+
+
+    ;
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    SendTypeEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/CouponIssueMapper.java

@@ -2,6 +2,8 @@ package com.yonge.cooleshow.biz.dal.mapper;
 
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -15,4 +17,5 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface CouponIssueMapper extends BaseMapper<CouponIssue> {
 
+    void queryCouponIssueInfo(@Param("query") CouponIssueQueryInfo query);
 }

+ 126 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java

@@ -0,0 +1,126 @@
+package com.yonge.cooleshow.biz.dal.queryInfo;
+
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-02
+ */
+public class CouponIssueQueryInfo implements Serializable {
+
+    // 优惠券id
+    private Long couponId;
+    // 用户id
+    private Long userId;
+
+    // 真实姓名/昵称/手机号/编号
+    private String keyword;
+
+    // 客户端 TEACHER  STUDENT
+    private ClientEnum clientType;
+
+    // 发放方式 PLATFORM ACTIVITY
+    private SendTypeEnum issueWay;
+
+    // 使用状态 USED USABLE EXPIRED
+    private CouponUseStateEnum useStatus;
+
+    //  发放开始时间
+    private Date issueStartTime;
+
+    // 发放结束时间
+    private Date issueEndTime;
+
+    //  使用开始时间
+    private Date usedStartTime;
+
+    // 使用结束时间
+    private Date usedEndTime;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getKeyword() {
+        return keyword;
+    }
+
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    public ClientEnum getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(ClientEnum clientType) {
+        this.clientType = clientType;
+    }
+
+    public SendTypeEnum getIssueWay() {
+        return issueWay;
+    }
+
+    public void setIssueWay(SendTypeEnum issueWay) {
+        this.issueWay = issueWay;
+    }
+
+    public Long getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Long couponId) {
+        this.couponId = couponId;
+    }
+
+    public CouponUseStateEnum getUseStatus() {
+        return useStatus;
+    }
+
+    public void setUseStatus(CouponUseStateEnum useStatus) {
+        this.useStatus = useStatus;
+    }
+
+    public Date getIssueStartTime() {
+        return issueStartTime;
+    }
+
+    public void setIssueStartTime(Date issueStartTime) {
+        this.issueStartTime = issueStartTime;
+    }
+
+    public Date getIssueEndTime() {
+        return issueEndTime;
+    }
+
+    public void setIssueEndTime(Date issueEndTime) {
+        this.issueEndTime = issueEndTime;
+    }
+
+    public Date getUsedStartTime() {
+        return usedStartTime;
+    }
+
+    public void setUsedStartTime(Date usedStartTime) {
+        this.usedStartTime = usedStartTime;
+    }
+
+    public Date getUsedEndTime() {
+        return usedEndTime;
+    }
+
+    public void setUsedEndTime(Date usedEndTime) {
+        this.usedEndTime = usedEndTime;
+    }
+}

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java

@@ -13,4 +13,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface CouponIssueService extends IService<CouponIssue> {
 
+    /**
+     * 撤销优惠券
+     *
+     * @param couponIssueId 优惠券发放记录id
+     * @return
+     */
+    Boolean withdrawCoupon(Long couponIssueId);
 }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java

@@ -2,8 +2,10 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.yonge.cooleshow.biz.dal.mapper.CouponIssueMapper;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.common.enums.EStatus;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +19,17 @@ import org.springframework.stereotype.Service;
 @Service
 public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, CouponIssue> implements CouponIssueService {
 
+
+
+    public void queryCouponIssueInfo(CouponIssueQueryInfo query) {
+        baseMapper.queryCouponIssueInfo(query);
+    }
+
+    @Override
+    public Boolean withdrawCoupon(Long couponIssueId) {
+        return this.lambdaUpdate()
+                .eq(CouponIssue::getId,couponIssueId)
+                .set(CouponIssue::getStatus, EStatus.DISABLE.getValue())
+                .update();
+    }
 }

+ 56 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CouponIssueMapper.xml

@@ -26,4 +26,60 @@
         id_, user_id_, coupon_id_, client_type_, use_state_, use_time_, order_no_, start_time_, end_time_, issue_way_, issuer_, issue_time_, remark_, status_, created_time_
     </sql>
 
+    <select id="queryCouponIssueInfo" >
+        select
+            su.id_ as userId,
+            ci.id_ as couponIssueId,
+            su.real_name_ as realName,
+            su.username_ as username,
+            ci.client_type_ as clientType,
+            ci.use_state_ as useState,
+            ci.order_no_ as orderNo,
+            ci.start_time_ as startTime,
+            ci.end_time_ as endTime,
+            ci.issue_time_ as issueTime,
+            ci.use_time_ as useTime,
+            ci.issue_way_ as issueWay
+        from coupon_issue ci
+        left join sys_user su on ci.user_id_ = su.id_
+        <where>
+            <if test="query.userId != null">
+                and #{query.userId} = ci.user_id_
+            </if>
+            <if test="query.couponId != null">
+                and #{query.couponId} = ci.coupon_id_
+            </if>
+            <if test="query.clientType != null">
+                and #{query.clientType} = ci.client_type_
+            </if>
+            <if test="query.issueWay != null">
+                and #{query.issueWay}  = ci.issue_way_
+            </if>
+            <if test="query.useStatus != null">
+                and #{query.useStatus} = ci.use_state_
+            </if>
+            <if test="query.issueStartTime != null">
+                and unix_timestamp( #{query.issueStartTime}) &lt;= ci.issue_time_
+            </if>
+            <if test="query.issueEndTime != null">
+                and unix_timestamp(#{query.issueEndTime}) &gt;= ci.issue_time_
+            </if>
+            <if test="query.usedStartTime != null">
+                and unix_timestamp(#{query.usedStartTime}) &lt;= ci.use_time_
+            </if>
+            <if test="query.usedEndTime != null">
+                and unix_timestamp(#{query.usedEndTime}) &gt;= ci.use_time_
+            </if>
+            <if test="query.keyword !=null and query.keyword != ''">
+                and (
+                    su.real_name_ like concat('%',#{query.keyword},'%')
+                    or su.username_ like concat('%',#{query.keyword},'%')
+                    or su.phone_ like concat('%',#{query.keyword},'%')
+                    or su.id_ like concat('%',#{query.keyword},'%')
+                )
+            </if>
+        </where>
+
+
+    </select>
 </mapper>