From 443a9510ba9c032d83139048f73201706a1d9c45 Mon Sep 17 00:00:00 2001
From: value <z1292839451@163.com>
Date: 星期五, 10 五月 2024 22:19:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java                              |    5 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsUnPassServiceImpl.java                 |    2 
 performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java                 |    4 
 performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursController.java    |   64 ++++++
 performance-server/src/main/java/com/yuanchu/mom/mapper/AuxiliaryWorkingHoursMapper.java            |   19 +
 performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursServiceImpl.java |   51 +++++
 performance-server/src/main/java/com/yuanchu/mom/pojo/AuxiliaryWorkingHours.java                    |   73 +++++++
 performance-server/src/main/java/com/yuanchu/mom/utils/StyleUtils.java                              |   83 ++++++++
 pom.xml                                                                                             |    8 
 performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml                        |   38 +++
 performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursService.java          |   22 ++
 performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml                             |   42 ++++
 performance-server/src/main/java/com/yuanchu/mom/service/impl/PerformanceShiftServiceImpl.java      |  139 ++++++++++++-
 inspect-server/src/main/resources/mapper/InsUnPassMapper.xml                                        |    8 
 performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java               |    5 
 performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java         |   36 +++
 16 files changed, 576 insertions(+), 23 deletions(-)

diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsUnPassServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsUnPassServiceImpl.java
index 4350315..19bf21e 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsUnPassServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsUnPassServiceImpl.java
@@ -30,8 +30,6 @@
     public Map<String, Object> pageInsUnPass(Page page, UnPassPageDto unPassPageDto) {
         Map<String, Object> map = new HashMap<>();
         map.put("head", PrintChina.printChina(UnPassPageDto.class));
-        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("pageInsUnPass");
-        if (map1.get("look") == 1) unPassPageDto.setCreateUser(map1.get("userId"));
         map.put("body", insUnPassMapper.pageInsUnPass(page, QueryWrappers.queryWrappers(unPassPageDto)));
         return map;
     }
diff --git a/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
index 79658de..88c5d45 100644
--- a/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
@@ -19,14 +19,6 @@
             <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
     </resultMap>
     <select id="pageInsUnPass" resultType="com.yuanchu.mom.dto.UnPassPageDto">
---         select *
---         from (
---         select
---         iu.*,io.entrust_code,u.name write_user_name
---         from ins_un_pass iu
---         left join ins_order io on io.id = iu.ins_order_id
---         left join user u on u.id = iu.create_user
---         ) a
         select *
         from ins_un_pass iu
     </select>
diff --git a/performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursController.java b/performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursController.java
new file mode 100644
index 0000000..cb0f98f
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursController.java
@@ -0,0 +1,64 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.annotation.ValueClassify;
+import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
+import com.yuanchu.mom.service.AuxiliaryWorkingHoursService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * <p>
+ * 杈呭姪宸ユ椂 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-09 06:58:31
+ */
+@Api(tags = "缁╂晥绠$悊-杈呭姪宸ユ椂璁剧疆")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/auxiliaryWorkingHours")
+public class AuxiliaryWorkingHoursController {
+    @Resource
+    private AuxiliaryWorkingHoursService auxiliaryWorkingHoursService;
+
+    @ApiOperation(value="鏌ヨ杈呭姪宸ユ椂")
+    @PostMapping("/selectAuxiliaryWorkingHours")
+    public Result selectAuxiliaryWorkingHours(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        AuxiliaryWorkingHours entity = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), AuxiliaryWorkingHours.class);
+        return Result.success(auxiliaryWorkingHoursService.selectAuxiliaryWorkingHours(page,entity));
+    }
+    @ValueClassify("宸ユ椂绠$悊")
+    @ApiOperation(value="鍒犻櫎杈呭姪宸ユ椂")
+    @PostMapping("/deleteAuxiliaryWorkingHours")
+    public Result deleteAuxiliaryWorkingHours(Integer id){
+        return Result.success(auxiliaryWorkingHoursService.deleteAuxiliaryWorkingHours(id));
+    }
+    @ValueClassify("宸ユ椂绠$悊")
+    @ApiOperation(value="淇敼杈呭姪宸ユ椂")
+    @PostMapping("/upAuxiliaryWorkingHours")
+    public Result upAuxiliaryWorkingHours(@RequestBody AuxiliaryWorkingHours auxiliaryWorkingHours){
+        return Result.success(auxiliaryWorkingHoursService.upAuxiliaryWorkingHours(auxiliaryWorkingHours));
+    }
+    @ValueClassify("宸ユ椂绠$悊")
+    @ApiOperation(value="鏂板杈呭姪宸ユ椂")
+    @PostMapping("/insertAuxiliaryWorkingHours")
+    public  Result insertAuxiliaryWorkingHours(@RequestBody AuxiliaryWorkingHours auxiliaryWorkingHours){
+        return Result.success(auxiliaryWorkingHoursService.insertAuxiliaryWorkingHours(auxiliaryWorkingHours));
+    }
+
+
+}
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
index 65b368a..45a48c6 100644
--- a/performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java
+++ b/performance-server/src/main/java/com/yuanchu/mom/controller/PerformanceShiftController.java
@@ -1,14 +1,24 @@
 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.dto.PerformanceShiftAddDto;
 import com.yuanchu.mom.pojo.PerformanceShift;
 import com.yuanchu.mom.service.PerformanceShiftService;
