From 7e51076a4cccc27df31bcdd98ca14c2f9d4928e9 Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期四, 09 五月 2024 07:27:04 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- performance-server/src/main/java/com/yuanchu/mom/pojo/PerformanceShift.java | 54 ++++++ performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java | 27 +++ performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java | 27 +++ performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml | 23 ++ performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java | 181 ++++++++++++++++++++++ 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 | 26 +++ system-run/pom.xml | 6 performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java | 50 ++++++ 11 files changed, 430 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..158c0ee --- /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 = "缁╂晥绠$悊-鐝-鍒嗛〉鏌ヨ") + @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)); + } + + @ApiOperation(value = "缁╂晥绠$悊-鐝-鐝鐘舵�佷慨鏀�") + @PutMapping("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..5f9152b --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/dto/PerformanceShiftAddDto.java @@ -0,0 +1,27 @@ +package com.yuanchu.mom.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Data +public class PerformanceShiftAddDto { + + @NotNull(message = "璇烽�夋嫨鐝") + @ApiModelProperty("鐝") + private String shift; + + @NotNull(message = "璇烽�夋嫨鍛樺伐") + @ApiModelProperty("鍛樺伐id") + private String userId; + + @NotNull(message = "璇烽�夋嫨鍛ㄦ") + @ApiModelProperty("寮�濮嬪懆娆�") + private LocalDateTime startWeek; + + @NotNull(message = "璇烽�夋嫨鍛ㄦ") + @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..e923efa --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java @@ -0,0 +1,27 @@ +package com.yuanchu.mom.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yuanchu.mom.mybatis_config.MyBaseMapper; +import com.yuanchu.mom.pojo.PerformanceShift; +import org.springframework.data.repository.query.Param; + +import java.util.Map; + +/** + * <p> + * 缁╂晥绠$悊-鐝 Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +public interface PerformanceShiftMapper extends MyBaseMapper<PerformanceShift> { + + IPage<Map<String, Object>> performanceShiftPage( + Page<Object> page, + @Param("time") String 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..1274d30 --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java @@ -0,0 +1,26 @@ +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.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, String 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..b69566d --- /dev/null +++ b/performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java @@ -0,0 +1,181 @@ +package com.yuanchu.mom.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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 org.springframework.transaction.annotation.Transactional; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * <p> + * 缁╂晥绠$悊-鐝 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-08 09:12:04 + */ +@Service +public class PerformanceShiftServiceImpl extends ServiceImpl<PerformanceShiftMapper, PerformanceShift> implements PerformanceShiftService { + + @Autowired + private EnumService enumService; + + public List<PerformanceShift> list = new ArrayList<>(); + + @Transactional(rollbackFor = Exception.class) + @Override + public void performanceShiftAdd(PerformanceShiftAddDto performanceShiftAddDto) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDateTime = performanceShiftAddDto.getStartWeek().format(formatter); + boolean exists = baseMapper.exists(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getWorkTime, formattedDateTime)); + String[] splitUserId = performanceShiftAddDto.getUserId().split(","); + // 濡傛灉涓嶅瓨鍦ㄦ坊鍔犳暟鎹� + if (!exists) { + LocalDate firstDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().withDayOfMonth(1); + LocalDate lastDayOfMonth = performanceShiftAddDto.getEndWeek().toLocalDate().with(TemporalAdjusters.lastDayOfMonth()); + List<LocalDateTime> localDateTimesBetween = getLocalDateTimesBetween(firstDayOfMonth.atStartOfDay(), lastDayOfMonth.atStartOfDay()); + localDateTimesBetween.forEach(i -> { + for (String s : splitUserId) { + PerformanceShift performanceShift = new PerformanceShift(); + performanceShift.setUserId(Integer.valueOf(s)); + performanceShift.setWorkTime(i); + performanceShift.setShift(""); + list.add(performanceShift); + } + if (list.size() >= 1000) { + baseMapper.insertBatchSomeColumn(list); + list.clear(); + } + }); + if (!list.isEmpty()) { + baseMapper.insertBatchSomeColumn(list); + } + } + // 鍐嶆鏇存柊 + List<LocalDateTime> datesBetween = getLocalDateTimesBetween(performanceShiftAddDto.getStartWeek(), performanceShiftAddDto.getEndWeek()); + for (LocalDateTime date : datesBetween) { + for (String s : splitUserId) { + PerformanceShift performanceShift = new PerformanceShift(); + performanceShift.setShift(performanceShiftAddDto.getShift()); + performanceShift.setUserId(Integer.valueOf(s)); + performanceShift.setWorkTime(date); + String formatterDateTime = date.format(formatter); + baseMapper.update(new PerformanceShift(), Wrappers.<PerformanceShift>lambdaUpdate() + .set(PerformanceShift::getShift, performanceShiftAddDto.getShift()) + .eq(PerformanceShift::getUserId, s) + .eq(PerformanceShift::getWorkTime, formatterDateTime)); + } + } + } + + @Override + public IPage<Map<String, Object>> performanceShiftPage(Page<Object> page, String 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; + List<Object> map = new ArrayList<>(); + // 鍒嗗壊鏃ユ湡 + for (String shiftTime : shiftTimes) { + Map<Object, Object> hashMap = new HashMap<>(); + String[] shiftTimeAndShift = shiftTime.split("锛�"); + for (Enums enums : shiftType) { + if (!i.containsKey(enums.getLabel())) { + i.put(enums.getLabel(), 0); + } + if (enums.getValue().equals(shiftTimeAndShift[1])) { + Integer num = (Integer) i.get(enums.getLabel()); + i.put(enums.getLabel(), num += 1); + } + } + if (shiftTimeAndShift[1].equals("1") || shiftTimeAndShift[1].equals("2") || shiftTimeAndShift[1].equals("0")) { + i.put("totalAttendance", totalAttendance += 1); + } + hashMap.put("id", shiftTimeAndShift[2]); + hashMap.put("shift", shiftTimeAndShift[1]); + hashMap.put("weekly", DateUtil.weekOfYear(DateUtil.parse(shiftTimeAndShift[0]))); + hashMap.put("time", shiftTimeAndShift[0]); + hashMap.put("headerTime", getWeek(shiftTimeAndShift[0])); + map.add(hashMap); + } + i.put("list", map); + i.remove("shiftTime"); + } + 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; + } + + public static String getWeek(String dayStr) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date = sdf.parse(dayStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + int day = calendar.get(Calendar.DAY_OF_MONTH); + return day + " " + getWeekDay(dayOfWeek); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String getWeekDay(int dayOfWeek) { + switch (dayOfWeek) { + case Calendar.MONDAY: + return "鍛ㄤ竴"; + case Calendar.TUESDAY: + return "鍛ㄤ簩"; + case Calendar.WEDNESDAY: + return "鍛ㄤ笁"; + case Calendar.THURSDAY: + return "鍛ㄥ洓"; + case Calendar.FRIDAY: + return "鍛ㄤ簲"; + case Calendar.SATURDAY: + return "鍛ㄥ叚"; + case Calendar.SUNDAY: + return "鍛ㄦ棩"; + default: + return "鏈煡"; + } + } +} 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..d903fed --- /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 + if(u.department is not null and u.department != '', CONCAT(u.name, '锛�', u.department, '锛�'), u.name) name, + GROUP_CONCAT(s.work_time, '锛�', s.shift, '锛�', s.id order by s.work_time SEPARATOR ';') AS shiftTime + FROM performance_shift s + LEFT JOIN user u on u.id = s.user_id + <where> + <if test="time != null and time != ''"> + and DATE_FORMAT(s.work_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m' ) + </if> + <if test="userName != null and userName != ''"> + and u.name like concat('%', #{userName}, '%') + </if> + <if test="laboratory != null and laboratory != ''"> + </if> + </where> + GROUP BY u.id + </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