rk
2 天以前 3aef471b170a703b501ddb4d9d2a12791d07ff28
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.SmsrecordMapper;
import com.doumee.dao.business.CategoryMapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.DriverInfo;
import com.doumee.dao.business.model.Member;
@@ -24,12 +25,14 @@
import com.doumee.dao.business.model.Smsrecord;
import com.doumee.dao.vo.AccountResponse;
import com.doumee.dao.dto.AuditDTO;
import com.doumee.dao.dto.ChangeStatusDTO;
import com.doumee.dao.dto.DriverLoginRequest;
import com.doumee.dao.dto.DriverRegisterRequest;
import com.doumee.dao.dto.DriverVerifyRequest;
import com.doumee.service.business.AliSmsService;
import com.doumee.service.business.DriverInfoService;
import com.alibaba.fastjson.JSONObject;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -74,6 +77,9 @@
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    public Integer create(DriverInfo driverInfo) {
@@ -139,71 +145,41 @@
    @Override
    public PageData<DriverInfo> findPage(PageWrap<DriverInfo> pageWrap) {
        IPage<DriverInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<DriverInfo> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<DriverInfo> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setDeleted(Constants.ZERO);
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(DriverInfo::getId, pageWrap.getModel().getId());
        // 司机姓名/手机号(关键字模糊查询)
        if (StringUtils.isNotBlank(pageWrap.getModel().getKeyword())) {
            queryWrapper.and(w -> w
                    .like(DriverInfo::getName, pageWrap.getModel().getKeyword())
                    .or()
                    .like(DriverInfo::getTelephone, pageWrap.getModel().getKeyword()));
        }
        if (pageWrap.getModel().getDeleted() != null) {
            queryWrapper.lambda().eq(DriverInfo::getDeleted, pageWrap.getModel().getDeleted());
        // 车牌号
        if (StringUtils.isNotBlank(pageWrap.getModel().getCarCode())) {
            queryWrapper.like(DriverInfo::getCarCode, pageWrap.getModel().getCarCode());
        }
        if (pageWrap.getModel().getCreateUser() != null) {
            queryWrapper.lambda().eq(DriverInfo::getCreateUser, pageWrap.getModel().getCreateUser());
        }
        if (pageWrap.getModel().getCreateTime() != null) {
            queryWrapper.lambda().ge(DriverInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
            queryWrapper.lambda().le(DriverInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
        }
        if (pageWrap.getModel().getUpdateUser() != null) {
            queryWrapper.lambda().eq(DriverInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
        }
        if (pageWrap.getModel().getUpdateTime() != null) {
            queryWrapper.lambda().ge(DriverInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
            queryWrapper.lambda().le(DriverInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(DriverInfo::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().like(DriverInfo::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getTelephone() != null) {
            queryWrapper.lambda().like(DriverInfo::getTelephone, pageWrap.getModel().getTelephone());
        }
        if (pageWrap.getModel().getIdcard() != null) {
            queryWrapper.lambda().eq(DriverInfo::getIdcard, pageWrap.getModel().getIdcard());
        }
        if (pageWrap.getModel().getMaritalStatus() != null) {
            queryWrapper.lambda().eq(DriverInfo::getMaritalStatus, pageWrap.getModel().getMaritalStatus());
        }
        if (pageWrap.getModel().getCarType() != null) {
            queryWrapper.lambda().eq(DriverInfo::getCarType, pageWrap.getModel().getCarType());
        }
        if (pageWrap.getModel().getCarCode() != null) {
            queryWrapper.lambda().like(DriverInfo::getCarCode, pageWrap.getModel().getCarCode());
        }
        if (pageWrap.getModel().getCardStartDate() != null) {
            queryWrapper.lambda().ge(DriverInfo::getCardStartDate, Utils.Date.getStart(pageWrap.getModel().getCardStartDate()));
            queryWrapper.lambda().le(DriverInfo::getCardStartDate, Utils.Date.getEnd(pageWrap.getModel().getCardStartDate()));
        }
        if (pageWrap.getModel().getCardEndDate() != null) {
            queryWrapper.lambda().ge(DriverInfo::getCardEndDate, Utils.Date.getStart(pageWrap.getModel().getCardEndDate()));
            queryWrapper.lambda().le(DriverInfo::getCardEndDate, Utils.Date.getEnd(pageWrap.getModel().getCardEndDate()));
        }
        // 状态
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(DriverInfo::getStatus, pageWrap.getModel().getStatus());
            queryWrapper.eq(DriverInfo::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getAuditTime() != null) {
            queryWrapper.lambda().ge(DriverInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
            queryWrapper.lambda().le(DriverInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
        // 审批状态
        if (pageWrap.getModel().getAuditStatus() != null) {
            queryWrapper.eq(DriverInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
        }
        if (pageWrap.getModel().getAuditUser() != null) {
            queryWrapper.lambda().eq(DriverInfo::getAuditUser, pageWrap.getModel().getAuditUser());
        // 创建日期范围
        if (pageWrap.getModel().getCreateTimeStart() != null) {
            queryWrapper.ge(DriverInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTimeStart()));
        }
        if (pageWrap.getModel().getMemberId() != null) {
            queryWrapper.lambda().eq(DriverInfo::getMemberId, pageWrap.getModel().getMemberId());
        if (pageWrap.getModel().getCreateTimeEnd() != null) {
            queryWrapper.le(DriverInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTimeEnd()));
        }
        // 子查询:余额
        queryWrapper.selectAll(DriverInfo.class)
                .select(" ( select ifnull(sum(r.OPT_TYPE * r.AMOUNT),0) from revenue r where r.MEMBER_TYPE = 1 and r.MEMBER_ID= t.id and r.VAILD_STATUS = 1 ) as memberAmount ")
                .selectAs(Category::getName,DriverInfo::getCarTypeName)
                .leftJoin(Category.class, Category::getId,DriverInfo::getCarType);
        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -211,7 +187,11 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(driverInfoMapper.selectPage(page, queryWrapper));
        PageData<DriverInfo> pageData = PageData.from(driverInfoMapper.selectPage(page, queryWrapper));
        for (DriverInfo d : pageData.getRecords()) {
            d.setGender(Constants.getGenderByIdCard(d.getIdcard()));
        }
        return pageData;
    }
    @Override
@@ -315,9 +295,6 @@
            member.setBusinessStatus(Constants.ZERO);
            member.setPassword(secure.encryptPassword(defaultPassword, salt));
            member.setSalt(salt);
            member.setWorkerIdentity(Constants.ZERO);
            member.setDriverIdentity(Constants.ZERO);
            member.setChefIdentity(Constants.ZERO);
            member.setAmount(Constants.ZERO.longValue());
            member.setTotalAmount(Constants.ZERO.longValue());
            member.setStatus(Constants.ZERO);
@@ -329,7 +306,7 @@
            member.setUseIdentity(Constants.ZERO);
            memberMapper.insert(member);
            // 创建司机基础信息(status=0,注册状态)
            // 创建司机基础信息
            DriverInfo driverInfo = new DriverInfo();
            driverInfo.setDeleted(Constants.ZERO);
            driverInfo.setCreateTime(now);
@@ -337,6 +314,7 @@
            driverInfo.setTelephone(telephone);
            driverInfo.setMemberId(member.getId());
            driverInfo.setStatus(Constants.ZERO);
            driverInfo.setAuditStatus(null);
            driverInfoMapper.insert(driverInfo);
        }
@@ -408,10 +386,9 @@
        if (Objects.isNull(driverInfo)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        // 状态校验:status=0(注册)或status=3(审批驳回)可提交认证
        if (driverInfo.getStatus() != null
                && !Constants.equalsInteger(driverInfo.getStatus(), Constants.ZERO)
                && !Constants.equalsInteger(driverInfo.getStatus(), Constants.THREE)) {
        // 状态校验:auditStatus=null(未提交)或auditStatus=2(审批驳回)可提交认证
        if (driverInfo.getAuditStatus() != null
                && !Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.TWO)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前状态不允许提交认证");
        }
        // 根据车辆类型判断是否需要驾驶证
@@ -458,7 +435,7 @@
                .set(DriverInfo::getCardEndDate, request.getCardEndDate())
                .set(DriverInfo::getIdcardImg, request.getIdcardImg())
                .set(DriverInfo::getIdcardImgBack, request.getIdcardImgBack())
                .set(DriverInfo::getStatus, Constants.ONE)
                .set(DriverInfo::getAuditStatus, Constants.ZERO)
                .set(DriverInfo::getUpdateTime, now)
                .set(DriverInfo::getAuditRemark, null)
                .set(DriverInfo::getAuditTime, null)
@@ -533,37 +510,108 @@
        if (Objects.isNull(driverInfo)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        // 只有状态为1(待审批)且已填写认证信息才能审批
        if (!Constants.equalsInteger(driverInfo.getStatus(), Constants.ONE)
        // 只有审批状态为0(待审批)且已填写认证信息才能审批
        if (!Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.ZERO)
                || StringUtils.isBlank(driverInfo.getIdcard())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "当前状态不允许审批");
        }
        Date now = new Date();
        // 审批结果:auditDTO.auditStatus 0=通过→driverInfo.status=2,1=拒绝→driverInfo.status=3
        Integer newStatus;
        // 审批结果:auditDTO.auditStatus 0=通过→auditStatus=1,1=拒绝→auditStatus=2
        Integer newAuditStatus;
        if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) {
            newStatus = Constants.TWO;  // 审批通过
            newAuditStatus = Constants.ONE;  // 审批通过
            // 审批通过时司机定级为必填
            if (auditDTO.getDriverLevel() == null || auditDTO.getDriverLevel() < 1 || auditDTO.getDriverLevel() > 5) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "审批通过时必须填写司机定级");
            }
        } else if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ONE)) {
            newStatus = Constants.THREE;  // 审批驳回
            newAuditStatus = Constants.TWO;  // 审批驳回
        } else {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "审批状态参数错误");
        }
        // 更新司机状态
        // 更新司机审批状态
        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
                .set(DriverInfo::getStatus, newStatus)
                .set(DriverInfo::getAuditStatus, newAuditStatus)
                .set(DriverInfo::getAuditTime, now)
                .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark())
                .set(DriverInfo::getAuditUser, auditDTO.getAuditUser())
                .set(auditDTO.getDriverLevel() != null, DriverInfo::getDriverLevel, auditDTO.getDriverLevel())
                .set(DriverInfo::getUpdateTime, now)
                .eq(DriverInfo::getId, auditDTO.getId()));
        // 更新会员司机认证状态:通过=2,驳回=3
        Integer driverStatus = Constants.equalsInteger(newStatus, Constants.TWO) ? Constants.TWO : Constants.THREE;
        Integer driverStatus = Constants.equalsInteger(newAuditStatus, Constants.ONE) ? Constants.TWO : Constants.THREE;
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .set(Member::getBusinessStatus, driverStatus)
                .set(Member::getUpdateTime, now)
                .eq(Member::getId, driverInfo.getMemberId()));
    }
    @Override
    public DriverInfo getDetail(Integer id) {
        DriverInfo driverInfo = driverInfoMapper.selectById(id);
        if (Objects.isNull(driverInfo) || Constants.equalsInteger(driverInfo.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        // 拼接图片前缀
        String imgPrefix = "";
        try {
            imgPrefix = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.RESOURCE_PATH).getCode()
                    + systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DRIVER_FILES).getCode();
        } catch (Exception e) {
            // 未配置时忽略
        }
        driverInfo.setImgPrefix(imgPrefix);
        driverInfo.setGender(Constants.getGenderByIdCard(driverInfo.getIdcard()));
        // 查询车辆类型名称和是否需要驾驶证
        if (driverInfo.getCarType() != null) {
            Category category = categoryMapper.selectById(driverInfo.getCarType());
            if (Objects.nonNull(category)) {
                driverInfo.setCarTypeName(category.getName());
                driverInfo.setNeedLicense(Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE) ? Constants.ONE : Constants.ZERO);
            }
        }
        // 查询照片列表:objType=6车辆照片、7驾驶证照片、8其他资料照片
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId, driverInfo.getId())
                .in(Multifile::getObjType, 6, 7, 8)
                .orderByAsc(Multifile::getSortnum));
        if (!CollectionUtils.isEmpty(multifileList)) {
            for (Multifile mf : multifileList) {
                mf.setFileurlFull(imgPrefix + mf.getFileurl());
                if (Constants.equalsInteger(mf.getObjType(), 6)) {
                    driverInfo.getCarImgList().add(mf);
                } else if (Constants.equalsInteger(mf.getObjType(), 7)) {
                    driverInfo.getLicenseImgList().add(mf);
                } else if (Constants.equalsInteger(mf.getObjType(), 8)) {
                    driverInfo.getOtherImgList().add(mf);
                }
            }
        }
        return driverInfo;
    }
    @Override
    public void changeStatus(ChangeStatusDTO dto) {
        if (dto.getId() == null) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "主键不能为空");
        }
        if (dto.getStatus() == null || (dto.getStatus() != 0 && dto.getStatus() != 1)) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "状态参数错误,0=启用;1=禁用");
        }
        DriverInfo driverInfo = driverInfoMapper.selectById(dto.getId());
        if (Objects.isNull(driverInfo) || Constants.equalsInteger(driverInfo.getDeleted(), Constants.ONE)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        driverInfo.setStatus(dto.getStatus());
        driverInfo.setUpdateTime(new Date());
        driverInfoMapper.updateById(driverInfo);
        // 联动修改会员状态(member主键与driver_info主键一致)
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .set(Member::getStatus, dto.getStatus())
                .set(Member::getUpdateTime, new Date())
                .eq(Member::getId, driverInfo.getId()));
    }
    /**
     * 批量保存附件记录
     */