+import com.yuanchu.mom.utils.StyleUtils;
 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.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotNull;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -34,10 +44,16 @@
         return Result.success();
     }
 
-    @ApiOperation(value = "缁╂晥绠$悊-鐝-鍒嗛〉鏌ヨ")
+    @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 = "缁╂晥绠$悊-鐝-骞翠唤鍒嗛〉鏌ヨ")
+    @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));
     }
 
     @ApiOperation(value = "缁╂晥绠$悊-鐝-鐝鐘舵�佷慨鏀�")
@@ -46,4 +62,22 @@
         performanceShiftService.performanceShiftUpdate(performanceShift);
         return Result.success();
     }
+
+    @ApiOperation(value = "缁╂晥绠$悊-鐝-瀵煎嚭")
+    @GetMapping("update")
+    public void exportToExcel(@NotNull(message = "鏃堕棿涓嶈兘涓虹┖锛�") String time, String userName, String laboratory, HttpServletResponse response) throws Exception {
+        Map<Object, Object> data = performanceShiftService.exportToExcel(time, userName, laboratory);
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(StyleUtils.getHeadStyle(), StyleUtils.getContentStyle());
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("requestType","excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        EasyExcel.write(response.getOutputStream())
+                .head((List<List<String>>) data.get("header"))
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .registerWriteHandler(horizontalCellStyleStrategy)
+                .sheet("妯℃澘")
+                .doWrite((Collection<?>) data.get("data"));
+    }
 }
diff --git a/performance-server/src/main/java/com/yuanchu/mom/mapper/AuxiliaryWorkingHoursMapper.java b/performance-server/src/main/java/com/yuanchu/mom/mapper/AuxiliaryWorkingHoursMapper.java
new file mode 100644
index 0000000..cfc2223
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/mapper/AuxiliaryWorkingHoursMapper.java
@@ -0,0 +1,19 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
+
+/**
+ * <p>
+ * 杈呭姪宸ユ椂 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-09 06:58:31
+ */
+public interface AuxiliaryWorkingHoursMapper extends BaseMapper<AuxiliaryWorkingHours> {
+    IPage<AuxiliaryWorkingHours> selectAuxiliaryWorkingHours(Page page, QueryWrapper<AuxiliaryWorkingHours> ew);
+}
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
index f9ef663..2623b39 100644
--- a/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java
+++ b/performance-server/src/main/java/com/yuanchu/mom/mapper/PerformanceShiftMapper.java
@@ -30,4 +30,8 @@
     List<Map<String, Object>> performanceShiftYearPage(@Param("time") String time,
                                                        @Param("userName") String userName,
                                                        @Param("laboratory") String laboratory);
+
+    IPage<Map<String, Object>> performanceShiftYear(Page<Object> page, String time, String userName, String laboratory);
+
+    List<Map<String, Object>> performanceShiftYearList(String time, String userName, String laboratory);
 }
