From e685b58fd40cf28a20844643d70cc5f5b46ca037 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 10 四月 2026 11:08:17 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/gtzxinglijicun

---
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |  585 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 585 insertions(+), 0 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
new file mode 100644
index 0000000..e67a9b0
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -0,0 +1,585 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.core.utils.Secure;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DriverInfoMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.SmsrecordMapper;
+import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.dto.AuditDTO;
+import com.doumee.dao.dto.DriverLoginRequest;
+import com.doumee.dao.dto.DriverRegisterRequest;
+import com.doumee.dao.dto.DriverVerifyRequest;
+import com.doumee.service.business.AliSmsService;
+import com.doumee.service.business.DriverInfoService;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍙告満娉ㄥ唽淇℃伅Service瀹炵幇
+ * @author rk
+ * @date 2026/04/08
+ */
+@Service
+public class DriverInfoServiceImpl implements DriverInfoService {
+
+    @Autowired
+    private DriverInfoMapper driverInfoMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private SmsrecordMapper smsrecordMapper;
+
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
+    private Secure secure;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private CategoryMapper categoryMapper;
+
+    @Override
+    public Integer create(DriverInfo driverInfo) {
+        driverInfoMapper.insert(driverInfo);
+        return driverInfo.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        driverInfoMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(DriverInfo driverInfo) {
+        UpdateWrapper<DriverInfo> deleteWrapper = new UpdateWrapper<>(driverInfo);
+        driverInfoMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        driverInfoMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(DriverInfo driverInfo) {
+        driverInfoMapper.updateById(driverInfo);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<DriverInfo> driverInfos) {
+        if (CollectionUtils.isEmpty(driverInfos)) {
+            return;
+        }
+        for (DriverInfo driverInfo : driverInfos) {
+            this.updateById(driverInfo);
+        }
+    }
+
+    @Override
+    public DriverInfo findById(Integer id) {
+        DriverInfo driverInfo = driverInfoMapper.selectById(id);
+        if (Objects.isNull(driverInfo)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        return driverInfo;
+    }
+
+    @Override
+    public DriverInfo findOne(DriverInfo driverInfo) {
+        QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+        return driverInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<DriverInfo> findList(DriverInfo driverInfo) {
+        QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+        return driverInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<DriverInfo> findPage(PageWrap<DriverInfo> pageWrap) {
+        IPage<DriverInfo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<DriverInfo> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        pageWrap.getModel().setDeleted(Constants.ZERO);
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getDeleted() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getDeleted, pageWrap.getModel().getDeleted());
+        }
+        if (pageWrap.getModel().getCreateUser() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getCreateUser, pageWrap.getModel().getCreateUser());
+        }
+        if (pageWrap.getModel().getCreateTime() != null) {
+            queryWrapper.lambda().ge(DriverInfo::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
+            queryWrapper.lambda().le(DriverInfo::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
+        }
+        if (pageWrap.getModel().getUpdateUser() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getUpdateUser, pageWrap.getModel().getUpdateUser());
+        }
+        if (pageWrap.getModel().getUpdateTime() != null) {
+            queryWrapper.lambda().ge(DriverInfo::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
+            queryWrapper.lambda().le(DriverInfo::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().like(DriverInfo::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getTelephone() != null) {
+            queryWrapper.lambda().like(DriverInfo::getTelephone, pageWrap.getModel().getTelephone());
+        }
+        if (pageWrap.getModel().getIdcard() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getIdcard, pageWrap.getModel().getIdcard());
+        }
+        if (pageWrap.getModel().getMaritalStatus() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getMaritalStatus, pageWrap.getModel().getMaritalStatus());
+        }
+        if (pageWrap.getModel().getCarType() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getCarType, pageWrap.getModel().getCarType());
+        }
+        if (pageWrap.getModel().getCarCode() != null) {
+            queryWrapper.lambda().like(DriverInfo::getCarCode, pageWrap.getModel().getCarCode());
+        }
+        if (pageWrap.getModel().getCardStartDate() != null) {
+            queryWrapper.lambda().ge(DriverInfo::getCardStartDate, Utils.Date.getStart(pageWrap.getModel().getCardStartDate()));
+            queryWrapper.lambda().le(DriverInfo::getCardStartDate, Utils.Date.getEnd(pageWrap.getModel().getCardStartDate()));
+        }
+        if (pageWrap.getModel().getCardEndDate() != null) {
+            queryWrapper.lambda().ge(DriverInfo::getCardEndDate, Utils.Date.getStart(pageWrap.getModel().getCardEndDate()));
+            queryWrapper.lambda().le(DriverInfo::getCardEndDate, Utils.Date.getEnd(pageWrap.getModel().getCardEndDate()));
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getAuditTime() != null) {
+            queryWrapper.lambda().ge(DriverInfo::getAuditTime, Utils.Date.getStart(pageWrap.getModel().getAuditTime()));
+            queryWrapper.lambda().le(DriverInfo::getAuditTime, Utils.Date.getEnd(pageWrap.getModel().getAuditTime()));
+        }
+        if (pageWrap.getModel().getAuditUser() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getAuditUser, pageWrap.getModel().getAuditUser());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(DriverInfo::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        for (PageWrap.SortData sortData : pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(driverInfoMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(DriverInfo driverInfo) {
+        QueryWrapper<DriverInfo> wrapper = new QueryWrapper<>(driverInfo);
+        return driverInfoMapper.selectCount(wrapper);
+    }
+
+    /***************鍙告満楠岃瘉鐮佺櫥褰曚笟鍔�*************/
+
+    @Override
+    public void sendRegisterCode(String telephone) {
+        if (StringUtils.isBlank(telephone)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        // 鐢熸垚6浣嶆暟瀛楅獙璇佺爜
+        String code = RandomStringUtils.randomNumeric(6);
+        // 鍙戦�佺煭淇�
+        String templateParam = "{\"code\":\"" + code + "\"}";
+        AliSmsService.sendSms(telephone, "SMS_491325122", templateParam);
+        // 淇濆瓨鐭俊璁板綍
+        Smsrecord smsrecord = new Smsrecord();
+        smsrecord.setDeleted(Constants.ZERO);
+        smsrecord.setCreateTime(new Date());
+        smsrecord.setUpdateTime(new Date());
+        smsrecord.setPhone(telephone);
+        smsrecord.setContent("鍙告満楠岃瘉鐮佺櫥褰曪細" + code);
+        smsrecord.setType(Constants.ZERO);
+        smsrecord.setCode(code);
+        smsrecord.setStatus(Constants.ZERO);
+        // 鏈夋晥鏈�15鍒嗛挓
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.add(Calendar.MINUTE, 15);
+        smsrecord.setValidDate(calendar.getTime());
+        smsrecordMapper.insert(smsrecord);
+    }
+
+    @Override
+    @Transactional
+    public AccountResponse register(DriverRegisterRequest request) {
+        String telephone = request.getTelephone();
+        String code = request.getCode();
+        if (StringUtils.isAnyBlank(telephone, code)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        // 1. 楠岃瘉鐭俊楠岃瘉鐮�
+        QueryWrapper<Smsrecord> smsWrapper = new QueryWrapper<>();
+        smsWrapper.lambda().eq(Smsrecord::getPhone, telephone)
+                .eq(Smsrecord::getCode, code)
+                .eq(Smsrecord::getType, Constants.ZERO)
+                .eq(Smsrecord::getStatus, Constants.ZERO)
+                .ge(Smsrecord::getValidDate, new Date())
+                .orderByDesc(Smsrecord::getCreateTime)
+                .last("limit 1");
+        Smsrecord smsrecord = smsrecordMapper.selectOne(smsWrapper);
+        if (Objects.isNull(smsrecord)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "楠岃瘉鐮侀敊璇垨宸茶繃鏈�");
+        }
+        // 鏍囪楠岃瘉鐮佸凡浣跨敤
+        smsrecord.setStatus(Constants.ONE);
+        smsrecord.setUpdateTime(new Date());
+        smsrecordMapper.updateById(smsrecord);
+
+        // 2. 鏌ヨ鏄惁宸叉湁鍙告満璐﹀彿
+        Member existMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                .eq(Member::getTelephone, telephone)
+                .eq(Member::getUserType, Constants.ONE)
+                .ne(Member::getStatus, Constants.TWO)
+                .last("limit 1"));
+
+        Date now = new Date();
+        Member member;
+
+        if (Objects.nonNull(existMember)) {
+            // 宸叉湁鍙告満璐﹀彿锛岀洿鎺ョ櫥褰�
+            if (!Constants.equalsInteger(existMember.getStatus(), Constants.ZERO)) {
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿宸插仠鐢紝璇疯仈绯荤鐞嗗憳");
+            }
+            // 鏇存柊鐧诲綍淇℃伅
+            memberMapper.update(new UpdateWrapper<Member>().lambda()
+                    .set(Member::getLoginTime, now)
+                    .setSql("login_times = login_times + 1")
+                    .eq(Member::getId, existMember.getId()));
+            // 鏇存柊鍐呭瓨涓殑鐧诲綍淇℃伅
+            existMember.setLoginTime(now);
+            existMember.setLoginTimes(existMember.getLoginTimes() + 1);
+            member = existMember;
+        } else {
+            // 娌℃湁鍙告満璐﹀彿锛屾敞鍐屾柊鐢ㄦ埛锛岄粯璁ゅ瘑鐮佷负鎵嬫満鍙峰悗鍏綅
+            String salt = RandomStringUtils.randomAlphanumeric(6);
+            String defaultPassword = telephone.substring(telephone.length() - 6);
+            member = new Member();
+            member.setDeleted(Constants.ZERO);
+            member.setCreateTime(now);
+            member.setUpdateTime(now);
+            member.setTelephone(telephone);
+            member.setNickName(telephone);
+            member.setName(telephone);
+            member.setUserType(Constants.ONE);
+            member.setBusinessStatus(Constants.ZERO);
+            member.setPassword(secure.encryptPassword(defaultPassword, salt));
+            member.setSalt(salt);
+            member.setWorkerIdentity(Constants.ZERO);
+            member.setDriverIdentity(Constants.ZERO);
+            member.setChefIdentity(Constants.ZERO);
+            member.setAmount(Constants.ZERO.longValue());
+            member.setTotalAmount(Constants.ZERO.longValue());
+            member.setStatus(Constants.ZERO);
+            member.setLoginTime(now);
+            member.setLoginTimes(Constants.ONE.longValue());
+            member.setReceiveNum(Constants.ZERO.longValue());
+            member.setPublishNum(Constants.ZERO.longValue());
+            member.setAutoReceiveStatus(Constants.ONE);
+            member.setUseIdentity(Constants.ZERO);
+            memberMapper.insert(member);
+
+            // 鍒涘缓鍙告満鍩虹淇℃伅锛坰tatus=0锛屾敞鍐岀姸鎬侊級
+            DriverInfo driverInfo = new DriverInfo();
+            driverInfo.setDeleted(Constants.ZERO);
+            driverInfo.setCreateTime(now);
+            driverInfo.setUpdateTime(now);
+            driverInfo.setTelephone(telephone);
+            driverInfo.setMemberId(member.getId());
+            driverInfo.setStatus(Constants.ZERO);
+            driverInfoMapper.insert(driverInfo);
+        }
+
+        // 3. 鐢熸垚token杩斿洖
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setToken(JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ONE, JSONObject.toJSONString(member), redisTemplate));
+        accountResponse.setMember(member);
+        return accountResponse;
+    }
+
+    @Override
+    public AccountResponse login(DriverLoginRequest request) {
+        String telephone = request.getTelephone();
+        String password = request.getPassword();
+        if (StringUtils.isAnyBlank(telephone, password)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        // 鏌ヨ鍙告満浼氬憳
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                .eq(Member::getTelephone, telephone)
+                .eq(Member::getUserType, Constants.ONE)
+                .ne(Member::getStatus, Constants.TWO)
+                .last("limit 1"));
+        if (Objects.isNull(member)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿涓嶅瓨鍦�");
+        }
+        if (!Constants.equalsInteger(member.getStatus(), Constants.ZERO)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璐﹀彿宸插仠鐢紝璇疯仈绯荤鐞嗗憳");
+        }
+        // 鏍¢獙瀵嗙爜
+        String encryptPwd = secure.encryptPassword(password, member.getSalt());
+        if (!encryptPwd.equals(member.getPassword())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵嗙爜閿欒");
+        }
+        // 鏇存柊鐧诲綍淇℃伅
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .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.setMember(member);
+        return accountResponse;
+    }
+
+    /***************鍙告満瀹炲悕璁よ瘉涓氬姟*************/
+
+    @Override
+    @Transactional
+    public void submitVerify(Integer memberId, DriverVerifyRequest request) {
+        // 鍙傛暟鍩虹鏍¢獙
+        if (StringUtils.isAnyBlank(request.getName(), request.getIdcard(), request.getLivePlace(),
+                request.getCarCode(), request.getIdcardImg(), request.getIdcardImgBack())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if (request.getMaritalStatus() == null || request.getCarType() == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        // 韬唤璇佸彿鏍煎紡鏍¢獙锛�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);
+        }
+        // 鐘舵�佹牎楠岋細status=0(娉ㄥ唽)鎴杝tatus=3(瀹℃壒椹冲洖)鍙彁浜よ璇�
+        if (driverInfo.getStatus() != null
+                && !Constants.equalsInteger(driverInfo.getStatus(), Constants.ZERO)
+                && !Constants.equalsInteger(driverInfo.getStatus(), Constants.THREE)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽鎻愪氦璁よ瘉");
+        }
+        // 鏍规嵁杞﹁締绫诲瀷鍒ゆ柇鏄惁闇�瑕侀┚椹惰瘉
+        Category category = categoryMapper.selectById(request.getCarType());
+        if (Objects.isNull(category) || !Constants.equalsInteger(category.getType(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "杞﹁締绫诲瀷涓嶅瓨鍦�");
+        }
+        boolean needLicense = Constants.equalsInteger(Integer.valueOf(category.getOtherField()), Constants.ONE);
+        if (needLicense) {
+            if (request.getCardStartDate() == null || request.getCardEndDate() == null) {
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヨ溅杈嗙被鍨嬮渶瑕佸~鍐欓┚椹惰瘉鏈夋晥鏈�");
+            }
+            if (request.getLicenseImgUrls() == null || request.getLicenseImgUrls().isEmpty()) {
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヨ溅杈嗙被鍨嬮渶瑕佷笂浼犻┚椹惰瘉鐓х墖");
+            }
+        }
+        // 杞﹁締鐓х墖蹇呭~
+        if (request.getCarImgUrls() == null || request.getCarImgUrls().isEmpty()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇蜂笂浼犺溅杈嗙収鐗�");
+        }
+        // 鐓х墖鏁伴噺鏍¢獙
+        if (request.getCarImgUrls().size() > 3) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "杞﹁締鐓х墖鏈�澶氫笂浼�3寮�");
+        }
+        if (request.getLicenseImgUrls() != null && request.getLicenseImgUrls().size() > 3) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "椹鹃┒璇佺収鐗囨渶澶氫笂浼�3寮�");
+        }
+        if (request.getOtherImgUrls() != null && request.getOtherImgUrls().size() > 3) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍏朵粬璧勬枡鐓х墖鏈�澶氫笂浼�3寮�");
+        }
+
+        // 鏇存柊鍙告満淇℃伅
+        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::getStatus, Constants.ONE)
+                .set(DriverInfo::getUpdateTime, now)
+                .set(DriverInfo::getAuditRemark, null)
+                .set(DriverInfo::getAuditTime, null)
+                .eq(DriverInfo::getId, driverInfo.getId()));
+
+        // 鍒犻櫎鏃х殑鐓х墖璁板綍
+        multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, driverInfo.getId())
+                .in(Multifile::getObjType, 6, 7, 8));
+
+        // 淇濆瓨杞﹁締鐓х墖 objType=6
+        saveMultifileList(driverInfo.getId(), 6, request.getCarImgUrls(), now);
+        // 淇濆瓨椹鹃┒璇佺収鐗� objType=7
+        if (!CollectionUtils.isEmpty(request.getLicenseImgUrls())) {
+            saveMultifileList(driverInfo.getId(), 7, request.getLicenseImgUrls(), now);
+        }
+        // 淇濆瓨鍏朵粬璧勬枡鐓х墖 objType=8
+        if (!CollectionUtils.isEmpty(request.getOtherImgUrls())) {
+            saveMultifileList(driverInfo.getId(), 8, request.getOtherImgUrls(), now);
+        }
+
+        // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�佷负璁よ瘉涓�
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .set(Member::getBusinessStatus, Constants.ONE)
+                .set(Member::getUpdateTime, now)
+                .eq(Member::getId, memberId));
+    }
+
+    @Override
+    public DriverInfo getVerifyDetail(Integer memberId) {
+        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);
+        }
+        // 鏌ヨ杞﹁締绫诲瀷鍚嶇О鍜屾槸鍚﹂渶瑕侀┚椹惰瘉
+        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);
+            }
+        }
+        // 鏌ヨ鐓х墖鍒楄〃
+        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, driverInfo.getId())
+                .in(Multifile::getObjType, 6, 7, 8)
+                .orderByAsc(Multifile::getSortnum));
+        if (!CollectionUtils.isEmpty(multifileList)) {
+            for (Multifile mf : multifileList) {
+                if (Constants.equalsInteger(mf.getObjType(), 6)) {
+                    driverInfo.getCarImgList().add(mf);
+                } else if (Constants.equalsInteger(mf.getObjType(), 7)) {
+                    driverInfo.getLicenseImgList().add(mf);
+                } else if (Constants.equalsInteger(mf.getObjType(), 8)) {
+                    driverInfo.getOtherImgList().add(mf);
+                }
+            }
+        }
+        return driverInfo;
+    }
+
+    @Override
+    @Transactional
+    public void auditVerify(AuditDTO auditDTO) {
+        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)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        // 鍙湁鐘舵�佷负1(寰呭鎵�)涓斿凡濉啓璁よ瘉淇℃伅鎵嶈兘瀹℃壒
+        if (!Constants.equalsInteger(driverInfo.getStatus(), Constants.ONE)
+                || StringUtils.isBlank(driverInfo.getIdcard())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐘舵�佷笉鍏佽瀹℃壒");
+        }
+        Date now = new Date();
+        // 瀹℃壒缁撴灉锛歛uditDTO.auditStatus 0=閫氳繃鈫抎riverInfo.status=2锛�1=鎷掔粷鈫抎riverInfo.status=3
+        Integer newStatus;
+        if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO)) {
+            newStatus = Constants.TWO;  // 瀹℃壒閫氳繃
+        } else if (Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ONE)) {
+            newStatus = Constants.THREE;  // 瀹℃壒椹冲洖
+        } else {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀹℃壒鐘舵�佸弬鏁伴敊璇�");
+        }
+        // 鏇存柊鍙告満鐘舵��
+        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                .set(DriverInfo::getStatus, newStatus)
+                .set(DriverInfo::getAuditTime, now)
+                .set(DriverInfo::getAuditRemark, auditDTO.getAuditRemark())
+                .set(DriverInfo::getAuditUser, auditDTO.getAuditUser())
+                .set(DriverInfo::getUpdateTime, now)
+                .eq(DriverInfo::getId, auditDTO.getId()));
+        // 鏇存柊浼氬憳鍙告満璁よ瘉鐘舵�侊細閫氳繃=2锛岄┏鍥�=3
+        Integer driverStatus = Constants.equalsInteger(newStatus, Constants.TWO) ? Constants.TWO : Constants.THREE;
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .set(Member::getBusinessStatus, driverStatus)
+                .set(Member::getUpdateTime, now)
+                .eq(Member::getId, driverInfo.getMemberId()));
+    }
+
+    /**
+     * 鎵归噺淇濆瓨闄勪欢璁板綍
+     */
+    private void saveMultifileList(Integer objId, Integer objType, List<String> urls, Date now) {
+        int sortNum = 0;
+        for (String url : urls) {
+            Multifile multifile = new Multifile();
+            multifile.setObjId(objId);
+            multifile.setObjType(objType);
+            multifile.setType(Constants.ZERO);
+            multifile.setFileurl(url);
+            multifile.setIsdeleted(Constants.ZERO);
+            multifile.setCreateDate(now);
+            multifile.setSortnum(sortNum++);
+            multifileMapper.insert(multifile);
+        }
+    }
+
+}

--
Gitblit v1.9.3