将开源版本的修改打补丁应用到商业版

This commit is contained in:
wsm
2026-04-09 19:33:52 +08:00
parent d94e9c9bc4
commit b52aec1611
111 changed files with 7215 additions and 275 deletions
+24
View File
@@ -0,0 +1,24 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>jeecg-boot-parent</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.8.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-module-supervision</artifactId>
<groupId>org.jeecgframework.boot</groupId>
<version>3.8.1</version>
<dependencies>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,182 @@
package org.jeecg.modules.demo.check.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.check.entity.DjCheck;
import org.jeecg.modules.demo.check.service.IDjCheckService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 党建检查台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Tag(name="党建检查台账")
@RestController
@RequestMapping("/check/djCheck")
@Slf4j
public class DjCheckController extends JeecgController<DjCheck, IDjCheckService> {
@Autowired
private IDjCheckService djCheckService;
/**
* 分页列表查询
*
* @param djCheck
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "党建检查台账-分页列表查询")
@Operation(summary="党建检查台账-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<DjCheck>> queryPageList(DjCheck djCheck,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DjCheck> queryWrapper = QueryGenerator.initQueryWrapper(djCheck, req.getParameterMap());
Page<DjCheck> page = new Page<DjCheck>(pageNo, pageSize);
IPage<DjCheck> pageList = djCheckService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param djCheck
* @return
*/
@AutoLog(value = "党建检查台账-添加")
@Operation(summary="党建检查台账-添加")
@RequiresPermissions("check:dj_check:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody DjCheck djCheck) {
djCheckService.save(djCheck);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param djCheck
* @return
*/
@AutoLog(value = "党建检查台账-编辑")
@Operation(summary="党建检查台账-编辑")
@RequiresPermissions("check:dj_check:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DjCheck djCheck) {
djCheckService.updateById(djCheck);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "党建检查台账-通过id删除")
@Operation(summary="党建检查台账-通过id删除")
@RequiresPermissions("check:dj_check:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
djCheckService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "党建检查台账-批量删除")
@Operation(summary="党建检查台账-批量删除")
@RequiresPermissions("check:dj_check:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.djCheckService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "党建检查台账-通过id查询")
@Operation(summary="党建检查台账-通过id查询")
@GetMapping(value = "/queryById")
public Result<DjCheck> queryById(@RequestParam(name="id",required=true) String id) {
DjCheck djCheck = djCheckService.getById(id);
if(djCheck==null) {
return Result.error("未找到对应数据");
}
return Result.OK(djCheck);
}
/**
* 导出excel
*
* @param request
* @param djCheck
*/
@RequiresPermissions("check:dj_check:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DjCheck djCheck) {
return super.exportXls(request, djCheck, DjCheck.class, "党建检查台账");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("check:dj_check:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DjCheck.class);
}
}
@@ -0,0 +1,105 @@
package org.jeecg.modules.demo.check.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 党建检查台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Data
@TableName("dj_check")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="党建检查台账")
public class DjCheck implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**序号*/
@Excel(name = "序号", width = 15)
@Schema(description = "序号")
private java.lang.Integer sortNo;
/**一级指标*/
@Excel(name = "一级指标", width = 15)
@Schema(description = "一级指标")
private java.lang.String primaryIndex;
/**评价要点*/
@Excel(name = "评价要点", width = 15)
@Schema(description = "评价要点")
private java.lang.String evalPoints;
/**评价内容*/
@Excel(name = "评价内容", width = 15)
@Schema(description = "评价内容")
private java.lang.String evalContent;
/**问题表现*/
@Excel(name = "问题表现", width = 15)
@Schema(description = "问题表现")
private java.lang.String problemManifestation;
/**整改措施*/
@Excel(name = "整改措施", width = 15)
@Schema(description = "整改措施")
private java.lang.String rectificationMeasures;
/**完成时限*/
@Excel(name = "完成时限", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时限")
private java.util.Date completionDeadline;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@Schema(description = "责任部门")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private java.lang.String responsibleDept;
/**完成情况*/
@Excel(name = "完成情况", width = 15)
@Schema(description = "完成情况")
private java.lang.String completionStatus;
/**是否可发起(0不可发起,1可发起)*/
@Excel(name = "是否可发起", width = 15)
@Dict(dicCode = "is_launchable")
private String isLaunchable;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.demo.check.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.check.entity.DjCheck;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 党建检查台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface DjCheckMapper extends BaseMapper<DjCheck> {
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.demo.check.mapper.DjCheckMapper">
</mapper>
@@ -0,0 +1,14 @@
package org.jeecg.modules.demo.check.service;
import org.jeecg.modules.demo.check.entity.DjCheck;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 党建检查台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface IDjCheckService extends IService<DjCheck> {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.demo.check.service.impl;
import org.jeecg.modules.demo.check.entity.DjCheck;
import org.jeecg.modules.demo.check.mapper.DjCheckMapper;
import org.jeecg.modules.demo.check.service.IDjCheckService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 党建检查台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Service
public class DjCheckServiceImpl extends ServiceImpl<DjCheckMapper, DjCheck> implements IDjCheckService {
}
@@ -0,0 +1,182 @@
package org.jeecg.modules.demo.demoMetting.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.demoMetting.entity.DjDemoLifeMeeting;
import org.jeecg.modules.demo.demoMetting.service.IDjDemoLifeMeetingService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 所领导板子民主生活会问题台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Tag(name="所领导板子民主生活会问题台账")
@RestController
@RequestMapping("/demoMetting/djDemoLifeMeeting")
@Slf4j
public class DjDemoLifeMeetingController extends JeecgController<DjDemoLifeMeeting, IDjDemoLifeMeetingService> {
@Autowired
private IDjDemoLifeMeetingService djDemoLifeMeetingService;
/**
* 分页列表查询
*
* @param djDemoLifeMeeting
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "所领导板子民主生活会问题台账-分页列表查询")
@Operation(summary="所领导板子民主生活会问题台账-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<DjDemoLifeMeeting>> queryPageList(DjDemoLifeMeeting djDemoLifeMeeting,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DjDemoLifeMeeting> queryWrapper = QueryGenerator.initQueryWrapper(djDemoLifeMeeting, req.getParameterMap());
Page<DjDemoLifeMeeting> page = new Page<DjDemoLifeMeeting>(pageNo, pageSize);
IPage<DjDemoLifeMeeting> pageList = djDemoLifeMeetingService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param djDemoLifeMeeting
* @return
*/
@AutoLog(value = "所领导板子民主生活会问题台账-添加")
@Operation(summary="所领导板子民主生活会问题台账-添加")
@RequiresPermissions("demoMetting:dj_demo_life_meeting:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody DjDemoLifeMeeting djDemoLifeMeeting) {
djDemoLifeMeetingService.save(djDemoLifeMeeting);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param djDemoLifeMeeting
* @return
*/
@AutoLog(value = "所领导板子民主生活会问题台账-编辑")
@Operation(summary="所领导板子民主生活会问题台账-编辑")
@RequiresPermissions("demoMetting:dj_demo_life_meeting:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DjDemoLifeMeeting djDemoLifeMeeting) {
djDemoLifeMeetingService.updateById(djDemoLifeMeeting);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "所领导板子民主生活会问题台账-通过id删除")
@Operation(summary="所领导板子民主生活会问题台账-通过id删除")
@RequiresPermissions("demoMetting:dj_demo_life_meeting:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
djDemoLifeMeetingService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "所领导板子民主生活会问题台账-批量删除")
@Operation(summary="所领导板子民主生活会问题台账-批量删除")
@RequiresPermissions("demoMetting:dj_demo_life_meeting:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.djDemoLifeMeetingService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "所领导板子民主生活会问题台账-通过id查询")
@Operation(summary="所领导板子民主生活会问题台账-通过id查询")
@GetMapping(value = "/queryById")
public Result<DjDemoLifeMeeting> queryById(@RequestParam(name="id",required=true) String id) {
DjDemoLifeMeeting djDemoLifeMeeting = djDemoLifeMeetingService.getById(id);
if(djDemoLifeMeeting==null) {
return Result.error("未找到对应数据");
}
return Result.OK(djDemoLifeMeeting);
}
/**
* 导出excel
*
* @param request
* @param djDemoLifeMeeting
*/
@RequiresPermissions("demoMetting:dj_demo_life_meeting:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DjDemoLifeMeeting djDemoLifeMeeting) {
return super.exportXls(request, djDemoLifeMeeting, DjDemoLifeMeeting.class, "所领导板子民主生活会问题台账");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("demoMetting:dj_demo_life_meeting:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DjDemoLifeMeeting.class);
}
}
@@ -0,0 +1,114 @@
package org.jeecg.modules.demo.demoMetting.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 所领导板子民主生活会问题台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Data
@TableName("dj_demo_life_meeting")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="所领导板子民主生活会问题台账")
public class DjDemoLifeMeeting implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**序号*/
@Excel(name = "序号", width = 15)
@Schema(description = "序号")
private java.lang.Integer sortNo;
/**问题分类*/
@Excel(name = "问题分类", width = 15)
@Schema(description = "问题分类")
private java.lang.Integer problemType;
/**问题清单*/
@Excel(name = "问题清单", width = 15)
@Schema(description = "问题清单")
private java.lang.String problemList;
/**问题表现*/
@Excel(name = "问题表现", width = 15)
@Schema(description = "问题表现")
private java.lang.String problemManifestation;
/**责任领导*/
@Excel(name = "责任领导", width = 15)
@Schema(description = "责任领导")
private java.lang.String responsibleLeader;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@Schema(description = "责任部门")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private java.lang.String responsibleDept;
/**整改措施*/
@Excel(name = "整改措施", width = 15)
@Schema(description = "整改措施")
private java.lang.String rectificationMeasures;
/**完成时限*/
@Excel(name = "完成时限", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时限")
private java.util.Date completionDeadline;
/**完成时间*/
@Excel(name = "完成时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时间")
private java.util.Date completionDate;
/**输出成果*/
@Excel(name = "输出成果", width = 15)
@Schema(description = "输出成果")
private java.lang.String outputResults;
/**完成情况*/
@Excel(name = "完成情况", width = 15)
@Schema(description = "完成情况")
private java.lang.String completionStatus;
/**是否可发起(0不可发起,1可发起)*/
@Excel(name = "是否可发起", width = 15)
@Dict(dicCode = "is_launchable")
private String isLaunchable;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.demo.demoMetting.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.demoMetting.entity.DjDemoLifeMeeting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 所领导板子民主生活会问题台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface DjDemoLifeMeetingMapper extends BaseMapper<DjDemoLifeMeeting> {
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.demo.demoMetting.mapper.DjDemoLifeMeetingMapper">
</mapper>
@@ -0,0 +1,14 @@
package org.jeecg.modules.demo.demoMetting.service;
import org.jeecg.modules.demo.demoMetting.entity.DjDemoLifeMeeting;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 所领导板子民主生活会问题台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface IDjDemoLifeMeetingService extends IService<DjDemoLifeMeeting> {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.demo.demoMetting.service.impl;
import org.jeecg.modules.demo.demoMetting.entity.DjDemoLifeMeeting;
import org.jeecg.modules.demo.demoMetting.mapper.DjDemoLifeMeetingMapper;
import org.jeecg.modules.demo.demoMetting.service.IDjDemoLifeMeetingService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 所领导板子民主生活会问题台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Service
public class DjDemoLifeMeetingServiceImpl extends ServiceImpl<DjDemoLifeMeetingMapper, DjDemoLifeMeeting> implements IDjDemoLifeMeetingService {
}
@@ -0,0 +1,182 @@
package org.jeecg.modules.demo.peopleService.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.peopleService.entity.DjPeopleService;
import org.jeecg.modules.demo.peopleService.service.IDjPeopleServiceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 我为群众办实事台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Tag(name="我为群众办实事台账")
@RestController
@RequestMapping("/peopleService/djPeopleService")
@Slf4j
public class DjPeopleServiceController extends JeecgController<DjPeopleService, IDjPeopleServiceService> {
@Autowired
private IDjPeopleServiceService djPeopleServiceService;
/**
* 分页列表查询
*
* @param djPeopleService
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "我为群众办实事台账-分页列表查询")
@Operation(summary="我为群众办实事台账-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<DjPeopleService>> queryPageList(DjPeopleService djPeopleService,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DjPeopleService> queryWrapper = QueryGenerator.initQueryWrapper(djPeopleService, req.getParameterMap());
Page<DjPeopleService> page = new Page<DjPeopleService>(pageNo, pageSize);
IPage<DjPeopleService> pageList = djPeopleServiceService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param djPeopleService
* @return
*/
@AutoLog(value = "我为群众办实事台账-添加")
@Operation(summary="我为群众办实事台账-添加")
@RequiresPermissions("peopleService:dj_people_service:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody DjPeopleService djPeopleService) {
djPeopleServiceService.save(djPeopleService);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param djPeopleService
* @return
*/
@AutoLog(value = "我为群众办实事台账-编辑")
@Operation(summary="我为群众办实事台账-编辑")
@RequiresPermissions("peopleService:dj_people_service:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DjPeopleService djPeopleService) {
djPeopleServiceService.updateById(djPeopleService);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "我为群众办实事台账-通过id删除")
@Operation(summary="我为群众办实事台账-通过id删除")
@RequiresPermissions("peopleService:dj_people_service:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
djPeopleServiceService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "我为群众办实事台账-批量删除")
@Operation(summary="我为群众办实事台账-批量删除")
@RequiresPermissions("peopleService:dj_people_service:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.djPeopleServiceService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "我为群众办实事台账-通过id查询")
@Operation(summary="我为群众办实事台账-通过id查询")
@GetMapping(value = "/queryById")
public Result<DjPeopleService> queryById(@RequestParam(name="id",required=true) String id) {
DjPeopleService djPeopleService = djPeopleServiceService.getById(id);
if(djPeopleService==null) {
return Result.error("未找到对应数据");
}
return Result.OK(djPeopleService);
}
/**
* 导出excel
*
* @param request
* @param djPeopleService
*/
@RequiresPermissions("peopleService:dj_people_service:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DjPeopleService djPeopleService) {
return super.exportXls(request, djPeopleService, DjPeopleService.class, "我为群众办实事台账");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("peopleService:dj_people_service:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DjPeopleService.class);
}
}
@@ -0,0 +1,92 @@
package org.jeecg.modules.demo.peopleService.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 我为群众办实事台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Data
@TableName("dj_people_service")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="我为群众办实事台账")
public class DjPeopleService implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**序号*/
@Excel(name = "序号", width = 15)
@Schema(description = "序号")
private java.lang.Integer sortNo;
/**问题分类*/
@Excel(name = "问题分类", width = 15)
@Schema(description = "问题分类")
private java.lang.String problemType;
/**具体措施*/
@Excel(name = "具体措施", width = 15)
@Schema(description = "具体措施")
private java.lang.String specificMeasure;
/**完成时限*/
@Excel(name = "完成时限", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时限")
private java.util.Date completionDeadline;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@Schema(description = "责任部门")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private java.lang.String responsibleDept;
/**完成情况*/
@Excel(name = "完成情况", width = 15)
@Schema(description = "完成情况")
private java.lang.String completionStatus;
/**是否可发起(0不可发起,1可发起)*/
@Excel(name = "是否可发起", width = 15)
@Dict(dicCode = "is_launchable")
private String isLaunchable;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.demo.peopleService.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.peopleService.entity.DjPeopleService;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 我为群众办实事台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface DjPeopleServiceMapper extends BaseMapper<DjPeopleService> {
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.demo.peopleService.mapper.DjPeopleServiceMapper">
</mapper>
@@ -0,0 +1,14 @@
package org.jeecg.modules.demo.peopleService.service;
import org.jeecg.modules.demo.peopleService.entity.DjPeopleService;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 我为群众办实事台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface IDjPeopleServiceService extends IService<DjPeopleService> {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.demo.peopleService.service.impl;
import org.jeecg.modules.demo.peopleService.entity.DjPeopleService;
import org.jeecg.modules.demo.peopleService.mapper.DjPeopleServiceMapper;
import org.jeecg.modules.demo.peopleService.service.IDjPeopleServiceService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 我为群众办实事台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Service
public class DjPeopleServiceServiceImpl extends ServiceImpl<DjPeopleServiceMapper, DjPeopleService> implements IDjPeopleServiceService {
}
@@ -0,0 +1,298 @@
package org.jeecg.modules.demo.rectifylist.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.common.system.vo.SelectTreeModel;
import org.jeecg.modules.demo.rectifylist.entity.DjInspectionRectifyList;
import org.jeecg.modules.demo.rectifylist.service.IDjInspectionRectifyListService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 党建巡视整改提升工作台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Tag(name="党建巡视整改提升工作台账")
@RestController
@RequestMapping("/rectifylist/djInspectionRectifyList")
@Slf4j
public class DjInspectionRectifyListController extends JeecgController<DjInspectionRectifyList, IDjInspectionRectifyListService>{
@Autowired
private IDjInspectionRectifyListService djInspectionRectifyListService;
/**
* 分页列表查询
*
* @param djInspectionRectifyList
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "党建巡视整改提升工作台账-分页列表查询")
@Operation(summary="党建巡视整改提升工作台账-分页列表查询")
@GetMapping(value = "/rootList")
public Result<IPage<DjInspectionRectifyList>> queryPageList(DjInspectionRectifyList djInspectionRectifyList,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
String hasQuery = req.getParameter("hasQuery");
if(hasQuery != null && "true".equals(hasQuery)){
QueryWrapper<DjInspectionRectifyList> queryWrapper = QueryGenerator.initQueryWrapper(djInspectionRectifyList, req.getParameterMap());
List<DjInspectionRectifyList> list = djInspectionRectifyListService.queryTreeListNoPage(queryWrapper);
IPage<DjInspectionRectifyList> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
}else{
String parentId = djInspectionRectifyList.getPid();
if (oConvertUtils.isEmpty(parentId)) {
parentId = "0";
}
djInspectionRectifyList.setPid(null);
QueryWrapper<DjInspectionRectifyList> queryWrapper = QueryGenerator.initQueryWrapper(djInspectionRectifyList, req.getParameterMap());
// 使用 eq 防止模糊查询
queryWrapper.eq("pid", parentId);
Page<DjInspectionRectifyList> page = new Page<DjInspectionRectifyList>(pageNo, pageSize);
IPage<DjInspectionRectifyList> pageList = djInspectionRectifyListService.page(page, queryWrapper);
return Result.OK(pageList);
}
}
/**
* 【vue3专用】加载节点的子数据
*
* @param pid
* @return
*/
@RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET)
public Result<List<SelectTreeModel>> loadTreeChildren(@RequestParam(name = "pid") String pid) {
Result<List<SelectTreeModel>> result = new Result<>();
try {
List<SelectTreeModel> ls = djInspectionRectifyListService.queryListByPid(pid);
result.setResult(ls);
result.setSuccess(true);
} catch (Exception e) {
e.printStackTrace();
result.setMessage(e.getMessage());
result.setSuccess(false);
}
return result;
}
/**
* 【vue3专用】加载一级节点/如果是同步 则所有数据
*
* @param async
* @param pcode
* @return
*/
@RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET)
public Result<List<SelectTreeModel>> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) {
Result<List<SelectTreeModel>> result = new Result<>();
try {
List<SelectTreeModel> ls = djInspectionRectifyListService.queryListByCode(pcode);
if (!async) {
loadAllChildren(ls);
}
result.setResult(ls);
result.setSuccess(true);
} catch (Exception e) {
e.printStackTrace();
result.setMessage(e.getMessage());
result.setSuccess(false);
}
return result;
}
/**
* 【vue3专用】递归求子节点 同步加载用到
*
* @param ls
*/
private void loadAllChildren(List<SelectTreeModel> ls) {
for (SelectTreeModel tsm : ls) {
List<SelectTreeModel> temp = djInspectionRectifyListService.queryListByPid(tsm.getKey());
if (temp != null && temp.size() > 0) {
tsm.setChildren(temp);
loadAllChildren(temp);
}
}
}
/**
* 获取子数据
* @param djInspectionRectifyList
* @param req
* @return
*/
//@AutoLog(value = "党建巡视整改提升工作台账-获取子数据")
@Operation(summary="党建巡视整改提升工作台账-获取子数据")
@GetMapping(value = "/childList")
public Result<IPage<DjInspectionRectifyList>> queryPageList(DjInspectionRectifyList djInspectionRectifyList,HttpServletRequest req) {
QueryWrapper<DjInspectionRectifyList> queryWrapper = QueryGenerator.initQueryWrapper(djInspectionRectifyList, req.getParameterMap());
List<DjInspectionRectifyList> list = djInspectionRectifyListService.list(queryWrapper);
IPage<DjInspectionRectifyList> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
}
/**
* 批量查询子节点
* @param parentIds 父ID(多个采用半角逗号分割)
* @return 返回 IPage
* @param parentIds
* @return
*/
//@AutoLog(value = "党建巡视整改提升工作台账-批量获取子数据")
@Operation(summary="党建巡视整改提升工作台账-批量获取子数据")
@GetMapping("/getChildListBatch")
public Result getChildListBatch(@RequestParam("parentIds") String parentIds) {
try {
QueryWrapper<DjInspectionRectifyList> queryWrapper = new QueryWrapper<>();
List<String> parentIdList = Arrays.asList(parentIds.split(","));
queryWrapper.in("pid", parentIdList);
List<DjInspectionRectifyList> list = djInspectionRectifyListService.list(queryWrapper);
IPage<DjInspectionRectifyList> pageList = new Page<>(1, 10, list.size());
pageList.setRecords(list);
return Result.OK(pageList);
} catch (Exception e) {
log.error(e.getMessage(), e);
return Result.error("批量查询子节点失败:" + e.getMessage());
}
}
/**
* 添加
*
* @param djInspectionRectifyList
* @return
*/
@AutoLog(value = "党建巡视整改提升工作台账-添加")
@Operation(summary="党建巡视整改提升工作台账-添加")
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody DjInspectionRectifyList djInspectionRectifyList) {
djInspectionRectifyListService.addDjInspectionRectifyList(djInspectionRectifyList);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param djInspectionRectifyList
* @return
*/
@AutoLog(value = "党建巡视整改提升工作台账-编辑")
@Operation(summary="党建巡视整改提升工作台账-编辑")
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DjInspectionRectifyList djInspectionRectifyList) {
djInspectionRectifyListService.updateDjInspectionRectifyList(djInspectionRectifyList);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "党建巡视整改提升工作台账-通过id删除")
@Operation(summary="党建巡视整改提升工作台账-通过id删除")
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
djInspectionRectifyListService.deleteDjInspectionRectifyList(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "党建巡视整改提升工作台账-批量删除")
@Operation(summary="党建巡视整改提升工作台账-批量删除")
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.djInspectionRectifyListService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "党建巡视整改提升工作台账-通过id查询")
@Operation(summary="党建巡视整改提升工作台账-通过id查询")
@GetMapping(value = "/queryById")
public Result<DjInspectionRectifyList> queryById(@RequestParam(name="id",required=true) String id) {
DjInspectionRectifyList djInspectionRectifyList = djInspectionRectifyListService.getById(id);
if(djInspectionRectifyList==null) {
return Result.error("未找到对应数据");
}
return Result.OK(djInspectionRectifyList);
}
/**
* 导出excel
*
* @param request
* @param djInspectionRectifyList
*/
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DjInspectionRectifyList djInspectionRectifyList) {
return super.exportXls(request, djInspectionRectifyList, DjInspectionRectifyList.class, "党建巡视整改提升工作台账");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("rectifylist:dj_inspection_rectify_list:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DjInspectionRectifyList.class);
}
}
@@ -0,0 +1,126 @@
package org.jeecg.modules.demo.rectifylist.entity;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.UnsupportedEncodingException;
/**
* @Description: 党建巡视整改提升工作台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Data
@TableName("dj_inspection_rectify_list")
@Schema(description="党建巡视整改提升工作台账")
public class DjInspectionRectifyList implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**父级节点*/
@Excel(name = "父级节点", width = 15)
@Schema(description = "父级节点")
private java.lang.String pid;
/**是否有子节点*/
@Excel(name = "是否有子节点", width = 15, dicCode = "yn")
@Dict(dicCode = "yn")
@Schema(description = "是否有子节点")
private java.lang.String hasChild;
/**问题名称*/
@Excel(name = "问题名称", width = 15)
@Schema(description = "问题名称")
private java.lang.String issueName;
/**问题分类*/
@Excel(name = "问题分类", width = 15)
@Schema(description = "问题分类")
private java.lang.Integer problemType;
/**面上问题*/
@Excel(name = "面上问题", width = 15)
@Schema(description = "面上问题")
private java.lang.String msIssue;
/**具体问题*/
@Excel(name = "具体问题", width = 15)
@Schema(description = "具体问题")
private java.lang.String specificIssue;
/**整改措施*/
@Excel(name = "整改措施", width = 15)
@Schema(description = "整改措施")
private java.lang.String rectificationMeasures;
/**完成时限*/
@Excel(name = "完成时限", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时限")
private java.util.Date completionDeadline;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@Schema(description = "责任部门")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private java.lang.String responsibleDept;
/**分管所领导*/
@Excel(name = "分管所领导", width = 15)
@Schema(description = "分管所领导")
private java.lang.String supervisingLeader;
/**标志性成果*/
@Excel(name = "标志性成果", width = 15)
@Schema(description = "标志性成果")
private java.lang.String landmarkAchievement;
/**完成时间*/
@Excel(name = "完成时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时间")
private java.util.Date completionDate;
/**监督意见*/
@Excel(name = "监督意见", width = 15)
@Schema(description = "监督意见")
private java.lang.String supervisionOpinion;
/**措施数量*/
@Excel(name = "措施数量", width = 15)
@Schema(description = "措施数量")
private java.lang.Integer measureCount;
/**是否可发起(0不可发起,1可发起)*/
@Excel(name = "是否可发起", width = 15)
@Dict(dicCode = "is_launchable")
private String isLaunchable;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
// 该表单未设置逻辑删除功能,因为该表单为树形结构
}
@@ -0,0 +1,35 @@
package org.jeecg.modules.demo.rectifylist.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.system.vo.SelectTreeModel;
import org.jeecg.modules.demo.rectifylist.entity.DjInspectionRectifyList;
import java.util.List;
import java.util.Map;
/**
* @Description: 党建巡视整改提升工作台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface DjInspectionRectifyListMapper extends BaseMapper<DjInspectionRectifyList> {
/**
* 编辑节点状态
* @param id
* @param status
*/
void updateTreeNodeStatus(@Param("id") String id,@Param("status") String status);
/**
* 【vue3专用】根据父级ID查询树节点数据
*
* @param pid
* @param query
* @return
*/
List<SelectTreeModel> queryListByPid(@Param("pid") String pid, @Param("query") Map<String, String> query);
}
@@ -0,0 +1,25 @@
<?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="org.jeecg.modules.demo.rectifylist.mapper.DjInspectionRectifyListMapper">
<update id="updateTreeNodeStatus" parameterType="java.lang.String">
update dj_inspection_rectify_list set has_child = #{status} where id = #{id}
</update>
<!-- 【vue3专用】 -->
<select id="queryListByPid" parameterType="java.lang.Object" resultType="org.jeecg.common.system.vo.SelectTreeModel">
select
id as "key",
issue_name as "title",
(case when has_child = '1' then 0 else 1 end) as isLeaf,
pid as parentId
from dj_inspection_rectify_list
where pid = #{pid}
<if test="query != null">
<foreach collection="query.entrySet()" item="value" index="key">
and ${key} = #{value}
</foreach>
</if>
</select>
</mapper>
@@ -0,0 +1,74 @@
package org.jeecg.modules.demo.rectifylist.service;
import org.jeecg.common.system.vo.SelectTreeModel;
import org.jeecg.modules.demo.rectifylist.entity.DjInspectionRectifyList;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.exception.JeecgBootException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;
/**
* @Description: 党建巡视整改提升工作台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface IDjInspectionRectifyListService extends IService<DjInspectionRectifyList> {
/**根节点父ID的值*/
public static final String ROOT_PID_VALUE = "0";
/**树节点有子节点状态值*/
public static final String HASCHILD = "1";
/**树节点无子节点状态值*/
public static final String NOCHILD = "0";
/**
* 新增节点
*
* @param djInspectionRectifyList
*/
void addDjInspectionRectifyList(DjInspectionRectifyList djInspectionRectifyList);
/**
* 修改节点
*
* @param djInspectionRectifyList
* @throws JeecgBootException
*/
void updateDjInspectionRectifyList(DjInspectionRectifyList djInspectionRectifyList) throws JeecgBootException;
/**
* 删除节点
*
* @param id
* @throws JeecgBootException
*/
void deleteDjInspectionRectifyList(String id) throws JeecgBootException;
/**
* 查询所有数据,无分页
*
* @param queryWrapper
* @return List<DjInspectionRectifyList>
*/
List<DjInspectionRectifyList> queryTreeListNoPage(QueryWrapper<DjInspectionRectifyList> queryWrapper);
/**
* 【vue3专用】根据父级编码加载分类字典的数据
*
* @param parentCode
* @return
*/
List<SelectTreeModel> queryListByCode(String parentCode);
/**
* 【vue3专用】根据pid查询子节点集合
*
* @param pid
* @return
*/
List<SelectTreeModel> queryListByPid(String pid);
}
@@ -0,0 +1,219 @@
package org.jeecg.modules.demo.rectifylist.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.common.system.vo.SelectTreeModel;
import org.jeecg.modules.demo.rectifylist.entity.DjInspectionRectifyList;
import org.jeecg.modules.demo.rectifylist.mapper.DjInspectionRectifyListMapper;
import org.jeecg.modules.demo.rectifylist.service.IDjInspectionRectifyListService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 党建巡视整改提升工作台账
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Service
public class DjInspectionRectifyListServiceImpl extends ServiceImpl<DjInspectionRectifyListMapper, DjInspectionRectifyList> implements IDjInspectionRectifyListService {
@Override
public void addDjInspectionRectifyList(DjInspectionRectifyList djInspectionRectifyList) {
//新增时设置hasChild为0
djInspectionRectifyList.setHasChild(IDjInspectionRectifyListService.NOCHILD);
if(oConvertUtils.isEmpty(djInspectionRectifyList.getPid())){
djInspectionRectifyList.setPid(IDjInspectionRectifyListService.ROOT_PID_VALUE);
}else{
//如果当前节点父ID不为空 则设置父节点的hasChildren 为1
DjInspectionRectifyList parent = baseMapper.selectById(djInspectionRectifyList.getPid());
if(parent!=null && !"1".equals(parent.getHasChild())){
parent.setHasChild("1");
baseMapper.updateById(parent);
}
}
baseMapper.insert(djInspectionRectifyList);
}
@Override
public void updateDjInspectionRectifyList(DjInspectionRectifyList djInspectionRectifyList) {
DjInspectionRectifyList entity = this.getById(djInspectionRectifyList.getId());
if(entity==null) {
throw new JeecgBootException("未找到对应实体");
}
String old_pid = entity.getPid();
String new_pid = djInspectionRectifyList.getPid();
if(!old_pid.equals(new_pid)) {
updateOldParentNode(old_pid);
if(oConvertUtils.isEmpty(new_pid)){
djInspectionRectifyList.setPid(IDjInspectionRectifyListService.ROOT_PID_VALUE);
}
if(!IDjInspectionRectifyListService.ROOT_PID_VALUE.equals(djInspectionRectifyList.getPid())) {
baseMapper.updateTreeNodeStatus(djInspectionRectifyList.getPid(), IDjInspectionRectifyListService.HASCHILD);
}
}
baseMapper.updateById(djInspectionRectifyList);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDjInspectionRectifyList(String id) throws JeecgBootException {
//查询选中节点下所有子节点一并删除
id = this.queryTreeChildIds(id);
if(id.indexOf(",")>0) {
StringBuffer sb = new StringBuffer();
String[] idArr = id.split(",");
for (String idVal : idArr) {
if(idVal != null){
DjInspectionRectifyList djInspectionRectifyList = this.getById(idVal);
String pidVal = djInspectionRectifyList.getPid();
//查询此节点上一级是否还有其他子节点
List<DjInspectionRectifyList> dataList = baseMapper.selectList(new QueryWrapper<DjInspectionRectifyList>().eq("pid", pidVal).notIn("id",Arrays.asList(idArr)));
boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(pidVal) && !sb.toString().contains(pidVal);
if(flag){
//如果当前节点原本有子节点 现在木有了,更新状态
sb.append(pidVal).append(",");
}
}
}
//批量删除节点
baseMapper.deleteBatchIds(Arrays.asList(idArr));
//修改已无子节点的标识
String[] pidArr = sb.toString().split(",");
for(String pid : pidArr){
this.updateOldParentNode(pid);
}
}else{
DjInspectionRectifyList djInspectionRectifyList = this.getById(id);
if(djInspectionRectifyList==null) {
throw new JeecgBootException("未找到对应实体");
}
updateOldParentNode(djInspectionRectifyList.getPid());
baseMapper.deleteById(id);
}
}
@Override
public List<DjInspectionRectifyList> queryTreeListNoPage(QueryWrapper<DjInspectionRectifyList> queryWrapper) {
List<DjInspectionRectifyList> dataList = baseMapper.selectList(queryWrapper);
List<DjInspectionRectifyList> mapList = new ArrayList<>();
for(DjInspectionRectifyList data : dataList){
String pidVal = data.getPid();
//递归查询子节点的根节点
if(pidVal != null && !IDjInspectionRectifyListService.NOCHILD.equals(pidVal)){
DjInspectionRectifyList rootVal = this.getTreeRoot(pidVal);
if(rootVal != null && !mapList.contains(rootVal)){
mapList.add(rootVal);
}
}else{
if(!mapList.contains(data)){
mapList.add(data);
}
}
}
return mapList;
}
@Override
public List<SelectTreeModel> queryListByCode(String parentCode) {
String pid = ROOT_PID_VALUE;
if (oConvertUtils.isNotEmpty(parentCode)) {
LambdaQueryWrapper<DjInspectionRectifyList> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DjInspectionRectifyList::getPid, parentCode);
List<DjInspectionRectifyList> list = baseMapper.selectList(queryWrapper);
if (list == null || list.size() == 0) {
throw new JeecgBootException("该编码【" + parentCode + "】不存在,请核实!");
}
if (list.size() > 1) {
throw new JeecgBootException("该编码【" + parentCode + "】存在多个,请核实!");
}
pid = list.get(0).getId();
}
return baseMapper.queryListByPid(pid, null);
}
@Override
public List<SelectTreeModel> queryListByPid(String pid) {
if (oConvertUtils.isEmpty(pid)) {
pid = ROOT_PID_VALUE;
}
return baseMapper.queryListByPid(pid, null);
}
/**
* 根据所传pid查询旧的父级节点的子节点并修改相应状态值
* @param pid
*/
private void updateOldParentNode(String pid) {
if(!IDjInspectionRectifyListService.ROOT_PID_VALUE.equals(pid)) {
Long count = baseMapper.selectCount(new QueryWrapper<DjInspectionRectifyList>().eq("pid", pid));
if(count==null || count<=1) {
baseMapper.updateTreeNodeStatus(pid, IDjInspectionRectifyListService.NOCHILD);
}
}
}
/**
* 递归查询节点的根节点
* @param pidVal
* @return
*/
private DjInspectionRectifyList getTreeRoot(String pidVal){
DjInspectionRectifyList data = baseMapper.selectById(pidVal);
if(data != null && !IDjInspectionRectifyListService.ROOT_PID_VALUE.equals(data.getPid())){
return this.getTreeRoot(data.getPid());
}else{
return data;
}
}
/**
* 根据id查询所有子节点id
* @param ids
* @return
*/
private String queryTreeChildIds(String ids) {
//获取id数组
String[] idArr = ids.split(",");
StringBuffer sb = new StringBuffer();
for (String pidVal : idArr) {
if(pidVal != null){
if(!sb.toString().contains(pidVal)){
if(sb.toString().length() > 0){
sb.append(",");
}
sb.append(pidVal);
this.getTreeChildIds(pidVal,sb);
}
}
}
return sb.toString();
}
/**
* 递归查询所有子节点
* @param pidVal
* @param sb
* @return
*/
private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){
List<DjInspectionRectifyList> dataList = baseMapper.selectList(new QueryWrapper<DjInspectionRectifyList>().eq("pid", pidVal));
if(dataList != null && dataList.size()>0){
for(DjInspectionRectifyList tree : dataList) {
if(!sb.toString().contains(tree.getId())){
sb.append(",").append(tree.getId());
}
this.getTreeChildIds(tree.getId(),sb);
}
}
return sb;
}
}
@@ -0,0 +1,182 @@
package org.jeecg.modules.demo.supervisiontest.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.supervisiontest.entity.SupervisionTest;
import org.jeecg.modules.demo.supervisiontest.service.ISupervisionTestService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: supervision_test
* @Author: jeecg-boot
* @Date: 2026-03-20
* @Version: V1.0
*/
@Tag(name="supervision_test")
@RestController
@RequestMapping("/supervisiontest/supervisionTest")
@Slf4j
public class SupervisionTestController extends JeecgController<SupervisionTest, ISupervisionTestService> {
@Autowired
private ISupervisionTestService supervisionTestService;
/**
* 分页列表查询
*
* @param supervisionTest
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "supervision_test-分页列表查询")
@Operation(summary="supervision_test-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<SupervisionTest>> queryPageList(SupervisionTest supervisionTest,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<SupervisionTest> queryWrapper = QueryGenerator.initQueryWrapper(supervisionTest, req.getParameterMap());
Page<SupervisionTest> page = new Page<SupervisionTest>(pageNo, pageSize);
IPage<SupervisionTest> pageList = supervisionTestService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param supervisionTest
* @return
*/
@AutoLog(value = "supervision_test-添加")
@Operation(summary="supervision_test-添加")
@RequiresPermissions("supervisiontest:supervision_test:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody SupervisionTest supervisionTest) {
supervisionTestService.save(supervisionTest);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param supervisionTest
* @return
*/
@AutoLog(value = "supervision_test-编辑")
@Operation(summary="supervision_test-编辑")
@RequiresPermissions("supervisiontest:supervision_test:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody SupervisionTest supervisionTest) {
supervisionTestService.updateById(supervisionTest);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "supervision_test-通过id删除")
@Operation(summary="supervision_test-通过id删除")
@RequiresPermissions("supervisiontest:supervision_test:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
supervisionTestService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "supervision_test-批量删除")
@Operation(summary="supervision_test-批量删除")
@RequiresPermissions("supervisiontest:supervision_test:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.supervisionTestService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "supervision_test-通过id查询")
@Operation(summary="supervision_test-通过id查询")
@GetMapping(value = "/queryById")
public Result<SupervisionTest> queryById(@RequestParam(name="id",required=true) String id) {
SupervisionTest supervisionTest = supervisionTestService.getById(id);
if(supervisionTest==null) {
return Result.error("未找到对应数据");
}
return Result.OK(supervisionTest);
}
/**
* 导出excel
*
* @param request
* @param supervisionTest
*/
@RequiresPermissions("supervisiontest:supervision_test:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SupervisionTest supervisionTest) {
return super.exportXls(request, supervisionTest, SupervisionTest.class, "supervision_test");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("supervisiontest:supervision_test:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, SupervisionTest.class);
}
}
@@ -0,0 +1,89 @@
package org.jeecg.modules.demo.supervisiontest.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: supervision_test
* @Author: jeecg-boot
* @Date: 2026-03-20
* @Version: V1.0
*/
@Data
@TableName("supervision_test")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="supervision_test")
public class SupervisionTest implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**附件1*/
@Excel(name = "附件1", width = 15)
@Schema(description = "附件1")
private java.lang.String fileurl1;
/**附件2*/
@Excel(name = "附件2", width = 15)
@Schema(description = "附件2")
private java.lang.String fileurl2;
/**督办标题*/
@Excel(name = "督办标题", width = 15)
@Schema(description = "督办标题")
private java.lang.String supervisionTitle;
/**督办人*/
@Excel(name = "督办人", width = 15, dictTable = "sys_user", dicText = "realname", dicCode = "username")
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username")
@Schema(description = "督办人")
private java.lang.String supervisionPerson;
/**督办部门*/
@Excel(name = "督办部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
@Schema(description = "督办部门")
private java.lang.String supervisionDepart;
/**督办类型*/
@Excel(name = "督办类型", width = 15)
@Schema(description = "督办类型")
private java.lang.String supervitionType;
/**删除状态(0,正常,1已删除)*/
@TableLogic
@Dict(dicCode = "del_flag")
private String delFlag;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.demo.supervisiontest.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.supervisiontest.entity.SupervisionTest;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: supervision_test
* @Author: jeecg-boot
* @Date: 2026-03-20
* @Version: V1.0
*/
public interface SupervisionTestMapper extends BaseMapper<SupervisionTest> {
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.demo.supervisiontest.mapper.SupervisionTestMapper">
</mapper>
@@ -0,0 +1,14 @@
package org.jeecg.modules.demo.supervisiontest.service;
import org.jeecg.modules.demo.supervisiontest.entity.SupervisionTest;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: supervision_test
* @Author: jeecg-boot
* @Date: 2026-03-20
* @Version: V1.0
*/
public interface ISupervisionTestService extends IService<SupervisionTest> {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.demo.supervisiontest.service.impl;
import org.jeecg.modules.demo.supervisiontest.entity.SupervisionTest;
import org.jeecg.modules.demo.supervisiontest.mapper.SupervisionTestMapper;
import org.jeecg.modules.demo.supervisiontest.service.ISupervisionTestService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: supervision_test
* @Author: jeecg-boot
* @Date: 2026-03-20
* @Version: V1.0
*/
@Service
public class SupervisionTestServiceImpl extends ServiceImpl<SupervisionTestMapper, SupervisionTest> implements ISupervisionTestService {
}
@@ -0,0 +1,182 @@
package org.jeecg.modules.demo.tzMetting.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.demo.tzMetting.entity.DjMeetingRecord;
import org.jeecg.modules.demo.tzMetting.service.IDjMeetingRecordService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 统战座谈会意见台账及督办反馈
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Tag(name="统战座谈会意见台账及督办反馈")
@RestController
@RequestMapping("/tzMetting/djMeetingRecord")
@Slf4j
public class DjMeetingRecordController extends JeecgController<DjMeetingRecord, IDjMeetingRecordService> {
@Autowired
private IDjMeetingRecordService djMeetingRecordService;
/**
* 分页列表查询
*
* @param djMeetingRecord
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "统战座谈会意见台账及督办反馈-分页列表查询")
@Operation(summary="统战座谈会意见台账及督办反馈-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<DjMeetingRecord>> queryPageList(DjMeetingRecord djMeetingRecord,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DjMeetingRecord> queryWrapper = QueryGenerator.initQueryWrapper(djMeetingRecord, req.getParameterMap());
Page<DjMeetingRecord> page = new Page<DjMeetingRecord>(pageNo, pageSize);
IPage<DjMeetingRecord> pageList = djMeetingRecordService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param djMeetingRecord
* @return
*/
@AutoLog(value = "统战座谈会意见台账及督办反馈-添加")
@Operation(summary="统战座谈会意见台账及督办反馈-添加")
@RequiresPermissions("tzMetting:dj_meeting_record:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody DjMeetingRecord djMeetingRecord) {
djMeetingRecordService.save(djMeetingRecord);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param djMeetingRecord
* @return
*/
@AutoLog(value = "统战座谈会意见台账及督办反馈-编辑")
@Operation(summary="统战座谈会意见台账及督办反馈-编辑")
@RequiresPermissions("tzMetting:dj_meeting_record:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody DjMeetingRecord djMeetingRecord) {
djMeetingRecordService.updateById(djMeetingRecord);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "统战座谈会意见台账及督办反馈-通过id删除")
@Operation(summary="统战座谈会意见台账及督办反馈-通过id删除")
@RequiresPermissions("tzMetting:dj_meeting_record:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
djMeetingRecordService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "统战座谈会意见台账及督办反馈-批量删除")
@Operation(summary="统战座谈会意见台账及督办反馈-批量删除")
@RequiresPermissions("tzMetting:dj_meeting_record:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.djMeetingRecordService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "统战座谈会意见台账及督办反馈-通过id查询")
@Operation(summary="统战座谈会意见台账及督办反馈-通过id查询")
@GetMapping(value = "/queryById")
public Result<DjMeetingRecord> queryById(@RequestParam(name="id",required=true) String id) {
DjMeetingRecord djMeetingRecord = djMeetingRecordService.getById(id);
if(djMeetingRecord==null) {
return Result.error("未找到对应数据");
}
return Result.OK(djMeetingRecord);
}
/**
* 导出excel
*
* @param request
* @param djMeetingRecord
*/
@RequiresPermissions("tzMetting:dj_meeting_record:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DjMeetingRecord djMeetingRecord) {
return super.exportXls(request, djMeetingRecord, DjMeetingRecord.class, "统战座谈会意见台账及督办反馈");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("tzMetting:dj_meeting_record:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DjMeetingRecord.class);
}
}
@@ -0,0 +1,92 @@
package org.jeecg.modules.demo.tzMetting.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 统战座谈会意见台账及督办反馈
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Data
@TableName("dj_meeting_record")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="统战座谈会意见台账及督办反馈")
public class DjMeetingRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**序号*/
@Excel(name = "序号", width = 15)
@Schema(description = "序号")
private java.lang.Integer sortNo;
/**问题分类*/
@Excel(name = "问题分类", width = 15)
@Schema(description = "问题分类")
private java.lang.Integer problemType;
/**具体措施*/
@Excel(name = "具体措施", width = 15)
@Schema(description = "具体措施")
private java.lang.String specificMeasure;
/**完成时限*/
@Excel(name = "完成时限", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "完成时限")
private java.util.Date completionDeadline;
/**责任部门*/
@Excel(name = "责任部门", width = 15)
@Schema(description = "责任部门")
@Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id")
private java.lang.String responsibleDept;
/**完成情况*/
@Excel(name = "完成情况", width = 15)
@Schema(description = "完成情况")
private java.lang.String completionStatus;
/**是否可发起(0不可发起,1可发起)*/
@Excel(name = "是否可发起", width = 15)
@Dict(dicCode = "is_launchable")
private String isLaunchable;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.demo.tzMetting.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.demo.tzMetting.entity.DjMeetingRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 统战座谈会意见台账及督办反馈
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface DjMeetingRecordMapper extends BaseMapper<DjMeetingRecord> {
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.demo.tzMetting.mapper.DjMeetingRecordMapper">
</mapper>
@@ -0,0 +1,14 @@
package org.jeecg.modules.demo.tzMetting.service;
import org.jeecg.modules.demo.tzMetting.entity.DjMeetingRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 统战座谈会意见台账及督办反馈
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
public interface IDjMeetingRecordService extends IService<DjMeetingRecord> {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.demo.tzMetting.service.impl;
import org.jeecg.modules.demo.tzMetting.entity.DjMeetingRecord;
import org.jeecg.modules.demo.tzMetting.mapper.DjMeetingRecordMapper;
import org.jeecg.modules.demo.tzMetting.service.IDjMeetingRecordService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 统战座谈会意见台账及督办反馈
* @Author: jeecg-boot
* @Date: 2026-03-24
* @Version: V1.0
*/
@Service
public class DjMeetingRecordServiceImpl extends ServiceImpl<DjMeetingRecordMapper, DjMeetingRecord> implements IDjMeetingRecordService {
}
@@ -0,0 +1,270 @@
package org.jeecg.modules.test.controller;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.vo.LoginUser;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.vo.TestMainTablePage;
import org.jeecg.modules.test.service.ITestMainTableService;
import org.jeecg.modules.test.service.ITestSonTableService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Tag(name="test")
@RestController
@RequestMapping("/test/testMainTable")
@Slf4j
public class TestMainTableController {
@Autowired
private ITestMainTableService testMainTableService;
@Autowired
private ITestSonTableService testSonTableService;
/**
* 分页列表查询
*
* @param testMainTable
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "test-分页列表查询")
@Operation(summary="test-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TestMainTable>> queryPageList(TestMainTable testMainTable,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<TestMainTable> queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, req.getParameterMap());
Page<TestMainTable> page = new Page<TestMainTable>(pageNo, pageSize);
IPage<TestMainTable> pageList = testMainTableService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param testMainTablePage
* @return
*/
@AutoLog(value = "test-添加")
@Operation(summary="test-添加")
@RequiresPermissions("test:test_main_table:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TestMainTablePage testMainTablePage) {
TestMainTable testMainTable = new TestMainTable();
BeanUtils.copyProperties(testMainTablePage, testMainTable);
testMainTableService.saveMain(testMainTable, testMainTablePage.getTestSonTableList());
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param testMainTablePage
* @return
*/
@AutoLog(value = "test-编辑")
@Operation(summary="test-编辑")
@RequiresPermissions("test:test_main_table:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TestMainTablePage testMainTablePage) {
TestMainTable testMainTable = new TestMainTable();
BeanUtils.copyProperties(testMainTablePage, testMainTable);
TestMainTable testMainTableEntity = testMainTableService.getById(testMainTable.getId());
if(testMainTableEntity==null) {
return Result.error("未找到对应数据");
}
testMainTableService.updateMain(testMainTable, testMainTablePage.getTestSonTableList());
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "test-通过id删除")
@Operation(summary="test-通过id删除")
@RequiresPermissions("test:test_main_table:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
testMainTableService.delMain(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "test-批量删除")
@Operation(summary="test-批量删除")
@RequiresPermissions("test:test_main_table:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.testMainTableService.delBatchMain(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "test-通过id查询")
@Operation(summary="test-通过id查询")
@GetMapping(value = "/queryById")
public Result<TestMainTable> queryById(@RequestParam(name="id",required=true) String id) {
TestMainTable testMainTable = testMainTableService.getById(id);
if(testMainTable==null) {
return Result.error("未找到对应数据");
}
return Result.OK(testMainTable);
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "test通过主表ID查询")
@Operation(summary="test主表ID查询")
@GetMapping(value = "/queryTestSonTableByMainId")
public Result<List<TestSonTable>> queryTestSonTableListByMainId(@RequestParam(name="id",required=true) String id) {
List<TestSonTable> testSonTableList = testSonTableService.selectByMainId(id);
return Result.OK(testSonTableList);
}
/**
* 导出excel
*
* @param request
* @param testMainTable
*/
@RequiresPermissions("test:test_main_table:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TestMainTable testMainTable) {
// Step.1 组装查询条件查询数据
QueryWrapper<TestMainTable> queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//配置选中数据查询条件
String selections = request.getParameter("selections");
if(oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
//Step.2 获取导出数据
List<TestMainTable> testMainTableList = testMainTableService.list(queryWrapper);
// Step.3 组装pageList
List<TestMainTablePage> pageList = new ArrayList<TestMainTablePage>();
for (TestMainTable main : testMainTableList) {
TestMainTablePage vo = new TestMainTablePage();
BeanUtils.copyProperties(main, vo);
List<TestSonTable> testSonTableList = testSonTableService.selectByMainId(main.getId());
vo.setTestSonTableList(testSonTableList);
pageList.add(vo);
}
// Step.4 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
mv.addObject(NormalExcelConstants.FILE_NAME, "test列表");
mv.addObject(NormalExcelConstants.CLASS, TestMainTablePage.class);
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("test数据", "导出人:"+sysUser.getRealname(), "test"));
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
return mv;
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("test:test_main_table:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取上传文件对象
MultipartFile file = entity.getValue();
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
try {
List<TestMainTablePage> list = ExcelImportUtil.importExcel(file.getInputStream(), TestMainTablePage.class, params);
for (TestMainTablePage page : list) {
TestMainTable po = new TestMainTable();
BeanUtils.copyProperties(page, po);
testMainTableService.saveMain(po, page.getTestSonTableList());
}
return Result.OK("文件导入成功!数据行数:" + list.size());
} catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Result.OK("文件导入失败!");
}
}
@@ -0,0 +1,65 @@
package org.jeecg.modules.test.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Schema(description="test")
@Data
@TableName("test_main_table")
public class TestMainTable implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private String id;
/**创建人*/
@Schema(description = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private Date createTime;
/**更新人*/
@Schema(description = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private String sysOrgCode;
/**a字段*/
@Excel(name = "a字段", width = 15)
@Schema(description = "a字段")
private String fieldA;
/**b字段*/
@Excel(name = "b字段", width = 15)
@Schema(description = "b字段")
private String fieldB;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,62 @@
package org.jeecg.modules.test.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.UnsupportedEncodingException;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Schema(description="test")
@Data
@TableName("test_son_table")
public class TestSonTable implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private String id;
/**创建人*/
@Schema(description = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private Date createTime;
/**更新人*/
@Schema(description = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private String sysOrgCode;
/**字段c*/
@Excel(name = "字段c", width = 15)
@Schema(description = "字段c")
private String fieldC;
/**主表id*/
@Schema(description = "主表id")
private String mainTableId;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.test.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.test.entity.TestMainTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface TestMainTableMapper extends BaseMapper<TestMainTable> {
}
@@ -0,0 +1,31 @@
package org.jeecg.modules.test.mapper;
import java.util.List;
import org.jeecg.modules.test.entity.TestSonTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface TestSonTableMapper extends BaseMapper<TestSonTable> {
/**
* 通过主表id删除子表数据
*
* @param mainId 主表id
* @return boolean
*/
public boolean deleteByMainId(@Param("mainId") String mainId);
/**
* 通过主表id查询子表数据
*
* @param mainId 主表id
* @return List<TestSonTable>
*/
public List<TestSonTable> selectByMainId(@Param("mainId") String mainId);
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.test.mapper.TestMainTableMapper">
</mapper>
@@ -0,0 +1,16 @@
<?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="org.jeecg.modules.test.mapper.TestSonTableMapper">
<delete id="deleteByMainId" parameterType="java.lang.String">
DELETE
FROM test_son_table
WHERE
main_table_id = #{mainId} </delete>
<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.test.entity.TestSonTable">
SELECT *
FROM test_son_table
WHERE
main_table_id = #{mainId} </select>
</mapper>
@@ -0,0 +1,48 @@
package org.jeecg.modules.test.service;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import com.baomidou.mybatisplus.extension.service.IService;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface ITestMainTableService extends IService<TestMainTable> {
/**
* 添加一对多
*
* @param testMainTable
* @param testSonTableList
*/
public void saveMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList) ;
/**
* 修改一对多
*
* @param testMainTable
* @param testSonTableList
*/
public void updateMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList);
/**
* 删除一对多
*
* @param id
*/
public void delMain (String id);
/**
* 批量删除一对多
*
* @param idList
*/
public void delBatchMain (Collection<? extends Serializable> idList);
}
@@ -0,0 +1,22 @@
package org.jeecg.modules.test.service;
import org.jeecg.modules.test.entity.TestSonTable;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface ITestSonTableService extends IService<TestSonTable> {
/**
* 通过主表id查询子表数据
*
* @param mainId 主表id
* @return List<TestSonTable>
*/
public List<TestSonTable> selectByMainId(String mainId);
}
@@ -0,0 +1,83 @@
package org.jeecg.modules.test.service.impl;
import org.jeecg.common.aspect.annotation.CascadeDelete;
import org.jeecg.common.aspect.annotation.SonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.mapper.TestSonTableMapper;
import org.jeecg.modules.test.mapper.TestMainTableMapper;
import org.jeecg.modules.test.service.ITestMainTableService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
import java.util.Collection;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Service
public class TestMainTableServiceImpl extends ServiceImpl<TestMainTableMapper, TestMainTable> implements ITestMainTableService {
@Autowired
private TestMainTableMapper testMainTableMapper;
@Autowired
private TestSonTableMapper testSonTableMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveMain(TestMainTable testMainTable, List<TestSonTable> testSonTableList) {
testMainTableMapper.insert(testMainTable);
if(testSonTableList!=null && testSonTableList.size()>0) {
for(TestSonTable entity:testSonTableList) {
//外键设置
entity.setMainTableId(testMainTable.getId());
testSonTableMapper.insert(entity);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList) {
testMainTableMapper.updateById(testMainTable);
//1.先删除子表数据
testSonTableMapper.deleteByMainId(testMainTable.getId());
//2.子表数据重新插入
if(testSonTableList!=null && testSonTableList.size()>0) {
for(TestSonTable entity:testSonTableList) {
//外键设置
entity.setMainTableId(testMainTable.getId());
testSonTableMapper.insert(entity);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
@CascadeDelete(sons = {
// 配置子表1:Mapper类 + 子表中关联主表的字段名
@SonTable(mapper = TestSonTableMapper.class, joinColumn = "main_table_id"),
})
public void delMain(String id) {
testMainTableMapper.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delBatchMain(Collection<? extends Serializable> idList) {
for(Serializable id:idList) {
testSonTableMapper.deleteByMainId(id.toString());
testMainTableMapper.deleteById(id);
}
}
}
@@ -0,0 +1,27 @@
package org.jeecg.modules.test.service.impl;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.mapper.TestSonTableMapper;
import org.jeecg.modules.test.service.ITestSonTableService;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Service
public class TestSonTableServiceImpl extends ServiceImpl<TestSonTableMapper, TestSonTable> implements ITestSonTableService {
@Autowired
private TestSonTableMapper testSonTableMapper;
@Override
public List<TestSonTable> selectByMainId(String mainId) {
return testSonTableMapper.selectByMainId(mainId);
}
}
@@ -0,0 +1,64 @@
package org.jeecg.modules.test.vo;
import java.util.List;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.entity.TestSonTable;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Data
@Schema(description="test")
public class TestMainTablePage {
/**主键*/
@Schema(description = "主键")
private String id;
/**创建人*/
@Schema(description = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private Date createTime;
/**更新人*/
@Schema(description = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private String sysOrgCode;
/**a字段*/
@Excel(name = "a字段", width = 15)
@Schema(description = "a字段")
private String fieldA;
/**b字段*/
@Excel(name = "b字段", width = 15)
@Schema(description = "b字段")
private String fieldB;
@ExcelCollection(name="test")
@Schema(description = "test")
private List<TestSonTable> testSonTableList;
}
@@ -0,0 +1,270 @@
package org.jeecg.modules.test.controller;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.vo.LoginUser;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.vo.TestMainTablePage;
import org.jeecg.modules.test.service.ITestMainTableService;
import org.jeecg.modules.test.service.ITestSonTableService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Tag(name="test")
@RestController
@RequestMapping("/test/testMainTable")
@Slf4j
public class TestMainTableController {
@Autowired
private ITestMainTableService testMainTableService;
@Autowired
private ITestSonTableService testSonTableService;
/**
* 分页列表查询
*
* @param testMainTable
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "test-分页列表查询")
@Operation(summary="test-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TestMainTable>> queryPageList(TestMainTable testMainTable,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<TestMainTable> queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, req.getParameterMap());
Page<TestMainTable> page = new Page<TestMainTable>(pageNo, pageSize);
IPage<TestMainTable> pageList = testMainTableService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param testMainTablePage
* @return
*/
@AutoLog(value = "test-添加")
@Operation(summary="test-添加")
@RequiresPermissions("test:test_main_table:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TestMainTablePage testMainTablePage) {
TestMainTable testMainTable = new TestMainTable();
BeanUtils.copyProperties(testMainTablePage, testMainTable);
testMainTableService.saveMain(testMainTable, testMainTablePage.getTestSonTableList());
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param testMainTablePage
* @return
*/
@AutoLog(value = "test-编辑")
@Operation(summary="test-编辑")
@RequiresPermissions("test:test_main_table:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TestMainTablePage testMainTablePage) {
TestMainTable testMainTable = new TestMainTable();
BeanUtils.copyProperties(testMainTablePage, testMainTable);
TestMainTable testMainTableEntity = testMainTableService.getById(testMainTable.getId());
if(testMainTableEntity==null) {
return Result.error("未找到对应数据");
}
testMainTableService.updateMain(testMainTable, testMainTablePage.getTestSonTableList());
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "test-通过id删除")
@Operation(summary="test-通过id删除")
@RequiresPermissions("test:test_main_table:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
testMainTableService.delMain(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "test-批量删除")
@Operation(summary="test-批量删除")
@RequiresPermissions("test:test_main_table:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.testMainTableService.delBatchMain(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "test-通过id查询")
@Operation(summary="test-通过id查询")
@GetMapping(value = "/queryById")
public Result<TestMainTable> queryById(@RequestParam(name="id",required=true) String id) {
TestMainTable testMainTable = testMainTableService.getById(id);
if(testMainTable==null) {
return Result.error("未找到对应数据");
}
return Result.OK(testMainTable);
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "test通过主表ID查询")
@Operation(summary="test主表ID查询")
@GetMapping(value = "/queryTestSonTableByMainId")
public Result<List<TestSonTable>> queryTestSonTableListByMainId(@RequestParam(name="id",required=true) String id) {
List<TestSonTable> testSonTableList = testSonTableService.selectByMainId(id);
return Result.OK(testSonTableList);
}
/**
* 导出excel
*
* @param request
* @param testMainTable
*/
@RequiresPermissions("test:test_main_table:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TestMainTable testMainTable) {
// Step.1 组装查询条件查询数据
QueryWrapper<TestMainTable> queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//配置选中数据查询条件
String selections = request.getParameter("selections");
if(oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
queryWrapper.in("id",selectionList);
}
//Step.2 获取导出数据
List<TestMainTable> testMainTableList = testMainTableService.list(queryWrapper);
// Step.3 组装pageList
List<TestMainTablePage> pageList = new ArrayList<TestMainTablePage>();
for (TestMainTable main : testMainTableList) {
TestMainTablePage vo = new TestMainTablePage();
BeanUtils.copyProperties(main, vo);
List<TestSonTable> testSonTableList = testSonTableService.selectByMainId(main.getId());
vo.setTestSonTableList(testSonTableList);
pageList.add(vo);
}
// Step.4 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
mv.addObject(NormalExcelConstants.FILE_NAME, "test列表");
mv.addObject(NormalExcelConstants.CLASS, TestMainTablePage.class);
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("test数据", "导出人:"+sysUser.getRealname(), "test"));
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
return mv;
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("test:test_main_table:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取上传文件对象
MultipartFile file = entity.getValue();
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
try {
List<TestMainTablePage> list = ExcelImportUtil.importExcel(file.getInputStream(), TestMainTablePage.class, params);
for (TestMainTablePage page : list) {
TestMainTable po = new TestMainTable();
BeanUtils.copyProperties(page, po);
testMainTableService.saveMain(po, page.getTestSonTableList());
}
return Result.OK("文件导入成功!数据行数:" + list.size());
} catch (Exception e) {
log.error(e.getMessage(),e);
return Result.error("文件导入失败:"+e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Result.OK("文件导入失败!");
}
}
@@ -0,0 +1,65 @@
package org.jeecg.modules.test.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Schema(description="test")
@Data
@TableName("test_main_table")
public class TestMainTable implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**a字段*/
@Excel(name = "a字段", width = 15)
@Schema(description = "a字段")
private java.lang.String fieldA;
/**b字段*/
@Excel(name = "b字段", width = 15)
@Schema(description = "b字段")
private java.lang.String fieldB;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,62 @@
package org.jeecg.modules.test.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.UnsupportedEncodingException;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Schema(description="test")
@Data
@TableName("test_son_table")
public class TestSonTable implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**字段c*/
@Excel(name = "字段c", width = 15)
@Schema(description = "字段c")
private java.lang.String fieldC;
/**主表id*/
@Schema(description = "主表id")
private java.lang.String mainTableId;
@TableLogic(value = "0", delval = "1")
private int delFlag = 0;
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.test.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.test.entity.TestMainTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface TestMainTableMapper extends BaseMapper<TestMainTable> {
}
@@ -0,0 +1,31 @@
package org.jeecg.modules.test.mapper;
import java.util.List;
import org.jeecg.modules.test.entity.TestSonTable;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface TestSonTableMapper extends BaseMapper<TestSonTable> {
/**
* 通过主表id删除子表数据
*
* @param mainId 主表id
* @return boolean
*/
public boolean deleteByMainId(@Param("mainId") String mainId);
/**
* 通过主表id查询子表数据
*
* @param mainId 主表id
* @return List<TestSonTable>
*/
public List<TestSonTable> selectByMainId(@Param("mainId") String mainId);
}
@@ -0,0 +1,5 @@
<?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="org.jeecg.modules.test.mapper.TestMainTableMapper">
</mapper>
@@ -0,0 +1,16 @@
<?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="org.jeecg.modules.test.mapper.TestSonTableMapper">
<delete id="deleteByMainId" parameterType="java.lang.String">
DELETE
FROM test_son_table
WHERE
main_table_id = #{mainId} </delete>
<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.test.entity.TestSonTable">
SELECT *
FROM test_son_table
WHERE
main_table_id = #{mainId} </select>
</mapper>
@@ -0,0 +1,48 @@
package org.jeecg.modules.test.service;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import com.baomidou.mybatisplus.extension.service.IService;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface ITestMainTableService extends IService<TestMainTable> {
/**
* 添加一对多
*
* @param testMainTable
* @param testSonTableList
*/
public void saveMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList) ;
/**
* 修改一对多
*
* @param testMainTable
* @param testSonTableList
*/
public void updateMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList);
/**
* 删除一对多
*
* @param id
*/
public void delMain (String id);
/**
* 批量删除一对多
*
* @param idList
*/
public void delBatchMain (Collection<? extends Serializable> idList);
}
@@ -0,0 +1,22 @@
package org.jeecg.modules.test.service;
import org.jeecg.modules.test.entity.TestSonTable;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
public interface ITestSonTableService extends IService<TestSonTable> {
/**
* 通过主表id查询子表数据
*
* @param mainId 主表id
* @return List<TestSonTable>
*/
public List<TestSonTable> selectByMainId(String mainId);
}
@@ -0,0 +1,82 @@
package org.jeecg.modules.test.service.impl;
import org.jeecg.common.aspect.annotation.CascadeDelete;
import org.jeecg.common.aspect.annotation.SonTable;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.mapper.TestSonTableMapper;
import org.jeecg.modules.test.mapper.TestMainTableMapper;
import org.jeecg.modules.test.service.ITestMainTableService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
import java.util.Collection;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Service
public class TestMainTableServiceImpl extends ServiceImpl<TestMainTableMapper, TestMainTable> implements ITestMainTableService {
@Autowired
private TestMainTableMapper testMainTableMapper;
@Autowired
private TestSonTableMapper testSonTableMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void saveMain(TestMainTable testMainTable, List<TestSonTable> testSonTableList) {
testMainTableMapper.insert(testMainTable);
if(testSonTableList!=null && testSonTableList.size()>0) {
for(TestSonTable entity:testSonTableList) {
//外键设置
entity.setMainTableId(testMainTable.getId());
testSonTableMapper.insert(entity);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMain(TestMainTable testMainTable,List<TestSonTable> testSonTableList) {
testMainTableMapper.updateById(testMainTable);
//1.先删除子表数据
testSonTableMapper.deleteByMainId(testMainTable.getId());
//2.子表数据重新插入
if(testSonTableList!=null && testSonTableList.size()>0) {
for(TestSonTable entity:testSonTableList) {
//外键设置
entity.setMainTableId(testMainTable.getId());
testSonTableMapper.insert(entity);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
@CascadeDelete(sons = {
// 配置子表1:Mapper类 + 子表中关联主表的字段名
@SonTable(mapper = TestSonTableMapper.class, joinColumn = "main_table_id"),
})
public void delMain(String id) {
testMainTableMapper.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delBatchMain(Collection<? extends Serializable> idList) {
for(Serializable id:idList) {
testSonTableMapper.deleteByMainId(id.toString());
testMainTableMapper.deleteById(id);
}
}
}
@@ -0,0 +1,27 @@
package org.jeecg.modules.test.service.impl;
import org.jeecg.modules.test.entity.TestSonTable;
import org.jeecg.modules.test.mapper.TestSonTableMapper;
import org.jeecg.modules.test.service.ITestSonTableService;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Service
public class TestSonTableServiceImpl extends ServiceImpl<TestSonTableMapper, TestSonTable> implements ITestSonTableService {
@Autowired
private TestSonTableMapper testSonTableMapper;
@Override
public List<TestSonTable> selectByMainId(String mainId) {
return testSonTableMapper.selectByMainId(mainId);
}
}
@@ -0,0 +1,64 @@
package org.jeecg.modules.test.vo;
import java.util.List;
import org.jeecg.modules.test.entity.TestMainTable;
import org.jeecg.modules.test.entity.TestSonTable;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2026-04-03
* @Version: V1.0
*/
@Data
@Schema(description="test")
public class TestMainTablePage {
/**主键*/
@Schema(description = "主键")
private java.lang.String id;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建日期")
private java.util.Date createTime;
/**更新人*/
@Schema(description = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@Schema(description = "所属部门")
private java.lang.String sysOrgCode;
/**a字段*/
@Excel(name = "a字段", width = 15)
@Schema(description = "a字段")
private java.lang.String fieldA;
/**b字段*/
@Excel(name = "b字段", width = 15)
@Schema(description = "b字段")
private java.lang.String fieldB;
@ExcelCollection(name="test")
@Schema(description = "test")
private List<TestSonTable> testSonTableList;
}
@@ -0,0 +1,71 @@
import {defHttp} from '/@/utils/http/axios';
import { useMessage } from "/@/hooks/web/useMessage";
const { createConfirm } = useMessage();
enum Api {
list = '/test/testMainTable/list',
save='/test/testMainTable/add',
edit='/test/testMainTable/edit',
deleteOne = '/test/testMainTable/delete',
deleteBatch = '/test/testMainTable/deleteBatch',
importExcel = '/test/testMainTable/importExcel',
exportXls = '/test/testMainTable/exportXls',
testSonTableList = '/test/testMainTable/queryTestSonTableByMainId',
}
/**
* 导出api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* 导入api
*/
export const getImportUrl = Api.importExcel;
/**
* 查询子表数据
* @param params
*/
export const testSonTableList = Api.testSonTableList;
/**
* 列表接口
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
* 删除单个
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
* 批量删除
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
createConfirm({
iconType: 'warning',
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
* 保存或者更新
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}
@@ -0,0 +1,81 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
import {JVxeTypes,JVxeColumn} from '/@/components/jeecg/JVxeTable/types'
import { getWeekMonthQuarterYear } from '/@/utils';
//列表数据
export const columns: BasicColumn[] = [
{
title: 'a字段',
align:"center",
dataIndex: 'fieldA'
},
{
title: 'b字段',
align:"center",
dataIndex: 'fieldB'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: 'a字段',
field: 'fieldA',
component: 'Input',
},
{
label: 'b字段',
field: 'fieldB',
component: 'Input',
},
// TODO 主键隐藏字段,目前写死为ID
{
label: '',
field: 'id',
component: 'Input',
show: false
},
];
//子表单数据
export const testSonTableFormSchema: FormSchema[] = [
{
label: '字段c',
field: 'fieldC',
component: 'Input',
},
{
label: '',
field: 'id',
component: 'Input',
show: false
},
];
//子表表格配置
// 高级查询数据
export const superQuerySchema = {
fieldA: {title: 'a字段',order: 0,view: 'text', type: 'string',},
fieldB: {title: 'b字段',order: 1,view: 'text', type: 'string',},
//子表高级查询
testSonTable: {
title: 'test',
view: 'table',
fields: {
fieldC: {title: '字段c',order: 0,view: 'text', type: 'string',},
}
},
};
/**
* 流程表单调用这个方法获取formSchema
* @param param
*/
export function getBpmFormSchema(_formData): FormSchema[]{
// 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema
return formSchema;
}
@@ -0,0 +1,207 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" v-auth="'test:test_main_table:add'" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" v-auth="'test:test_main_table:exportXls'" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" v-auth="'test:test_main_table:importExcel'" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button v-auth="'test:test_main_table:deleteBatch'">批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
<!-- 高级查询 -->
<super-query :config="superQueryConfig" @search="handleSuperQuery" />
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template v-slot:bodyCell="{ column, record, index, text }">
</template>
</BasicTable>
<!-- 表单区域 -->
<TestMainTableModal @register="registerModal" @success="handleSuccess"></TestMainTableModal>
</div>
</template>
<script lang="ts" name="test-testMainTable" setup>
import {ref, reactive, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import { useListPage } from '/@/hooks/system/useListPage'
import {useModal} from '/@/components/Modal';
import TestMainTableModal from './components/TestMainTableModal.vue'
import {columns, searchFormSchema, superQuerySchema} from './TestMainTable.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './TestMainTable.api';
import {downloadFile} from '/@/utils/common/renderUtils';
import { useUserStore } from '/@/store/modules/user';
import { useMessage } from '/@/hooks/web/useMessage';
import { getDateByPicker } from '/@/utils';
//日期个性化选择
const fieldPickers = reactive({
});
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
const userStore = useUserStore();
const { createMessage } = useMessage();
//注册model
const [registerModal, {openModal}] = useModal();
//注册table数据
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: 'test',
api: list,
columns,
canResize:true,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToNumber: [
],
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
fixed:'right'
},
beforeFetch: (params) => {
if (params && fieldPickers) {
for (let key in fieldPickers) {
if (params[key]) {
params[key] = getDateByPicker(params[key], fieldPickers[key]);
}
}
}
return Object.assign(params, queryParam);
},
},
exportConfig: {
name:"test",
url: getExportUrl,
params: queryParam,
},
importConfig: {
url: getImportUrl,
success: handleSuccess
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
// 高级查询配置
const superQueryConfig = reactive(superQuerySchema);
/**
* 高级查询事件
*/
function handleSuperQuery(params) {
Object.keys(params).map((k) => {
queryParam[k] = params[k];
});
reload();
}
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: selectedRowKeys.value},handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
auth: 'test:test_main_table:edit'
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
placement: 'topLeft'
},
auth: 'test:test_main_table:delete'
}
]
}
</script>
<style lang="less" scoped>
:deep(.ant-picker),:deep(.ant-input-number){
width: 100%;
}
</style>
@@ -0,0 +1,115 @@
<template>
<div>
<BasicForm @register="registerForm" ref="formRef"/>
<!-- 子表单区域 -->
<a-tabs v-model:activeKey="activeKey" animated @change="handleChangeTabs">
<a-tab-pane tab="test" key="testSonTable" :forceRender="true">
<TestSonTableForm ref="testSonTableForm" :disabled="formDisabled"></TestSonTableForm>
</a-tab-pane>
</a-tabs>
<div style="width: 100%;text-align: center" v-if="!formDisabled">
<a-button @click="handleSubmit" pre-icon="ant-design:check" type="primary"> </a-button>
</div>
</div>
</template>
<script lang="ts">
import {BasicForm, useForm} from '/@/components/Form/index';
import { computed, defineComponent, reactive, ref, unref } from 'vue';
import {defHttp} from '/@/utils/http/axios';
import { propTypes } from '/@/utils/propTypes';
import { useJvxeMethod } from '/@/hooks/system/useJvxeMethods';
import { VALIDATE_FAILED } from '/@/utils/common/vxeUtils';
import TestSonTableForm from './TestSonTableForm.vue'
import {getBpmFormSchema} from '../TestMainTable.data';
import {saveOrUpdate,testSonTableList} from '../TestMainTable.api';
export default defineComponent({
name: "TestMainTableForm",
components:{
BasicForm,
TestSonTableForm,
},
props:{
formData: propTypes.object.def({}),
formBpm: propTypes.bool.def(true),
},
setup(props){
const [registerForm, { setFieldsValue, setProps }] = useForm({
labelWidth: 150,
schemas: getBpmFormSchema(props.formData),
showActionButtonGroup: false,
baseColProps: {span: 24}
});
const formDisabled = computed(()=>{
if(props.formData.disabled === false){
return false;
}
return true;
});
const refKeys = ref(['testSonTable', ]);
const activeKey = ref('testSonTable');
const testSonTableForm = ref();
const tableRefs = {};
const [handleChangeTabs,handleSubmit,requestSubTableData,formRef] = useJvxeMethod(requestAddOrEdit,classifyIntoFormData,tableRefs,activeKey,refKeys,validateSubForm);
function classifyIntoFormData(allValues) {
let main = Object.assign({}, allValues.formValue)
return {
...main, // 展开
testSonTableList: testSonTableForm.value.getFormData(),
}
}
//校验所有一对一子表表单
function validateSubForm(allValues){
return new Promise((resolve, _reject)=>{
Promise.all([
testSonTableForm.value.validateForm(0),
]).then(() => {
resolve(allValues)
}).catch(e => {
if (e.error === VALIDATE_FAILED) {
// 如果有未通过表单验证的子表,就自动跳转到它所在的tab
activeKey.value = e.index == null ? unref(activeKey) : refKeys.value[e.index]
} else {
console.error(e)
}
})
})
}
//表单提交事件
async function requestAddOrEdit(values) {
await saveOrUpdate(values, true);
}
const queryByIdUrl = '/test/testMainTable/queryById';
async function initFormData(){
let params = {id: props.formData.dataId};
const data = await defHttp.get({url: queryByIdUrl, params});
//设置表单的值
await setFieldsValue({...data});
testSonTableForm.value.initFormData(testSonTableList, data.id);
//默认是禁用
await setProps({disabled: formDisabled.value})
}
initFormData();
return {
registerForm,
formDisabled,
formRef,
handleSubmit,
activeKey,
handleChangeTabs,
testSonTableForm,
}
}
});
</script>
@@ -0,0 +1,144 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
<BasicForm @register="registerForm" ref="formRef" name="TestMainTableForm"/>
<!-- 子表单区域 -->
<a-tabs v-model:activeKey="activeKey" animated @change="handleChangeTabs">
<a-tab-pane tab="test" key="testSonTable" :forceRender="true">
<TestSonTableForm ref="testSonTableForm" :disabled="formDisabled"></TestSonTableForm>
</a-tab-pane>
</a-tabs>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref,reactive} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import { JVxeTable } from '/@/components/jeecg/JVxeTable'
import { useJvxeMethod } from '/@/hooks/system/useJvxeMethods.ts'
import TestSonTableForm from './TestSonTableForm.vue'
import {formSchema} from '../TestMainTable.data';
import {saveOrUpdate,testSonTableList} from '../TestMainTable.api';
import { VALIDATE_FAILED } from '/@/utils/common/vxeUtils'
import { useMessage } from '/@/hooks/web/useMessage';
import { getDateByPicker } from '/@/utils';
//日期个性化选择
const fieldPickers = reactive({
});
const { createMessage } = useMessage();
// Emits声明
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
const formDisabled = ref(false);
const refKeys = ref(['testSonTable', ]);
const activeKey = ref('testSonTable');
const testSonTableForm = ref();
const tableRefs = {};
//表单配置
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
baseColProps: {span: 24}
});
//表单赋值
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//重置表单
await reset();
setModalProps({confirmLoading: false,showCancelBtn:data?.showFooter,showOkBtn:data?.showFooter});
isUpdate.value = !!data?.isUpdate;
formDisabled.value = !data?.showFooter;
if (unref(isUpdate)) {
//表单赋值
await setFieldsValue({
...data.record,
});
testSonTableForm.value.initFormData(testSonTableList,data?.record?.id)
}
// 隐藏底部时禁用整个表单
setProps({ disabled: !data?.showFooter })
});
//方法配置
const [handleChangeTabs,handleSubmit,requestSubTableData,formRef] = useJvxeMethod(requestAddOrEdit,classifyIntoFormData,tableRefs,activeKey,refKeys,validateSubForm);
//设置标题
const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(formDisabled) ? '编辑' : '详情'));
async function reset(){
await resetFields();
activeKey.value = 'testSonTable';
testSonTableForm.value.resetFields();
}
function classifyIntoFormData(allValues) {
let main = Object.assign({}, allValues.formValue)
return {
...main, // 展开
testSonTableList: testSonTableForm.value.getFormData(),
}
}
//校验所有一对一子表表单
function validateSubForm(allValues){
return new Promise((resolve,reject)=>{
Promise.all([
testSonTableForm.value.validateForm(0),
]).then(() => {
resolve(allValues)
}).catch(e => {
if (e.error === VALIDATE_FAILED) {
// 如果有未通过表单验证的子表,就自动跳转到它所在的tab
activeKey.value = e.index == null ? unref(activeKey) : refKeys.value[e.index]
if (e.errorFields) {
const firstField = e.errorFields[0];
if (firstField) {
e.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
} else {
console.error(e)
}
})
})
}
//表单提交事件
async function requestAddOrEdit(values) {
try {
// 预处理日期数据
changeDateValue(values);
setModalProps({confirmLoading: true});
//提交表单
await saveOrUpdate(values, isUpdate.value);
//关闭弹窗
closeModal();
//刷新列表
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
/**
* 处理日期值
* @param formData 表单数据
*/
const changeDateValue = (formData) => {
if (formData && fieldPickers) {
for (let key in fieldPickers) {
if (formData[key]) {
formData[key] = getDateByPicker(formData[key], fieldPickers[key]);
}
}
}
};
</script>
<style lang="less" scoped>
/** 时间和数字输入框样式 */
:deep(.ant-input-number) {
width: 100%;
}
:deep(.ant-calendar-picker) {
width: 100%;
}
</style>
@@ -0,0 +1,79 @@
<template>
<BasicForm @register="registerForm" name="TestSonTableForm" class="basic-modal-form"/>
</template>
<script lang="ts">
import {defineComponent} from 'vue';
import {BasicForm, useForm} from '/@/components/Form/index';
import {testSonTableFormSchema} from '../TestMainTable.data';
import {defHttp} from '/@/utils/http/axios';
import { VALIDATE_FAILED } from '/@/utils/common/vxeUtils'
export default defineComponent({
name:"TestSonTableForm",
components: {BasicForm},
emits:['register'],
props:{
disabled: {
type: Boolean,
default: false
}
},
setup(props,{emit}) {
const [registerForm, { setProps, resetFields, setFieldsValue, getFieldsValue, validate, scrollToField }] = useForm({
labelWidth: 150,
schemas: testSonTableFormSchema,
showActionButtonGroup: false,
baseColProps: {span: 24}
});
/**
*初始化加载数据
*/
function initFormData(url,id){
if(id){
defHttp.get({url,params:{id}},{isTransformResponse:false}).then(res=>{
res.success && setFieldsValue({...res.result[0]});
})
}
setProps({disabled: props.disabled})
}
/**
*获取表单数据
*/
function getFormData(){
let formData = getFieldsValue();
Object.keys(formData).map(k=>{
if(formData[k] instanceof Array){
formData[k] = formData[k].join(',')
}
});
return [formData];
}
/**
*表单校验
*/
function validateForm(index){
return new Promise((resolve, reject) => {
// 验证子表表单
validate().then(()=>{
return resolve()
}).catch(({ errorFields }) => {
return reject({ error: VALIDATE_FAILED, index, errorFields: errorFields, scrollToField: scrollToField });
});
})
}
return {
registerForm,
resetFields,
initFormData,
getFormData,
validateForm
}
}
})
</script>
<style lang="less" scoped>
.basic-modal-form {
overflow: auto;
height: 340px;
}
</style>