jiangping
2023-12-05 766089ad50ae807ab88ba83b2dbc4a53bda8e423
Merge remote-tracking branch 'origin/master'
已添加3个文件
已修改11个文件
403 ■■■■■ 文件已修改
server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Date.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Secure.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberJoinMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/TrainTime.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java
@@ -39,6 +39,14 @@
        return ApiResponse.success(companyService.create(company));
    }
    @PreventRepeat
    @ApiOperation("创建劳务公司")
    @PostMapping("/createLaborServices")
    @RequiresPermissions("business:company:create")
    public ApiResponse<Integer> createLaborServices(@RequestBody Company company){
        return ApiResponse.success(companyService.createLaborServices(company));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:company:delete")
server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -6,11 +6,13 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.business.model.Member;
import com.doumee.service.business.MemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -36,6 +38,14 @@
    @RequiresPermissions("business:member:create")
    public ApiResponse create(@RequestBody Member member) {
        return ApiResponse.success(memberService.create(member));
    }
    @PreventRepeat
    @ApiOperation("创建劳务人员信息")
    @PostMapping("/laborMemberCreate")
    @RequiresPermissions("business:member:create")
    public ApiResponse<Integer> laborMemberCreate(@RequestBody LaborMemberDTO member){
        return ApiResponse.success(memberService.laborMemberCreate(member));
    }
    @ApiOperation("根据ID删除")
@@ -67,6 +77,14 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID ç¦å¯ç”¨ æ‹‰é»‘")
    @PostMapping("/updateStatusById")
    @RequiresPermissions("business:member:update")
    public ApiResponse updateStatusById(@RequestBody Member member){
        memberService.updateStatusById(member);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:member:query")
@@ -74,6 +92,13 @@
        return ApiResponse.success(memberService.findPage(pageWrap));
    }
    @ApiOperation("分页劳务用户信息查询")
    @PostMapping("/findLaborMemberInfoPage")
    @RequiresPermissions("business:member:query")
    public ApiResponse<PageData<MemberInfoDTO>> findLaborMemberInfoPage(@RequestBody PageWrap<MemberInfoDTO> pageWrap){
        return ApiResponse.success(memberService.findLaborMemberInfoPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:member:exportExcel")
server/dmvisit_admin/src/main/resources/application.yml
@@ -72,4 +72,4 @@
    max-swallow-size: -1
  servlet:
    session:
      timeout: PT3H  #表示12小时
      timeout: PT3H  #表示12小时
server/dmvisit_service/src/main/java/com/doumee/core/utils/Date.java
@@ -25,6 +25,16 @@
        return calendar.getTime();
    }
    public java.util.Date getDayEnd (java.util.Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }
    /**
     * èŽ·å–æ—¥æœŸçš„ç»“æŸæ—¶é—´
     * @param date æ—¥æœŸ
server/dmvisit_service/src/main/java/com/doumee/core/utils/Secure.java
@@ -1,6 +1,10 @@
package com.doumee.core.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.DigestUtils;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
 * å®‰å…¨å¤„理工具类
@@ -19,4 +23,14 @@
    public String encryptPassword(String password, String salt) {
        return DigestUtils.md5DigestAsHex((password + salt).getBytes());
    }
    /**
     * å­—符串机密
     * @param strings
     * @return
     */
    public String encryptString(String... strings) {
        String collect = Arrays.asList(strings).stream().filter(s -> StringUtils.isBlank(s)).collect(Collectors.joining());
        return DigestUtils.md5DigestAsHex((collect).getBytes());
    }
}
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.doumee.dao.admin.request;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author T14
 */
@Data
public class LaborMemberDTO {
    @ApiModelProperty(value = "所属组织编码(关联company表)")
    private Integer companyId;
    @ApiModelProperty(value = "人脸照片")
    private String faceImg;
    @ApiModelProperty(value = "健康码")
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客  2内部人员")
    private Integer type;
    @ApiModelProperty(value = "访客名称")
    private String name;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "身份证号")
    private String idcardNo;
    @ApiModelProperty(value = "证件显示信息")
    private String idcardDecode;
    @ApiModelProperty(value = "培训有效期起始")
    private Date startTime;
    @ApiModelProperty(value = "培训有效期结束")
    private Date endTime;
    @ApiModelProperty(value = "性别 1 : ç”· ï¼Œ 0 : å¥³")
    private Integer sex;
    @ApiModelProperty(value = "添加人编码(自关联)", example = "1")
    private Integer parentId;
}
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.doumee.dao.admin.response;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * @author T14
 */
