分页条件修改,区县可多选
token过期code改为401
| | |
| | | |
| | | import com.cl.common.constant.MessageConstant; |
| | | import com.cl.common.exception.BaseException; |
| | | import com.cl.common.exception.user.InterceptorException; |
| | | import com.cl.common.result.Result; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.validation.ObjectError; |
| | |
| | | return Result.error(ex.getMessage()); |
| | | } |
| | | |
| | | /** |
| | | * 捕获业务异常 |
| | | * @param ex |
| | | * @return |
| | | */ |
| | | @ExceptionHandler |
| | | public Result loginHandler(InterceptorException ex){ |
| | | log.error("异常信息:{}", ex.getMessage()); |
| | | return Result.error(401,ex.getMessage()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 数据校验异常 |
| | |
| | | } |
| | | |
| | | public static <T> Result<T> error(String msg) { |
| | | Result result = new Result(); |
| | | Result<T> result = new Result<T>(); |
| | | result.message = msg; |
| | | result.code = 500; |
| | | return result; |
| | | } |
| | | |
| | | public static <T> Result<T> error(Integer code,String msg) { |
| | | Result<T> result = new Result<T>(); |
| | | result.message = msg; |
| | | result.code = code; |
| | | return result; |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; |
| | | import com.cl.common.result.Result; |
| | | import com.cl.pojo.dto.AddDataDTO; |
| | | |
| | | import com.cl.pojo.dto.DataPageDTO; |
| | | import com.cl.pojo.entity.DataEntity; |
| | | |
| | | import com.cl.pojo.vo.DataDetailVO; |
| | |
| | | import com.cl.service.DataService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | /** |
| | | * 分页 |
| | | */ |
| | | @GetMapping("/pageList") |
| | | @PostMapping("/pageList") |
| | | @ApiOperation("用户分页查询") |
| | | public Result<IPage<DataVO>> selectPageUser(@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum, |
| | | @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize, |
| | | @RequestParam(value = "county",required = false)Integer county, |
| | | @RequestParam(value = "name",required = false)String name){ |
| | | IPage<DataEntity> page = new Page<>(pageNum, pageSize); |
| | | IPage<DataVO> iPage=dataService.pageList(page,county,name); |
| | | public Result<IPage<DataVO>> selectPageUser(@RequestBody @Valid DataPageDTO dataPageDTO){ |
| | | IPage<DataEntity> page = new Page<>(dataPageDTO.getPageNum(), dataPageDTO.getPageSize()); |
| | | IPage<DataVO> iPage=dataService.pageList(page,dataPageDTO.getCountyList(),dataPageDTO.getName()); |
| | | return Result.success(iPage); |
| | | } |
| | | |
| | | /** |
| | | * 查看详情(数据回显) 返回两次数据 查询该id和该id上一次数据 同比增加减少 |
| | | * 列表查看详情(数据回显) 返回两次数据 查询该id和该id上一次数据 同比增加减少 |
| | | */ |
| | | @PostMapping("/detail") |
| | | @ApiOperation("查看详情") |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增回显 |
| | | */ |
| | | @PostMapping("/add/detail") |
| | | @ApiOperation("查看详情(新增回显上一次数据)") |
| | | public Result<DataDetailVO> addDetail(@RequestParam(value = "county" )Integer county) { |
| | | return Result.success( dataService.addDetail(county)); |
| | | } |
| | | |
| | | /** |
| | | * 修改 |
| | | */ |
| | | @PutMapping("/edit") |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.cl.common.result.Result; |
| | | import com.cl.pojo.dto.AddInstitutionDTO; |
| | | import com.cl.pojo.dto.DataPageDTO; |
| | | import com.cl.pojo.dto.EditInstitutionDTO; |
| | | import com.cl.pojo.dto.InstitutionPageDTO; |
| | | import com.cl.pojo.entity.Institution; |
| | | import com.cl.pojo.vo.InstitutionVO; |
| | | import com.cl.service.InstitutionService; |
| | |
| | | /** |
| | | * 分页 |
| | | */ |
| | | @GetMapping("/pageList") |
| | | @PostMapping("/pageList") |
| | | @ApiOperation("机构分页") |
| | | public Result<IPage<InstitutionVO> > pageList(@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum, |
| | | @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize, |
| | | @RequestParam(value = "county",required = false)Integer county,//0-查所有 |
| | | @RequestParam(value = "name",required = false)String name) { |
| | | IPage<Institution> page = new Page<>(pageNum, pageSize); |
| | | return Result.success(institutionService.pageList(page,county,name)); |
| | | public Result<IPage<InstitutionVO> > pageList(@RequestBody @Valid InstitutionPageDTO dataPageDTO) { |
| | | IPage<Institution> page = new Page<>(dataPageDTO.getPageNum(), dataPageDTO.getPageSize()); |
| | | return Result.success(institutionService.pageList(page,dataPageDTO.getCountyList(),dataPageDTO.getName())); |
| | | } |
| | | /** |
| | | * 编辑回显 |
| | |
| | | return true; |
| | | }catch (ExpiredJwtException ex) { |
| | | log.warn("JWT已过期,Token: {}", token); |
| | | throw new LoginErrorException(MessageConstant.TOKEN_EXPIRED); |
| | | throw new InterceptorException(MessageConstant.TOKEN_EXPIRED); |
| | | } catch (InterceptorException ex) { |
| | | log.warn("JWT已过期,Token: {}", token); |
| | | throw new InterceptorException("该用户已被冻结"); |
| | | log.warn("用户被删除或已被冻结,Token: {}", token); |
| | | throw new InterceptorException("用户被删除或已被冻结"); |
| | | }catch (Exception ex) { |
| | | //4、不通过,响应401状态码 |
| | | throw new LoginErrorException(MessageConstant.USER_NOT_LOGIN); |
| | | throw new InterceptorException(MessageConstant.USER_NOT_LOGIN); |
| | | } |
| | | } |
| | | } |
| | |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface DataMapper extends BaseMapper<DataEntity> { |
| | | DataEntity screen(Integer county); |
| | | |
| | | IPage<DataVO> pageList(IPage<DataEntity> page, @Param("county") Integer county,@Param("name") String name); |
| | | IPage<DataVO> pageList(IPage<DataEntity> page, @Param("countyList") List<Integer> countyList, @Param("name") String name); |
| | | |
| | | DataEntity beforeOne(@Param("id") Integer id); |
| | | |
| | | DataEntity getAddDetail(Integer county); |
| | | } |
| | |
| | | |
| | | @Mapper |
| | | public interface InstitutionMapper extends BaseMapper<Institution> { |
| | | IPage<InstitutionVO> pageList(IPage<Institution> page, @Param("county") Integer county, @Param("name") String name); |
| | | IPage<InstitutionVO> pageList(IPage<Institution> page, @Param("countyList") List<Integer> countyList, @Param("name") String name); |
| | | |
| | | List<InstitutionVO> getAll(@Param("county") Integer county); |
| | | } |
New file |
| | |
| | | package com.cl.pojo.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class DataPageDTO { |
| | | private Integer pageNum = 1; |
| | | private Integer pageSize = 10; |
| | | private List<Integer> countyList; |
| | | private String name; |
| | | } |
New file |
| | |
| | | package com.cl.pojo.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class InstitutionPageDTO { |
| | | private Integer pageNum = 1; |
| | | private Integer pageSize = 10; |
| | | private List<Integer> countyList; |
| | | private String name; |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | private Integer county; |
| | | |
| | | @ApiModelProperty(value = "调研时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime investigateTime; |
| | | |
| | | @ApiModelProperty(value = "创建者、调研者") |
| | | private Integer createBy; |
| | | |
| | | @ApiModelProperty(value = "创建时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty(value = "更新者") |
| | | private Integer updateBy; |
| | | |
| | | @ApiModelProperty(value = "更新时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime updateTime; |
| | | |
| | | @ApiModelProperty(value = "删除标志,0-未删除,1-删除") |
| | |
| | | @Data |
| | | @ApiModel("大屏分页VO") |
| | | public class DataVO { |
| | | @ApiModelProperty(value = "数据id") |
| | | private Integer id; |
| | | @ApiModelProperty(value = "区县,1-东区,2-西区,3-仁和区,4-米易县,5-盐边县") |
| | | private Integer county; |
| | | |
| | |
| | | private String name; |
| | | @ApiModelProperty(value = "机构类型,1-残疾人定点康复机构,2-残疾人友好医疗机构") |
| | | private Integer type; |
| | | @ApiModelProperty(value = "详细地址") |
| | | private String address; |
| | | @ApiModelProperty(value = "区县,1-东区,2-西区,3-仁和区,4-米易县,5-盐边县") |
| | | private Integer county; |
| | | @ApiModelProperty(value = "联系电话") |
| | |
| | | import com.cl.pojo.vo.EditDataDTO; |
| | | import com.cl.pojo.vo.screen.ScreenVO; |
| | | |
| | | import java.util.List; |
| | | |
| | | public interface DataService extends IService<DataEntity> { |
| | | ScreenVO screen(Integer county); |
| | | |
| | | void add( AddDataDTO addDataDTO); |
| | | |
| | | IPage<DataVO> pageList(IPage<DataEntity> page, Integer county, String name); |
| | | IPage<DataVO> pageList(IPage<DataEntity> page, List<Integer> county, String name); |
| | | |
| | | void delete(Integer id); |
| | | |
| | | void edit( EditDataDTO editDataDTO); |
| | | |
| | | DataDetailVO detail(Integer id); |
| | | |
| | | DataDetailVO addDetail(Integer county); |
| | | } |
| | |
| | | public interface InstitutionService extends IService<Institution> { |
| | | void add(@Valid AddInstitutionDTO addDTO); |
| | | |
| | | IPage<InstitutionVO> pageList(IPage<Institution> page, Integer county, String name); |
| | | IPage<InstitutionVO> pageList(IPage<Institution> page, List<Integer> county, String name); |
| | | |
| | | InstitutionVO read(Integer id); |
| | | |
| | |
| | | import com.cl.pojo.vo.EditDataDTO; |
| | | import com.cl.pojo.vo.screen.*; |
| | | import com.cl.service.DataService; |
| | | import io.swagger.models.auth.In; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import java.text.DecimalFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Service |
| | | public class DataServiceImpl extends ServiceImpl<DataMapper, DataEntity> implements DataService { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<DataVO> pageList(IPage<DataEntity> page, Integer county, String name) { |
| | | public IPage<DataVO> pageList(IPage<DataEntity> page, List<Integer> county, String name) { |
| | | return dataMapper.pageList(page,county,name); |
| | | } |
| | | |
| | |
| | | return dataDetailVO; |
| | | } |
| | | |
| | | @Override |
| | | public DataDetailVO addDetail(Integer county) { |
| | | DataDetailVO dataDetailVO = new DataDetailVO(); |
| | | //通过区县获取上一次数据 |
| | | DataEntity dataEntity = dataMapper.getAddDetail(county); |
| | | EditDataDTO editDataDTO=new EditDataDTO(); |
| | | BeanUtils.copyProperties(dataEntity,editDataDTO); |
| | | dataDetailVO.setBeforeData(editDataDTO); |
| | | return dataDetailVO; |
| | | } |
| | | |
| | | private DataRateVO getRateVO(EditDataDTO data, EditDataDTO beforeData) { |
| | | if (beforeData == null || beforeData.equals(new EditDataDTO())) { |
| | | return null; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<InstitutionVO> pageList(IPage<Institution> page, Integer county, String name) { |
| | | public IPage<InstitutionVO> pageList(IPage<Institution> page, List<Integer> county, String name) { |
| | | return institutionMapper.pageList(page,county,name); |
| | | } |
| | | |
| | |
| | | updateWrapper.set(User::getPhone, editUserDTO.getPhone()); |
| | | |
| | | updateWrapper.set(User::getRemark, editUserDTO.getRemark()); |
| | | updateWrapper.set(User::getUpdateBy, BaseContext.getCurrentUser().getPhone()); |
| | | updateWrapper.set(User::getUpdateBy, BaseContext.getCurrentUser().getId()); |
| | | updateWrapper.set(User::getUpdateTime, LocalDateTime.now()); |
| | | |
| | | int update = userMapper.update(new User(), updateWrapper); |
| | |
| | | user.setPassword(BCryptPasswordEncoder.encode(passwordDTO.getNewPassword())); |
| | | user.setUpdateBy(user.getId()); |
| | | user.setUpdateTime(LocalDateTime.now()); |
| | | boolean save = this.save(user); |
| | | boolean save = this.updateById(user); |
| | | if (!save) { |
| | | throw new UserException("修改密码失败"); |
| | | } |
| | |
| | | user.setIsFirst(1); |
| | | user.setUpdateBy(BaseContext.getCurrentUser().getId()); |
| | | user.setUpdateTime(LocalDateTime.now()); |
| | | boolean save = this.save(user); |
| | | boolean save = this.updateById(user); |
| | | if (!save) { |
| | | throw new UserException("重置密码失败"); |
| | | } |
| | |
| | | user.setStatus(Objects.equals(user.getStatus(), StatusConstant.DISABLE) ? StatusConstant.ENABLE : StatusConstant.DISABLE); |
| | | user.setUpdateBy(BaseContext.getCurrentUser().getId()); |
| | | user.setUpdateTime(LocalDateTime.now()); |
| | | boolean save = this.save(user); |
| | | boolean save = this.updateById(user); |
| | | if (!save) { |
| | | throw new UserException("冻结/解冻用户失败"); |
| | | } |
| | |
| | | |
| | | public static void main(String[] args) { |
| | | BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); |
| | | System.out.println(encoder.encode("123456")); |
| | | System.out.println(DigestUtils.md5Hex("111111")); |
| | | String phone="19987654321"; |
| | | System.out.println(encoder.encode(DigestUtils.md5Hex(phone.substring(phone.length() - 6)))); |
| | | |
| | | System.out.println(DigestUtils.md5Hex("358736")); |
| | | |
| | | System.out.println(encoder.matches(DigestUtils.md5Hex("358736"), "$2a$10$lChcCpt1hN77IFSavrsXHe39hox4ggGlJZxuf7AHZ3y2qRbiJjPUy")); |
| | | } |
| | | } |
New file |
| | |
| | | package com.cl.util; |
| | | |
| | | import java.security.MessageDigest; |
| | | import java.security.NoSuchAlgorithmException; |
| | | |
| | | public class MD5Generator { |
| | | public static String generateMD5(String input) { |
| | | try { |
| | | // Create MD5 Hash |
| | | MessageDigest digest = MessageDigest.getInstance("MD5"); |
| | | digest.update(input.getBytes()); |
| | | byte messageDigest[] = digest.digest(); |
| | | |
| | | // Create Hex String |
| | | StringBuilder hexString = new StringBuilder(); |
| | | for (byte aMessageDigest : messageDigest) { |
| | | String h = Integer.toHexString(0xFF & aMessageDigest); |
| | | while (h.length() < 2) h = "0" + h; |
| | | hexString.append(h); |
| | | } |
| | | return hexString.toString(); |
| | | } catch (NoSuchAlgorithmException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | System.out.println("17912345678".substring(0, 3) + "****" + "17912345678".substring(7)); |
| | | String myString = "358736"; |
| | | System.err.println("MD5 of '" + myString + "' is: " + generateMD5(myString)); |
| | | } |
| | | } |
| | |
| | | </select> |
| | | <select id="pageList" resultType="com.cl.pojo.vo.DataVO"> |
| | | SELECT |
| | | d.id, |
| | | d.county, |
| | | d.investigate_time, |
| | | d.create_time, |
| | |
| | | t_user updater ON d.update_by = updater.id |
| | | WHERE |
| | | d.del_flag=0 |
| | | <if test="county != null and county != 0"> |
| | | and d.county =#{county} |
| | | <if test="countyList != null and countyList.size() > 0"> |
| | | AND d.county IN |
| | | <foreach collection="countyList" item="item" open="(" separator="," close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="name!=null and ''!=name"> |
| | | and creator.name like concat('%',#{name},'%') |
| | |
| | | LIMIT 1; |
| | | |
| | | </select> |
| | | <select id="selectByCounty" resultType="com.cl.pojo.entity.DataEntity"> |
| | | |
| | | </select> |
| | | <select id="getAddDetail" resultType="com.cl.pojo.entity.DataEntity"> |
| | | WITH latest_records AS ( |
| | | SELECT |
| | | *, |
| | | ROW_NUMBER() OVER (PARTITION BY county ORDER BY create_time DESC) AS rn |
| | | FROM t_data |
| | | WHERE county=#{county} or #{county}=0 AND del_flag = 0 |
| | | ) |
| | | SELECT |
| | | create_time, |
| | | sum(certificate_eyesight) AS certificate_eyesight, |
| | | sum(certificate_intellect) AS certificate_intellect , |
| | | sum(certificate_limb) AS certificate_limb , |
| | | sum(certificate_speech) AS certificate_speech, |
| | | sum(certificate_hearing) AS certificate_hearing, |
| | | sum(certificate_spirit) AS certificate_spirit, |
| | | sum(certificate_multiple) AS certificate_multiple, |
| | | sum(worker_city) AS worker_city, |
| | | sum(worker_association) AS worker_association, |
| | | sum(worker_service_corps) AS worker_service_corps, |
| | | sum(worker_county ) AS worker_county, |
| | | sum(worker_township ) AS worker_township, |
| | | sum(worker_village ) AS worker_village, |
| | | sum(drill_autism ) AS drill_autism, |
| | | sum(drill_intellect ) AS drill_intellect, |
| | | sum(drill_limb ) AS drill_limb, |
| | | sum(drill_speech ) AS drill_speech, |
| | | sum(drill_hearing ) AS drill_hearing, |
| | | sum(drill_spirit ) AS drill_spirit, |
| | | sum(salvation_before_seven ) AS salvation_before_seven, |
| | | sum(salvation_after_seven ) AS salvation_after_seven, |
| | | sum(salvation_autism ) AS salvation_autism, |
| | | sum(salvation_intellect ) AS salvation_intellect, |
| | | sum(salvation_limb ) AS salvation_limb, |
| | | sum(salvation_speech ) AS salvation_speech, |
| | | sum(difficulty_medication ) AS difficulty_medication, |
| | | sum(difficulty_hospitalisation ) AS difficulty_hospitalisation, |
| | | sum(assistive_device_total ) AS assistive_device_total, |
| | | sum(assistive_device_one ) AS assistive_device_one, |
| | | sum(assistive_device_two ) AS assistive_device_two, |
| | | sum(assistive_device_three ) AS assistive_device_three, |
| | | sum(assistive_device_other ) AS assistive_device_other, |
| | | sum(assistive_device_type_one ) AS assistive_device_type_one, |
| | | sum(assistive_device_type_two ) AS assistive_device_type_two, |
| | | sum(assistive_device_type_three ) AS assistive_device_type_three, |
| | | sum(assistive_device_type_four ) AS assistive_device_type_four, |
| | | sum(assistive_device_grade_one ) AS assistive_device_grade_one , |
| | | sum( assistive_device_grade_two) as assistive_device_grade_two, |
| | | sum(assistive_device_grade_three ) as assistive_device_grade_three, |
| | | sum(assistive_device_grade_four ) as assistive_device_grade_four , |
| | | sum(technical_training ) as technical_training , |
| | | sum(home_allowance ) as home_allowance , |
| | | sum(statutory_certificate_eyesight ) as statutory_certificate_eyesight , |
| | | sum(statutory_certificate_intellect ) as statutory_certificate_intellect, |
| | | sum(statutory_certificate_limb ) as statutory_certificate_limb, |
| | | sum(statutory_certificate_speech ) as statutory_certificate_speech , |
| | | sum(statutory_certificate_hearing ) as statutory_certificate_hearing , |
| | | sum(employed_employment ) as employed_employment, |
| | | sum(employed_concentrated ) as employed_concentrated , |
| | | sum(employed_public_welfare ) as employed_public_welfare , |
| | | sum(employed_auxiliary ) as employed_auxiliary , |
| | | sum(employed_individual ) as employed_individual , |
| | | sum(high_school_employment ) as high_school_employment , |
| | | sum(high_school_individual ) as high_school_individual , |
| | | sum(high_school_flexible ) as high_school_flexible, |
| | | sum(education_one ) as education_one, |
| | | sum(education_two ) as education_two , |
| | | sum( education_three) as education_three , |
| | | sum(education_four ) as education_four, |
| | | sum(education_five ) as education_five , |
| | | sum(education_six ) as education_six , |
| | | sum(education_seven ) as education_seven , |
| | | sum(education_eight ) as education_eight , |
| | | sum(education_nine ) as education_nine , |
| | | sum(education_subsidy ) as education_subsidy , |
| | | sum(activity_frequency ) as activity_frequency, |
| | | sum(education_number ) as education_number, |
| | | sum(matter) as matter, |
| | | sum(doctor_apprecitation) as doctor_apprecitation, |
| | | sum(remould) as remould, |
| | | sum(interviews_office) as interviews_office, |
| | | sum(interviews_phone) as interviews_phone , |
| | | sum(interviews_superior) as interviews_superior, |
| | | sum(interviews_hotline) as interviews_hotline |
| | | FROM latest_records |
| | | WHERE rn = 1; |
| | | </select> |
| | | </mapper> |
| | |
| | | |
| | | <select id="pageList" resultType="com.cl.pojo.vo.InstitutionVO"> |
| | | select |
| | | id , name, type, county, phone |
| | | id , name, type, county, phone,address |
| | | from |
| | | t_institution |
| | | where |
| | | del_flag=0 |
| | | <if test="null!=county and county!=0"> |
| | | and county=#{county} |
| | | <if test="countyList != null and countyList.size() > 0"> |
| | | AND county IN |
| | | <foreach collection="countyList" item="item" open="(" separator="," close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="null!=name and ''!=name"> |
| | | and name like concat('%',#{name},'%') |