Bladeren bron

实现智慧用工增删改查导入导出功能

zlm 8 maanden geleden
bovenliggende
commit
272114907d

+ 6 - 1
park-overview-service/pom.xml

@@ -70,7 +70,12 @@
         <dependency>
             <groupId>com.zksy</groupId>
             <artifactId>minioutil</artifactId>
-            <version>1.0.0</version>
+            <version>1.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.3.2</version>
         </dependency>
     </dependencies>
 

+ 110 - 0
park-overview-service/src/main/java/com/zksy/park/controller/SmartEmploymentController.java

@@ -0,0 +1,110 @@
+package com.zksy.park.controller;
+
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.common.annotation.Log;
+import com.zksy.common.core.domain.Result;
+import com.zksy.common.enums.BusinessType;
+import com.zksy.common.utils.SearchUtil;
+import com.zksy.park.domain.SmartEmployment;
+import com.zksy.park.service.SmartEmploymentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 智慧用工
+ */
+@Slf4j
+@RestController
+@RequestMapping("/smartEmployment")
+@Api(tags = "智慧用工信息", description = "智慧用工信息")
+public class SmartEmploymentController {
+
+    @Autowired
+    private SmartEmploymentService service;
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation(value = "智慧用工信息搜索getById")
+    public Result getById(@PathVariable String id) {
+        return Result.ok(service.getById(id));
+    }
+
+    @GetMapping("/findByPage")
+    @ApiOperation(value = "智慧用工信息分页")
+    public Page findByPage(long pageNum, long pageSize, String conditionJson) throws Exception {
+        return service.page(new Page<>(pageNum, pageSize), SearchUtil.parseWhereSql(conditionJson));
+    }
+
+    @GetMapping("/getList")
+    @ApiOperation(value = "查询所有智慧用工信息")
+    public Result getList(String conditionJson) throws Exception {
+        return Result.ok(service.list(SearchUtil.parseWhereSql(conditionJson)));
+    }
+
+    @PostMapping("/save")
+    @ApiOperation(value = "新增智慧用工信息")
+    @Log(title = "新增智慧用工信息", businessType = BusinessType.INSERT)
+    public Result<Object> save(@RequestBody SmartEmployment entity) {
+        entity.setCreateTime(new DateTime().toLocalDateTime());
+        entity.setUpdateTime(new DateTime().toLocalDateTime());
+        return Result.ok(service.save(entity));
+    }
+
+    @PostMapping("/saveBatch")
+    @ApiOperation(value = "智慧用工信息批量新增")
+    @Log(title = "批量新增智慧用工信息", businessType = BusinessType.INSERT)
+    public Result<Object> saveBatch(@RequestBody List<SmartEmployment> entityList) {
+        entityList.forEach(q->{
+            q.setUpdateTime(new DateTime().toLocalDateTime());
+            q.setCreateTime(new DateTime().toLocalDateTime());
+        });
+        return Result.ok(service.saveBatch(entityList));
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation(value = "智慧用工信息修改")
+    @Log(title = "修改智慧用工信息", businessType = BusinessType.UPDATE)
+    public Result<Object> updateById(@RequestBody SmartEmployment entity) {
+        entity.setUpdateTime(new DateTime().toLocalDateTime());
+        return Result.ok(service.updateById(entity));
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation(value = "智慧用工信息删除")
+    @Log(title = "删除智慧用工信息", businessType = BusinessType.DELETE)
+    public Result<Object> deleteById(String id) {
+        return Result.ok(service.removeById(id));
+    }
+
+    @DeleteMapping("/deleteBatchById")
+    @ApiOperation(value = "智慧用工信息批量删除")
+    @Log(title = "智慧用工信息批量删除", businessType = BusinessType.DELETE)
+    public Result<Object> deleteBatchById(@RequestParam List<String> ids) {
+        return Result.ok(service.removeByIds(ids));
+    }
+
+    @GetMapping("/exportExcel")
+    @ApiOperation(value = "导出智慧用工信息Excel")
+    @Log(title = "导出智慧用工信息Excel", businessType = BusinessType.EXPORT)
+    public void exportExcel(HttpServletResponse response) throws IOException {
+        service.exportExcel(response);
+    }
+
+    @PostMapping("/importExcel")
+    @ApiOperation(value = "导入智慧用工信息Excel")
+    @Log(title = "导入智慧用工信息Excel", businessType = BusinessType.IMPORT)
+    public Result<Object> importExcel(@RequestParam("file") MultipartFile file) throws IOException {
+        return service.importExcel(file);
+    }
+
+
+}

+ 130 - 0
park-overview-service/src/main/java/com/zksy/park/domain/SmartEmployment.java

@@ -0,0 +1,130 @@
+package com.zksy.park.domain;
+
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 智慧用工信息实体类
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ExcelIgnoreUnannotated
+@TableName(value ="smart_employment")
+public class SmartEmployment {
+    /**
+     * 主键
+     */
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id",type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 公司名称
+     */
+    @ApiModelProperty(value = "公司名称")
+    @ExcelProperty("公司名称")
+    @ColumnWidth(20)
+    private String companyName;
+
+    /**
+     * 招聘岗位
+     */
+    @ApiModelProperty(value = "招聘岗位")
+    @ExcelProperty("招聘岗位")
+    @ColumnWidth(20)
+    private String jobOpenings;
+
+    /**
+     * 关键词条
+     */
+    @ApiModelProperty(value = "关键词条")
+    @ExcelProperty("关键词条")
+    @ColumnWidth(20)
+    private String keyTerms;
+
+    /**
+     * 招聘详情
+     */
+    @ApiModelProperty(value = "招聘详情")
+    @ExcelProperty("招聘详情")
+    @ColumnWidth(20)
+    private String jobRequirements;
+
+    /**
+     * 招聘人数
+     */
+    @ApiModelProperty(value = "招聘人数")
+    @ExcelProperty("招聘人数")
+    @ColumnWidth(20)
+    private String numberRecruits;
+
+    /**
+     * 薪资
+     */
+    @ApiModelProperty(value = "薪资")
+    @ExcelProperty("薪资")
+    @ColumnWidth(10)
+    private String salary;
+
+    /**
+     * 工作地点
+     */
+    @ApiModelProperty(value = "工作地点")
+    @ExcelProperty("工作地点")
+    @ColumnWidth(40)
+    private String workLocation;
+
+    /**
+     * 联系人
+     */
+    @ApiModelProperty(value = "联系人")
+    @ExcelProperty("联系人")
+    @ColumnWidth(10)
+    private String contact;
+
+    /**
+     * 联系方式
+     */
+    @ApiModelProperty(value = "联系方式")
+    @ExcelProperty("联系方式")
+    @ColumnWidth(20)
+    private String contactInformation;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注")
+    @ExcelProperty("备注")
+    @ColumnWidth(40)
+    private String remarks;
+
+    /**
+     * 创建时间
+     */
+
+    @ApiModelProperty(value = "创建时间")
+    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
+    @ExcelProperty("发布时间")
+    @ColumnWidth(20)
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+
+    private LocalDateTime updateTime;
+}

+ 52 - 0
park-overview-service/src/main/java/com/zksy/park/listener/SmartEmploymentListener.java

@@ -0,0 +1,52 @@
+package com.zksy.park.listener;
+
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.zksy.park.domain.SmartEmployment;
+import com.zksy.park.service.SmartEmploymentService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SmartEmploymentListener extends AnalysisEventListener<SmartEmployment> {
+
+    private static final int BATCH_COUNT = 1000;
+    private final SmartEmploymentService service;
+    private final List<SmartEmployment> cachedDataList = new ArrayList<>();
+
+    public SmartEmploymentListener(SmartEmploymentService service) {
+        this.service = service;
+    }
+
+    @Override
+    public void invoke(SmartEmployment data, AnalysisContext context) {
+        LocalDateTime now = LocalDateTime.now();
+        data.setId(null);
+        //TODO 时间处理
+        if(data.getCreateTime()==null){
+            data.setCreateTime(now);
+        }
+        data.setUpdateTime(now);
+
+        cachedDataList.add(data);
+        if (cachedDataList.size() >= BATCH_COUNT) {
+            saveData();
+            cachedDataList.clear();
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+        saveData();
+    }
+
+    @Transactional
+    protected void saveData() {
+        if (!cachedDataList.isEmpty()) {
+            service.saveBatch(cachedDataList);
+        }
+    }
+}

+ 12 - 0
park-overview-service/src/main/java/com/zksy/park/mapper/SmartEmploymentMapper.java

@@ -0,0 +1,12 @@
+package com.zksy.park.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.park.domain.SmartEmployment;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 智慧用工
+ */
+@Mapper
+public interface SmartEmploymentMapper extends BaseMapper<SmartEmployment> {
+}

+ 17 - 0
park-overview-service/src/main/java/com/zksy/park/service/SmartEmploymentService.java

@@ -0,0 +1,17 @@
+package com.zksy.park.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.common.core.domain.Result;
+import com.zksy.park.domain.SmartEmployment;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 智慧用工
+ */
+public interface SmartEmploymentService extends IService<SmartEmployment> {
+    void exportExcel(HttpServletResponse response);
+
+    Result<Object> importExcel(MultipartFile file);
+}

+ 88 - 0
park-overview-service/src/main/java/com/zksy/park/service/impl/SmartEmploymentServiceImpl.java

@@ -0,0 +1,88 @@
+package com.zksy.park.service.impl;
+
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.common.core.domain.Result;
+import com.zksy.park.domain.SmartEmployment;
+import com.zksy.park.listener.SmartEmploymentListener;
+import com.zksy.park.mapper.SmartEmploymentMapper;
+import com.zksy.park.service.SmartEmploymentService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+/**
+ * 智慧用工
+ */
+@Service
+public class SmartEmploymentServiceImpl extends ServiceImpl<SmartEmploymentMapper, SmartEmployment> implements SmartEmploymentService {
+
+    @Override
+    public void exportExcel(HttpServletResponse response) {
+        String fileName = "智慧用工.xlsx";
+        try {
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("UTF-8");
+            String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
+            response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + encodedFileName);
+
+            try (ServletOutputStream out = response.getOutputStream()) {
+                ExcelWriter excelWriter = EasyExcel.write(out, SmartEmployment.class).build();
+                WriteSheet sheet = EasyExcel.writerSheet("智慧用工").build();
+
+                int pageNum = 1;
+                int pageSize = 1000;
+                List<SmartEmployment> pageData;
+
+                do {
+                    Page<SmartEmployment> page = new Page<>(pageNum, pageSize);
+                    Page<SmartEmployment> result = this.page(page); // MyBatis-Plus 分页查询
+                    pageData = result.getRecords();
+
+                    if (pageData != null && !pageData.isEmpty()) {
+                        excelWriter.write(pageData, sheet);
+                    }
+                    pageNum++;
+                } while (pageData != null && !pageData.isEmpty());
+
+                excelWriter.finish();
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException("导出Excel数据失败:" + e.getMessage());
+        }
+    }
+
+    @Override
+    @Transactional
+    public Result<Object> importExcel(MultipartFile file) {
+        String filename = file.getOriginalFilename();
+        if (filename == null || !filename.endsWith(".xlsx")) {
+            return Result.error("请上传 Excel 文件(.xlsx)");
+        }
+
+        try {
+            EasyExcel.read(file.getInputStream(), SmartEmployment.class,
+                            new SmartEmploymentListener(this)) // 把 ServiceImpl 传进去
+                    .sheet()
+                    .doRead();
+
+            return Result.ok("导入成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("导入 Excel 失败:" + e.getMessage());
+        }
+    }
+}