@Data
@ApiModel("劳务人员信息表")
public class MemberInfoDTO {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建人编码")
    private String creatorName;
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "所属组织编码(关联company表)")
    private Integer companyId;
    @ApiModelProperty(value = "公司名称")
    private String companyName;
    @ApiModelProperty(value = "公司负责人")
    private String linkName;
    @ApiModelProperty(value = "公司负责人联系电话")
    @ExcelColumn(name="联系电话")
    private String linkPhone;
    @ApiModelProperty(value = "人脸照片")
    private String faceImg;
    @ApiModelProperty(value = "健康码")
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客  2内部人员")
    private Integer type;
    @ApiModelProperty(value = "访客名称")
    private String name;
    @ApiModelProperty(value = "性别")
    private Integer sex;
    @ApiModelProperty(value = "访客年龄")
    private Date birthday;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "身份证号(MD4加密)")
    private String idcardNo;
    @ApiModelProperty(value = "证件显示信息")
    private String idcardDecode;
    @ApiModelProperty(value = "工号")
    private String code;
    @ApiModelProperty(value = "班次")
    private String classes;
    @ApiModelProperty(value = "状态 0正常 1禁用 2拉黑/冻结")
    private Integer status;
    @ApiModelProperty(value = "添加人编码(自关联)")
    private Integer parentId;
    @ApiModelProperty(value = "微信openid")
    private String openid;
    @ApiModelProperty(value = "培训有效期结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date trainTimeEndTime;
    @ApiModelProperty(value = "门禁有效期结束")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date empowerEndTime;
}
server/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.dao.business.join;
import com.doumee.dao.business.model.Member;
import com.github.yulichang.base.mapper.MPJJoinMapper;
import org.springframework.stereotype.Repository;
/**
 * @author T14
 */
@Repository
public interface MemberJoinMapper extends MPJJoinMapper<Member> {
}
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -32,7 +32,7 @@
    @ApiModelProperty(value = "创建人名称")
    @TableField(exist = false)
    private Integer creatorName;
    private String creatorName;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
@@ -66,6 +66,10 @@
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "劳务人数")
    @TableField(exist = false)
    private Integer countNum;
    @ApiModelProperty(value = "图标")
    @ExcelColumn(name="图标")
    private String imgurl;
@@ -80,7 +84,7 @@
    @ApiModelProperty(value = "分类编码名称")
    @TableField(exist = false)
    private Integer categoryName;
    private String categoryName;
    @ApiModelProperty(value = "企业代码")
    @ExcelColumn(name="企业代码")
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
@@ -65,11 +65,11 @@
    @ApiModelProperty(value = "门禁有效期开始")
    @ExcelColumn(name="门禁有效期开始")
    private String startTime;
    private Date startTime;
    @ApiModelProperty(value = "门禁有效期结束", example = "1")
    @ExcelColumn(name="门禁有效期结束")
    private Integer endTime;
    private Date endTime;
    @ApiModelProperty(value = "导入状态", example = "1")
    @ExcelColumn(name="导入状态")
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/TrainTime.java
@@ -57,11 +57,11 @@
    @ApiModelProperty(value = "有效期开始")
    @ExcelColumn(name="有效期开始")
    private String startTime;
    private Date startTime;
    @ApiModelProperty(value = "有效期结束", example = "1")
    @ExcelColumn(name="有效期结束")
    private Integer endTime;
    private Date endTime;
    @ApiModelProperty(value = "导入状态", example = "1")
    @ExcelColumn(name="导入状态")
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,7 +1,10 @@
package com.doumee.service.business;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.business.model.Member;
import java.util.List;
@@ -14,11 +17,19 @@
    /**
     * åˆ›å»º
     *
     *
     * @param member å®žä½“对象
     * @return Integer
     */
    Integer create(Member member);
    /**
     *
     * åˆ›å»ºåŠ³åŠ¡äººå‘˜ä¿¡æ¯
     * @param member
     * @return
     */
    Integer laborMemberCreate(LaborMemberDTO member);
    /**
     * ä¸»é”®åˆ é™¤
@@ -47,6 +58,14 @@
     * @param member å®žä½“对象
     */
    void updateById(Member member);
    /**
     * ä¸»é”®æ›´æ–°åŠ³åŠ¡äººå‘˜çŠ¶æ€
     *
     * @param member å®žä½“对象
     */
    void updateStatusById(Member member);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