diff --git a/performance-server/src/main/java/com/yuanchu/mom/pojo/AuxiliaryWorkingHours.java b/performance-server/src/main/java/com/yuanchu/mom/pojo/AuxiliaryWorkingHours.java
new file mode 100644
index 0000000..570c382
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/pojo/AuxiliaryWorkingHours.java
@@ -0,0 +1,73 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.yuanchu.mom.annotation.ValueTableShow;
+import com.yuanchu.mom.common.OrderBy;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import jdk.nashorn.internal.ir.annotations.Ignore;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 杈呭姪宸ユ椂
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-09 06:58:31
+ */
+@Getter
+@Setter
+@TableName("auxiliary_working_hours")
+@ApiModel(value = "AuxiliaryWorkingHours瀵硅薄", description = "杈呭姪宸ユ椂")
+public class AuxiliaryWorkingHours extends OrderBy implements Serializable {
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    @ValueTableShow(2)
+    @ApiModelProperty("缂栧彿")
+    private String number;
+    @ValueTableShow(3)
+    @ApiModelProperty("杈呭姪椤圭洰鍚嶇О")
+    private String auxiliaryProject;
+    @ValueTableShow(5)
+    @ApiModelProperty("鏍稿噯宸ユ椂")
+    private Float approvedWorkingHour;
+    @ValueTableShow(7)
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty("鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("淇敼浜篿d")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ValueTableShow(6)
+    @ApiModelProperty("閮ㄩ棬")
+    private String department;
+    @ValueTableShow(3)
+    @ApiModelProperty("瀹為獙瀹�")
+    private String laboratory;
+    @ValueTableShow(4)
+    @ApiModelProperty("鍗曚綅")
+    private String unit;
+}
diff --git a/performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursService.java b/performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursService.java
new file mode 100644
index 0000000..6b0d199
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursService.java
@@ -0,0 +1,22 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 杈呭姪宸ユ椂 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-09 06:58:31
+ */
+public interface AuxiliaryWorkingHoursService extends IService<AuxiliaryWorkingHours> {
+    Map<String, Object> selectAuxiliaryWorkingHours(Page page, AuxiliaryWorkingHours auxiliaryWorkingHours);
+    int deleteAuxiliaryWorkingHours(Integer id);
+    int upAuxiliaryWorkingHours(AuxiliaryWorkingHours auxiliaryWorkingHours);
+    int insertAuxiliaryWorkingHours(AuxiliaryWorkingHours auxiliaryWorkingHours);
+}
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
index 67ad72a..e671f1a 100644
--- a/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java
+++ b/performance-server/src/main/java/com/yuanchu/mom/service/PerformanceShiftService.java
@@ -1,5 +1,6 @@
 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;
@@ -22,4 +23,8 @@
     Map<String, Object> performanceShiftPage(Page<Object> page, String time, String userName, String laboratory);
 
     void performanceShiftUpdate(PerformanceShift performanceShift);
+
+    IPage<Map<String, Object>> performanceShiftPageYear(Page<Object> page, String time, String userName, String laboratory);
+
+    Map<Object, Object> exportToExcel(String time, String userName, String laboratory) throws Exception;
 }
diff --git a/performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursServiceImpl.java b/performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursServiceImpl.java
new file mode 100644
index 0000000..8049fab
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursServiceImpl.java
@@ -0,0 +1,51 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.common.PrintChina;
+import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
+import com.yuanchu.mom.mapper.AuxiliaryWorkingHoursMapper;
+import com.yuanchu.mom.service.AuxiliaryWorkingHoursService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.QueryWrappers;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 杈呭姪宸ユ椂 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-05-09 06:58:31
+ */
+@Service
+public class AuxiliaryWorkingHoursServiceImpl extends ServiceImpl<AuxiliaryWorkingHoursMapper, AuxiliaryWorkingHours> implements AuxiliaryWorkingHoursService {
+
+    @Resource
+    private  AuxiliaryWorkingHoursMapper auxiliaryWorkingHoursMapper;
+    @Override
+    public Map<String, Object> selectAuxiliaryWorkingHours(Page page, AuxiliaryWorkingHours auxiliaryWorkingHours) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(AuxiliaryWorkingHours.class));
+        map.put("body", auxiliaryWorkingHoursMapper.selectAuxiliaryWorkingHours(page, QueryWrappers.queryWrappers(auxiliaryWorkingHours)));
+        return map;
+    }
+
+    @Override
+    public int deleteAuxiliaryWorkingHours(Integer id) {
+        return auxiliaryWorkingHoursMapper.deleteById(id);
+    }
+
+    @Override
+    public int upAuxiliaryWorkingHours(AuxiliaryWorkingHours auxiliaryWorkingHours) {
+        return auxiliaryWorkingHoursMapper.updateById(auxiliaryWorkingHours);
+    }
+
+    @Override
+    public int insertAuxiliaryWorkingHours(AuxiliaryWorkingHours auxiliaryWorkingHours) {
+        return auxiliaryWorkingHoursMapper.insert(auxiliaryWorkingHours);
+    }
+}
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
index fd33f86..dde83c3 100644
--- 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
@@ -3,6 +3,7 @@
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +14,7 @@
 import com.yuanchu.mom.pojo.PerformanceShift;
 import com.yuanchu.mom.service.EnumService;
 import com.yuanchu.mom.service.PerformanceShiftService;
