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 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 deleteWrapper = new UpdateWrapper<>(driverInfo); driverInfoMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } driverInfoMapper.deleteBatchIds(ids); } @Override public void updateById(DriverInfo driverInfo) { driverInfoMapper.updateById(driverInfo); } @Override public void updateByIdInBatch(List 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 wrapper = new QueryWrapper<>(driverInfo); return driverInfoMapper.selectOne(wrapper); } @Override public List findList(DriverInfo driverInfo) { QueryWrapper wrapper = new QueryWrapper<>(driverInfo); return driverInfoMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper 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 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 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().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().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.setDriverStatus(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); // 创建司机基础信息(status=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().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().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位,最后一位可为X) 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().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(注册)或status=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().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().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().lambda() .set(Member::getDriverStatus, Constants.ONE) .set(Member::getUpdateTime, now) .eq(Member::getId, memberId)); } @Override public DriverInfo getVerifyDetail(Integer memberId) { DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper().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 multifileList = multifileMapper.selectList(new QueryWrapper().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(); // 审批结果:auditDTO.auditStatus 0=通过→driverInfo.status=2,1=拒绝→driverInfo.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().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().lambda() .set(Member::getDriverStatus, driverStatus) .set(Member::getUpdateTime, now) .eq(Member::getId, driverInfo.getMemberId())); } /** * 批量保存附件记录 */ private void saveMultifileList(Integer objId, Integer objType, List 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); } } }