From 3e210fac9492b90e21ca9bf76c1d9a8fda1f4388 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 13 五月 2026 11:32:17 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java | 1078 +++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 897 insertions(+), 181 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
index 548fc41..84659b7 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -4,6 +4,7 @@
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.doumee.biz.system.impl.AreasBizImpl;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -22,27 +23,21 @@
import com.doumee.dao.business.ShopInfoMapper;
import com.doumee.dao.business.OrdersDetailMapper;
import com.doumee.dao.business.RevenueMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.AreasService;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.system.OperationConfigBiz;
import com.doumee.dao.business.OrderLogMapper;
-import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.DriverInfo;
-import com.doumee.dao.business.model.OrderLog;
-import com.doumee.dao.business.model.OrderComment;
-import com.doumee.dao.business.model.ShopInfo;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Multifile;
-import com.doumee.dao.business.model.Smsrecord;
-import com.doumee.dao.business.model.Orders;
-import com.doumee.dao.business.model.OrdersDetail;
-import com.doumee.dao.business.model.Revenue;
import com.doumee.dao.dto.*;
import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.DriverActiveOrderCountVO;
+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.dao.business.model.Notice;
import com.doumee.service.business.DriverInfoService;
import com.doumee.service.business.NoticeService;
import com.alibaba.fastjson.JSONObject;
@@ -57,6 +52,7 @@
import org.springframework.util.CollectionUtils;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -118,6 +114,12 @@
@Autowired
private NoticeService noticeService;
+
+ @Autowired
+ private AreasBizImpl areasBiz;
+
+ @Autowired
+ private SystemUserService systemUserService;
/**
* 鍙戦�佽鍗曠珯鍐呬俊閫氱煡
@@ -257,6 +259,10 @@
if (pageWrap.getModel().getStatus() != null) {
queryWrapper.eq(DriverInfo::getStatus, pageWrap.getModel().getStatus());
}
+ // 鐗堟湰
+ if (pageWrap.getModel().getVersionType() != null) {
+ queryWrapper.eq(DriverInfo::getVersionType, pageWrap.getModel().getVersionType());
+ }
// 瀹℃壒鐘舵��
if (pageWrap.getModel().getAuditStatus() != null) {
queryWrapper.eq(DriverInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
@@ -273,13 +279,7 @@
.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()));
@@ -304,7 +304,9 @@
String code = RandomStringUtils.randomNumeric(6);
// 鍙戦�佺煭淇�
String templateParam = "{\"code\":\"" + code + "\"}";
- AliSmsService.sendSms(telephone, "SMS_491325122", templateParam);
+ if (Constants.SmsNotify.VERIFY_CODE.isEnabled()) {
+ AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+ }
// 淇濆瓨鐭俊璁板綍
Smsrecord smsrecord = new Smsrecord();
smsrecord.setDeleted(Constants.ZERO);
@@ -358,7 +360,7 @@
Date now = new Date();
Member member;
-
+ DriverInfo driverInfo = new DriverInfo();
if (Objects.nonNull(existMember)) {
// 宸叉湁鍙告満璐﹀彿锛岀洿鎺ョ櫥褰�
if (!Constants.equalsInteger(existMember.getStatus(), Constants.ZERO)) {
@@ -383,7 +385,7 @@
member.setUpdateTime(now);
member.setTelephone(telephone);
member.setNickName(telephone.substring(0, 3) + "****" + telephone.substring(7));
- member.setName(telephone);
+ member.setName(member.getNickName());
member.setUserType(Constants.ONE);
member.setBusinessStatus(Constants.ZERO);
member.setPassword(secure.encryptPassword(defaultPassword, salt));
@@ -400,20 +402,22 @@
memberMapper.insert(member);
// 鍒涘缓鍙告満鍩虹淇℃伅
- DriverInfo driverInfo = new DriverInfo();
driverInfo.setDeleted(Constants.ZERO);
driverInfo.setCreateTime(now);
driverInfo.setUpdateTime(now);
driverInfo.setTelephone(telephone);
+ driverInfo.setName(member.getNickName());
driverInfo.setMemberId(member.getId());
driverInfo.setStatus(Constants.ZERO);
- driverInfo.setAuditStatus(null);
+ driverInfo.setAuditStatus(99);
+ driverInfo.setVersionType(Constants.ZERO);
+ driverInfo.setJpushAlias(org.springframework.util.DigestUtils.md5DigestAsHex(telephone.getBytes()));
driverInfoMapper.insert(driverInfo);
}
// 3. 鐢熸垚token杩斿洖
AccountResponse accountResponse = new AccountResponse();
- accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
+ accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(driverInfo.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
accountResponse.setMember(member);
return accountResponse;
}
@@ -437,6 +441,13 @@
if (!Constants.equalsInteger(member.getStatus(), Constants.ZERO)) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿宸插仠鐢紝璇疯仈绯荤鐞嗗憳");
}
+ // 鑾峰彇鍙告満琛ㄤ俊鎭�
+ DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda().eq(DriverInfo::getMemberId, member.getId())
+ .eq(DriverInfo::getDeleted, Constants.ZERO).eq(DriverInfo::getVersionType,Constants.ZERO).last("limit 1")
+ );
+ if(Objects.isNull(driverInfo)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍙告満璐﹀彿涓嶅瓨鍦�");
+ }
// 鏍¢獙瀵嗙爜
String encryptPwd = secure.encryptPassword(password, member.getSalt());
if (!encryptPwd.equals(member.getPassword())) {
@@ -447,9 +458,8 @@
.set(Member::getLoginTime, new Date())
.setSql("login_times = login_times + 1")
.eq(Member::getId, member.getId()));
-
AccountResponse accountResponse = new AccountResponse();
- accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
+ accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(driverInfo.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
accountResponse.setMember(member);
return accountResponse;
}
@@ -458,7 +468,7 @@
@Override
@Transactional
- public void submitVerify(Integer memberId, DriverVerifyRequest request) {
+ public void submitVerify(Integer driverId, DriverVerifyRequest request) {
// 鍙傛暟鍩虹鏍¢獙
if (StringUtils.isAnyBlank(request.getName(), request.getIdcard(), request.getLivePlace(),
request.getCarCode(), request.getIdcardImg(), request.getIdcardImgBack())) {
@@ -470,19 +480,6 @@
// 韬唤璇佸彿鏍煎紡鏍¢獙锛�18浣嶏紝鏈�鍚庝竴浣嶅彲涓篨锛�
if (!request.getIdcard().matches("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$")) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "韬唤璇佸彿鏍煎紡涓嶆纭�");
- }
- // 鏌ヨ鍙告満淇℃伅
- DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
- .eq(DriverInfo::getDeleted, Constants.ZERO)
- .last("limit 1"));
- if (Objects.isNull(driverInfo)) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY);
- }
- // 鐘舵�佹牎楠岋細auditStatus=null(鏈彁浜�)鎴朼uditStatus=2(瀹℃壒椹冲洖)鍙彁浜よ璇�
- if (driverInfo.getAuditStatus() != null
- && !Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.TWO)) {
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽鎻愪氦璁よ瘉");
}
// 鏍规嵁杞﹁締绫诲瀷鍒ゆ柇鏄惁闇�瑕侀┚椹惰瘉
Category category = categoryMapper.selectById(request.getCarType());
@@ -513,8 +510,66 @@
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍏朵粬璧勬枡鐓х墖鏈�澶氫笂浼�3寮�");
}
- // 鏇存柊鍙告満淇℃伅
+ // 鏌ヨ姝e紡鐗堟湰鍙告満
+ DriverInfo official = driverInfoMapper.selectById(driverId);
+ if (Objects.isNull(official) || Constants.equalsInteger(official.getDeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ Integer memberId = official.getMemberId();
+
Date now = new Date();
+
+ // 鏌ヨ璇ヤ細鍛樻渶鏂扮殑鍙樻洿鐗堟湰
+ QueryWrapper<DriverInfo> changeQw = new QueryWrapper<>();
+ changeQw.lambda()
+ .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ONE)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .orderByDesc(DriverInfo::getCreateTime)
+ .last("limit 1");
+ DriverInfo changeVersion = driverInfoMapper.selectOne(changeQw);
+
+ if (changeVersion == null) {
+ // 棣栨璁よ瘉锛氭洿鏂版寮忕増鏈� + 鍒涘缓鍙樻洿鐗堟湰
+ applyDriverFieldsFromUpdate(official.getId(), request, now);
+ deleteDriverAttachments(official.getId());
+ saveDriverAttachments(official.getId(), request, now);
+ // 閲嶆柊璇诲彇鏇存柊鍚庣殑姝e紡鐗堟湰锛屽啀鍒涘缓鍙樻洿鐗堟湰
+ DriverInfo updatedOfficial = driverInfoMapper.selectById(official.getId());
+ createDriverChangeVersion(updatedOfficial, official.getId(), now);
+ } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) {
+ // auditStatus=3锛氱敓鎴愭柊鐨勫彉鏇寸増鏈�
+ Integer relationId = changeVersion.getRelationDriverId() != null
+ ? changeVersion.getRelationDriverId() : official.getId();
+ DriverInfo newChange = new DriverInfo();
+ applyDriverFieldsFromNew(newChange, request, official, now);
+ newChange.setVersionType(Constants.ONE);
+ newChange.setRelationDriverId(relationId);
+ newChange.setAuditStatus(Constants.ZERO);
+ newChange.setStatus(Constants.ZERO);
+ newChange.setDeleted(Constants.ZERO);
+ newChange.setCreateTime(now);
+ newChange.setUpdateTime(now);
+ newChange.setMemberId(memberId);
+ newChange.setTelephone(official.getTelephone());
+ newChange.setJpushAlias(official.getJpushAlias());
+ driverInfoMapper.insert(newChange);
+ saveDriverAttachments(newChange.getId(), request, now);
+ } else {
+ // auditStatus=0/2锛氱洿鎺ユ洿鏂板彉鏇寸増鏈�
+ applyDriverFieldsFromUpdate(changeVersion.getId(), request, now);
+ deleteDriverAttachments(changeVersion.getId());
+ saveDriverAttachments(changeVersion.getId(), request, now);
+ }
+
+ // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�佷负璁よ瘉涓�
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getBusinessStatus, Constants.ONE)
+ .set(Member::getUpdateTime, now)
+ .eq(Member::getId, memberId));
+ }
+
+ private void applyDriverFieldsFromUpdate(Integer driverId, DriverVerifyRequest request, Date now) {
driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
.set(DriverInfo::getName, request.getName())
.set(DriverInfo::getIdcard, request.getIdcard())
@@ -531,48 +586,161 @@
.set(DriverInfo::getAliAccount, request.getAliAccount())
.set(DriverInfo::getAliName, request.getAliName())
.set(DriverInfo::getUpdateTime, now)
+ .set(DriverInfo::getAuditStatus, Constants.ZERO)
.set(DriverInfo::getAuditRemark, null)
.set(DriverInfo::getAuditTime, null)
- .eq(DriverInfo::getId, driverInfo.getId()));
+ .eq(DriverInfo::getId, driverId));
+ }
- // 鍒犻櫎鏃х殑鐓х墖璁板綍
- multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
- .eq(Multifile::getObjId, driverInfo.getId())
- .in(Multifile::getObjType, 6, 7, 8));
+ private void applyDriverFieldsFromNew(DriverInfo driver, DriverVerifyRequest request, DriverInfo official, Date now) {
+ driver.setName(request.getName());
+ driver.setIdcard(request.getIdcard());
+ driver.setMaritalStatus(request.getMaritalStatus());
+ driver.setAreaId(request.getAreaId());
+ driver.setLivePlace(request.getLivePlace());
+ driver.setCarCode(request.getCarCode());
+ driver.setCarType(request.getCarType());
+ driver.setCarColor(request.getCarColor());
+ driver.setCardStartDate(request.getCardStartDate());
+ driver.setCardEndDate(request.getCardEndDate());
+ driver.setIdcardImg(request.getIdcardImg());
+ driver.setIdcardImgBack(request.getIdcardImgBack());
+ driver.setAliAccount(request.getAliAccount());
+ driver.setAliName(request.getAliName());
+ }
- // 淇濆瓨杞﹁締鐓х墖 objType=6
- saveMultifileList(driverInfo.getId(), 6, request.getCarImgUrls(), now);
- // 淇濆瓨椹鹃┒璇佺収鐗� objType=7
+ private void saveDriverAttachments(Integer driverId, DriverVerifyRequest request, Date now) {
+ saveMultifileList(driverId, 6, request.getCarImgUrls(), now);
if (!CollectionUtils.isEmpty(request.getLicenseImgUrls())) {
- saveMultifileList(driverInfo.getId(), 7, request.getLicenseImgUrls(), now);
+ saveMultifileList(driverId, 7, request.getLicenseImgUrls(), now);
}
- // 淇濆瓨鍏朵粬璧勬枡鐓х墖 objType=8
if (!CollectionUtils.isEmpty(request.getOtherImgUrls())) {
- saveMultifileList(driverInfo.getId(), 8, request.getOtherImgUrls(), now);
+ saveMultifileList(driverId, 8, request.getOtherImgUrls(), now);
}
+ }
- // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�佷负璁よ瘉涓�
- memberMapper.update(new UpdateWrapper<Member>().lambda()
- .set(Member::getBusinessStatus, Constants.ONE)
- .set(Member::getUpdateTime, now)
- .eq(Member::getId, memberId));
+ private void deleteDriverAttachments(Integer driverId) {
+ multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, driverId)
+ .in(Multifile::getObjType, 6, 7, 8));
+ }
+
+ private void createDriverChangeVersion(DriverInfo official, Integer officialId, Date now) {
+ DriverInfo change = new DriverInfo();
+ change.setName(official.getName());
+ change.setIdcard(official.getIdcard());
+ change.setMaritalStatus(official.getMaritalStatus());
+ change.setAreaId(official.getAreaId());
+ change.setLivePlace(official.getLivePlace());
+ change.setImgurl(official.getImgurl());
+ change.setCarType(official.getCarType());
+ change.setCarCode(official.getCarCode());
+ change.setCarColor(official.getCarColor());
+ change.setCardStartDate(official.getCardStartDate());
+ change.setCardEndDate(official.getCardEndDate());
+ change.setIdcardImg(official.getIdcardImg());
+ change.setIdcardImgBack(official.getIdcardImgBack());
+ change.setAliAccount(official.getAliAccount());
+ change.setAliName(official.getAliName());
+ change.setVersionType(Constants.ONE);
+ change.setRelationDriverId(officialId);
+ change.setMemberId(official.getMemberId());
+ change.setTelephone(official.getTelephone());
+ change.setOpenid(official.getOpenid());
+ change.setUnionid(official.getUnionid());
+ change.setJpushAlias(official.getJpushAlias());
+ change.setScore(official.getScore());
+ change.setDriverLevel(official.getDriverLevel());
+ change.setBalance(official.getBalance());
+ change.setTotalBalance(official.getTotalBalance());
+ change.setLongitude(official.getLongitude());
+ change.setLatitude(official.getLatitude());
+ change.setAuditStatus(official.getAuditStatus());
+ change.setStatus(official.getStatus());
+ change.setDeleted(official.getDeleted());
+ change.setCreateTime(now);
+ change.setUpdateTime(now);
+ driverInfoMapper.insert(change);
+
+ // 鎷疯礉闄勪欢
+ List<Multifile> originFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, officialId)
+ .eq(Multifile::getIsdeleted, Constants.ZERO)
+ .in(Multifile::getObjType, 6, 7, 8));
+ for (Multifile f : originFiles) {
+ Multifile copy = new Multifile();
+ copy.setCreator(f.getCreator());
+ copy.setCreateDate(now);
+ copy.setIsdeleted(Constants.ZERO);
+ copy.setName(f.getName());
+ copy.setInfo(f.getInfo());
+ copy.setObjId(change.getId());
+ copy.setType(f.getType());
+ copy.setObjType(f.getObjType());
+ copy.setFileurl(f.getFileurl());
+ copy.setSortnum(f.getSortnum());
+ multifileMapper.insert(copy);
+ }
}
@Override
public DriverInfo getVerifyDetail(Integer memberId) {
+ // 浼樺厛鏌ヨ鏈�鏂扮殑鍙樻洿鐗堟湰
DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getRelationDriverId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ONE)
.eq(DriverInfo::getDeleted, Constants.ZERO)
+ .orderByDesc(DriverInfo::getCreateTime)
.last("limit 1"));
+ if (Objects.isNull(driverInfo)) {
+ // 鏃犲彉鏇寸増鏈垯鏌ユ寮忕増鏈�
+ driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ }
if (Objects.isNull(driverInfo)) {
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
+ // 鏍囪鏄惁瀛樺湪瀹℃壒閫氳繃鐨勬寮忕増鏈�
+ if (driverInfo.getRelationDriverId() != null) {
+ DriverInfo official = driverInfoMapper.selectById(driverInfo.getRelationDriverId());
+ driverInfo.setHasApprovedOfficial(official != null
+ && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE));
+ } else if (Constants.equalsInteger(driverInfo.getVersionType(), Constants.ZERO)) {
+ driverInfo.setHasApprovedOfficial(Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.THREE));
+ } else {
+ driverInfo.setHasApprovedOfficial(false);
+ }
+ // 鎷兼帴鍥剧墖鍓嶇紑
+ String imgPrefix = "";
+ try {
+ imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.DRIVER_FILES).getCode();
+ } catch (Exception e) {
+ // 鏈厤缃椂蹇界暐
+ }
+ driverInfo.setImgPrefix(imgPrefix);
// 鏌ヨ杞﹁締绫诲瀷鍚嶇О鍜屾槸鍚﹂渶瑕侀┚椹惰瘉
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);
+ driverInfo.setDriverType(category.getDetail());
+ }
+ }
+ // 鏌ヨ鐪佸競鍖轰俊鎭�
+ if (driverInfo.getAreaId() != null) {
+ Areas district = areasBiz.resolveArea(driverInfo.getAreaId());
+ if (district != null) {
+ driverInfo.setDistrictId(district.getId());
+ driverInfo.setDistrictName(district.getName());
+ driverInfo.setCityId(district.getCityId());
+ driverInfo.setCityName(district.getCityName());
+ driverInfo.setProvinceId(district.getProvinceId());
+ driverInfo.setProvinceName(district.getProvinceName());
}
}
// 鏌ヨ鐓х墖鍒楄〃
@@ -600,44 +768,143 @@
if (Objects.isNull(auditDTO.getId()) || Objects.isNull(auditDTO.getAuditStatus())) {
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
- DriverInfo driverInfo = driverInfoMapper.selectById(auditDTO.getId());
- if (Objects.isNull(driverInfo)) {
+ // 瀹℃壒鐨勬槸鍙樻洿鐗堟湰
+ DriverInfo changeVersion = driverInfoMapper.selectById(auditDTO.getId());
+ if (Objects.isNull(changeVersion) || Constants.equalsInteger(changeVersion.getDeleted(), Constants.ONE)) {
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
- // 鍙湁瀹℃壒鐘舵�佷负0(寰呭鎵�)涓斿凡濉啓璁よ瘉淇℃伅鎵嶈兘瀹℃壒
- if (!Constants.equalsInteger(driverInfo.getAuditStatus(), Constants.ZERO)
- || StringUtils.isBlank(driverInfo.getIdcard())) {
+ if (!Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)
+ || StringUtils.isBlank(changeVersion.getIdcard())) {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽瀹℃壒");
}
+
Date now = new Date();
- // 瀹℃壒缁撴灉锛歛uditDTO.auditStatus 0=閫氳繃鈫抋uditStatus=1锛�1=鎷掔粷鈫抋uditStatus=2
+ // auditDTO.auditStatus: 0=閫氳繃鈫�3, 1=椹冲洖鈫�2
Integer newAuditStatus;
if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) {
- newAuditStatus = Constants.ONE; // 瀹℃壒閫氳繃
- // 瀹℃壒閫氳繃鏃跺徃鏈哄畾绾т负蹇呭~
+ newAuditStatus = Constants.THREE;
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)) {
- newAuditStatus = Constants.TWO; // 瀹℃壒椹冲洖
+ newAuditStatus = Constants.TWO;
} else {
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀹℃壒鐘舵�佸弬鏁伴敊璇�");
}
- // 鏇存柊鍙告満瀹℃壒鐘舵��
- driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
- .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(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()));
+
+ // 鏌ユ壘姝e紡鐗堟湰
+ Integer officialId = changeVersion.getRelationDriverId();
+ DriverInfo official = officialId != null ? driverInfoMapper.selectById(officialId) : null;
+ boolean hasApprovedOfficial = official != null
+ && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE);
+
+ if (!hasApprovedOfficial) {
+ // 鍦烘櫙1锛氭寮忕増鏈湭瀹℃壒閫氳繃锛堥娆″鎵癸級
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .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, changeVersion.getId()));
+
+ // 鍚屾鏇存柊姝e紡鐗堟湰锛堝鎵圭姸鎬� + 鏁版嵁瀛楁锛�
+ if (official != null) {
+ syncDriverChangeToOfficial(changeVersion, official, auditDTO.getDriverLevel(), now);
+ }
+
+ // 鏇存柊浼氬憳鐘舵��
+ Integer driverStatus = Constants.equalsInteger(newAuditStatus, Constants.THREE) ? Constants.TWO : Constants.THREE;
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getBusinessStatus, driverStatus)
+ .set(Member::getUpdateTime, now)
+ .eq(Member::getId, changeVersion.getMemberId()));
+
+ // 鐭俊閫氱煡
+ sendDriverAuditSms(changeVersion, newAuditStatus, auditDTO.getAuditRemark());
+ } else {
+ // 鍦烘櫙2锛氭寮忕増鏈凡瀹℃壒閫氳繃锛堝彉鏇村鎵癸級
+ if (Constants.equalsInteger(newAuditStatus, Constants.THREE)) {
+ // 瀹℃壒閫氳繃锛氬彉鏇寸増鏈爣璁癮uditStatus=3锛屽悓姝ユ暟鎹埌姝e紡鐗堟湰
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getAuditStatus, Constants.THREE)
+ .set(DriverInfo::getAuditTime, now)
+ .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark())
+ .set(DriverInfo::getAuditUser, auditDTO.getAuditUser())
+ .set(DriverInfo::getDriverLevel, auditDTO.getDriverLevel())
+ .set(DriverInfo::getUpdateTime, now)
+ .eq(DriverInfo::getId, changeVersion.getId()));
+
+ // 鍚屾鍙樻洿鐗堟湰鏁版嵁鍒版寮忕増鏈�
+ syncDriverChangeToOfficial(changeVersion, official, auditDTO.getDriverLevel(), now);
+ } else {
+ // 瀹℃壒椹冲洖锛氫粎鏍囪鍙樻洿鐗堟湰
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getAuditStatus, Constants.TWO)
+ .set(DriverInfo::getAuditTime, now)
+ .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark())
+ .set(DriverInfo::getAuditUser, auditDTO.getAuditUser())
+ .set(DriverInfo::getUpdateTime, now)
+ .eq(DriverInfo::getId, changeVersion.getId()));
+ }
+ }
+ }
+
+ private void syncDriverChangeToOfficial(DriverInfo changeVersion, DriverInfo official, Integer driverLevel, Date now) {
+ official.setName(changeVersion.getName());
+ official.setIdcard(changeVersion.getIdcard());
+ official.setMaritalStatus(changeVersion.getMaritalStatus());
+ official.setAreaId(changeVersion.getAreaId());
+ official.setLivePlace(changeVersion.getLivePlace());
+ official.setCarType(changeVersion.getCarType());
+ official.setCarCode(changeVersion.getCarCode());
+ official.setCarColor(changeVersion.getCarColor());
+ official.setCardStartDate(changeVersion.getCardStartDate());
+ official.setCardEndDate(changeVersion.getCardEndDate());
+ official.setIdcardImg(changeVersion.getIdcardImg());
+ official.setIdcardImgBack(changeVersion.getIdcardImgBack());
+ official.setAliAccount(changeVersion.getAliAccount());
+ official.setAliName(changeVersion.getAliName());
+ if (driverLevel != null) {
+ official.setDriverLevel(driverLevel);
+ }
+ official.setUpdateTime(now);
+ driverInfoMapper.updateById(official);
+
+ // 鍚屾闄勪欢锛氬厛鍒犳寮忕増鏈棫闄勪欢锛屽啀浠庡彉鏇寸増鏈嫹璐�
+ deleteDriverAttachments(official.getId());
+ List<Multifile> changeFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+ .eq(Multifile::getObjId, changeVersion.getId())
+ .eq(Multifile::getIsdeleted, Constants.ZERO)
+ .in(Multifile::getObjType, 6, 7, 8));
+ for (Multifile f : changeFiles) {
+ Multifile copy = new Multifile();
+ copy.setCreator(f.getCreator());
+ copy.setCreateDate(now);
+ copy.setIsdeleted(Constants.ZERO);
+ copy.setName(f.getName());
+ copy.setInfo(f.getInfo());
+ copy.setObjId(official.getId());
+ copy.setType(f.getType());
+ copy.setObjType(f.getObjType());
+ copy.setFileurl(f.getFileurl());
+ copy.setSortnum(f.getSortnum());
+ multifileMapper.insert(copy);
+ }
+ }
+
+ private void sendDriverAuditSms(DriverInfo driverInfo, Integer newAuditStatus, String auditRemark) {
+ if (Constants.equalsInteger(newAuditStatus, Constants.THREE)) {
+ sendSmsNotify(driverInfo.getTelephone(),
+ Constants.SmsNotify.DRIVER_AUTH_APPROVED,
+ "driver", driverInfo.getName());
+ } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) {
+ sendSmsNotify(driverInfo.getTelephone(),
+ Constants.SmsNotify.DRIVER_AUTH_REJECTED,
+ "driver", driverInfo.getName(),
+ "reason", auditRemark != null ? auditRemark : "");
+ }
}
@Override
@@ -681,7 +948,67 @@
}
}
}
+ // 鏌ヨ瀹℃壒浜哄悕绉�
+ 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
@@ -730,7 +1057,8 @@
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
.eq(DriverInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (driver == null) {
@@ -745,12 +1073,13 @@
}
@Override
- public void updateLocation(Integer memberId, Double longitude, Double latitude) {
+ public void updateLocation(Integer driverId, Double longitude, Double latitude) {
if (longitude == null || latitude == null) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "缁忕含搴︿笉鑳戒负绌�");
}
DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getId, driverId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
.eq(DriverInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (driver == null) {
@@ -763,9 +1092,10 @@
}
@Override
- public DriverCenterVO getDriverCenterInfo(Integer memberId) {
+ public DriverCenterVO getDriverCenterInfo(Integer driveId) {
DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getId, driveId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
.eq(DriverInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (driver == null) {
@@ -776,16 +1106,23 @@
vo.setImgUrl(driver.getImgurl());
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);
-
+ vo.setAcceptingStatus(driver.getAcceptingStatus());
// 澶村儚鍏ㄨ矾寰�
if (StringUtils.isNotBlank(driver.getImgurl())) {
String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
vo.setFullImgUrl(imgPrefix + driver.getImgurl());
}
-
- // 浠婃棩棰勮浣i噾锛歳evenue琛ㄤ腑浠婂ぉ鐨勬敹鍏ヨ褰曢噾棰濅箣鍜�
+ Category category = categoryMapper.selectById(driver.getCarType());
+ if(Objects.nonNull(category)&&StringUtils.isNotBlank(category.getDetail())){
+ vo.setDriverType(category.getDetail());
+ }
+ // 浠婃棩棰勮浣i噾锛氫粖鏃ユ帴鍗曠殑鍙告満浣i噾 + 骞冲彴濂栧姳閲�
Date now = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(now);
@@ -795,22 +1132,22 @@
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);
// 浠婃棩鎺ュ崟鏁帮細浠婂ぉ瀹屾垚鐨勮鍗曟暟锛坅cceptDriver=鍙告満涓婚敭锛岀姸鎬�=宸插畬鎴愶級
Long todayOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
.eq(Orders::getAcceptDriver, driver.getId())
.eq(Orders::getDeleted, Constants.ZERO)
- .ge(Orders::getFinishTime, todayStart));
+ .ge(Orders::getAcceptTime, todayStart));
vo.setTodayOrderCount(todayOrderCount.intValue());
// 寰呭彇璐э紙宸叉帴鍗�=3锛�
@@ -831,12 +1168,62 @@
}
@Override
+ public com.doumee.dao.vo.DriverStatsVO getDriverStats(Integer memberId) {
+ DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .last("limit 1"));
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+
+ com.doumee.dao.vo.DriverStatsVO vo = new com.doumee.dao.vo.DriverStatsVO();
+
+ // 绱浣i噾锛歵ype=0(瀹屾垚璁㈠崟) + vaildStatus=1(宸插叆璐�)
+ QueryWrapper<Revenue> totalWrapper = new QueryWrapper<>();
+ totalWrapper.lambda()
+ .eq(Revenue::getMemberId, memberId)
+ .eq(Revenue::getMemberType, Constants.ONE)
+ .eq(Revenue::getType, Constants.ZERO)
+ .eq(Revenue::getVaildStatus, Constants.ONE)
+ .eq(Revenue::getDeleted, Constants.ZERO);
+ totalWrapper.select("IFNULL(SUM(AMOUNT),0) as amount");
+ Revenue totalResult = revenueMapper.selectOne(totalWrapper);
+ vo.setTotalCommission(totalResult != null && totalResult.getAmount() != null ? totalResult.getAmount() : 0L);
+
+ // 寰呯粨绠椾剑閲戯細type=0(瀹屾垚璁㈠崟) + vaildStatus=0(鍏ヨ处涓�)
+ QueryWrapper<Revenue> pendingWrapper = new QueryWrapper<>();
+ pendingWrapper.lambda()
+ .eq(Revenue::getMemberId, memberId)
+ .eq(Revenue::getMemberType, Constants.ONE)
+ .eq(Revenue::getType, Constants.ZERO)
+ .eq(Revenue::getVaildStatus, Constants.ZERO)
+ .eq(Revenue::getDeleted, Constants.ZERO);
+ pendingWrapper.select("IFNULL(SUM(AMOUNT),0) as amount");
+ Revenue pendingResult = revenueMapper.selectOne(pendingWrapper);
+ vo.setPendingCommission(pendingResult != null && pendingResult.getAmount() != null ? pendingResult.getAmount() : 0L);
+
+ // 璁㈠崟鎬绘暟
+ Long totalOrderCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driver.getId())
+ .eq(Orders::getDeleted, Constants.ZERO));
+ vo.setTotalOrderCount(totalOrderCount.intValue());
+
+ // 閽卞寘浣欓
+ vo.setBalance(driver.getBalance() != null ? driver.getBalance() : 0L);
+
+ return vo;
+ }
+
+ @Override
public PageData<DriverGrabOrderVO> grabOrderHall(Integer memberId, PageWrap<DriverGrabOrderDTO> pageWrap) {
DriverGrabOrderDTO dto = pageWrap.getModel();
// 1. 鑾峰彇鍙告満瀹氫綅
DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
.eq(DriverInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (driver == null || driver.getLatitude() == null || driver.getLongitude() == null) {
@@ -862,10 +1249,8 @@
goodTypeIds = cats.stream().map(Category::getId).collect(Collectors.toList());
}
- // 3. Haversine SQL鍏紡锛氬徃鏈哄埌瀛樹欢闂ㄥ簵璺濈(km)锛屼娇鐢∣rders鑷甫鍧愭爣
- String depositDist = "(6371 * acos(cos(radians(" + driverLat + ")) * cos(radians(t.DEPOSIT_LGT)) "
- + "* cos(radians(t.DEPOSIT_LAT) - radians(" + driverLng + ")) "
- + "+ sin(radians(" + driverLat + ")) * sin(radians(t.DEPOSIT_LGT))))";
+ // 3. ST_Distance_Sphere璁$畻鍙告満鍒板瓨浠堕棬搴楄窛绂�(km)锛屼娇鐢∣rders鑷甫鍧愭爣
+ String depositDist = "(ST_Distance_Sphere(POINT(" + driverLng + ", " + driverLat + "), POINT(t.DEPOSIT_LGT, t.DEPOSIT_LAT)) / 1000)";
// 4. 鏋勯�燤PJ鏌ヨ
IPage<Orders> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
@@ -880,6 +1265,9 @@
.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.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")
@@ -959,7 +1347,8 @@
// 鑾峰彇鍙告満淇℃伅
DriverInfo driver = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda()
- .eq(DriverInfo::getMemberId, memberId)
+ .eq(DriverInfo::getId, memberId)
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
.eq(DriverInfo::getDeleted, Constants.ZERO)
.last("limit 1"));
if (driver == null) {
@@ -977,17 +1366,27 @@
.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")
- .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")
+ .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 ")
+ .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(Orders::getStatus, dto.getStatus())
+ .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus())
.eq(Orders::getDeleted, Constants.ZERO)
.orderByAsc(Orders::getAcceptTime);
+ // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+ if (StringUtils.isNotBlank(dto.getKeyword())) {
+ String kw = dto.getKeyword().trim();
+ wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+ .or().like(Orders::getTakePhone, kw)
+ .or().eq(Orders::getCode, kw));
+ }
List<Orders> ordersList = ordersMapper.selectJoinList(Orders.class, wrapper);
@@ -1020,10 +1419,13 @@
wrapper.selectAll(Orders.class)
.select("s1.name", Orders::getDepositShopName)
.select("s1.address", Orders::getDepositShopAddress)
+ .select("s1.link_phone", Orders::getDepositShopLinkPhone)
.select("s2.name", Orders::getTakeShopName)
.select("s2.address", Orders::getTakeShopAddress)
- .select("s2.link_phone as takeShopLinkPhone")
- .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")
.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")
@@ -1081,11 +1483,29 @@
vo.setDepositShopAddress(base.getDepositShopAddress());
vo.setDepositDistance(base.getDepositDistance());
vo.setTakeName(base.getTakeName());
+ vo.setTakeAddress(base.getTakeAddress());
+ vo.setTakeShopId(base.getTakeShopId());
+
vo.setTakeDistance(base.getTakeDistance());
- vo.setContactPhone(base.getContactPhone());
+
+ // 鑱旂郴鐢佃瘽锛氭寜璁㈠崟鐘舵�佽繑鍥�
+ vo.setDepositShopPhone(order.getDepositShopLinkPhone());
+ if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())
+ || Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+ if (order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopLinkPhone())) {
+ vo.setTakeContactPhone(order.getTakeShopLinkPhone());
+ } else {
+ vo.setTakeContactPhone(order.getTakePhone());
+ }
+ }
vo.setDriverFee(base.getDriverFee());
vo.setUrgentAmount(base.getUrgentAmount());
+ vo.setPlatformRewardAmount(order.getPlatformRewardAmount());
vo.setIsValuable(base.getIsValuable());
+ vo.setGoodLevelName(base.getGoodLevelName());
+ vo.setGoodTypeName(order.getGoodTypeName());
+ vo.setHasOversized(base.getHasOversized());
+ vo.setDriverVerifyCode(base.getDriverVerifyCode());
// 鐗╁搧鏄庣粏锛堣浆鎹㈢被鍨嬶級
List<DriverOrderDetailVO.OrderItem> detailItems = new ArrayList<>();
@@ -1094,6 +1514,7 @@
DriverOrderDetailVO.OrderItem item = new DriverOrderDetailVO.OrderItem();
item.setName(src.getName());
item.setQuantity(src.getQuantity());
+ item.setIsOversized(src.getIsOversized());
detailItems.add(item);
}
}
@@ -1102,6 +1523,11 @@
// 璇︽儏鐗规湁瀛楁
vo.setStatus(order.getStatus());
vo.setStatusDesc(getStatusDesc(order.getStatus()));
+ vo.setCreateTime(order.getCreateTime());
+ vo.setAcceptTime(order.getAcceptTime());
+ vo.setDriverTakeTime(order.getDriverTakeTime());
+ vo.setFinishTime(order.getFinishTime());
+ vo.setRemark(order.getRemark());
// 瀹㈡埛淇℃伅
String customerInfo = "";
@@ -1114,52 +1540,27 @@
vo.setCustomerInfo(customerInfo);
// 瀵艰埅缁忕含搴︼紙浣跨敤Orders鑷甫鍧愭爣锛�
- if (Constants.equalsInteger(order.getStatus(), Constants.TWO)) {
+ if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
if (order.getDepositLgt() != null && order.getDepositLat() != null) {
vo.setNavigateLat(order.getDepositLgt().doubleValue());
vo.setNavigateLng(order.getDepositLat().doubleValue());
}
- } else {
+ } else if(Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())){
if (order.getTakeLgt() != null && order.getTakeLat() != null) {
vo.setNavigateLat(order.getTakeLgt().doubleValue());
vo.setNavigateLng(order.getTakeLat().doubleValue());
}
}
- // 寮傚湴瀵勫瓨瀹炴椂缁忕含搴︼紙鎸夌姸鎬佽繑鍥烇級
- if (Constants.ONE.equals(order.getType())) {
- // 鍙告満鑷韩缁忕含搴�
- vo.setDriverLng(driverLng);
- vo.setDriverLat(driverLat);
-
- // status=3(宸叉帴鍗�)锛氳繑鍥炲瓨浠堕棬搴楃粡绾害
- if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus())) {
- if (order.getDepositShopId() != null) {
- ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
- if (depositShop != null) {
- vo.setDepositShopLng(depositShop.getLongitude());
- vo.setDepositShopLat(depositShop.getLatitude());
- }
- }
- }
- // status=4(閰嶉�佷腑)锛氳繑鍥炲彇浠剁偣缁忕含搴�
- if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
- if (order.getTakeShopId() != null) {
- ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId());
- if (takeShop != null) {
- vo.setTakeLng(takeShop.getLongitude());
- vo.setTakeLat(takeShop.getLatitude());
- }
- } else if (order.getTakeLgt() != null && order.getTakeLat() != null) {
- vo.setTakeLng(order.getTakeLgt().doubleValue());
- vo.setTakeLat(order.getTakeLat().doubleValue());
- }
- }
- }
-
+ vo.setDepositShopLng(order.getDepositLgt().doubleValue());
+ vo.setDepositShopLat(order.getDepositLat().doubleValue());
+ vo.setTakeLng(order.getTakeLgt().doubleValue());
+ vo.setTakeLat(order.getTakeLat().doubleValue());
+ vo.setDriverLng(driverLng);
+ vo.setDriverLat(driverLat);
// 涓嬪崟闄勪欢鍥剧墖
String imgPrefix = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILES).getCode();
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.ORDERS_FILES).getCode();
vo.setOrderImages(getFileUrls(orderId, Constants.FileType.ORDER_FILE.getKey(), imgPrefix));
// 璇勪环淇℃伅
@@ -1200,7 +1601,7 @@
if (!Constants.ONE.equals(order.getType())) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鍙栨秷");
}
- if (!Constants.TWO.equals(order.getStatus())) {
+ if (!Constants.equalsInteger(Constants.OrderStatus.accepted.getStatus(), order.getStatus())) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍙栨秷");
}
if (!driverId.equals(order.getAcceptDriver())) {
@@ -1221,7 +1622,7 @@
Date todayStart = cal.getTime();
Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
.eq(OrderLog::getOptUserId, driver.getMemberId())
- .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL)
+ .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus())
.eq(OrderLog::getOptUserType, Constants.ONE)
.ge(OrderLog::getCreateTime, todayStart));
if (todayCancelCount != null && todayCancelCount >= limit) {
@@ -1233,14 +1634,15 @@
.set(Orders::getAcceptDriver, null)
.set(Orders::getAcceptTime, null)
.set(Orders::getAcceptType, null)
+ .set(Orders::getStatus, Constants.OrderStatus.deposited.getStatus())
.eq(Orders::getId, orderId));
// 5. 鍐欏叆鍙栨秷鏃ュ織
OrderLog log = new OrderLog();
log.setOrderId(orderId);
- log.setTitle("鍙告満鍙栨秷璁㈠崟");
- log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟");
- log.setObjType(Constants.ORDER_LOG_CANCEL);
+ log.setTitle(Constants.OrderLogType.driverCancel.getTitle());
+ log.setLogInfo(Constants.OrderLogType.driverCancel.format(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟"));
+ log.setObjType(Constants.OrderLogType.driverCancel.getStatus());
log.setOptUserId(driver.getMemberId());
log.setOptUserType(Constants.ONE);
log.setOrderStatus(order.getStatus());
@@ -1297,11 +1699,13 @@
// 5. 鍘熷瓙鏇存柊锛氬甫 status=2 鏉′欢闃叉骞跺彂閲嶅鎶㈠崟
Date now = new Date();
+ String driverVerifyCode = generateVerifyCode();
int rows = ordersMapper.update(new UpdateWrapper<Orders>().lambda()
.set(Orders::getAcceptDriver, driverId)
.set(Orders::getAcceptTime, now)
.set(Orders::getAcceptType, 0) // 0=鎵嬪姩鎶㈠崟
.set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus())
+ .set(Orders::getDriverVerifyCode, driverVerifyCode)
.set(Orders::getUpdateTime, now)
.eq(Orders::getId, orderId)
.eq(Orders::getStatus, Constants.TWO));
@@ -1312,9 +1716,9 @@
// 6. 鍐欏叆鎿嶄綔鏃ュ織
OrderLog log = new OrderLog();
log.setOrderId(orderId);
- log.setTitle("鍙告満鎶㈠崟");
- log.setLogInfo("鍙告満銆�" + driver.getName() + "銆戞姠鍗曟垚鍔�");
- log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP);
+ log.setTitle(Constants.OrderLogType.driverGrab.getTitle());
+ log.setLogInfo(Constants.OrderLogType.driverGrab.format(driver.getName()));
+ log.setObjType(Constants.OrderLogType.driverGrab.getStatus());
log.setOptUserId(driver.getMemberId());
log.setOptUserType(Constants.ONE);
log.setOrderStatus(Constants.OrderStatus.accepted.getStatus());
@@ -1324,12 +1728,14 @@
// 7. 閫氱煡浼氬憳锛氬徃鏈哄凡鎶㈠崟
sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_GRABBED, orderId,
+ "orderNo", order.getCode(),
"driverName", driver.getName());
// 閫氱煡瀛樹欢闂ㄥ簵锛氳鍗曞凡鎶㈠崟寰呭彇浠�
if (order.getDepositShopId() != null) {
sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_PICKUP, orderId,
- "orderNo", order.getCode());
+ "orderNo", order.getCode(),
+ "name", driver.getName());
}
// 閫氱煡鍙告満锛氭姠鍗曟垚鍔�
@@ -1391,18 +1797,20 @@
// 4. 鏇存柊璁㈠崟鐘舵�佷负娲鹃�佷腑(4)
ordersMapper.update(new UpdateWrapper<Orders>().lambda()
.set(Orders::getStatus, Constants.OrderStatus.delivering.getStatus())
+ .set(Orders::getTakeTime, now)
.set(Orders::getUpdateTime, now)
.eq(Orders::getId, orderId));
// 5. 鍐欏叆鎿嶄綔鏃ュ織
OrderLog log = new OrderLog();
log.setOrderId(orderId);
- log.setTitle("鍙告満瀹屾垚鍙栦欢");
- log.setLogInfo("鍙告満銆�" + driver.getName() + "銆戝畬鎴愬彇浠讹紝寮�濮嬫淳閫�");
- log.setObjType(Constants.ORDER_LOG_DRIVER_PICKUP);
+ log.setTitle(Constants.OrderLogType.driverPickup.getTitle());
+ log.setLogInfo(Constants.OrderLogType.driverPickup.format(driver.getName()));
+ log.setObjType(Constants.OrderLogType.driverPickup.getStatus());
log.setOptUserId(driver.getMemberId());
log.setOptUserType(Constants.ONE);
log.setOrderStatus(Constants.OrderStatus.delivering.getStatus());
+ log.setRemark(dto.getRemark());
log.setCreateTime(now);
log.setDeleted(Constants.ZERO);
orderLogMapper.insert(log);
@@ -1488,9 +1896,10 @@
// 5. 鍐欏叆鎿嶄綔鏃ュ織
OrderLog log = new OrderLog();
log.setOrderId(orderId);
- log.setTitle("鍙告満纭閫佽揪");
- log.setLogInfo(StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪");
- log.setObjType(Constants.ORDER_LOG_DRIVER_DELIVER);
+ log.setTitle(Constants.OrderLogType.driverDeliver.getTitle());
+ log.setLogInfo(Constants.OrderLogType.driverDeliver.format(
+ StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪"));
+ log.setObjType(Constants.OrderLogType.driverDeliver.getStatus());
log.setOptUserId(driver.getMemberId());
log.setOptUserType(Constants.ONE);
log.setOrderStatus(Constants.OrderStatus.arrived.getStatus());
@@ -1552,6 +1961,22 @@
return String.format("%.1fkm", km);
}
+ /**
+ * 鐢熸垚6浣嶆暟瀛楁牳閿�鐮侊紙Redis SETNX 淇濊瘉鍞竴锛�
+ */
+ private String generateVerifyCode() {
+ Random random = new Random();
+ String redisKey = Constants.REDIS_VERIFY_CODE_KEY;
+ for (int i = 0; i < 200; i++) {
+ String code = String.format("%06d", random.nextInt(1000000));
+ Boolean success = redisTemplate.opsForValue().setIfAbsent(redisKey + code, "1", 24, TimeUnit.HOURS);
+ if (success != null && success) {
+ return code;
+ }
+ }
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏍搁攢鐮佺敓鎴愬け璐ワ紝璇烽噸璇�");
+ }
+
private double haversine(double lat1, double lng1, double lat2, double lng2) {
double R = 6371;
double dLat = Math.toRadians(lat2 - lat1);
@@ -1598,43 +2023,89 @@
vo.setIsUrgent(order.getIsUrgent());
vo.setDriverFee(order.getDriverFee());
vo.setUrgentAmount(order.getUrgentAmount());
+ vo.setPlatformRewardAmount(order.getPlatformRewardAmount());
// 瀛樹欢闂ㄥ簵锛堜娇鐢∣rders鑷甫鍧愭爣锛�
vo.setDepositShopName(order.getDepositShopName());
vo.setDepositShopAddress(order.getDepositShopAddress());
+ vo.setDepositLng(order.getDepositLgt() != null ? order.getDepositLgt().doubleValue() : null);
+ vo.setDepositLat(order.getDepositLat() != null ? order.getDepositLat().doubleValue() : null);
if (needDepositDist && driverLat != null && driverLng != null
&& order.getDepositLgt() != null && order.getDepositLat() != null) {
- double distKm = haversine(driverLat, driverLng,
- order.getDepositLgt().doubleValue(), order.getDepositLat().doubleValue());
+ double distKm = haversine(driverLat, driverLng, order.getDepositLat().doubleValue(),
+ order.getDepositLgt().doubleValue());
vo.setDepositDistance(formatDistance(distKm));
}
- // 鍙栦欢淇℃伅 + 鑱旂郴鐢佃瘽锛堜娇鐢∣rders鑷甫鍧愭爣锛�
+ // 鍙栦欢淇℃伅锛堜娇鐢∣rders鑷甫鍧愭爣锛�
boolean hasTakeShop = order.getTakeShopId() != null && StringUtils.isNotBlank(order.getTakeShopName());
if (hasTakeShop) {
vo.setTakeName(order.getTakeShopName());
- vo.setContactPhone(order.getTakeShopLinkPhone());
+ vo.setTakeAddress(order.getTakeShopAddress());
+ vo.setTakeShopId(order.getTakeShopId());
} else {
vo.setTakeName(order.getTakeLocation());
- vo.setContactPhone(order.getTakePhone());
+ vo.setTakeAddress(order.getTakeLocationRemark());
}
+ vo.setTakeLng(order.getTakeLgt() != null ? order.getTakeLgt().doubleValue() : null);
+ vo.setTakeLat(order.getTakeLat() != null ? order.getTakeLat().doubleValue() : null);
if (driverLat != null && driverLng != null
&& order.getTakeLgt() != null && order.getTakeLat() != null) {
- double takeDist = haversine(driverLat, driverLng,
- order.getTakeLgt().doubleValue(), order.getTakeLat().doubleValue());
+ double takeDist = haversine(driverLat, driverLng, order.getTakeLat().doubleValue(),
+ order.getTakeLgt().doubleValue());
vo.setTakeDistance(formatDistance(takeDist));
}
// 璐甸噸鐗╁搧
vo.setIsValuable("1".equals(order.getC2OtherField()));
+ vo.setGoodLevelName(order.getGoodLevelName());
+ vo.setHasOversized(order.getHasOversized());
+
+ // 寰呭彇璐х姸鎬�(status=3)杩斿洖鍙告満鍙栬揣鐮�
+ if (Constants.equalsInteger(order.getStatus(), Constants.THREE)||Constants.equalsInteger(order.getStatus(), Constants.FOUR)) {
+ vo.setDriverVerifyCode(order.getDriverVerifyCode());
+ }
+
+ // 璁㈠崟鐘舵��
+ 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());
+ // 鎵归噺鏌ヨ娑夊強鍒扮殑 luggageId 瀵瑰簲鐨� category锛屽垽鏂槸鍚﹀ぇ浠�
+ Set<Integer> luggageIds = details.stream()
+ .map(OrdersDetail::getLuggageId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ Set<Integer> oversizedIds = new HashSet<>();
+ if (!luggageIds.isEmpty()) {
+ categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+ .in(Category::getId, luggageIds)
+ .eq(Category::getType, Constants.FOUR)
+ .eq(Category::getOtherField, "1")
+ .eq(Category::getDeleted, Constants.ZERO))
+ .forEach(c -> oversizedIds.add(c.getId()));
+ }
List<DriverGrabOrderVO.OrderItem> items = new ArrayList<>();
for (OrdersDetail detail : details) {
DriverGrabOrderVO.OrderItem item = new DriverGrabOrderVO.OrderItem();
item.setName(detail.getLuggageName());
item.setQuantity(detail.getNum());
+ item.setIsOversized(oversizedIds.contains(detail.getLuggageId()) ? Constants.ONE : Constants.ZERO);
items.add(item);
}
vo.setItems(items);
@@ -1649,25 +2120,25 @@
if (StringUtils.isBlank(phone)) {
return;
}
+ if (!smsNotify.isEnabled()) {
+ return;
+ }
String content = smsNotify.format(paramPairs);
try {
JSONObject templateParam = new JSONObject();
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);
@@ -1679,6 +2150,7 @@
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);
@@ -1686,4 +2158,248 @@
}
}
+ @Override
+ public void changePassword(Integer driverId, String oldPassword, String newPassword, String token) {
+ if (StringUtils.isBlank(oldPassword)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃у瘑鐮佷笉鑳戒负绌�");
+ }
+ if (StringUtils.isBlank(newPassword)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏂板瘑鐮佷笉鑳戒负绌�");
+ }
+ // 鏍¢獙鏂板瘑鐮佸繀椤诲悓鏃跺寘鍚瓧姣嶅拰鏁板瓧
+ boolean hasLetter = newPassword.chars().anyMatch(Character::isLetter);
+ boolean hasDigit = newPassword.chars().anyMatch(Character::isDigit);
+ if (!hasLetter || !hasDigit) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵嗙爜蹇呴』鍚屾椂鍖呭惈瀛楁瘝鍜屾暟瀛�");
+ }
+ // 鏌ヨ鍙告満瀵瑰簲鐨勪細鍛�
+ DriverInfo driverInfo = driverInfoMapper.selectById(driverId);
+ if (driverInfo == null || driverInfo.getMemberId() == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ Member member = memberMapper.selectById(driverInfo.getMemberId());
+ if (member == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ // 鏍¢獙鏃у瘑鐮�
+ String oldEncryptPwd = secure.encryptPassword(oldPassword, member.getSalt());
+ if (!oldEncryptPwd.equals(member.getPassword())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃у瘑鐮侀敊璇�");
+ }
+ // 鍔犲瘑鏂板瘑鐮佸苟鏇存柊
+ String salt = RandomStringUtils.randomAlphanumeric(6);
+ String encryptPwd = secure.encryptPassword(newPassword, salt);
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getPassword, encryptPwd)
+ .set(Member::getSalt, salt)
+ .eq(Member::getId, member.getId()));
+ // 娓呴櫎token锛屽己鍒堕噸鏂扮櫥褰�
+ if (StringUtils.isNotBlank(token)) {
+ redisTemplate.delete(token);
+ }
+ }
+
+ @Override
+ public DriverActiveOrderCountVO getActiveOrderCount(Integer driverId) {
+ // 宸叉姠鍗�(status=3)鏁伴噺
+ Long grabbed = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driverId)
+ .eq(Orders::getStatus, Constants.OrderStatus.accepted.getStatus())
+ .eq(Orders::getDeleted, Constants.ZERO));
+ // 娲鹃�佷腑(status=4)鏁伴噺
+ Long delivering = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getAcceptDriver, driverId)
+ .eq(Orders::getStatus, Constants.OrderStatus.delivering.getStatus())
+ .eq(Orders::getDeleted, Constants.ZERO));
+ DriverActiveOrderCountVO vo = new DriverActiveOrderCountVO();
+ vo.setGrabbedCount(grabbed != null ? grabbed.intValue() : 0);
+ vo.setDeliveringCount(delivering != null ? delivering.intValue() : 0);
+ return vo;
+ }
+
+ @Override
+ public PageData<DriverGrabOrderVO> driverOrderPage(Integer driverId, PageWrap<DriverOrderPageDTO> pageWrap) {
+ DriverInfo driver = driverInfoMapper.selectById(driverId);
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+
+ DriverOrderPageDTO model = pageWrap.getModel();
+ Integer status = model != null ? model.getStatus() : null;
+
+ // 鍚堟硶鐘舵�佹牎楠�
+ List<Integer> validStatuses = Arrays.asList(
+ Constants.OrderStatus.accepted.getStatus(),
+ Constants.OrderStatus.delivering.getStatus(),
+ Constants.OrderStatus.arrived.getStatus(),
+ Constants.OrderStatus.finished.getStatus());
+ if (status != null && !validStatuses.contains(status)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐘舵�佸彧鑳戒负3(寰呭彇浠�)銆�4(閰嶉�佷腑)銆�7(宸插畬鎴�)");
+ }
+
+ IPage<Orders> p = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Orders> wrapper = new MPJLambdaWrapper<>();
+ wrapper.selectAll(Orders.class)
+ .select("s1.name", Orders::getDepositShopName)
+ .select("s1.address", Orders::getDepositShopAddress)
+ .select("s2.name", Orders::getTakeShopName)
+ .select("s2.address", Orders::getTakeShopAddress)
+ .select("s1.link_phone as takeShopLinkPhone")
+ .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")
+ .eq(Orders::getAcceptDriver, driverId)
+ .in(status == null, Orders::getStatus, validStatuses)
+ .eq(status != null, Orders::getStatus, status)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .orderByDesc(Orders::getAcceptTime);
+
+ IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
+
+ List<DriverGrabOrderVO> voList = new ArrayList<>();
+ if (orderPage != null && orderPage.getRecords() != null) {
+ // 鎵归噺鏌ョ墿鍝佹槑缁�
+ List<Integer> orderIds = orderPage.getRecords().stream().map(Orders::getId).collect(Collectors.toList());
+ Map<Integer, List<OrdersDetail>> detailMap = new HashMap<>();
+ if (!orderIds.isEmpty()) {
+ List<OrdersDetail> allDetails = ordersDetailMapper.selectList(
+ new QueryWrapper<OrdersDetail>().lambda()
+ .in(OrdersDetail::getOrderId, orderIds));
+ for (OrdersDetail d : allDetails) {
+ detailMap.computeIfAbsent(d.getOrderId(), k -> new ArrayList<>()).add(d);
+ }
+ }
+
+ Double driverLat = driver.getLatitude();
+ Double driverLng = driver.getLongitude();
+ Date now = new Date();
+ for (Orders order : orderPage.getRecords()) {
+ boolean needDepositDist = Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.accepted.getStatus());
+ voList.add(buildDriverOrderVO(order, driverLat, driverLng, needDepositDist, now, detailMap));
+ }
+ }
+
+ IPage<DriverGrabOrderVO> vPage = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ PageData<DriverGrabOrderVO> pageData = PageData.from(vPage);
+ pageData.setRecords(voList);
+ if (orderPage != null) {
+ pageData.setTotal(orderPage.getTotal());
+ pageData.setPage(orderPage.getCurrent());
+ pageData.setCapacity(orderPage.getSize());
+ }
+ return pageData;
+ }
+
+ @Override
+ public DriverCancelLimitVO getTodayCancelLimit(Integer driverId) {
+ DriverInfo driver = driverInfoMapper.selectById(driverId);
+ if (driver == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+ }
+
+ // 姣忔棩鍙栨秷涓婇檺
+ String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit();
+ int limit = 3;
+ if (StringUtils.isNotBlank(limitStr)) {
+ try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {}
+ }
+
+ // 浠婃棩宸插彇娑堟鏁�
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.set(Calendar.MINUTE, 0);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+ Date todayStart = cal.getTime();
+ Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
+ .eq(OrderLog::getOptUserId, driver.getMemberId())
+ .eq(OrderLog::getObjType, Constants.OrderLogType.driverCancel.getStatus())
+ .eq(OrderLog::getOptUserType, Constants.ONE)
+ .ge(OrderLog::getCreateTime, todayStart));
+ int used = todayCancelCount != null ? todayCancelCount.intValue() : 0;
+
+ DriverCancelLimitVO vo = new DriverCancelLimitVO();
+ vo.setLimit(limit);
+ vo.setUsed(used);
+ vo.setRemain(Math.max(limit - used, 0));
+ return vo;
+ }
+
+ @Override
+ public boolean checkDriverToken(String token) {
+ if (StringUtils.isBlank(token) || !token.startsWith(Constants.ONE + "")) {
+ return false;
+ }
+ String tokenRedis = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY + token);
+ if (StringUtils.isBlank(tokenRedis)) {
+ return false;
+ }
+ try {
+ int lastIndex = token.lastIndexOf("_") + 1;
+ Integer driverId = Integer.valueOf(token.substring(lastIndex));
+ DriverInfo driverInfo = driverInfoMapper.selectById(driverId);
+ if(Objects.isNull(driverInfo)){
+ return false;
+ }
+ Member member = memberMapper.selectById(driverInfo.getMemberId());
+ return member != null
+ && !Constants.ONE.equals(member.getDeleted())
+ && !Constants.ONE.equals(member.getStatus())
+ && Constants.ONE.equals(member.getUserType());
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ @Override
+ public void registerJpushAlias(Integer driverId, String jpushAlias) {
+ DriverInfo update = new DriverInfo();
+ update.setId(driverId);
+ update.setJpushAlias(jpushAlias);
+ driverInfoMapper.updateById(update);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int initChangeVersions() {
+ Date now = new Date();
+ // 1. 琛ュ叏 version_type 涓� NULL 鐨勮褰�
+ driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+ .set(DriverInfo::getVersionType, Constants.ZERO)
+ .isNull(DriverInfo::getVersionType));
+
+ // 2. 鏌ヨ鎵�鏈夊凡鏈夊彉鏇寸増鏈殑 relationDriverId
+ List<DriverInfo> changeVersions = driverInfoMapper.selectList(new QueryWrapper<DriverInfo>().lambda()
+ .eq(DriverInfo::getVersionType, Constants.ONE)
+ .eq(DriverInfo::getDeleted, Constants.ZERO)
+ .ne(DriverInfo::getAuditStatus,99)
+ .select(DriverInfo::getRelationDriverId)
+ .isNotNull(DriverInfo::getRelationDriverId));
+ Set<Integer> existingRelationIds = changeVersions.stream()
+ .map(DriverInfo::getRelationDriverId)
+ .collect(Collectors.toSet());
+
+ // 3. 鏌ヨ鎵�鏈夋病鏈夊彉鏇寸増鏈殑姝e紡鐗堟湰鍙告満
+ QueryWrapper<DriverInfo> qw = new QueryWrapper<>();
+ qw.lambda()
+ .eq(DriverInfo::getVersionType, Constants.ZERO)
+ .eq(DriverInfo::getDeleted, Constants.ZERO);
+ List<DriverInfo> officialList = driverInfoMapper.selectList(qw);
+
+ int count = 0;
+ for (DriverInfo official : officialList) {
+ if (existingRelationIds.contains(official.getId())) {
+ continue;
+ }
+ createDriverChangeVersion(official, official.getId(), now);
+ count++;
+ }
+ return count;
+ }
+
}
--
Gitblit v1.9.3