feat:排版任务信息查询接口,排版任务信息新增接口

This commit is contained in:
qiaoqinzheng 2023-05-16 14:46:53 +08:00
parent f25bf758c9
commit f614cf391b
12 changed files with 490 additions and 3 deletions

View File

@ -8,9 +8,7 @@ import java.sql.Timestamp;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.GregorianCalendar;
/** /**
* 类描述时间操作定义类 * 类描述时间操作定义类
@ -760,4 +758,35 @@ public class DateUtils extends PropertyEditorSupport {
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
} }
/**
* 获取开始时间和结束时间之间的全部日期信息
* @param beginDay
* @param endDay
* @return
*/
public static List<String> getAllDay(String beginDay, String endDay){
List<String> days = new ArrayList<>();
try {
//开始日期
Calendar begin = Calendar.getInstance();
begin.setTime(DateUtils.parseDate(beginDay, "yyyy-MM-dd"));
//将开始日期放入集合中
days.add(beginDay);
//结束日期
Calendar end = Calendar.getInstance();
end.setTime(DateUtils.parseDate(endDay, "yyyy-MM-dd"));
//判断 如果结束日期的时间在开始日期的时间之后
while(end.getTime().after(begin.getTime())){
//开始日期需要+1天
begin.add(Calendar.DAY_OF_MONTH, 1);
//将开始日期放入集合中
days.add(DateUtils.formatDate(begin.getTime(),"yyyy-MM-dd"));
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
return days;
}
} }

View File

@ -0,0 +1,54 @@
package org.jeecg.modules.system.controller;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.IpUtils;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.system.entity.SysTask;
import org.jeecg.modules.system.entity.vo.SysTaskVo;
import org.jeecg.modules.system.service.ISysTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("sysTask")
@Api(value = "排班任务管理", tags = "排班任务管理")
public class SysTaskController {
@Autowired
private ISysTaskService sysTaskService;
@GetMapping("findList")
@ApiOperation(value = "查询一个月的排班任务信息", notes = "查询一个月的排班任务信息")
public Result<Map<String, List<SysTaskVo>>> findList(@DateTimeFormat(pattern = "yyyy-MM") Date yearMonth){
Result<Map<String, List<SysTaskVo>>> result = sysTaskService.findList(yearMonth);
return result;
}
@PostMapping("create")
@ApiOperation(value = "新增排班任务", notes = "新增排班任务")
public Result create(@RequestBody @Validated List<SysTask> sysTasks){
return sysTaskService.create(sysTasks);
}
@PutMapping("update")
public Result update(){
return null;
}
}

View File

