| | |
| | | import com.doumee.dao.vo.DriverCancelLimitVO; |
| | | import com.doumee.dao.vo.DriverCenterVO; |
| | | import com.doumee.dao.vo.DriverGrabOrderVO; |
| | | import com.doumee.dao.system.model.SystemUser; |
| | | import com.doumee.service.system.SystemUserService; |
| | | import com.doumee.dao.vo.DriverOrderDetailVO; |
| | | import com.doumee.core.utils.aliyun.AliSmsService; |
| | | import com.doumee.service.business.DriverInfoService; |
| | |
| | | |
| | | @Autowired |
| | | private AreasBizImpl areasBiz; |
| | | |
| | | @Autowired |
| | | private SystemUserService systemUserService; |
| | | |
| | | /** |
| | | * 发送订单站内信通知 |
| | |
| | | .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()); |
| | | } else { |
| | | queryWrapper.orderByAsc(sortData.getProperty()); |
| | | } |
| | | } |
| | | queryWrapper.orderByDesc(DriverInfo::getId); |
| | | PageData<DriverInfo> pageData = PageData.from(driverInfoMapper.selectPage(page, queryWrapper)); |
| | | for (DriverInfo d : pageData.getRecords()) { |
| | | d.setGender(Constants.getGenderByIdCard(d.getIdcard())); |
| | |
| | | String code = RandomStringUtils.randomNumeric(6); |
| | | // 发送短信 |
| | | String templateParam = "{\"code\":\"" + code + "\"}"; |
| | | AliSmsService.sendSms(telephone, "SMS_491325122", templateParam); |
| | | AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam); |
| | | // 保存短信记录 |
| | | Smsrecord smsrecord = new Smsrecord(); |
| | | smsrecord.setDeleted(Constants.ZERO); |
| | |
| | | driverInfo.setMemberId(member.getId()); |
| | | driverInfo.setStatus(Constants.ZERO); |
| | | driverInfo.setAuditStatus(99); |
| | | driverInfo.setJpushAlias(org.springframework.util.DigestUtils.md5DigestAsHex(telephone.getBytes())); |
| | | driverInfoMapper.insert(driverInfo); |
| | | } |
| | | |
| | |
| | | if (Objects.nonNull(category)) { |
| | | driverInfo.setCarTypeName(category.getName()); |
| | | driverInfo.setNeedLicense(Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE) ? Constants.ONE : Constants.ZERO); |
| | | driverInfo.setDriverType(category.getDetail()); |
| | | } |
| | | } |
| | | // 查询省市区信息 |
| | |
| | | } |
| | | } |
| | | } |
| | | // 查询审批人名称 |
| | | if (driverInfo.getAuditUser() != null) { |
| | | try { |
| | | SystemUser auditUser = systemUserService.findById(driverInfo.getAuditUser()); |
| | | if (auditUser != null) { |
| | | driverInfo.setAuditUserName(auditUser.getRealname()); |
| | | } |
| | | } catch (Exception e) { |
| | | // 审批人已删除等异常忽略 |
| | | } |
| | | } |
| | | return driverInfo; |
| | | } |
| | | |
| | | @Override |
| | | public DriverInfo updateDriverInfo(DriverVerifyRequest request) { |
| | | Integer id = request.getId(); |
| | | if (id == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "司机主键不能为空"); |
| | | } |
| | | DriverInfo driverInfo = driverInfoMapper.selectById(id); |
| | | if (Objects.isNull(driverInfo) || Constants.equalsInteger(driverInfo.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | Date now = new Date(); |
| | | driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda() |
| | | .set(DriverInfo::getName, request.getName()) |
| | | .set(DriverInfo::getIdcard, request.getIdcard()) |
| | | .set(DriverInfo::getMaritalStatus, request.getMaritalStatus()) |
| | | .set(DriverInfo::getAreaId, request.getAreaId()) |
| | | .set(DriverInfo::getLivePlace, request.getLivePlace()) |
| | | .set(DriverInfo::getCarCode, request.getCarCode()) |
| | | .set(DriverInfo::getCarType, request.getCarType()) |
| | | .set(DriverInfo::getCarColor, request.getCarColor()) |
| | | .set(DriverInfo::getCardStartDate, request.getCardStartDate()) |
| | | .set(DriverInfo::getCardEndDate, request.getCardEndDate()) |
| | | .set(DriverInfo::getIdcardImg, request.getIdcardImg()) |
| | | .set(DriverInfo::getIdcardImgBack, request.getIdcardImgBack()) |
| | | .set(DriverInfo::getAliAccount, request.getAliAccount()) |
| | | .set(DriverInfo::getAliName, request.getAliName()) |
| | | .set(DriverInfo::getUpdateTime, now) |
| | | .eq(DriverInfo::getId, id)); |
| | | |
| | | // 删除旧的照片记录并保存新的 |
| | | multifileMapper.delete(new QueryWrapper<Multifile>().lambda() |
| | | .eq(Multifile::getObjId, id) |
| | | .in(Multifile::getObjType, |
| | | Constants.FileType.DRIVER_CAR.getKey(), |
| | | Constants.FileType.DRIVER_LICENSE.getKey(), |
| | | Constants.FileType.DRIVER_OTHER.getKey())); |
| | | if (!CollectionUtils.isEmpty(request.getCarImgUrls())) { |
| | | saveMultifileList(id, Constants.FileType.DRIVER_CAR.getKey(), request.getCarImgUrls(), now); |
| | | } |
| | | if (!CollectionUtils.isEmpty(request.getLicenseImgUrls())) { |
| | | saveMultifileList(id, Constants.FileType.DRIVER_LICENSE.getKey(), request.getLicenseImgUrls(), now); |
| | | } |
| | | if (!CollectionUtils.isEmpty(request.getOtherImgUrls())) { |
| | | saveMultifileList(id, Constants.FileType.DRIVER_OTHER.getKey(), request.getOtherImgUrls(), now); |
| | | } |
| | | |
| | | return getDetail(id); |
| | | } |
| | | |
| | | @Override |
| | |
| | | vo.setCarCode(driver.getCarCode()); |
| | | vo.setScore(driver.getScore() != null ? driver.getScore().toPlainString() : "0"); |
| | | vo.setDriverLevel(driver.getDriverLevel()); |
| | | vo.setDriverLevelName(Constants.getDriverLevelName(driver.getDriverLevel())); |
| | | vo.setAuditStatus(driver.getAuditStatus()); |
| | | vo.setAuditRemark(driver.getAuditRemark()); |
| | | vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L); |
| | |
| | | + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode(); |
| | | vo.setFullImgUrl(imgPrefix + driver.getImgurl()); |
| | | } |
| | | |
| | | // 今日预计佣金:revenue表中今天的收入记录金额之和 |
| | | Category category = categoryMapper.selectById(driver.getCarType()); |
| | | if(Objects.nonNull(category)&&StringUtils.isNotBlank(category.getDetail())){ |
| | | vo.setDriverType(category.getDetail()); |
| | | } |
| | | // 今日预计佣金:今日接单的司机佣金 + 平台奖励金 |
| | | Date now = new Date(); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(now); |
| | |
| | | cal.set(Calendar.MILLISECOND, 0); |
| | | Date todayStart = cal.getTime(); |
| | | |
| | | QueryWrapper<Revenue> revenueWrapper = new QueryWrapper<>(); |
| | | revenueWrapper.lambda() |
| | | .eq(Revenue::getMemberId, memberId) |
| | | .eq(Revenue::getMemberType, Constants.ONE) |
| | | .eq(Revenue::getOptType, Constants.ONE) |
| | | .eq(Revenue::getDeleted, Constants.ZERO) |
| | | .ge(Revenue::getCreateTime, todayStart); |
| | | revenueWrapper.select("IFNULL(SUM(AMOUNT),0) as amount"); |
| | | Revenue sumResult = revenueMapper.selectOne(revenueWrapper); |
| | | vo.setTodayCommission(sumResult != null && sumResult.getAmount() != null ? sumResult.getAmount() : 0L); |
| | | QueryWrapper<Orders> commissionWrapper = new QueryWrapper<>(); |
| | | commissionWrapper.lambda() |
| | | .eq(Orders::getAcceptDriver, driver.getId()) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .ge(Orders::getAcceptTime, todayStart); |
| | | commissionWrapper.select("IFNULL(SUM(DRIVER_FEE),0) as driverFee", "IFNULL(SUM(PLATFORM_REWARD_AMOUNT),0) as platformRewardAmount"); |
| | | Orders commissionResult = ordersMapper.selectOne(commissionWrapper); |
| | | long driverFee = commissionResult != null && commissionResult.getDriverFee() != null ? commissionResult.getDriverFee() : 0L; |
| | | long rewardAmount = commissionResult != null && commissionResult.getPlatformRewardAmount() != null ? commissionResult.getPlatformRewardAmount() : 0L; |
| | | vo.setTodayCommission(driverFee + rewardAmount); |
| | | |
| | | // 今日接单数:今天完成的订单数(acceptDriver=司机主键,状态=已完成) |
| | | Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda() |
| | |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | | // 是否存在特大尺寸 |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.detail = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | // JOIN |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | |
| | | .select("s1.address", Orders::getDepositShopAddress) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s1.link_phone", Orders::getDepositShopLinkPhone) |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID and s2.DELETED = 0") |
| | | .leftJoin("category c1 on c1.id = t.GOOD_TYPE and c1.DELETED = 0") |
| | | .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.DELETED = 0 and c2.TYPE = 3") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID ") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID ") |
| | | .leftJoin("category c1 on c1.id = t.GOOD_TYPE ") |
| | | .leftJoin("category c2 on c2.id = c1.RELATION_ID and c2.TYPE = 3") |
| | | .eq(Orders::getAcceptDriver, driver.getId()) |
| | | .eq(Orders::getType, Constants.ONE) |
| | | .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus()) |
| | |
| | | wrapper.selectAll(Orders.class) |
| | | .select("s1.name", Orders::getDepositShopName) |
| | | .select("s1.address", Orders::getDepositShopAddress) |
| | | .select("s1.telephone", Orders::getDepositShopLinkPhone) |
| | | .select("s1.link_phone", Orders::getDepositShopLinkPhone) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.telephone", Orders::getTakeShopLinkPhone) |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("s2.link_phone", Orders::getTakeShopLinkPhone) |
| | | .select("c1.other_field as c2OtherField") |
| | | .select("c1.name as goodTypeName") |
| | | .select("IF(EXISTS(SELECT 1 FROM orders_detail od JOIN category c3 ON c3.id = od.LUGGAGE_ID AND c3.TYPE = 4 AND c3.OTHER_FIELD = '1' WHERE od.ORDER_ID = t.ID AND od.DELETED = 0), 1, 0) as hasOversized") |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID and s1.DELETED = 0") |
| | |
| | | |
| | | // 7. 通知会员:司机已抢单 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_GRABBED, orderId, |
| | | "orderNo", order.getCode(), |
| | | "driverName", driver.getName()); |
| | | |
| | | // 通知存件门店:订单已抢单待取件 |
| | |
| | | vo.setDepositDistance(formatDistance(distKm)); |
| | | } |
| | | |
| | | // 取件信息 + 联系电话(使用Orders自带坐标) |
| | | // 取件信息(使用Orders自带坐标) |
| | | boolean hasTakeShop = order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopName()); |
| | | if (hasTakeShop) { |
| | | vo.setTakeName(order.getTakeShopName()); |
| | | vo.setTakeAddress(order.getTakeShopAddress()); |
| | | vo.setTakeShopId(order.getTakeShopId()); |
| | | vo.setContactPhone(order.getTakeShopLinkPhone()); |
| | | } else { |
| | | vo.setTakeName(order.getTakeLocation()); |
| | | vo.setTakeAddress(order.getTakeLocationRemark()); |
| | | vo.setContactPhone(order.getTakePhone()); |
| | | } |
| | | vo.setTakeLng(order.getTakeLgt() != null ? order.getTakeLgt().doubleValue() : null); |
| | | vo.setTakeLat(order.getTakeLat() != null ? order.getTakeLat().doubleValue() : null); |
| | |
| | | vo.setStatus(order.getStatus()); |
| | | vo.setStatusDesc(getStatusDesc(order.getStatus())); |
| | | vo.setCreateTime(order.getCreateTime()); |
| | | |
| | | // 联系电话(按订单状态) |
| | | if (Constants.equalsInteger(order.getStatus(), Constants.THREE)) { |
| | | vo.setContactPhone(order.getDepositShopLinkPhone()); |
| | | } else if (Constants.equalsInteger(order.getStatus(), Constants.FOUR)) { |
| | | if (hasTakeShop) { |
| | | vo.setContactPhone(order.getTakeShopLinkPhone()); |
| | | } else { |
| | | vo.setContactPhone(order.getTakePhone()); |
| | | } |
| | | } else if (Constants.equalsInteger(order.getStatus(), Constants.FIVE)) { |
| | | vo.setContactPhone(order.getTakePhone()); |
| | | } |
| | | |
| | | // 物品明细 |
| | | List<OrdersDetail> details = detailMap.getOrDefault(order.getId(), Collections.emptyList()); |
| | |
| | | for (int i = 0; i < paramPairs.length - 1; i += 2) { |
| | | templateParam.put(paramPairs[i], paramPairs[i + 1]); |
| | | } |
| | | boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (result) { |
| | | log.info("短信发送成功: phone={}, template={}", phone, smsNotify.name()); |
| | | } else { |
| | | log.warn("短信发送失败: phone={}, template={}", phone, smsNotify.name()); |
| | | } |
| | | // 存储短信记录 |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); // 1=订单通知 |
| | | record.setStatus(result ? Constants.ONE : Constants.ZERO); |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(error == null ? Constants.ONE : Constants.ZERO); |
| | | if (error != null) { |
| | | record.setRemark(error); |
| | | } |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(Constants.ZERO); |
| | | record.setRemark(e.getMessage()); |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | |
| | | .select("s1.name", Orders::getDepositShopName) |
| | | .select("s1.address", Orders::getDepositShopAddress) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .select("s2.address", Orders::getTakeShopAddress) |
| | | .select("s2.address", Orders::getDepositShopAddress) |
| | | .select("s1.link_phone as takeShopLinkPhone") |
| | | .select("s2.link_phone as takeShopLinkPhone") |
| | | .select("c2.other_field as c2OtherField") |
| | | .select("c2.name as goodLevelName") |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void registerJpushAlias(Integer driverId, String jpushAlias) { |
| | | DriverInfo update = new DriverInfo(); |
| | | update.setId(driverId); |
| | | update.setJpushAlias(jpushAlias); |
| | | driverInfoMapper.updateById(update); |
| | | } |
| | | |
| | | } |