package com.yuanchu.mom.controller;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.yuanchu.mom.annotation.ValueAuth;
|
import com.yuanchu.mom.annotation.ValueClassify;
|
import com.yuanchu.mom.dto.PerformanceShiftAddDto;
|
import com.yuanchu.mom.pojo.Enums;
|
import com.yuanchu.mom.pojo.PerformanceShift;
|
import com.yuanchu.mom.service.EnumService;
|
import com.yuanchu.mom.service.PerformanceShiftService;
|
import com.yuanchu.mom.service.UserService;
|
import com.yuanchu.mom.utils.StyleMonthUtils;
|
import com.yuanchu.mom.utils.StyleYearUtils;
|
import com.yuanchu.mom.vo.Result;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import javax.validation.constraints.NotNull;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.WeekFields;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Locale;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* <p>
|
* 绩效管理-班次 前端控制器
|
* </p>
|
*
|
* @author 江苏鵷雏网络科技有限公司
|
* @since 2024-05-08 09:12:04
|
*/
|
@Api(tags = "绩效管理-班次")
|
@RestController
|
@RequestMapping("/performanceShift")
|
public class PerformanceShiftController {
|
|
@Autowired
|
private PerformanceShiftService performanceShiftService;
|
|
@ValueClassify("班次")
|
@ApiOperation(value = "排班")
|
@PostMapping("add")
|
public Result<?> performanceShiftAdd(@RequestBody PerformanceShiftAddDto performanceShiftAddDto) {
|
performanceShiftService.performanceShiftAdd(performanceShiftAddDto);
|
return Result.success();
|
}
|
|
@ValueClassify("班次")
|
@ApiOperation(value = "月份分页查询")
|
@PostMapping("page")
|
public Result<?> performanceShiftPage(Integer size, Integer current, String time, String userName, String laboratory) {
|
return Result.success(performanceShiftService.performanceShiftPage(new Page<>(current, size), time, userName, laboratory));
|
}
|
|
@ValueClassify("班次")
|
@ApiOperation(value = "年份分页查询")
|
@PostMapping("pageYear")
|
public Result<?> performanceShiftPageYear(Integer size, Integer current, String time, String userName, String laboratory) {
|
return Result.success(performanceShiftService.performanceShiftPageYear(new Page<>(current, size), time, userName, laboratory));
|
}
|
|
@ValueClassify("班次")
|
@ApiOperation(value = "班次状态修改")
|
@PutMapping("update")
|
public Result<?> performanceShiftUpdate(@RequestBody PerformanceShift performanceShift) {
|
performanceShiftService.performanceShiftUpdate(performanceShift);
|
return Result.success();
|
}
|
|
@ValueClassify("班次")
|
@ApiOperation(value = "导出")
|
@GetMapping("export")
|
public void exportToExcel(@NotNull(message = "时间不能为空!") String time, String userName, String laboratory, Boolean isMonth, HttpServletResponse response) throws Exception {
|
Map<Object, Object> data;
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setHeader("requestType","excel");
|
response.setHeader("Access-Control-Expose-Headers", "requestType");
|
if (!isMonth) {
|
data = performanceShiftService.exportToYearExcel(time, userName, laboratory);
|
// 设置单元格样式
|
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(StyleYearUtils.getHeadStyle(), StyleYearUtils.getContentStyle());
|
// 保存到第一个sheet中
|
EasyExcel.write(response.getOutputStream())
|
.head((List<List<String>>) data.get("header"))
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 自适应列宽
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
.sheet("年度")
|
.doWrite((Collection<?>) data.get("data"));
|
} else {
|
data = performanceShiftService.exportToMonthExcel(time, userName, laboratory);
|
// 设置单元格样式
|
HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(StyleMonthUtils.getHeadStyle(), StyleMonthUtils.getContentStyle());
|
EasyExcel.write(response.getOutputStream())
|
.head((List<List<String>>) data.get("header"))
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
.sheet("月度")
|
.doWrite((Collection<?>) data.get("data"));
|
}
|
}
|
|
@Resource
|
private EnumService enumService;
|
|
@Resource
|
private UserService userService;
|
|
@ApiOperation(value = "临时接口-添加7月份8月份的数据")
|
@ValueAuth
|
@GetMapping("temporaryInterface")
|
public void temporaryInterface() {
|
System.out.println("开始给每个人进行排班,默认早班======start");
|
// TODO 给每个人都进行排班(默认早班)
|
PerformanceShiftAddDto performanceShiftAddDto = new PerformanceShiftAddDto();
|
//班次--早(查询字典)
|
List<Enums> shiftType = enumService.selectEnumByCategory("班次类型");
|
List<String> collect = shiftType.stream().filter(enums -> enums.getLabel().equals("早")).map(enums -> enums.getValue()).collect(Collectors.toList());
|
performanceShiftAddDto.setShift(collect.get(0));
|
//人员--所有人
|
String userIds = userService.getDeviceManager().stream().map(user -> user.getId().toString()).distinct().collect(Collectors.joining(","));
|
performanceShiftAddDto.setUserId(userIds);
|
//周次--当月所有
|
// 获取当前日期
|
LocalDate today = LocalDate.of(2024, 8, 15);
|
// 获取本月的第一天和最后一天
|
LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
|
LocalDate lastDayOfMonth = today.with(TemporalAdjusters.lastDayOfMonth());
|
// 获取周字段信息(根据区域设置)
|
WeekFields weekFields = WeekFields.of(Locale.getDefault());
|
// 获取本月第一天的周一
|
LocalDate startOfWeek = firstDayOfMonth.with(TemporalAdjusters.previousOrSame(weekFields.getFirstDayOfWeek()));
|
// 遍历本月所有天数,找出每周的第一天和最后一天
|
LocalDate endOfWeek;
|
while (startOfWeek.isBefore(firstDayOfMonth.plusMonths(1))) {
|
endOfWeek = startOfWeek.plusDays(6);
|
LocalDateTime startDateTime = LocalDateTime.of(startOfWeek, LocalTime.MIDNIGHT);
|
LocalDateTime endDateTime = LocalDateTime.of(endOfWeek, LocalTime.MIDNIGHT);
|
System.out.println("Week starts on " + startDateTime + " and ends on " + endDateTime);
|
performanceShiftAddDto.setStartWeek(startDateTime);
|
performanceShiftAddDto.setEndWeek(endDateTime);
|
performanceShiftService.performanceShiftAdd(performanceShiftAddDto);
|
startOfWeek = startOfWeek.plusWeeks(1);
|
}
|
|
System.out.println("排班结束======end");
|
}
|
}
|