From f2aec44685466b0c514bffa7db4a2d0db1a7f28c Mon Sep 17 00:00:00 2001 From: Crunchy <3114200645@qq.com> Date: 星期三, 08 五月 2024 11:26:37 +0800 Subject: [PATCH] 2024-5-8 绩效管理-班次后端开发完成 --- performance-server/src/main/java/com/yuanchu/mom/pojo/PerformanceShift.java | 54 +++++++++ performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java | 28 ++++ performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java | 22 +++ performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml | 23 +++ performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java | 93 +++++++++++++++ system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java | 10 + performance-server/pom.xml | 28 ++++ pom.xml | 1 performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java | 27 ++++ system-run/pom.xml | 6 + performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java | 50 ++++++++ 11 files changed, 339 insertions(+), 3 deletions(-) diff --git a/performance-server/pom.xml b/performance-server/pom.xml new file mode 100644 index 0000000..912a963 --- /dev/null +++ b/performance-server/pom.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>performance-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + <name>performance-server</name> + <description>performance-server</description> + + <parent> + <artifactId>mom</artifactId> + <groupId>com.yuanchu.mom</groupId> + <version>1.0.0</version> + </parent> + <dependencies> + <dependency> + <groupId>com.yuanchu.mom</groupId> + <artifactId>framework</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>com.yuanchu.mom</groupId> + <artifactId>user-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + </dependencies> +</project> diff --git a/performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java b/performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java new file mode 100644 index 0000000..56e334d --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java @@ -0,0 +1,50 @@ +package com.yuanchu.mom.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.mom.dto.PerformanceShiftAddDto; +import com.yuanchu.mom.service.PerformanceShiftService; +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 java.time.LocalDateTime; + + +/** + * <p> + * 缁╂晥绠$悊-鐝 鍓嶇鎺у埗鍣� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +@Api(tags = "缁╂晥绠$悊-鐝") +@RestController +@RequestMapping("/performanceShift") +public class PerformanceShiftController { + + @Autowired + private PerformanceShiftService performanceShiftService; + + @ApiOperation(value = "缁╂晥绠$悊-鐝-鎺掔彮") + @PostMapping("add") + public Result<?> performanceShiftAdd(@RequestBody PerformanceShiftAddDto performanceShiftAddDto) { + performanceShiftService.performanceShiftAdd(performanceShiftAddDto); + return Result.success(); + } + + @ApiOperation(value = "缁╂晥绠$悊-鐝-鍒嗛〉鏌ヨ") + @GetMapping("page") + public Result<?> performanceShiftPage(Integer size, Integer current, LocalDateTime time, String userName, String laboratory) { + return Result.success(performanceShiftService.performanceShiftPage(new Page<>(current, size), time, userName, laboratory)); + } + + @ApiOperation(value = "缁╂晥绠$悊-鐝-鐝鐘舵�佷慨鏀�") + @GetMapping("update/{id}") + public Result<?> performanceShiftUpdate(String shift, @PathVariable("id") Integer id) { + performanceShiftService.performanceShiftUpdate(shift, id); + return Result.success(); + } +} diff --git a/performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java b/performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java new file mode 100644 index 0000000..c71b184 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java @@ -0,0 +1,22 @@ +package com.yuanchu.mom.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class PerformanceShiftAddDto { + + @ApiModelProperty("鐝") + private String shift; + + @ApiModelProperty("鍛樺伐id") + private Integer userId; + + @ApiModelProperty("寮�濮嬪懆娆�") + private LocalDateTime startWeek; + + @ApiModelProperty("缁撴潫鍛ㄦ") + private LocalDateTime endWeek; +} diff --git a/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java b/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java new file mode 100644 index 0000000..3f54661 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java @@ -0,0 +1,28 @@ +package com.yuanchu.mom.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.mom.pojo.PerformanceShift; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.data.repository.query.Param; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * <p> + * 缁╂晥绠$悊-鐝 Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +public interface PerformanceShiftMapper extends BaseMapper<PerformanceShift> { + + IPage<Map<String, Object>> performanceShiftPage( + Page<Object> page, + @Param("time") LocalDateTime time, + @Param("userName") String userName, + @Param("laboratory") String laboratory + ); +} diff --git a/performance-server/src/main/java/com/yuanchu/mom/pojo/PerformanceShift.java b/performance-server/src/main/java/com/yuanchu/mom/pojo/PerformanceShift.java new file mode 100644 index 0000000..8fd8910 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/pojo/PerformanceShift.java @@ -0,0 +1,54 @@ +package com.yuanchu.mom.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * <p> + * 缁╂晥绠$悊-鐝 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +@Data +@TableName("performance_shift") +@ApiModel(value = "PerformanceShift瀵硅薄", description = "缁╂晥绠$悊-鐝") +public class PerformanceShift implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("涓婚敭ID") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("鐝") + private String shift; + + @ApiModelProperty("鍛樺伐id") + private Integer userId; + + @ApiModelProperty("鎺掔彮鏃ユ湡") + private LocalDateTime workTime; + + @ApiModelProperty("鍒涘缓浜篒d") + @TableField(fill = FieldFill.INSERT) + private Integer createUser; + + @ApiModelProperty("鍒涘缓鏃ユ湡") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @ApiModelProperty("鏇存柊浜�") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Integer updateUser; + + @ApiModelProperty("鏇存柊鏃堕棿") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; +} diff --git a/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java b/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java new file mode 100644 index 0000000..7e9a5a5 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java @@ -0,0 +1,27 @@ +package com.yuanchu.mom.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.yuanchu.mom.dto.PerformanceShiftAddDto; +import com.yuanchu.mom.pojo.PerformanceShift; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * <p> + * 缁╂晥绠$悊-鐝 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +public interface PerformanceShiftService extends IService<PerformanceShift> { + + void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto); + + IPage<Map<String, Object>> performanceShiftPage(Page<Object> page, LocalDateTime time, String userName, String laboratory); + + void performanceShiftUpdate(String shift, Integer id); +} diff --git a/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java b/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java new file mode 100644 index 0000000..c68d9d2 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java @@ -0,0 +1,93 @@ +package com.yuanchu.mom.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yuanchu.mom.dto.PerformanceShiftAddDto; +import com.yuanchu.mom.mapper.PerformanceShiftMapper; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 缁╂晥绠$悊-鐝 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +@Service +public class PerformanceShiftServiceImpl extends ServiceImpl<PerformanceShiftMapper, PerformanceShift> implements PerformanceShiftService { + + @Autowired + private EnumService enumService; + + @Override + public void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto) { + List<LocalDateTime> datesBetween = getLocalDateTimesBetween(performanceShiftAddDto.getStartWeek(), performanceShiftAddDto.getEndWeek()); + for (LocalDateTime date : datesBetween) { + PerformanceShift performanceShift = new PerformanceShift(); + performanceShift.setShift(performanceShiftAddDto.getShift()); + performanceShift.setUserId(performanceShiftAddDto.getUserId()); + performanceShift.setWorkTime(date); + baseMapper.insert(performanceShift); + } + } + + @Override + public IPage<Map<String, Object>> performanceShiftPage(Page<Object> page, LocalDateTime time, String userName, String laboratory) { + IPage<Map<String, Object>> mapIPage = baseMapper.performanceShiftPage(page, time, userName, laboratory); + List<Enums> shiftType = enumService.selectEnumByCategory("鐝绫诲瀷"); + for (Map<String, Object> i : mapIPage.getRecords()) { + String[] shiftTimes = i.get("shiftTime").toString().split(";"); + int totalAttendance = 0; + for (Enums enums : shiftType) { + Integer num = 0; + for (String shiftTime : shiftTimes) { + String[] shiftTimeAndShift = shiftTime.split("锛�"); + if (enums.getValue().equals(shiftTimeAndShift[1])) { + num++; + } + // 3锛氫紤鍋囷紱4锛氳鍋� + if (!enums.getValue().equals("3") && enums.getValue().equals("4")) { + totalAttendance++; + } + } + i.put(enums.getLabel(), num); + i.put("totalAttendance", totalAttendance); + } + } + return mapIPage; + } + + @Override + public void performanceShiftUpdate(String shift, Integer id) { + PerformanceShift performanceShift = new PerformanceShift(); + performanceShift.setId(id); + performanceShift.setShift(shift); + baseMapper.updateById(performanceShift); + } + + // 鑾峰彇涓や釜localDateTime鐨勬瘡涓�澶� + public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) { + List<LocalDateTime> localDateTimes = new ArrayList<>(); + LocalDate currentDate = start.toLocalDate(); + LocalDateTime currentLocalDateTime = start; + while (!currentDate.isAfter(end.toLocalDate())) { + localDateTimes.add(currentLocalDateTime); + currentLocalDateTime = currentLocalDateTime.plusDays(1); + currentDate = currentDate.plusDays(1); + } + return localDateTimes; + } +} diff --git a/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml new file mode 100644 index 0000000..ceff2b1 --- /dev/null +++ b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml @@ -0,0 +1,23 @@ +<?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="com.yuanchu.mom.mapper.PerformanceShiftMapper"> + + <select id="performanceShiftPage" resultType="map"> + SELECT + s.id, + if(u.department is not null and u.department != '', CONCAT(u.name, '锛�', u.department, '锛�'), u.name) name, + GROUP_CONCAT(s.work_time, '锛�', s.shift SEPARATOR ';') AS shiftTime + FROM performance_shift s + LEFT JOIN user u on u.id = s.user_id + GROUP BY u.id + <where> + <if test="time != null and time != ''"> + and s.work_time in DATE_FORMAT(#{time}, '%Y-%m-%d') + </if> + <if test="userName != null and userName != ''"> + and s.name concat('%', #{userName}, '%') + </if> + <if test="laboratory != null and laboratory != ''"></if> + </where> + </select> +</mapper> diff --git a/pom.xml b/pom.xml index 76601b0..e129ed5 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ <module>system-run</module> <module>cnas-server</module> <module>inspect-server</module> + <module>performance-server</module> </modules> <properties> diff --git a/system-run/pom.xml b/system-run/pom.xml index f85f04e..7952a24 100644 --- a/system-run/pom.xml +++ b/system-run/pom.xml @@ -40,6 +40,12 @@ <version>0.0.1-SNAPSHOT</version> </dependency> + <dependency> + <groupId>com.yuanchu.mom</groupId> + <artifactId>performance-server</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <!--druid--> <dependency> <groupId>com.alibaba</groupId> diff --git a/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java index e69e903..946f44b 100644 --- a/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java +++ b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java @@ -1,6 +1,7 @@ package com.yuanchu.mom; import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.generator.FastAutoGenerator; @@ -19,7 +20,7 @@ public static String database_username = "root"; public static String database_password= "123456"; public static String author = "姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃"; - public static String model_name = "/framework"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲 + public static String model_name = "/performance-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲 public static String setParent = "com.yuanchu.mom"; // 鍖呰矾寰� public static void main(String[] args) { String projectPath = System.getProperty("user.dir"); @@ -52,13 +53,16 @@ .logicDeleteColumnName("state") .addTableFills( new Column("create_time", FieldFill.INSERT), - new Column("update_time", FieldFill.INSERT_UPDATE) + new Column("update_time", FieldFill.INSERT_UPDATE), + new Column("create_user", FieldFill.INSERT), + new Column("update_user", FieldFill.INSERT_UPDATE) ) + .idType(IdType.AUTO) // 鑷涓婚敭 // Mapper 绛栫暐閰嶇疆 .mapperBuilder() .enableFileOverride() // 瑕嗙洊宸茬敓鎴怣apper鏂囦欢 - + .enableBaseResultMap() // 鑷姩鐢熸垚resultMap // Service 绛栫暐閰嶇疆 .serviceBuilder() .formatServiceFileName("%sService") //鏍煎紡鍖� service 鎺ュ彛鏂囦欢鍚嶇О锛�%s杩涜鍖归厤琛ㄥ悕锛屽 UserService -- Gitblit v1.9.3