@@ -78,7 +97,7 @@
     * @return List<Member>
     */
    List<Member> findList(Member member);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
@@ -87,6 +106,16 @@
     */
    PageData<Member> findPage(PageWrap<Member> pageWrap);
    /**
     * åˆ†é¡µåŠ³åŠ¡ç”¨æˆ·ä¿¡æ¯æŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Member>
     */
    PageData<MemberInfoDTO> findLaborMemberInfoPage(PageWrap<MemberInfoDTO> pageWrap);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -24,6 +24,7 @@
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * ä¼ä¸šä¿¡æ¯è¡¨Service实现
@@ -50,7 +51,6 @@
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        checkUnique(company);
        Company insert = new Company();
        insert.setCreator(loginUserInfo.getId());
        insert.setCreateDate(new Date());
@@ -233,6 +233,7 @@
                    .leftJoin(SystemUser.class,SystemUser::getId,Company::getCreator);
        queryWrapper.selectAll(Company.class)
                    .selectAs(Category::getName,Company::getCategoryName)
                    .select("count(t1.id) as countNum")
                    .selectAs(SystemUser::getRealname,Company::getCreatorName);
        IPage<Company> companyIPage = companyJoinMapper.selectJoinPage(page, Company.class, queryWrapper);
        return PageData.from(companyIPage);
@@ -255,9 +256,16 @@
                .eq(Company::getType,Constants.ZERO)
                .eq(Company::getName,company.getName());
        List<Company> companies = companyMapper.selectList(wrapper);
        if (CollectionUtils.isNotEmpty(companies)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"企业信息已存在");
        if (CollectionUtils.isEmpty(companies)){
            return;
        }
        //新增的情况存在记录
        if (Objects.isNull(company.getId())){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"公司名称已存在");
        }
        //修改的情况存在记录 åŒ¹é…ä¸åˆ° own
        if (!companies.stream().map(s -> s.getId()).anyMatch(s -> s.equals(company.getId()))){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"公司名称已存在");
        }
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1,20 +1,41 @@
package com.doumee.service.business.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdcardUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.TrainTimeMapper;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Empower;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.TrainTime;
import com.doumee.service.business.MemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * äººå‘˜ä¿¡æ¯è¡¨Service实现
@@ -27,10 +48,70 @@
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private MemberJoinMapper memberJoinMapper;
    @Autowired
    private TrainTimeMapper trainTimeMapper;
    @Override
    public Integer create(Member member) {
        memberMapper.insert(member);
        return member.getId();
    }
    @Transactional
    @Override
    public Integer laborMemberCreate(LaborMemberDTO member) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if (IdcardUtil.isValidCard(member.getIdcardNo())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"身份证号格式有误");
        }
        if (IdcardUtil.getGenderByIdCard(member.getIdcardNo()) == member.getSex()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"性别有误");
        }
        //获取出生日期
        String birthByIdCard = IdcardUtil.getBirthByIdCard(member.getIdcardNo());
        //脱敏操作
        String hide = IdcardUtil.hide(member.getIdcardNo(), 5, 14);
        //转换日期
        DateTime yyyyMMdd = DateUtil.parse(birthByIdCard, "yyyyMMdd");
        Member insert = new Member();
        insert.setCreator(loginUserInfo.getId());
        insert.setCreateDate(new Date());
        insert.setEditor(loginUserInfo.getId());
        insert.setEditDate(new Date());
        insert.setIsdeleted(Constants.ZERO);
        insert.setCompanyId(member.getCompanyId());
        insert.setFaceImg(member.getFaceImg());
        insert.setImgurl(member.getImgurl());
        insert.setType(Constants.ZERO);
        insert.setName(member.getName());
        insert.setBirthday(yyyyMMdd);
        insert.setPhone(member.getPhone());
        insert.setIdcardNo(Utils.Secure.encryptString(member.getIdcardNo()));
        IdcardUtil.isValidCard(member.getIdcardNo());
        insert.setIdcardDecode(hide);
        insert.setStatus(Constants.ZERO);
        insert.setParentId(member.getParentId());
        memberMapper.insert(insert);
        TrainTime trainTime = new TrainTime();
        trainTime.setCreator(loginUserInfo.getId().toString());
        trainTime.setCreateDate(new Date());
        trainTime.setEdirot(loginUserInfo.getId().toString());
        trainTime.setEditDate(new Date());
        trainTime.setIsdeleted(Constants.ZERO);
        trainTime.setMemberId(insert.getId());
        trainTime.setStartTime(Utils.Date.getStart(member.getStartTime()));
        trainTime.setEndTime(Utils.Date.getDayEnd(member.getEndTime()));
