1、提交报工相关接口
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package com.sdm.common.utils;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeParseException;
|
||||
|
||||
public class TimeCalculator {
|
||||
// 定义时间格式器
|
||||
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
/**
|
||||
* 计算两个时间的差值,返回以小时为单位的工时(四舍五入保留整数,Integer类型)
|
||||
*
|
||||
* @param beginTime 开始时间字符串 (yyyy-MM-dd HH:mm:ss)
|
||||
* @param finishTime 结束时间字符串 (yyyy-MM-dd HH:mm:ss)
|
||||
* @return 工时(小时),四舍五入保留整数,Integer包装类类型
|
||||
* @throws DateTimeParseException 时间格式解析失败时抛出
|
||||
*/
|
||||
public static Integer calculateWorkHours(String beginTime, String finishTime) {
|
||||
try {
|
||||
// 1. 将字符串转换为LocalDateTime对象
|
||||
LocalDateTime start = LocalDateTime.parse(beginTime, FORMATTER);
|
||||
LocalDateTime end = LocalDateTime.parse(finishTime, FORMATTER);
|
||||
|
||||
// 2. 计算时间差,获取总秒数
|
||||
Duration duration = Duration.between(start, end);
|
||||
long seconds = duration.getSeconds();
|
||||
|
||||
// 3. 转换为小时(秒数 / 3600),四舍五入保留整数
|
||||
double hours = seconds / 3600.0;
|
||||
// 四舍五入后转为Integer包装类(自动装箱)
|
||||
return Math.toIntExact(Math.round(hours));
|
||||
} catch (DateTimeParseException e) {
|
||||
System.err.println("时间格式解析失败,请确保时间格式为 yyyy-MM-dd HH:mm:ss");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sdm.project.controller;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.log.annotation.SysLog;
|
||||
import com.sdm.project.model.req.SpdmWorkReq;
|
||||
import com.sdm.project.service.ISimulationWorkService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -19,10 +20,18 @@ public class SimulationWorkController {
|
||||
@Autowired
|
||||
private ISimulationWorkService simulationWorkService;
|
||||
|
||||
@PostMapping("/add")
|
||||
@SysLog("新增报工")
|
||||
@PostMapping("/addWork")
|
||||
@Operation(summary = "新增报工", description = "新增报工")
|
||||
public SdmResponse add(@RequestBody SpdmWorkReq req) {
|
||||
return simulationWorkService.add(req);
|
||||
public SdmResponse addWork(@RequestBody SpdmWorkReq req) {
|
||||
return simulationWorkService.addWork(req);
|
||||
}
|
||||
|
||||
@SysLog("更新报工")
|
||||
@PostMapping("/updateWork")
|
||||
@Operation(summary = "更新报工", description = "更新报工")
|
||||
public SdmResponse updateWork(@RequestBody SpdmWorkReq req) {
|
||||
return simulationWorkService.updateWork(req);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import java.util.List;
|
||||
@Data
|
||||
public class SpdmWorkReq {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String planFinishTask;
|
||||
|
||||
private String actualFinishTask;
|
||||
@@ -24,4 +26,13 @@ public class SpdmWorkReq {
|
||||
|
||||
private String description;
|
||||
|
||||
private String beginTime;
|
||||
|
||||
private String finishTime;
|
||||
|
||||
/**
|
||||
* 更新类型,0:启动,1:关闭,2:其他信息
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ import com.sdm.project.model.req.SpdmWorkReq;
|
||||
public interface ISimulationWorkService extends IService<SimulationWork> {
|
||||
|
||||
|
||||
SdmResponse add(SpdmWorkReq req);
|
||||
SdmResponse addWork(SpdmWorkReq req);
|
||||
|
||||
SdmResponse updateWork(SpdmWorkReq req);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,23 @@
|
||||
package com.sdm.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.utils.TimeCalculator;
|
||||
import com.sdm.project.dao.SimulationWorkMapper;
|
||||
import com.sdm.project.model.entity.SimulationWork;
|
||||
import com.sdm.project.model.req.SpdmWorkReq;
|
||||
import com.sdm.project.service.ISimulationWorkService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
@@ -18,16 +27,62 @@ import org.springframework.stereotype.Service;
|
||||
* @since 2025-11-03
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper, SimulationWork> implements ISimulationWorkService {
|
||||
|
||||
@Override
|
||||
public SdmResponse add(SpdmWorkReq req) {
|
||||
public SdmResponse addWork(SpdmWorkReq req) {
|
||||
SimulationWork simulationWork = new SimulationWork();
|
||||
BeanUtils.copyProperties(req,simulationWork);
|
||||
BeanUtils.copyProperties(req, simulationWork);
|
||||
if (!this.save(simulationWork)) {
|
||||
return SdmResponse.failed("新增报工失败");
|
||||
}
|
||||
return SdmResponse.success("新增报工成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse updateWork(SpdmWorkReq req) {
|
||||
Long id = req.getId();
|
||||
if (ObjectUtils.isEmpty(id)) {
|
||||
return SdmResponse.failed("id不能为空");
|
||||
}
|
||||
Integer type = req.getType();
|
||||
if (type != 0 && type != 1 && type != 2) {
|
||||
return SdmResponse.failed("type必须为0或1或2");
|
||||
}
|
||||
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
|
||||
boolean updateFlag;
|
||||
if (type == 0) {
|
||||
updateFlag = this.lambdaUpdate().set(SimulationWork::getBeginTime, curDateStr)
|
||||
.eq(SimulationWork::getId, id)
|
||||
.update();
|
||||
} else if (type == 1) {
|
||||
updateFlag =this.lambdaUpdate().set(SimulationWork::getFinishTime, curDateStr)
|
||||
.eq(SimulationWork::getId, id)
|
||||
.update();
|
||||
} else {
|
||||
LambdaUpdateChainWrapper<SimulationWork> simulationWorkWrapper = this.lambdaUpdate();
|
||||
// 校验填写的实际工时是否小于最大工时
|
||||
String beginTime = req.getBeginTime();
|
||||
String finishTime = req.getFinishTime();
|
||||
Integer actualWorkHour = req.getActualWorkHour();
|
||||
if (ObjectUtils.isNotEmpty(actualWorkHour)) {
|
||||
if (StringUtils.isBlank(beginTime) || StringUtils.isBlank(finishTime)) {
|
||||
return SdmResponse.failed("开始和完成时间都不为空时,才能填写实际工时");
|
||||
}
|
||||
Integer maxWorkHour = TimeCalculator.calculateWorkHours(beginTime, finishTime);
|
||||
log.info("actualWorkHour:{},maxWorkHour:{}",actualWorkHour,maxWorkHour);
|
||||
if (actualWorkHour > maxWorkHour) {
|
||||
return SdmResponse.failed("您填写的工时:" + actualWorkHour + "已超出最大可填写的工时:" + maxWorkHour);
|
||||
}
|
||||
simulationWorkWrapper.set(SimulationWork::getActualFinishTask, req.getActualFinishTask());
|
||||
}
|
||||
updateFlag = simulationWorkWrapper
|
||||
.set(ObjectUtils.isNotEmpty(req.getActualWorkHour()), SimulationWork::getActualWorkHour, req.getActualWorkHour())
|
||||
.eq(SimulationWork::getId, req.getId())
|
||||
.update();
|
||||
}
|
||||
return updateFlag ? SdmResponse.success() : SdmResponse.failed("更新报工信息失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user