| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | @Autowired |
| | | private CategoryMapper categoryMapper; |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Override |
| | | public Integer create(DriverInfo driverInfo) { |
| | |
| | | @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()); |
| | |
| | | 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 |
| | |
| | | member.setNickName(telephone); |
| | | member.setName(telephone); |
| | | member.setUserType(Constants.ONE); |
| | | member.setDriverStatus(Constants.ZERO); |
| | | 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); |
| | |
| | | member.setUseIdentity(Constants.ZERO); |
| | | memberMapper.insert(member); |
| | | |
| | | // 创建司机基础信息(status=0,注册状态) |
| | | // 创建司机基础信息 |
| | | DriverInfo driverInfo = new DriverInfo(); |
| | | driverInfo.setDeleted(Constants.ZERO); |
| | | driverInfo.setCreateTime(now); |
| | |
| | | driverInfo.setTelephone(telephone); |
| | | driverInfo.setMemberId(member.getId()); |
| | | driverInfo.setStatus(Constants.ZERO); |
| | | driverInfo.setAuditStatus(null); |
| | | driverInfoMapper.insert(driverInfo); |
| | | } |
| | | |
| | |
| | | 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(), "当前状态不允许提交认证"); |
| | | } |
| | | // 根据车辆类型判断是否需要驾驶证 |
| | |
| | | .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) |
| | |
| | | |
| | | // 更新会员司机认证状态为认证中 |
| | | memberMapper.update(new UpdateWrapper<Member>().lambda() |
| | | .set(Member::getDriverStatus, Constants.ONE) |
| | | .set(Member::getBusinessStatus, Constants.ONE) |
| | | .set(Member::getUpdateTime, now) |
| | | .eq(Member::getId, memberId)); |
| | | } |
| | |
| | | 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::getDriverStatus, driverStatus) |
| | | .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())); |
| | | } |
| | | |
| | | /** |
| | | * 批量保存附件记录 |
| | | */ |