Commit ade1de372eb912dac27ddddc3f0dafa6f62d6ddf
1 parent
dd0dee29
fix: 修改签到逻辑,修复接口注解错误
Showing
7 changed files
with
54 additions
and
18 deletions
ruoyi-admin/src/main/java/com/ruoyi/redispre/GlobalRedisPreName.java renamed to ruoyi-admin/src/main/java/com/ruoyi/common/redispre/GlobalRedisPreName.java
ruoyi-admin/src/main/java/com/ruoyi/driver/controller/DriverController.java
| ... | ... | @@ -168,7 +168,7 @@ public class DriverController extends BaseController { |
| 168 | 168 | /** |
| 169 | 169 | * 头像下载 根据 工号 |
| 170 | 170 | */ |
| 171 | - @ApiModelProperty("头像下载") | |
| 171 | + @ApiOperation("头像下载") | |
| 172 | 172 | @GetMapping("/download/{jobCode}") |
| 173 | 173 | public void downLoadHeadImage(@PathVariable("jobCode") String jobCode, HttpServletResponse response) { |
| 174 | 174 | driverService.downloadHeadImage(jobCode, response); | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/driver/service/impl/DriverServiceImpl.java
| 1 | 1 | package com.ruoyi.driver.service.impl; |
| 2 | 2 | |
| 3 | 3 | import java.io.File; |
| 4 | -import java.io.FileInputStream; | |
| 5 | 4 | import java.io.IOException; |
| 6 | 5 | import java.nio.file.Paths; |
| 7 | 6 | import java.util.*; |
| ... | ... | @@ -10,7 +9,6 @@ import com.ruoyi.common.config.RuoYiConfig; |
| 10 | 9 | import com.ruoyi.common.core.domain.AjaxResult; |
| 11 | 10 | import com.ruoyi.common.core.redis.RedisCache; |
| 12 | 11 | import com.ruoyi.common.exception.file.InvalidExtensionException; |
| 13 | -import com.ruoyi.common.utils.SecurityUtils; | |
| 14 | 12 | import com.ruoyi.common.utils.file.FileUploadUtils; |
| 15 | 13 | import com.ruoyi.common.utils.file.FileUtils; |
| 16 | 14 | import com.ruoyi.common.utils.file.MimeTypeUtils; |
| ... | ... | @@ -31,7 +29,7 @@ import org.springframework.web.multipart.MultipartFile; |
| 31 | 29 | import javax.servlet.ServletOutputStream; |
| 32 | 30 | import javax.servlet.http.HttpServletResponse; |
| 33 | 31 | |
| 34 | -import static com.ruoyi.redispre.GlobalRedisPreName.DRIVER_SCHEDULING_PRE; | |
| 32 | +import static com.ruoyi.common.redispre.GlobalRedisPreName.DRIVER_SCHEDULING_PRE; | |
| 35 | 33 | |
| 36 | 34 | /** |
| 37 | 35 | * 驾驶员信息Service业务层处理 | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/in/service/impl/SignInServiceImpl.java
| ... | ... | @@ -3,6 +3,8 @@ package com.ruoyi.in.service.impl; |
| 3 | 3 | import java.io.File; |
| 4 | 4 | import java.io.IOException; |
| 5 | 5 | import java.math.BigDecimal; |
| 6 | +import java.time.LocalDateTime; | |
| 7 | +import java.time.temporal.ChronoUnit; | |
| 6 | 8 | import java.util.Base64; |
| 7 | 9 | import java.util.Date; |
| 8 | 10 | import java.util.List; |
| ... | ... | @@ -33,6 +35,7 @@ import javax.annotation.Resource; |
| 33 | 35 | |
| 34 | 36 | import static com.ruoyi.common.ErrorTypeProperties.*; |
| 35 | 37 | import static com.ruoyi.common.SignInEnum.*; |
| 38 | +import static com.ruoyi.common.redispre.GlobalRedisPreName.REDIS_SIGN_IN; | |
| 36 | 39 | |
| 37 | 40 | /** |
| 38 | 41 | * 签到Service业务层处理 |
| ... | ... | @@ -129,10 +132,6 @@ public class SignInServiceImpl implements ISignInService { |
| 129 | 132 | |
| 130 | 133 | @Override |
| 131 | 134 | public AjaxResult addSignIn(SignIn signIn) throws IOException { |
| 132 | - String resultMsg = "签到成功"; | |
| 133 | - if (!StringUtils.isNotEmpty(signIn.getDeviceId())){ | |
| 134 | - throw new RuntimeException("设备号不能为空"); | |
| 135 | - } | |
| 136 | 135 | // 签到检查 |
| 137 | 136 | checkSignIn(signIn); |
| 138 | 137 | // base64转图片 |
| ... | ... | @@ -140,6 +139,19 @@ public class SignInServiceImpl implements ISignInService { |
| 140 | 139 | signIn.setIp(IpUtils.getIpAddr()); |
| 141 | 140 | uploadImage(signIn); |
| 142 | 141 | signInMapper.insertSignIn(signIn); |
| 142 | + // TODO 驾驶人员二次签到酒精测试异常 | |
| 143 | + if (true){ | |
| 144 | + Integer count = redisCache.getCacheMapValue(ConstDateUtil.formatDate("yyyyMMdd") + REDIS_SIGN_IN, signIn.getJobCode()); | |
| 145 | + if (Objects.isNull(count)){ | |
| 146 | + redisCache.setCacheMapValue(ConstDateUtil.formatDate("yyyyMMdd") + REDIS_SIGN_IN, signIn.getJobCode(),0); | |
| 147 | + } | |
| 148 | + count = redisCache.increment(ConstDateUtil.formatDate("yyyyMMdd") + REDIS_SIGN_IN, signIn.getJobCode(), 1); | |
| 149 | + if (count.equals(2) || count.compareTo(2) == 1){ | |
| 150 | + | |
| 151 | + } | |
| 152 | + } | |
| 153 | + | |
| 154 | + | |
| 143 | 155 | return SIGN_IN_SUCCESS.equals(signIn.getStatus()) ? AjaxResult.success(SIGN_IN_SUCCESS_STRING): AjaxResult.error(SIGN_IN_ERROR + signIn.getRemark()); |
| 144 | 156 | } |
| 145 | 157 | |
| ... | ... | @@ -152,9 +164,8 @@ public class SignInServiceImpl implements ISignInService { |
| 152 | 164 | } |
| 153 | 165 | // TODO 排班校验 非司售未作 |
| 154 | 166 | checkWorkDay(signIn,driver.getPersonnelType()); |
| 155 | - // TODO 超时校验 | |
| 156 | - checkTimeOut(signIn,driver); | |
| 157 | - // 酒精测试校验 | |
| 167 | + | |
| 168 | + // 酒精测试校验 TODO 判断人员类型 | |
| 158 | 169 | if (ALCOHOL_FLAG_YES.equals(signIn.getAlcoholFlag())){ |
| 159 | 170 | signIn.setStatus(signIn.getAlcoholIntake().compareTo(new BigDecimal(20)) < 0 ? SIGN_IN_SUCCESS : SIGN_IN_FAIL); |
| 160 | 171 | signIn.setRemark(signIn.getStatus().equals(SIGN_IN_FAIL) ? ALCOHOL_SIGN_IN_ERROR : ""); |
| ... | ... | @@ -166,10 +177,11 @@ public class SignInServiceImpl implements ISignInService { |
| 166 | 177 | } |
| 167 | 178 | |
| 168 | 179 | private void checkWorkDay(SignIn signIn, String personnelType) { |
| 180 | + List<ResponseScheduling> jobs = null; | |
| 169 | 181 | switch (personnelType){ |
| 170 | 182 | case "0": |
| 171 | 183 | // 查询工号对应的排班 司售人员 |
| 172 | - List<ResponseScheduling> jobs= redisCache.getCacheMapValue(ConstDateUtil.formatDate("yyyyMMdd"),signIn.getJobCode()); | |
| 184 | + jobs = redisCache.getCacheMapValue(ConstDateUtil.formatDate("yyyyMMdd"),signIn.getJobCode()); | |
| 173 | 185 | if (Objects.isNull(jobs)|| jobs.size() == 0){ |
| 174 | 186 | signIn.setStatus(SIGN_IN_FAIL); |
| 175 | 187 | signIn.setRemark(WORK_DAY_ERROR); |
| ... | ... | @@ -181,11 +193,25 @@ public class SignInServiceImpl implements ISignInService { |
| 181 | 193 | break; |
| 182 | 194 | } |
| 183 | 195 | |
| 196 | + // 超时校验司售人员 | |
| 197 | + checkTimeOut(signIn,jobs); | |
| 198 | + // TODO 非司售人员 | |
| 184 | 199 | |
| 185 | 200 | } |
| 186 | 201 | |
| 187 | - private void checkTimeOut(SignIn signIn, Driver driver) { | |
| 188 | - // SIGN_IN_TIMEOUT 签到超时 | |
| 202 | + private void checkTimeOut(SignIn signIn, List<ResponseScheduling> driver) { | |
| 203 | + // 那发车时间和到站时间作为开始上班的时间 | |
| 204 | + LocalDateTime startTime = ConstDateUtil.getLocalDateTimeByLongTime(driver.get(0).getFcsjT()); | |
| 205 | + LocalDateTime endTime = ConstDateUtil.getLocalDateTimeByLongTime(driver.get(0).getZdsjT()); | |
| 206 | + LocalDateTime signTime = ConstDateUtil.getLocalDateTimeByLongTime(signIn.getCreateTime().getTime()); | |
| 207 | + long morningBetween = ChronoUnit.MINUTES.between(startTime, signTime); | |
| 208 | + long afternoonBetween = ChronoUnit.MINUTES.between(endTime, signTime); | |
| 209 | + if (Math.abs(morningBetween) <= 60 || Math.abs(afternoonBetween) <= 60) { | |
| 210 | + signIn.setStatus(SIGN_IN_SUCCESS); | |
| 211 | + } else { | |
| 212 | + signIn.setStatus(SIGN_IN_FAIL); | |
| 213 | + signIn.setRemark(SIGN_IN_TIMEOUT); | |
| 214 | + } | |
| 189 | 215 | |
| 190 | 216 | } |
| 191 | 217 | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/job/DriverJob.java
| 1 | 1 | package com.ruoyi.job; |
| 2 | 2 | |
| 3 | 3 | import com.ruoyi.common.core.redis.RedisCache; |
| 4 | -import com.ruoyi.common.utils.DateUtils; | |
| 5 | 4 | import com.ruoyi.driver.domain.Driver; |
| 6 | 5 | import com.ruoyi.driver.service.IDriverService; |
| 7 | 6 | import com.ruoyi.pojo.response.ResponseScheduling; |
| 8 | 7 | import com.ruoyi.utils.ConstDateUtil; |
| 9 | 8 | import com.ruoyi.utils.ListUtils; |
| 10 | -import org.apache.commons.math3.distribution.RealDistribution; | |
| 11 | 9 | import org.springframework.beans.factory.InitializingBean; |
| 12 | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| 13 | 11 | import org.springframework.beans.factory.annotation.Value; |
| ... | ... | @@ -22,7 +20,7 @@ import java.util.*; |
| 22 | 20 | import java.util.concurrent.TimeUnit; |
| 23 | 21 | import java.util.stream.Collectors; |
| 24 | 22 | |
| 25 | -import static com.ruoyi.redispre.GlobalRedisPreName.DRIVER_SCHEDULING_PRE; | |
| 23 | +import static com.ruoyi.common.redispre.GlobalRedisPreName.DRIVER_SCHEDULING_PRE; | |
| 26 | 24 | |
| 27 | 25 | /** |
| 28 | 26 | * 该定时任务用户获取驾驶员信息 | ... | ... |
ruoyi-admin/src/main/java/com/ruoyi/utils/ConstDateUtil.java
| 1 | 1 | package com.ruoyi.utils; |
| 2 | 2 | |
| 3 | 3 | import java.text.SimpleDateFormat; |
| 4 | +import java.time.Instant; | |
| 5 | +import java.time.LocalDateTime; | |
| 6 | +import java.time.ZoneId; | |
| 4 | 7 | import java.util.Date; |
| 5 | 8 | |
| 6 | 9 | public class ConstDateUtil { |
| ... | ... | @@ -8,4 +11,10 @@ public class ConstDateUtil { |
| 8 | 11 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat(str); |
| 9 | 12 | return simpleDateFormat.format(new Date()); |
| 10 | 13 | } |
| 14 | + | |
| 15 | + public static LocalDateTime getLocalDateTimeByLongTime(long time){ | |
| 16 | + Instant instant = Instant.ofEpochMilli(time); | |
| 17 | + LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime(); | |
| 18 | + return localDateTime; | |
| 19 | + } | |
| 11 | 20 | } | ... | ... |
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
| ... | ... | @@ -263,6 +263,10 @@ public class RedisCache { |
| 263 | 263 | return redisTemplate.opsForHash().delete(key, hKey) > 0; |
| 264 | 264 | } |
| 265 | 265 | |
| 266 | + public Integer increment(String key, String hkey,Integer value){ | |
| 267 | + return redisTemplate.opsForHash().increment(key,hkey,value.longValue()).intValue(); | |
| 268 | + } | |
| 269 | + | |
| 266 | 270 | /** |
| 267 | 271 | * 获得缓存的基本对象列表 |
| 268 | 272 | * | ... | ... |