//        trainTime.setImportStatus();
//        trainTime.setImportInfo();
        trainTimeMapper.insert(trainTime);
        return insert.getId();
    }
    @Override
@@ -55,6 +136,16 @@
    @Override
    public void updateById(Member member) {
        memberMapper.updateById(member);
    }
    @Override
    public void updateStatusById(Member member) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Member update = new Member();
        update.setEditDate(new Date());
        update.setEditor(loginUserInfo.getId());
        update.setStatus(member.getStatus());
        memberMapper.updateById(update);
    }
    @Override
@@ -83,7 +174,7 @@
        QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
        return memberMapper.selectList(wrapper);
    }
    @Override
    public PageData<Member> findPage(PageWrap<Member> pageWrap) {
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -225,6 +316,35 @@
    }
    @Override
    public PageData<MemberInfoDTO> findLaborMemberInfoPage(PageWrap<MemberInfoDTO> pageWrap) {
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
        MemberInfoDTO model = pageWrap.getModel();
        Utils.MP.blankToNull(model);
        Date end = Utils.Date.getEnd(pageWrap.getModel().getTrainTimeEndTime());
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .leftJoin(TrainTime.class,TrainTime::getMemberId,Member::getId)
                .leftJoin(Empower.class,Empower::getMemberId,Member::getId);
        queryWrapper.selectAll(Member.class)
                    .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
                    .selectAs(Company::getLinkName,MemberInfoDTO::getLinkName)
                    .select("Max(t1.endTime)","trainTimeEndTime")
                    .select("Max(t2.endTime)","empowerEndTime");
        queryWrapper.eq(Objects.nonNull(model.getCompanyId()),Member::getCompanyId,model.getCompanyId())
                    .like(StringUtils.isNotBlank(model.getName()),Member::getName,model.getName())
                    .like(StringUtils.isNotBlank(model.getPhone()),Member::getPhone,model.getPhone())
                    .like(StringUtils.isNotBlank(model.getIdcardDecode()),Member::getIdcardDecode,model.getIdcardDecode())
                    .having("trainTimeEndTime < "+ DateUtil.format(end,"yyyy-MM-dd HH:mm:ss"));
        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
        if (!CollectionUtils.isEmpty(memberIPage.getRecords())){
            memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode())));
        }
        return PageData.from(memberIPage);
    }
    @Override
    public long count(Member member) {
        QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
        return memberMapper.selectCount(wrapper);