+import com.yuanchu.mom.utils.JackSonUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -171,16 +173,106 @@
                 .set(PerformanceShift::getShift, performanceShift.getShift()));
     }
 
-//    public static void main(String[] args) {
-//        String dateStr = "2023-09-15 12:30:45";
-//        LocalDateTime localDateTime = convertToLocalDateTime(dateStr);
-//        System.out.println(localDateTime);
-//    }
-//
-//    public static LocalDateTime convertToLocalDateTime(String dateStr) {
-//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-//        return LocalDateTime.parse(dateStr, formatter);
-//    }
+    @Override
+    public IPage<Map<String, Object>> performanceShiftPageYear(Page<Object> page, String time, String userName, String laboratory) {
+        IPage<Map<String, Object>> mapYearIPage = baseMapper.performanceShiftYear(page, time, userName, laboratory);
+        List<Enums> shiftType = enumService.selectEnumByCategory("鐝绫诲瀷");
+        mapYearIPage.setRecords(annualAttendanceProcessing(mapYearIPage.getRecords(), shiftType));
+        return mapYearIPage;
+    }
+
+    // 骞村垎椤典笌瀵煎嚭鍏卞悓浣跨敤
+    public List<Map<String, Object>> annualAttendanceProcessing(List<Map<String, Object>> mapYearList, List<Enums> shiftType){
+        for (Map<String, Object> map : mapYearList) {
+            Map<String, Object> resultMap = new LinkedHashMap<>();
+            Map<String, Object> hashMapYear = new LinkedHashMap<>();
+            int totalYearAttendance = 0;
+            // 涓�骞�12涓湀
+            for (int i = 1; i < 13; i++) {
+                Map<String, Object> hashMapMonth = new LinkedHashMap<>();
+                int totalMonthAttendance = 0;
+                for (Enums enums : shiftType) {
+                    if (!hashMapYear.containsKey(enums.getLabel())) {
+                        hashMapYear.put(enums.getLabel(), 0);
+                    }
+                    // 鏈�
+                    if (ObjectUtils.isNotEmpty(map.get("month_str")) && map.get("work_time").equals(i)) {
+                        String charArray = map.get("month_str").toString();
+                        int count = countOccurrences(charArray, i + "锛�" + enums.getValue());
+                        hashMapMonth.put(enums.getLabel(), count);
+                        hashMapYear.put(enums.getLabel(), Integer.parseInt(hashMapYear.get(enums.getLabel()).toString()) + count );
+                        if (enums.getValue().equals("0") || enums.getValue().equals("1") || enums.getValue().equals("2")) {
+                            totalMonthAttendance += count;
+                            totalYearAttendance += count;
+                        }
+                    }
+                    // 绌烘暟鎹�
+                    else {
+                        map.put("work_time", i);
+                        hashMapMonth.put(enums.getLabel(), 0);
+                    }
+                }
+                hashMapMonth.put("totalMonthAttendance", totalMonthAttendance);
+                hashMapYear.put("totalYearAttendance", totalYearAttendance);
+                resultMap.put(i + "", hashMapMonth);
+            }
+            map.remove("month_str");
+            map.remove("year_str");
+            map.put("year", hashMapYear);
+            map.put("month", resultMap);
+        }
+        return mapYearList;
+    }
+
+    public static int countOccurrences(String str, String target) {
+        int count = 0;
+        int index = 0;
+        while ((index = str.indexOf(target, index))!= -1) {
+            count++;
+            index += target.length();
+        }
+        return count;
+    }
+
+    public List<List<Object>> dataRequiredForProcessingIntoExcel(List<Map<String, Object>> list, List<Enums> enums) throws Exception {
+        List<List<Object>> data = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            List<Object> excelRowList = new ArrayList<>();
+            excelRowList.add(i + 1);
+            excelRowList.add(list.get(i).get("account"));
+            excelRowList.add(list.get(i).get("name"));
+            Map<String, Object> year = JackSonUtil.unmarshal(JackSonUtil.marshal(list.get(i).get("year")), Map.class);
+            excelRowList.add(year.get("totalYearAttendance"));
+            enums.forEach(j -> {
+                excelRowList.add(year.get(j.getLabel()));
+            });
+            Map<String, Map<String, Object>> month = JackSonUtil.unmarshal(JackSonUtil.marshal(list.get(i).get("month")), Map.class);
+            for (int j = 1; j < 13; j++) {
+                Object totalMonthAttendance = month.get(j + "").get("totalMonthAttendance");
+                excelRowList.add(totalMonthAttendance);
+                for (Enums anEnum : enums) {
+                    excelRowList.add(month.get(j + "").get(anEnum.getLabel()));
+                }
+            }
+            data.add(excelRowList);
+        }
+        return data;
+    }
+
+    @Override
+    public Map<Object, Object> exportToExcel(String time, String userName, String laboratory) throws Exception {
+        Map<Object, Object> map = new HashMap<>();
+        List<Enums> shiftType = enumService.selectEnumByCategory("鐝绫诲瀷");
+        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 灏嗗瓧绗︿覆鏃堕棿杞崲涓� LocalDateTime 绫诲瀷鏃堕棿
+        LocalDateTime localDateTime = LocalDateTime.parse(time, formatters);
+        map.put("header", getHeader(localDateTime.getYear() + " 骞�", shiftType));
+        List<Map<String, Object>> mapYearList = baseMapper.performanceShiftYearList(time, userName, laboratory);
+        annualAttendanceProcessing(mapYearList, shiftType);
+        List<List<Object>> lists = dataRequiredForProcessingIntoExcel(mapYearList, shiftType);
+        map.put("data", lists);
+        return map;
+    }
 
     // 鑾峰彇涓や釜localDateTime鐨勬瘡涓�澶�
     public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) {
@@ -230,4 +322,31 @@
                 return "鏈煡";
         }
     }
