Commit ade1de372eb912dac27ddddc3f0dafa6f62d6ddf

Authored by guzijian
1 parent dd0dee29

fix: 修改签到逻辑,修复接口注解错误

ruoyi-admin/src/main/java/com/ruoyi/redispre/GlobalRedisPreName.java renamed to ruoyi-admin/src/main/java/com/ruoyi/common/redispre/GlobalRedisPreName.java
1   -package com.ruoyi.redispre;
  1 +package com.ruoyi.common.redispre;
2 2  
3 3 /**
4 4 * @author 20412
5 5 */
6 6 public interface GlobalRedisPreName {
7 7 String DRIVER_SCHEDULING_PRE = "driver:scheduling:";
  8 + String REDIS_SIGN_IN = "sign:in:";
8 9 }
... ...
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 *
... ...