lyhzzz 1 hafta önce
ebeveyn
işleme
5406575258

+ 5 - 0
src/main/java/com/fdkankan/manage_jp/controller/UserController.java

@@ -118,5 +118,10 @@ public class UserController extends BaseController {
         userService.enableUser(param);
         return Result.success();
     }
+
+    @PostMapping("/export")
+    public void export(@RequestBody UserParam param){
+        userService.export(param,request,response);
+    }
 }
 

+ 6 - 0
src/main/java/com/fdkankan/manage_jp/mapper/IUserMapper.java

@@ -2,7 +2,12 @@ package com.fdkankan.manage_jp.mapper;
 
 import com.fdkankan.manage_jp.entity.User;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fdkankan.manage_jp.vo.request.UserParam;
+import com.fdkankan.manage_jp.vo.response.UserExcelVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +20,5 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface IUserMapper extends BaseMapper<User> {
 
+    List<UserExcelVo> getExPortList(@Param("param") UserParam param);
 }

+ 4 - 0
src/main/java/com/fdkankan/manage_jp/service/IUserService.java

@@ -8,6 +8,8 @@ import com.fdkankan.manage_jp.vo.request.RequestCompany;
 import com.fdkankan.manage_jp.vo.request.UserListParam;
 import com.fdkankan.manage_jp.vo.request.UserParam;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -45,4 +47,6 @@ public interface IUserService extends IService<User> {
     List<User> getByCompanyId(Long companyId);
 
     void enableUser(UserParam param);
+
+    void export(UserParam param, HttpServletRequest req, HttpServletResponse resp);
 }

+ 38 - 0
src/main/java/com/fdkankan/manage_jp/service/impl/UserServiceImpl.java

@@ -1,5 +1,8 @@
 package com.fdkankan.manage_jp.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -22,6 +25,7 @@ import com.fdkankan.manage_jp.vo.request.RequestCompany;
 import com.fdkankan.manage_jp.vo.request.UserListParam;
 import com.fdkankan.manage_jp.vo.request.UserParam;
 import com.fdkankan.manage_jp.vo.response.LoginVo;
+import com.fdkankan.manage_jp.vo.response.UserExcelVo;
 import com.fdkankan.manage_jp.vo.response.UserVo;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
@@ -30,6 +34,9 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -260,4 +267,35 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
 
 
     }
+
+    @Override
+    public void export(UserParam param, HttpServletRequest req, HttpServletResponse resp) {
+        List<UserExcelVo> exportSceneLists = this.getBaseMapper().getExPortList(param);
+        try {
+            this.commonExport(req,resp,"用户数据",exportSceneLists, UserExcelVo.class);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    public void commonExport(HttpServletRequest request, HttpServletResponse response,String name,List<?> result,Class<?> clazz) throws Exception {
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        String fileName = name  + ".xlsx";
+        fileName = URLEncoder.encode(fileName, "UTF-8");
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
+        ExcelWriter excelWriter = null;
+        try {
+            excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build();
+            WriteSheet writeSheet = EasyExcel.writerSheet(name).build();
+            excelWriter.write(result, writeSheet);
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            if(excelWriter != null){
+                excelWriter.finish();
+            }
+        }
+    }
 }

+ 49 - 0
src/main/java/com/fdkankan/manage_jp/vo/request/UserParam.java

@@ -1,6 +1,9 @@
 package com.fdkankan.manage_jp.vo.request;
 
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
 
 @Data
 public class UserParam {
@@ -8,4 +11,50 @@ public class UserParam {
     private String newPassword;
     private String password;
     private Integer status;
+
+    private String startTime;
+    private String endTime;
+    private List<String> timeList;
+
+    public String getStartTime() {
+        if(StringUtils.isBlank(startTime) && timeList != null && timeList.size() >0){
+            return getStartTime(timeList.get(0));
+        }
+        if(StringUtils.isNotBlank(startTime)){
+
+            return getStartTime(startTime);
+        }
+        return startTime;
+    }
+
+    public String getEndTime() {
+        if(StringUtils.isBlank(endTime) && timeList != null && timeList.size() >1){
+            return getEndTime(timeList.get(1));
+        }
+        if(StringUtils.isNotBlank(endTime)){
+
+            return getEndTime(endTime);
+        }
+        return endTime;
+    }
+
+    public static String getStartTime(String startTime) {
+        if(StringUtils.isBlank(startTime)){
+            return null;
+        }
+        if(startTime.length() > 12){
+            return startTime;
+        }
+        return startTime +" 00:00:00";
+    }
+
+    public static String getEndTime(String endTime) {
+        if(StringUtils.isBlank(endTime)){
+            return null;
+        }
+        if(endTime.length() > 12){
+            return endTime;
+        }
+        return endTime +" 23:59:59";
+    }
 }

+ 60 - 0
src/main/java/com/fdkankan/manage_jp/vo/response/UserExcelVo.java

@@ -0,0 +1,60 @@
+package com.fdkankan.manage_jp.vo.response;
+
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+@Data
+public class UserExcelVo {
+
+    @ExcelProperty("所属公司")
+    private String companyName;
+
+    @ExcelProperty("员工邮箱")
+    private String userName;
+
+    @ExcelProperty("员工姓名")
+    private String nickName;
+
+    @ExcelProperty("角色")
+    private String roleName;
+
+    @ExcelProperty("创建时间")
+    private String createTime;
+
+    @ExcelProperty("计算的月数")
+    private Integer buildMouth;
+
+    public Integer getBuildMouth() {
+        if(createTime != null){
+            return calculateMonthsToNow(createTime) +1;
+        }
+        return buildMouth;
+    }
+
+    /**
+     * 计算从指定日期到当前日期的月份间隔
+     * @param pastDate 过去的日期
+     * @return 月份间隔(整数)
+     */
+    public static int calculateMonthsToNow(LocalDate pastDate) {
+        LocalDate now = LocalDate.now();
+        Period period = Period.between(pastDate, now);
+        return period.getYears() * 12 + period.getMonths();
+    }
+
+    public static int calculateMonthsToNow(String dateStr) {
+        LocalDate pastDate = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        return calculateMonthsToNow(pastDate);
+    }
+
+    public static void main(String[] args) {
+        System.out.println(calculateMonthsToNow("2025-11-14 23:59:59"));
+    }
+}

+ 13 - 0
src/main/resources/mapper/manage_jp/UserMapper.xml

@@ -2,4 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.manage_jp.mapper.IUserMapper">
 
+    <select id="getExPortList" resultType="com.fdkankan.manage_jp.vo.response.UserExcelVo">
+        select u.user_name,u.nick_name,u.create_time,c.company_name ,r.role_name from t_user u
+            left join t_company c on u.company_id = c.id and c.rec_status = 'A'
+            left join t_user_role ur on u.id = ur.user_id and ur.rec_status = 'A'
+            left join t_role r on ur.role_id = r.id  and r.rec_status = 'A'
+        where u.rec_status = 'A'
+        <if test="param.startTime != null and param.startTime!=''">
+            and u.create_time &gt;=#{param.startTime}
+        </if>
+        <if test="param.endTime != null and param.endTime!=''">
+            and u.create_time &lt;=#{param.endTime}
+        </if>
+    </select>
 </mapper>