+
+    /**
+     * 杩斿洖琛ㄥご
+     *
+     * 澶栧眰List浠h〃琛屽唴灞� List浠h〃鍒�  鐩稿悓鐨勫垪鏁版嵁浼氳涓诲姩鍚堝苟
+     * 鏋勯�犲弻鍒楄〃澶�
+     * @return List<List<String>>
+     */
+    private static List<List<String>> getHeader(String month, List<Enums> enums){
+        List<List<String>> line = new ArrayList<>();
+        line.add(Arrays.asList("鑰冨嫟姹囨��", "搴忓彿", "搴忓彿"));
+        line.add(Arrays.asList("鑰冨嫟姹囨��", "宸ュ彿", "宸ュ彿"));
+        line.add(Arrays.asList("鑰冨嫟姹囨��", "濮撳悕", "濮撳悕"));
+        line.add(Arrays.asList("鍑哄嫟璇︽儏", month, "鍑哄嫟"));
+        // 骞� header
+        for (Enums anEnum : enums) {
+            line.add(Arrays.asList("鑰冨嫟姹囨��", month, anEnum.getLabel()));
+        }
+        // 鏈坔eader
+        for (int i = 1; i < 13; i++) {
+            line.add(Arrays.asList("鍑哄嫟璇︽儏", i + " 鏈�", "鍑哄嫟"));
+            for (Enums anEnum : enums) {
+                line.add(Arrays.asList("鍑哄嫟璇︽儏", i + " 鏈�", anEnum.getLabel()));
+            }
+        }
+        return line;
+    }
 }