@ -0,0 +1,53 @@
package org.jeecg.modules.system.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.jeecg.config.valid.InsertGroup;
import org.jeecg.config.valid.UpdateGroup;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
@TableName("sys_task")
public class SysTask implements Serializable {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private String id;
@TableField(value = "user_id")
@NotBlank(message = "不能为空", groups = {InsertGroup.class, UpdateGroup.class})
private String userId;
@TableField(value = "scheduling_date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date schedulingDate;
@TableField(value = "create_by")
private String createBy;
@TableField(value = "operate_ip")
private String operateIp;
@TableField(value = "create_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@TableField(value = "update_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
private List<SysTaskStation> stationList;
}

View File

@ -0,0 +1,48 @@
package org.jeecg.modules.system.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.jeecg.config.valid.InsertGroup;
import org.jeecg.config.valid.UpdateGroup;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName(value = "sys_task_station")
public class SysTaskStation implements Serializable {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private String id;
@TableField(value = "task_id")
@NotBlank(message = "不能为空", groups = {InsertGroup.class, UpdateGroup.class})
private String taskId;
@TableField(value = "station_id")
@NotBlank(message = "不能为空", groups = {InsertGroup.class, UpdateGroup.class})
private String stationId;
@TableField(value = "operate_ip")
private String operateIp;
@TableField(value = "create_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@TableField(value = "update_time")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
@TableField(exist = false)
private String stationName;
}

View File

@ -0,0 +1,24 @@
package org.jeecg.modules.system.entity.vo;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
@Data
public class SysTaskVo {
private String id;
private String userId;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date schedulingDate;
private String username;
private Integer number;
private List<String> stationList;
}

View File

@ -0,0 +1,19 @@
package org.jeecg.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.system.entity.SysTask;
import org.jeecg.modules.system.entity.vo.SysTaskVo;
import java.util.List;
public interface SysTaskMapper extends BaseMapper<SysTask> {
/**
* 查询月份第一天到最后一天所有的排班任务信息
* @param firstDay
* @param lastDay
* @return
*/
List<SysTaskVo> selectTasks(String firstDay, String lastDay);
}

View File

@ -0,0 +1,7 @@
package org.jeecg.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.system.entity.SysTaskStation;
public interface SysTaskStationMapper extends BaseMapper<SysTaskStation> {
}

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.system.mapper.SysTaskMapper">
<select id="selectTasks" resultType="org.jeecg.modules.system.entity.vo.SysTaskVo">
SELECT
t.user_id,
t.scheduling_date,
t.id,
count(s.task_id) number,
u.username
FROM
sys_task t
left join sys_task_station s on t.id = s.task_id
left join sys_user u on u.id = t.user_id
where t.scheduling_date BETWEEN #{firstDay} and #{lastDay}
group by t.user_id,t.scheduling_date,t.id,u.username
</select>
</mapper>

View File

@ -0,0 +1,18 @@
package org.jeecg.modules.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.system.entity.SysTask;
import org.jeecg.modules.system.entity.vo.SysTaskVo;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface ISysTaskService extends IService<SysTask> {
Result<Map<String, List<SysTaskVo>>> findList(Date yearMonth);
Result create(List<SysTask> sysTasks);
}

View File

@ -0,0 +1,12 @@
package org.jeecg.modules.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.entity.SysTaskStation;
import java.util.List;
public interface ISysTaskStationService extends IService<SysTaskStation> {
void create(String taskId, String ipAddr, List<SysTaskStation> taskStations);
}

View File

@ -0,0 +1,154 @@
package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.IpUtils;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.system.entity.GardsStations;
import org.jeecg.modules.system.entity.SysTask;
import org.jeecg.modules.system.entity.SysTaskStation;
import org.jeecg.modules.system.entity.vo.SysTaskVo;
import org.jeecg.modules.system.mapper.SysTaskMapper;
import org.jeecg.modules.system.mapper.SysTaskStationMapper;
import org.jeecg.modules.system.service.IGardsStationsService;
import org.jeecg.modules.system.service.ISysTaskService;
import org.jeecg.modules.system.service.ISysTaskStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service(value = "sysTaskService")
public class SysTaskServiceImpl extends ServiceImpl<SysTaskMapper, SysTask> implements ISysTaskService {
@Autowired
private ISysTaskStationService sysTaskStationService;
@Autowired
private SysTaskStationMapper sysTaskStationMapper;
@Autowired
private IGardsStationsService gardsStationsService;
@Override
public Result<Map<String, List<SysTaskVo>>> findList(Date yearMonth) {
Result<Map<String, List<SysTaskVo>>> result = new Result();
Map<String, List<SysTaskVo>> map = new LinkedHashMap<>();
//获取全部台站信息
List<GardsStations> gardsStations = gardsStationsService.getGardsStations();
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String yearMonthStr = dateFormat.format(yearMonth);
yearMonthStr = yearMonthStr + "-01";
String firstday = "";
String lastday = "";
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(yearMonthStr));
cal.add(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
firstday = sdf.format(cal.getTime());
cal = Calendar.getInstance();
cal.setTime(sdf.parse(yearMonthStr));
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 0);
lastday = sdf.format(cal.getTime());
//查询日期范围内全部的排班任务信息
List<SysTaskVo> sysTaskVos = this.baseMapper.selectTasks(firstday, lastday);
//获取当月开始日期和结束日期之间的全部日期
List<String> allDay = DateUtils.getAllDay(firstday, lastday);
if (CollectionUtils.isNotEmpty(sysTaskVos)){
//过滤出当前所有的排版任务id
List<String> taskIds = sysTaskVos.stream().map(item -> item.getId()).collect(Collectors.toList());
//根据排版任务id查询出各排版任务对应的台站信息
LambdaQueryWrapper<SysTaskStation> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SysTaskStation::getTaskId, taskIds);
queryWrapper.select(SysTaskStation::getTaskId, SysTaskStation::getStationId);
List<SysTaskStation> sysTaskStations = sysTaskStationMapper.selectList(queryWrapper);
//台站信息不为空
if (CollectionUtils.isNotEmpty(sysTaskStations)){
//遍历所有台站信息并赋值台站名称
for (SysTaskStation taskStation:sysTaskStations) {
//通过stream流获取当前台站id对应的台站信息
List<GardsStations> gardsStationsList = gardsStations.stream().filter(item -> item.getStationId().toString().equals(taskStation.getStationId())).collect(Collectors.toList());
//如果台站数量大于0则说明有对应的台站信息
if (CollectionUtils.isNotEmpty(gardsStationsList)){
//台站id唯一取第一条数据
GardsStations stations = gardsStationsList.get(0);
taskStation.setStationName(stations.getStationCode());
}
}
//遍历排版任务信息
for (SysTaskVo taskVo:sysTaskVos) {
//根据排版任务id过滤出属于当前任务的台站集合取台站名称字段合成集合
List<String> stationNames = sysTaskStations.stream().filter(item -> item.getTaskId().equals(taskVo.getId())).map(SysTaskStation::getStationName).collect(Collectors.toList());
//返回台站名称集合
taskVo.setStationList(stationNames);
}
}
for (String day:allDay) {
List<SysTaskVo> taskVos = sysTaskVos.stream().filter(item -> DateUtils.formatDate(item.getSchedulingDate(), "yyyy-MM-dd").equals(day)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskVos)){
map.put(day, taskVos);
}else {
map.put(day, Collections.emptyList());
}
}
}else {
for (String day:allDay) {
map.put(day, Collections.emptyList());
}
}
result.setResult(map);
} catch (ParseException e) {
throw new RuntimeException(e);
}
return result;
}
@Override
@Transactional
public Result create(List<SysTask> sysTasks){
Result result = new Result();
//获取request
HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
//获取当前操作人用户名
String username = JwtUtil.getUserNameByToken(request);
//设置IP地址
String ipAddr = IpUtils.getIpAddr(request);
//如果新增排班任务不为空
if (CollectionUtils.isNotEmpty(sysTasks)){
//遍历排班任务进行存储
for (SysTask sysTask:sysTasks) {
//操作人
sysTask.setCreateBy(username);
//操作人的ip
sysTask.setOperateIp(ipAddr);
//id
sysTask.setId(String.valueOf(IdWorker.getId()));
//创建时间
sysTask.setCreateTime(new Date());
this.baseMapper.insert(sysTask);
//如果排班任务中台站信息不为空
if (CollectionUtils.isNotEmpty(sysTask.getStationList())){
sysTaskStationService.create(sysTask.getId(), ipAddr, sysTask.getStationList());
}
}
}
result.setSuccess(true);
result.success("新增成功");
return result;
}
}

View File

@ -0,0 +1,49 @@
package org.jeecg.modules.system.service.impl;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.system.entity.GardsStations;
import org.jeecg.modules.system.entity.SysTaskStation;
import org.jeecg.modules.system.mapper.GardsStationsMapper;
import org.jeecg.modules.system.mapper.SysTaskStationMapper;
import org.jeecg.modules.system.service.IGardsStationsService;
import org.jeecg.modules.system.service.ISysTaskStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service(value = "sysTaskStationService")
public class SysTaskStationServiceImpl extends ServiceImpl<SysTaskStationMapper, SysTaskStation> implements ISysTaskStationService {
@Autowired
private IGardsStationsService gardsStationsService;
@Override
@Transactional
public void create(String taskId, String ipAddr, List<SysTaskStation> taskStations) {
for (SysTaskStation sysTaskStation:taskStations) {
if (StringUtils.isBlank(sysTaskStation.getStationId())){
throw new RuntimeException("台站信息不能为空");
}
sysTaskStation.setOperateIp(ipAddr);
sysTaskStation.setId(String.valueOf(IdWorker.getId()));
sysTaskStation.setTaskId(taskId);
sysTaskStation.setCreateTime(new Date());
this.baseMapper.insert(sysTaskStation);
}
}
}