user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -561,4 +561,27 @@ } } @ResponseBody @PostMapping("/api/user/driverRegister") // @ServiceLog(name = "注册司机", url = "/api/user/driverRegister") @ApiOperation(value = "注册司机", tags = {"用户端-登录注册"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResponseWarpper driverRegister(DriverRegisterWarpper driverRegisterWarpper){ try { Integer uid = appUserService.getUserByRequest(); if(null == uid){ return ResponseWarpper.success(ResultUtil.tokenErr()); } ResultUtil resultUtil = driverService.driverRegister(uid, driverRegisterWarpper); return ResponseWarpper.success(resultUtil); }catch (Exception e){ e.printStackTrace(); return new ResponseWarpper(500, e.getMessage()); } } } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/BranchOfficeMapper.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.user.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.supersavedriving.user.modular.system.model.BranchOffice; /** * @author zhibing.pu * @date 2023/8/3 14:20 */ public interface BranchOfficeMapper extends BaseMapper<BranchOffice> { } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/BranchOfficeMapper.xml
New file @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.supersavedriving.user.modular.system.dao.BranchOfficeMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.supersavedriving.user.modular.system.model.BranchOffice"> <id column="id" property="id"/> <result column="agentId" property="agentId"/> <result column="principal" property="principal"/> <result column="principalPhone" property="principalPhone"/> <result column="email" property="email"/> <result column="provinceCode" property="provinceCode"/> <result column="provinceName" property="provinceName"/> <result column="cityCode" property="cityCode"/> <result column="cityName" property="cityName"/> <result column="districtCode" property="districtCode"/> <result column="districtName" property="districtName"/> <result column="status" property="status"/> <result column="createTime" property="createTime"/> </resultMap> </mapper> user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/BranchOffice.java
New file @@ -0,0 +1,85 @@ package com.supersavedriving.user.modular.system.model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; import java.util.Date; /** * 分公司实体 * @author pzb * @Date 2023/2/3 14:13 */ @Data @TableName("t_branch_office") public class BranchOffice { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) @TableField("id") private Integer id; /** * 代理商id */ @TableField("agentId") private Integer agentId; /** * 负责人姓名 */ @TableField("principal") private String principal; /** * 负责人电话 */ @TableField("principalPhone") private String principalPhone; /** * 邮箱 */ @TableField("email") private String email; /** * 代理区域省编号 */ @TableField("provinceCode") private String provinceCode; /** * 代理区域省名称 */ @TableField("provinceName") private String provinceName; /** * 代理区域市编号 */ @TableField("cityCode") private String cityCode; /** * 代理区域市名称 */ @TableField("cityName") private String cityName; /** * 代理区域区编号 */ @TableField("districtCode") private String districtCode; /** * 代理区域区名称 */ @TableField("districtName") private String districtName; /** * 状态(1=正常,2=冻结,3=删除) */ @TableField("status") private Integer status; /** * 添加时间 */ @TableField("createTime") private Date createTime; } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Driver.java
@@ -252,4 +252,9 @@ */ @TableField("openOrderQRCode") private Integer openOrderQRCode; /** * 司机推荐二维码 */ @TableField("referralCode") private String referralCode; } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IBranchOfficeService.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.user.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.supersavedriving.user.modular.system.model.BranchOffice; /** * @author zhibing.pu * @date 2023/8/3 14:22 */ public interface IBranchOfficeService extends IService<BranchOffice> { } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IDriverService.java
@@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.service.IService; import com.supersavedriving.user.modular.system.model.Driver; import com.supersavedriving.user.modular.system.util.ResultUtil; import com.supersavedriving.user.modular.system.warpper.DriverRegisterWarpper; import com.supersavedriving.user.modular.system.warpper.NearbyDriverWarpper; import java.util.List; @@ -20,4 +22,14 @@ * @throws Exception */ List<NearbyDriverWarpper> queryDriverPosition(String lon, String lat, Double scope) throws Exception; /** * 司机注册 * @param driverRegisterWarpper * @return * @throws Exception */ ResultUtil driverRegister(Integer uid, DriverRegisterWarpper driverRegisterWarpper) throws Exception; } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/BranchOfficeServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.supersavedriving.user.modular.system.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.supersavedriving.user.modular.system.dao.BranchOfficeMapper; import com.supersavedriving.user.modular.system.model.BranchOffice; import com.supersavedriving.user.modular.system.service.IBranchOfficeService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @date 2023/8/3 14:22 */ @Service public class BranchOfficeServiceImpl extends ServiceImpl<BranchOfficeMapper, BranchOffice> implements IBranchOfficeService { } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/DriverServiceImpl.java
@@ -5,13 +5,16 @@ import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.supersavedriving.user.core.util.ToolUtil; import com.supersavedriving.user.modular.system.dao.DriverMapper; import com.supersavedriving.user.modular.system.model.Driver; import com.supersavedriving.user.modular.system.model.DriverWork; import com.supersavedriving.user.modular.system.service.IDriverService; import com.supersavedriving.user.modular.system.service.IDriverWorkService; import com.supersavedriving.user.modular.system.model.*; import com.supersavedriving.user.modular.system.service.*; import com.supersavedriving.user.modular.system.util.GeodesyUtil; import com.supersavedriving.user.modular.system.util.RedisUtil; import com.supersavedriving.user.modular.system.util.ResultUtil; import com.supersavedriving.user.modular.system.util.UUIDUtil; import com.supersavedriving.user.modular.system.util.huawei.OBSUtil; import com.supersavedriving.user.modular.system.util.mongodb.model.Location; import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil; import com.supersavedriving.user.modular.system.warpper.DriverRegisterWarpper; import com.supersavedriving.user.modular.system.warpper.NearbyDriverWarpper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.geo.Circle; @@ -23,7 +26,10 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -44,6 +50,25 @@ @Autowired private RedisUtil redisUtil; @Autowired private IAppUserService appUserService; @Autowired private WeChatUtil weChatUtil; @Autowired private IBranchOfficeService branchOfficeService; @Autowired private ISystemConfigService systemConfigService; @Autowired private IAccountChangeDetailService accountChangeDetailService; /** @@ -91,9 +116,139 @@ } /** * 注册司机 * @param uid * @param driverRegisterWarpper * @return * @throws Exception */ @Override public ResultUtil driverRegister(Integer uid, DriverRegisterWarpper driverRegisterWarpper) throws Exception { Driver driver = this.selectOne(new EntityWrapper<Driver>().eq("phone", driverRegisterWarpper.getPhone()).ne("status", 3)); if(null != driver && driver.getStatus() == 2){ return ResultUtil.error("该手机账号已被冻结,请联系管理员。"); } if(null != driver && driver.getApprovalStatus() == 1){ return ResultUtil.error("该手机账号正在审核中。"); } if(null != driver && driver.getApprovalStatus() == 2){ return ResultUtil.error("该手机账号已审核通过,请直接登录。"); } //账号审核拒绝后的处理 if(null != driver && driver.getApprovalStatus() == 3){ try { driver = setDriverParamete(driver, driverRegisterWarpper); }catch (Exception e){ return ResultUtil.error(e.getMessage()); } this.updateAllColumnById(driver); } AppUser appUser = appUserService.selectById(uid); //新账号 if(null == driver){ driver = new Driver(); driver.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); try { driver = setDriverParamete(driver, driverRegisterWarpper); }catch (Exception e){ return ResultUtil.error(e.getMessage()); } driver.setCreateTime(new Date()); driver.setInviterId(appUser.getInviterId()); driver.setInviterType(appUser.getInviterType()); this.insert(driver); String s = wechatMiniProgramORCode(driver.getId()); driver.setReferralCode(s); this.updateById(driver); //司机邀请注册奖励 if(null != driver.getInviterId()){ Driver driver1 = this.selectById(driver.getInviterId()); SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4)); if(null != systemConfig){ Integer num7 = JSON.parseObject(systemConfig.getContent()).getInteger("num7"); if(num7 > 0){ AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); accountChangeDetail.setUserId(driver1.getId()); accountChangeDetail.setType(2); accountChangeDetail.setChangeType(5); accountChangeDetail.setOldData(driver1.getIntegral().doubleValue()); driver1.setIntegral(driver1.getIntegral() + num7); accountChangeDetail.setNewData(driver1.getIntegral().doubleValue()); accountChangeDetail.setExplain("邀请司机注册奖励"); accountChangeDetailService.saveData(accountChangeDetail); this.updateById(driver1); } } } } return ResultUtil.success(); } /** * 组装个人信息 * @param driver * @param driverRegisterWarpper * @return */ public Driver setDriverParamete(Driver driver, DriverRegisterWarpper driverRegisterWarpper) throws Exception{ driver.setAvatar(driverRegisterWarpper.getAvatar()); driver.setName(driverRegisterWarpper.getName()); driver.setPhone(driverRegisterWarpper.getPhone()); driver.setEmergencyContact(driverRegisterWarpper.getEmergencyContact()); driver.setEmergencyPhone(driverRegisterWarpper.getEmergencyPhone()); driver.setIdcardBack(driverRegisterWarpper.getIdcardBack()); driver.setIdcardFront(driverRegisterWarpper.getIdcardFront()); driver.setDriverLicense(driverRegisterWarpper.getDriverLicense()); if(ToolUtil.isNotEmpty(driverRegisterWarpper.getFirstCertificateTime())){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); driver.setFirstCertificateTime(sdf.parse(driverRegisterWarpper.getFirstCertificateTime())); } //注册地 String code = driverRegisterWarpper.getCode(); BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("districtCode", code).eq("status", 1)); if(null == branchOffice){ branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("cityCode", code).eq("status", 1)); if(null == branchOffice){ throw new Exception("该区域无服务商"); } } driver.setBranchOfficeId(branchOffice.getId()); driver.setAgentId(branchOffice.getAgentId()); driver.setProvinceCode(branchOffice.getProvinceCode()); driver.setProvinceName(branchOffice.getProvinceName()); driver.setCityName(branchOffice.getCityName()); driver.setCityCode(branchOffice.getCityCode()); driver.setAreaCode(branchOffice.getDistrictCode()); driver.setAreaName(branchOffice.getDistrictName()); if(null != driverRegisterWarpper.getInviterId()){ driver.setInviterType(driverRegisterWarpper.getInviterType()); driver.setInviterId(driverRegisterWarpper.getInviterId()); } driver.setApprovalStatus(1); driver.setApprovalNotes(""); driver.setApprovalTime(null); driver.setApprovalUserId(null); driver.setStatus(1); driver.setSource(driverRegisterWarpper.getSource()); return driver; } //生成小程序二维码 public String wechatMiniProgramORCode(Integer driverId) throws Exception{ InputStream release = weChatUtil.getwxacodeunlimit("pages/index/index", "driverId=" + driverId, "release"); String s = OBSUtil.putObjectToBucket(release, "driver_" + driverId); return s; } } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -170,7 +170,7 @@ int i = 0; Double scope = 5D; while (true){ List<NearbyDriverWarpper> nearbyDriverWarppers = driverService.queryDriverPosition(estimatedCosts.getLng().toString(), estimatedCosts.getLat().toString(), scope); List<NearbyDriverWarpper> nearbyDriverWarppers = driverService.queryDriverPosition(estimatedCosts.getStartLng().toString(), estimatedCosts.getStartLat().toString(), scope); if(nearbyDriverWarppers.size() == 0){ scope += 5; i++; user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/DriverRegisterWarpper.java
New file @@ -0,0 +1,41 @@ package com.supersavedriving.user.modular.system.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * 司机注册 * @author pzb * @Date 2023/2/6 9:15 */ @Data @ApiModel public class DriverRegisterWarpper { @ApiModelProperty(value = "注册区域code", required = true, dataType = "string") private String code; @ApiModelProperty(value = "头像", required = false, dataType = "string") private String avatar; @ApiModelProperty(value = "姓名", required = false, dataType = "string") private String name; @ApiModelProperty(value = "手机号码", required = true, dataType = "string") private String phone; @ApiModelProperty(value = "紧急联系人", required = true, dataType = "string") private String emergencyContact; @ApiModelProperty(value = "紧急联系人电话", required = true, dataType = "string") private String emergencyPhone; @ApiModelProperty(value = "身份证正面照", required = true, dataType = "string") private String idcardFront; @ApiModelProperty(value = "身份证背面照", required = true, dataType = "string") private String idcardBack; @ApiModelProperty(value = "驾驶证领证时间(2023-01-01)", required = true, dataType = "string") private String firstCertificateTime; @ApiModelProperty(value = "驾驶证照片", required = true, dataType = "string") private String driverLicense; @ApiModelProperty(value = "邀约人类型(1=用户,2=司机)", required = false, dataType = "int") private Integer inviterType; @ApiModelProperty(value = "邀约人Id", required = false, dataType = "int") private Integer inviterId; @ApiModelProperty(value = "注册来源(1=司机端注册,2=其他端注册)", required = true, dataType = "int") private Integer source; }