diff --git a/performance-server/src/main/java/com/yuanchu/mom/utils/StyleUtils.java b/performance-server/src/main/java/com/yuanchu/mom/utils/StyleUtils.java
new file mode 100644
index 0000000..dc8a300
--- /dev/null
+++ b/performance-server/src/main/java/com/yuanchu/mom/utils/StyleUtils.java
@@ -0,0 +1,83 @@
+package com.yuanchu.mom.utils;
+
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import org.apache.poi.ss.usermodel.*;
+
+public class StyleUtils {
+    /**
+     * 鏍囬鏍峰紡
+     * @return
+     */
+    public static WriteCellStyle getHeadStyle(){
+        // 澶寸殑绛栫暐
+        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+        // 鑳屾櫙棰滆壊
+        headWriteCellStyle.setFillForegroundColor(IndexedColors.LIME.getIndex());
+        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
+
+        // 瀛椾綋
+        WriteFont headWriteFont = new WriteFont();
+        headWriteFont.setFontName("浠垮畫");//璁剧疆瀛椾綋鍚嶅瓧
+        headWriteFont.setFontHeightInPoints((short)9);//璁剧疆瀛椾綋澶у皬
+        headWriteFont.setBold(true);//瀛椾綋鍔犵矖
+        headWriteFont.setColor((short) 1);
+        headWriteCellStyle.setWriteFont(headWriteFont); //鍦ㄦ牱寮忕敤搴旂敤璁剧疆鐨勫瓧浣�;
+
+        // 鏍峰紡
+        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//璁剧疆搴曡竟妗�;
+        headWriteCellStyle.setBottomBorderColor((short) 1);//璁剧疆搴曡竟妗嗛鑹�;
+        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //璁剧疆宸﹁竟妗�;
+        headWriteCellStyle.setLeftBorderColor((short) 1);//璁剧疆宸﹁竟妗嗛鑹�;
+        headWriteCellStyle.setBorderRight(BorderStyle.THIN);//璁剧疆鍙宠竟妗�;
+        headWriteCellStyle.setRightBorderColor((short) 1);//璁剧疆鍙宠竟妗嗛鑹�;
+        headWriteCellStyle.setBorderTop(BorderStyle.THIN);//璁剧疆椤惰竟妗�;
+        headWriteCellStyle.setTopBorderColor((short) 1); //璁剧疆椤惰竟妗嗛鑹�;
+
+        headWriteCellStyle.setWrapped(false);  //璁剧疆鑷姩鎹㈣;
+
+        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//璁剧疆姘村钩瀵归綈鐨勬牱寮忎负灞呬腑瀵归綈;
+        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  //璁剧疆鍨傜洿瀵归綈鐨勬牱寮忎负灞呬腑瀵归綈;
+        headWriteCellStyle.setShrinkToFit(true);//璁剧疆鏂囨湰鏀剁缉鑷冲悎閫�
+
+        return headWriteCellStyle;
+    }
+
+
+    /**
+     * 鍐呭鏍峰紡
+     * @return
+     */
+    public static WriteCellStyle getContentStyle(){
+        // 鍐呭鐨勭瓥鐣�
+        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+
+        // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+        contentWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());
+        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
+
+        // 璁剧疆瀛椾綋
+        WriteFont contentWriteFont = new WriteFont();
+        contentWriteFont.setFontHeightInPoints((short) 9);//璁剧疆瀛椾綋澶у皬
+        contentWriteFont.setFontName("浠垮畫"); //璁剧疆瀛椾綋鍚嶅瓧
+        contentWriteCellStyle.setWriteFont(contentWriteFont);//鍦ㄦ牱寮忕敤搴旂敤璁剧疆鐨勫瓧浣�;
+
+        //璁剧疆鏍峰紡;
+//        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//璁剧疆搴曡竟妗�;
+//        contentWriteCellStyle.setBottomBorderColor((short) 1);//璁剧疆搴曡竟妗嗛鑹�;
+        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //璁剧疆宸﹁竟妗�;
+        contentWriteCellStyle.setLeftBorderColor((short) 1);//璁剧疆宸﹁竟妗嗛鑹�;
+        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//璁剧疆鍙宠竟妗�;
+        contentWriteCellStyle.setRightBorderColor((short) 1);//璁剧疆鍙宠竟妗嗛鑹�;
+        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//璁剧疆椤惰竟妗�;
+        contentWriteCellStyle.setTopBorderColor((short) 1); ///璁剧疆椤惰竟妗嗛鑹�;
+
+        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 姘村钩灞呬腑
+        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 鍨傜洿灞呬腑
+        contentWriteCellStyle.setWrapped(false); //璁剧疆鑷姩鎹㈣;
+
+//        contentWriteCellStyle.setShrinkToFit(true);//璁剧疆鏂囨湰鏀剁缉鑷冲悎閫�
+
+        return contentWriteCellStyle;
+    }
+}
diff --git a/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml b/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml
new file mode 100644
index 0000000..7977187
--- /dev/null
+++ b/performance-server/src/main/resources/mapper/AuxiliaryWorkingHoursMapper.xml
@@ -0,0 +1,38 @@
+<?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.AuxiliaryWorkingHoursMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.AuxiliaryWorkingHours">
+        <id column="id" property="id" />
+        <result column="number" property="number"/>
+        <result column="AuxiliaryProject" property="auxiliaryProject" />
+        <result column="approved_working_hour" property="approvedWorkingHour" />
+        <result column="remarks" property="remarks" />
+        <result column="create_user" property="createUser" />
+        <result column="update_user" property="updateUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="department" property="department" />
+        <result column="laboratory" property="laboratory" />
+        <result column="unit" property="unit"/>
+    </resultMap>
+  <select id="selectAuxiliaryWorkingHours" resultType="com.yuanchu.mom.pojo.AuxiliaryWorkingHours">
+      select data.*
+      from (
+      select
+      awh.id,
+      awh.number,
+      awh.auxiliary_project,
+      awh.laboratory,
+      awh.unit,
+      awh.approved_working_hour,
+      awh.department,
+      awh.remarks
+      FROM auxiliary_working_hours awh
+      ) data
+      <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+          ${ew.customSqlSegment}
+      </if>
+  </select>
+</mapper>
diff --git a/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
index 29c9d73..0b702be 100644
--- a/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
+++ b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
@@ -43,4 +43,46 @@
         <if test="laboratory != null and laboratory != ''">
         </if>
     </select>
+
+    <select id="performanceShiftYear" resultType="java.util.Map">
+        SELECT if(u.department is not null and u.department != '', CONCAT(u.name, '锛�', u.department, '锛�'), u.name) name,
+        s.user_id, u.account,
+        DATE_FORMAT(s.work_time, '%c') work_time,
+        GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', s.shift order by s.work_time SEPARATOR ';') month_str
+        FROM performance_shift s
+        LEFT JOIN user u on u.id = s.user_id
+        where s.shift is not NULL
+        and s.shift != ''
+        <if test="time != null and time != ''">
+            and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
+        </if>
+        <if test="userName != null and userName != ''">
+            and u.name like concat('%', #{userName}, '%')
+        </if>
+        <if test="laboratory != null and laboratory != ''">
+        </if>
+        GROUP BY u.id
+        order by s.work_time
+    </select>
+
+    <select id="performanceShiftYearList" resultType="map">
+        SELECT if(u.department is not null and u.department != '', CONCAT(u.name, '锛�', u.department, '锛�'), u.name) name,
+        s.user_id, u.account,
+        DATE_FORMAT(s.work_time, '%c') work_time,
+        GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', s.shift order by s.work_time SEPARATOR ';') month_str
+        FROM performance_shift s
+        LEFT JOIN user u on u.id = s.user_id
+        where s.shift is not NULL
+        and s.shift != ''
+        <if test="time != null and time != ''">
+            and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
+        </if>
+        <if test="userName != null and userName != ''">
+            and u.name like concat('%', #{userName}, '%')
+        </if>
+        <if test="laboratory != null and laboratory != ''">
+        </if>
+        GROUP BY u.id
+        order by s.work_time
+    </select>
 </mapper>
diff --git a/pom.xml b/pom.xml
index e129ed5..766c9d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,12 +37,20 @@
         <feign-okhttp.version>11.0</feign-okhttp.version>
         <shiro.version>1.5.3</shiro.version>
         <freemwork.version>2.3.32</freemwork.version>
+        <easyexcel.version>3.3.2</easyexcel.version>
         <!--鎻愪氦鍓�-->
         <!-- 鎵撳寘鍚庡鍑虹殑璺緞 -->
         <package.path>${project.build.directory}/BLOG</package.path>
     </properties>
 
     <dependencies>
+        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>${easyexcel.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
diff --git a/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
index a34819b..05a3381 100644
--- a/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
+++ b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -6,8 +6,9 @@
 @SpringBootTest
 class SystemRunApplicationTest {
 
-
     @Test
-    void  contextLoads() {
+    void  contextLoads() throws Exception {
+
     }
+
 }

--
Gitblit v1.9.3