From 416e1e27f0845715d2f853e7bef70c257477361e Mon Sep 17 00:00:00 2001 From: wxy <1229384355@qq.com> Date: Wed, 27 Jul 2022 14:56:58 +0800 Subject: [PATCH] 未检人员删除、源数据管理查看 --- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MinorController.java | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/FamilyMapper.java | 2 +- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/MinorMapper.java | 2 +- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/FamilyMapper.xml | 10 ++-------- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/MinorMapper.xml | 8 ++++++-- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IMinorService.java | 8 +++++++- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MinorServiceImpl.java | 34 ++++++++++++++++++++++++++-------- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MrSchoolServiceImpl.java | 2 +- juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExcelImportServiceUtil.java | 470 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ juvenile-prosecution-vue/src/utils/request.js | 2 +- juvenile-prosecution-vue/src/views/business/MinorList.vue | 8 ++++++-- juvenile-prosecution-vue/src/views/business/SourceCom.vue | 44 ++++++++++++++++++++++++++++++++++++++++++++ juvenile-prosecution-vue/src/views/business/SourceList.vue | 31 ++++++++++++++++--------------- juvenile-prosecution-vue/src/views/business/SourceStatistics.vue | 5 +---- 14 files changed, 687 insertions(+), 162 deletions(-) create mode 100644 juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExcelImportServiceUtil.java create mode 100644 juvenile-prosecution-vue/src/views/business/SourceCom.vue diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MinorController.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MinorController.java index d18b1fa..c000f47 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MinorController.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MinorController.java @@ -3,6 +3,7 @@ package org.jeecg.modules.system.controller; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URLDecoder; import java.util.*; import java.util.stream.Collectors; @@ -10,28 +11,44 @@ import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.poi.ss.usermodel.Workbook; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.poi.ss.usermodel.*; import org.jeecg.modules.system.entity.Family; import org.jeecg.modules.system.entity.Minor; +import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.IFamilyService; import org.jeecg.modules.system.service.IMinorService; +import org.jeecg.modules.system.service.ISysDepartService; +import org.jeecg.modules.system.util.ExcelImportServiceUtil; import org.jeecg.modules.system.vo.MinorPage; import org.jeecg.modules.system.vo.MinorVo; import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.annotation.ExcelTarget; 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.entity.enmus.ExcelType; +import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; +import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.imports.ExcelImportServer; +import org.jeecgframework.poi.excel.imports.base.ImportBaseService; 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.util.oConvertUtils; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum; +import org.jeecgframework.poi.util.PoiPublicUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.multipart.MultipartFile; @@ -60,6 +77,11 @@ public class MinorController { private IMinorService minorService; @Autowired private IFamilyService familyService; + @Autowired + private ISysDepartService sysDepartService; + + @Value("${jeecg.path.upload}") + private String upLoadPath; /** * 分页列表查询 @@ -80,8 +102,12 @@ public class MinorController { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(minor, req.getParameterMap()); Page page = new Page(pageNo, pageSize); // IPage pageList = minorService.page(page, queryWrapper); - - IPage pageList = minorService.queryPageList(page,minor.getName()); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String sysOrgCode=""; + if(oConvertUtils.isNotEmpty(sysUser) && oConvertUtils.isNotEmpty(sysUser.getOrgCode())){ + sysOrgCode=sysUser.getOrgCode(); + } + IPage pageList = minorService.queryPageList(page,minor.getName(),sysOrgCode); return Result.OK(pageList); } @@ -189,113 +215,52 @@ public class MinorController { */ @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, Minor minor) { - // Step.1 组装查询条件查询数据 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(minor, request.getParameterMap()); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - - //Step.2 获取导出数据 - List queryList = minorService.list(queryWrapper); - // 过滤选中数据 - String selections = request.getParameter("selections"); - List minorList = new ArrayList(); - if(oConvertUtils.isEmpty(selections)) { - minorList = queryList; - }else { - List selectionList = Arrays.asList(selections.split(",")); - minorList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); - } - // Step.3 组装pageList - List pageList = new ArrayList(); - for (Minor main : minorList) { - MinorPage vo = new MinorPage(); - BeanUtils.copyProperties(main, vo); - List familyList = familyService.selectByHouseholdNum(main.getHouseholdNum()); - vo.setFamilyList(familyList); - pageList.add(vo); - } - - // Step.4 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - mv.addObject(NormalExcelConstants.FILE_NAME, "未成年人列表"); - mv.addObject(NormalExcelConstants.CLASS, MinorPage.class); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("未成年人数据", "导出人:"+sysUser.getRealname(), "未成年人")); - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - return mv; + // Step.1 组装查询条件查询数据 + Page page = new Page(1, 1); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String sysOrgCode=""; + if(oConvertUtils.isNotEmpty(sysUser) && oConvertUtils.isNotEmpty(sysUser.getOrgCode())){ + sysOrgCode=sysUser.getOrgCode(); + } + IPage pageList = minorService.queryPageList(page,minor.getName(),sysOrgCode); + //Step.2 获取导出数据 + List queryList = pageList.getRecords(); + // 过滤选中数据 + String selections = request.getParameter("selections"); + List minorList = new ArrayList(); + if (oConvertUtils.isEmpty(selections)) { + minorList = queryList; + } else { + List selectionList = Arrays.asList(selections.split(",")); + minorList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + } + List familyList = new ArrayList<>(); + for (Minor main : minorList) { + familyList = familyService.selectByHouseholdNum(main.getHouseholdNum()); + } + // Step.3 多sheet处理 + List> listMap = new ArrayList>(); + Map minorMap = new HashMap(); + ExportParams minorExportParams=new ExportParams( "未成年人信息", "导出人:" + sysUser.getRealname(), "未成年人信息",upLoadPath); + minorExportParams.setType(ExcelType.XSSF); + minorMap.put(NormalExcelConstants.PARAMS,minorExportParams);//表格Title + minorMap.put(NormalExcelConstants.CLASS,Minor.class);//表格对应实体 + minorMap.put(NormalExcelConstants.DATA_LIST, minorList);//数据集合 + listMap.add(minorMap); + Map familyMap = new HashMap(); + ExportParams familyExportParams=new ExportParams( "家庭成员信息", "导出人:" + sysUser.getRealname(), "家庭成员信息",upLoadPath); + familyExportParams.setType(ExcelType.XSSF); + familyMap.put(NormalExcelConstants.PARAMS,familyExportParams);//表格Title + familyMap.put(NormalExcelConstants.CLASS,Family.class);//表格对应实体 + familyMap.put(NormalExcelConstants.DATA_LIST, familyList);//数据集合 + listMap.add(familyMap); + // Step.4 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + mv.addObject(NormalExcelConstants.FILE_NAME, "未成年人信息"); //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(NormalExcelConstants.MAP_LIST, listMap); + return mv; } -// /** -// * 导出excel -// * -// * @param request -// * @param minor -// */ -// @RequestMapping(value = "/exportXls") -// public void exportXls(HttpServletRequest request, Minor minor, HttpServletResponse response) throws IOException { -// -// OutputStream outputStream = response.getOutputStream(); -// // Step.1 组装查询条件查询数据 -// QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(minor, request.getParameterMap()); -// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); -// queryWrapper.last("limit 1"); -// //Step.2 获取导出数据 -// List queryList = minorService.list(queryWrapper); -// // 过滤选中数据 -// String selections = request.getParameter("selections"); -// List minorList = new ArrayList(); -// if (oConvertUtils.isEmpty(selections)) { -// minorList = queryList; -// } else { -// List selectionList = Arrays.asList(selections.split(",")); -// minorList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); -// } -// // Step.3 组装pageList -// List pageList = new ArrayList(); -// List familyList = new ArrayList<>(); -// for (Minor main : minorList) { -// familyList = familyService.selectByHouseholdNum(main.getHouseholdNum()); -// } -// //多个map,对应了多个sheet -// List> listMap = new ArrayList>(); -// Map minorMap = new HashMap(); -// minorMap.put("title", getExportParams("未成年人表"));//表格title -// minorMap.put("entity", Minor.class);//表格对应实体 -// //数据封装方式二:实体类 -// minorMap.put("data", minorList); -// listMap.add(minorMap); -// Map familyMap = new HashMap(); -// familyMap.put("title", getExportParams("家庭成员表"));//表格title -// familyMap.put("entity", Family.class);//表格对应实体 -// //数据封装方式二:实体类 -// familyMap.put("data", familyList); -// listMap.add(familyMap); -// try { -// Workbook wb = ExcelExportUtil.exportExcel(listMap, ExcelType.XSSF); -// response.reset(); -// response.setHeader("Content-disposition", "attachment; filename=details.xls"); -// response.setContentType("application/msexcel"); -// wb.write(outputStream); -// outputStream.close(); -// } catch (IOException e) { -// log.error("模板下载失败" + e.getMessage()); -// response.setStatus(404); -// e.printStackTrace(); -// } finally { -// if (outputStream != null) { -// try { -// outputStream.close(); -// } catch (IOException e) { -// log.error(e.getMessage(), e); -// } -// } -// } -// } - - //导出参数 - public static ExportParams getExportParams(String name) { - //表格名称,sheet名称,导出版本 - return new ExportParams(name, name, ExcelType.XSSF); - } - /** * 通过excel导入数据 * @@ -306,6 +271,11 @@ public class MinorController { @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String sysOrgCode=""; + if(oConvertUtils.isNotEmpty(sysUser) && oConvertUtils.isNotEmpty(sysUser.getOrgCode())){ + sysOrgCode=sysUser.getOrgCode(); + } Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 @@ -314,25 +284,42 @@ public class MinorController { params.setHeadRows(1); params.setNeedSave(true); try { - List list = ExcelImportUtil.importExcel(file.getInputStream(), MinorPage.class, params); - for (MinorPage page : list) { - Minor po = new Minor(); - BeanUtils.copyProperties(page, po); - minorService.saveMain(po, page.getFamilyList()); + ExcelImportResult excelImportResult = ExcelImportUtil.importExcelVerify(file.getInputStream(), Minor.class, params); + List minorList = new ArrayList<>(); + Workbook workbook = excelImportResult.getWorkbook(); + Map pictures=new HashMap<>(); + //获取Excel文档中的第一个表单 + Sheet sht0 = workbook.getSheetAt(0); + List minorPages=new ExcelImportServiceUtil().importExcel(new ArrayList<>(),sht0, Minor.class, params,pictures); + if(oConvertUtils.isNotEmpty(minorPages) && oConvertUtils.isNotEmpty(sysOrgCode)){ + String finalSysOrgCode = sysOrgCode; + minorPages.stream().forEach(minor -> { + minor.setSysOrgCode(finalSysOrgCode); + }); + } + //获取Excel文档中的第二个表单 + Sheet sht1 = workbook.getSheetAt(1); + List families=new ExcelImportServiceUtil().importExcel(new ArrayList<>(),sht1, Family.class, params,pictures); + if(oConvertUtils.isNotEmpty(families) && oConvertUtils.isNotEmpty(sysOrgCode)){ + String finalSysOrgCode = sysOrgCode; + minorPages.stream().forEach(family -> { + family.setSysOrgCode(finalSysOrgCode); + }); } - return Result.OK("文件导入成功!数据行数:" + list.size()); + minorService.saveMain(minorPages,families); + return Result.OK(); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("文件导入失败:" + e.getMessage()); + return Result.error("文件导入失败:" + e.getMessage()); } finally { try { file.getInputStream().close(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } } - return Result.OK("文件导入失败!"); + return Result.error("文件导入失败!"); } - } + diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/FamilyMapper.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/FamilyMapper.java index c65de5f..3257072 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/FamilyMapper.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/FamilyMapper.java @@ -15,7 +15,7 @@ import java.util.Set; */ public interface FamilyMapper extends BaseMapper { - public boolean deleteByMainId(@Param("mainId") String mainId); + public boolean deleteByHouseholdNum(@Param("householdNum") String householdNum); public List selectByHouseholdNum(@Param("householdNum") String householdNum); diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/MinorMapper.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/MinorMapper.java index e78c2f4..c74295b 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/MinorMapper.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/MinorMapper.java @@ -26,7 +26,7 @@ public interface MinorMapper extends BaseMapper { * @param page * @return */ - IPage queryPageList(Page page,@Param("name") String name); + IPage queryPageList(Page page,@Param("name") String name,@Param("sysOrgCode") String sysOrgCode); } diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/FamilyMapper.xml b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/FamilyMapper.xml index 64aa620..a7266b7 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/FamilyMapper.xml +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/FamilyMapper.xml @@ -2,11 +2,11 @@ - + DELETE FROM mr_family WHERE - minor_id = #{mainId} + household_num = #{householdNum} - select timestampdiff(year, substring(identity, 7, 8), now()) as age,identity,create_time as createTime,sys_org_code as sysOrgCode,household_num as householdNum, + select id,timestampdiff(year, substring(identity, 7, 8), now()) as age,identity,create_time as createTime,sys_org_code as sysOrgCode,household_num as householdNum, number,name,gender,school,school_name as schoolName,start_year as startYear,address,guardian,relation,reason,special_reason as specialReason,remark FROM mr_minor WHERE (timestampdiff(year, substring(identity, 7, 8), now())) < 18 and name like concat('%',#{name},'%') + + and sys_org_code like concat(#{sysOrgCode},'%') + + ORDER BY create_time \ No newline at end of file diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IMinorService.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IMinorService.java index a159dd1..6d89fa9 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IMinorService.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IMinorService.java @@ -45,5 +45,11 @@ public interface IMinorService extends IService { public Integer insertBatch(List list); - IPage queryPageList(Page page,String name); + IPage queryPageList(Page page,String name,String sysOrgCode); + + /** + * 添加多对多 + * + */ + public void saveMain(List minor,List familyList) ; } diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MinorServiceImpl.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MinorServiceImpl.java index 001b320..0ae937a 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MinorServiceImpl.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MinorServiceImpl.java @@ -67,13 +67,11 @@ public class MinorServiceImpl extends ServiceImpl implements falg = false; } //外键设置 - entity.setMinorId(minor.getId()); familyMapper.insert(entity); } if(!falg){ Family family=new Family(); family.setCrime(Family.IS_NOT_CRIME); - family.setMinorId(minor.getId()); family.setName(minor.getName()); family.setHouseholdNum(minor.getHouseholdNum()); family.setIdentity(minor.getIdentity()); @@ -91,7 +89,9 @@ public class MinorServiceImpl extends ServiceImpl implements minorMapper.updateById(minor); //1.先删除子表数据 - familyMapper.deleteByMainId(minor.getId()); + if(oConvertUtils.isNotEmpty(minor) && oConvertUtils.isNotEmpty(minor.getHouseholdNum())){ + familyMapper.deleteByHouseholdNum(minor.getHouseholdNum()); + } //2.子表数据重新插入 if(familyList!=null && familyList.size()>0) { @@ -108,7 +108,10 @@ public class MinorServiceImpl extends ServiceImpl implements @Override @Transactional public void delMain(String id) { - familyMapper.deleteByMainId(id); + Minor minor=minorMapper.selectById(id); + if(oConvertUtils.isNotEmpty(minor) && oConvertUtils.isNotEmpty(minor.getHouseholdNum())){ + familyMapper.deleteByHouseholdNum(minor.getHouseholdNum()); + } minorMapper.deleteById(id); } @@ -116,7 +119,10 @@ public class MinorServiceImpl extends ServiceImpl implements @Transactional public void delBatchMain(Collection idList) { for(Serializable id:idList) { - familyMapper.deleteByMainId(id.toString()); + Minor minor=minorMapper.selectById(id); + if(oConvertUtils.isNotEmpty(minor) && oConvertUtils.isNotEmpty(minor.getHouseholdNum())){ + familyMapper.deleteByHouseholdNum(minor.getHouseholdNum()); + } minorMapper.deleteById(id); } } @@ -135,8 +141,20 @@ public class MinorServiceImpl extends ServiceImpl implements } @Override - public IPage queryPageList(Page page,String name) { - return minorMapper.queryPageList(page,name); + public IPage queryPageList(Page page,String name,String sysOrgCode) { + return minorMapper.queryPageList(page,name,sysOrgCode); + } + + + /** + * 添加多对多 + * + */ + @Override + @Transactional + public void saveMain(List minors, List familyList) { + minorMapper.insertBatch(minors); + familyMapper.insertBatch(familyList); } @@ -166,7 +184,7 @@ public class MinorServiceImpl extends ServiceImpl implements public void updateStudentWithThreads(List list) { // 线程数量 - final Integer threadCount = 5; + final Integer threadCount = 12; //每个线程处理的数据量 final Integer dataPartionLength = (list.size() + threadCount - 1) / threadCount; diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MrSchoolServiceImpl.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MrSchoolServiceImpl.java index 62394e0..37c6f2d 100644 --- a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MrSchoolServiceImpl.java +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/MrSchoolServiceImpl.java @@ -79,7 +79,7 @@ public class MrSchoolServiceImpl extends ServiceImpl i public void updateStudentWithThreads(List list) { // 线程数量 - final Integer threadCount = 5; + final Integer threadCount = 8; //每个线程处理的数据量 final Integer dataPartionLength = (list.size() + threadCount - 1) / threadCount; diff --git a/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExcelImportServiceUtil.java b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExcelImportServiceUtil.java new file mode 100644 index 0000000..d82da6d --- /dev/null +++ b/juvenile-prosecution-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExcelImportServiceUtil.java @@ -0,0 +1,470 @@ +package org.jeecg.modules.system.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.formula.functions.T; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jeecgframework.core.util.ApplicationContextUtil; +import org.jeecgframework.poi.excel.annotation.ExcelTarget; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; +import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; +import org.jeecgframework.poi.excel.imports.CellValueServer; +import org.jeecgframework.poi.excel.imports.base.ImportBaseService; +import org.jeecgframework.poi.excel.imports.base.ImportFileServiceI; +import org.jeecgframework.poi.excel.imports.verifys.VerifyHandlerServer; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum; +import org.jeecgframework.poi.util.ExcelUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Administrator + */ +public class ExcelImportServiceUtil extends ImportBaseService { + private static final Logger LOGGER = LoggerFactory.getLogger(org.jeecgframework.poi.excel.imports.ExcelImportServer.class); + private CellValueServer cellValueServer = new CellValueServer(); + private VerifyHandlerServer verifyHandlerServer = new VerifyHandlerServer(); + private boolean verfiyFail = false; + private CellStyle errorCellStyle; + + public ExcelImportServiceUtil() { + } + + private void addListContinue(Object object, ExcelCollectionParams param, Row row, Map titlemap, String targetId, Map pictures, ImportParams params) throws Exception { + Collection collection = (Collection)PoiPublicUtil.getMethod(param.getName(), object.getClass()).invoke(object); + Object entity = PoiPublicUtil.createObject(param.getType(), targetId); + boolean isUsed = false; + + for(int i = row.getFirstCellNum(); i < row.getLastCellNum(); ++i) { + Cell cell = row.getCell(i); + String titleString = (String)titlemap.get(i); + if (param.getExcelParams().containsKey(titleString)) { + if (((ExcelImportEntity)param.getExcelParams().get(titleString)).getType() == 2) { + String picId = row.getRowNum() + "_" + i; + this.saveImage(object, picId, param.getExcelParams(), titleString, pictures, params); + } else { + this.saveFieldValue(params, entity, cell, param.getExcelParams(), titleString, row); + } + + isUsed = true; + } + } + + if (isUsed) { + collection.add(entity); + } + + } + + private String getKeyValue(Cell cell) { + if (cell == null) { + return null; + } else { + Object obj = null; + switch(cell.getCellTypeEnum()) { + case STRING: + obj = cell.getStringCellValue(); + break; + case BOOLEAN: + obj = cell.getBooleanCellValue(); + break; + case NUMERIC: + obj = cell.getNumericCellValue(); + break; + case FORMULA: + obj = cell.getCellFormula(); + } + + return obj == null ? null : obj.toString().trim(); + } + } + + private String getSaveUrl(ExcelImportEntity excelImportEntity, Object object) throws Exception { + String url = ""; + if (excelImportEntity.getSaveUrl().equals("upload")) { + if (excelImportEntity.getMethods() != null && excelImportEntity.getMethods().size() > 0) { + object = this.getFieldBySomeMethod(excelImportEntity.getMethods(), object); + } + + url = object.getClass().getName().split("\\.")[object.getClass().getName().split("\\.").length - 1]; + return excelImportEntity.getSaveUrl() + "/" + url.substring(0, url.lastIndexOf("Entity")); + } else { + return excelImportEntity.getSaveUrl(); + } + } + + public List importExcel(Collection result, Sheet sheet, Class pojoClass, ImportParams params, Map pictures) throws Exception { + List collection = new ArrayList(); + Map excelParams = new HashMap(); + List excelCollection = new ArrayList(); + String targetId = null; + if (!Map.class.equals(pojoClass)) { + Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); + ExcelTarget etarget = (ExcelTarget)pojoClass.getAnnotation(ExcelTarget.class); + if (etarget != null) { + targetId = etarget.value(); + } + + this.getAllExcelField(targetId, fileds, excelParams, excelCollection, pojoClass, (List)null); + } + + this.ignoreHeaderHandler(excelParams, params); + Iterator rows = sheet.rowIterator(); + Map titlemap = this.getTitleMap(sheet, rows, params, excelCollection); + Set columnIndexSet = titlemap.keySet(); + Integer maxColumnIndex = (Integer)Collections.max(columnIndexSet); + Integer minColumnIndex = (Integer)Collections.min(columnIndexSet); + Row row = null; + + for(int j = 0; j < params.getTitleRows() + params.getHeadRows(); ++j) { + row = (Row)rows.next(); + } + + Object object = null; + + while(rows.hasNext() && (row == null || sheet.getLastRowNum() - row.getRowNum() > params.getLastOfInvalidRow())) { + row = (Row)rows.next(); + Cell keyIndexCell = row.getCell(params.getKeyIndex()); + if (excelCollection.size() > 0 && StringUtils.isEmpty(this.getKeyValue(keyIndexCell)) && object != null && !Map.class.equals(pojoClass)) { + Iterator var31 = excelCollection.iterator(); + + while(var31.hasNext()) { + ExcelCollectionParams param = (ExcelCollectionParams)var31.next(); + this.addListContinue(object, param, row, titlemap, targetId, pictures, params); + } + } else { + object = PoiPublicUtil.createObject(pojoClass, targetId); + + try { + int firstCellNum = row.getFirstCellNum(); + if (firstCellNum > minColumnIndex) { + firstCellNum = minColumnIndex; + } + + int lastCellNum = row.getLastCellNum(); + if (lastCellNum < maxColumnIndex + 1) { + lastCellNum = maxColumnIndex + 1; + } + + int i = firstCellNum; + + for(int le = lastCellNum; i < le; ++i) { + Cell cell = row.getCell(i); + String titleString = (String)titlemap.get(i); + if (excelParams.containsKey(titleString) || Map.class.equals(pojoClass)) { + String picId; + if (excelParams.get(titleString) != null && ((ExcelImportEntity)excelParams.get(titleString)).getType() == 2) { + picId = row.getRowNum() + "_" + i; + this.saveImage(object, picId, excelParams, titleString, pictures, params); + } else if (params.getImageList() != null && params.getImageList().contains(titleString)) { + if (pictures != null) { + picId = row.getRowNum() + "_" + i; + PictureData image = (PictureData)pictures.get(picId); + if (image != null) { + byte[] data = image.getData(); + params.getDataHanlder().setMapValue((Map)object, titleString, data); + } + } + } else { + this.saveFieldValue(params, object, cell, excelParams, titleString, row); + } + } + } + + Iterator var33 = excelCollection.iterator(); + + while(var33.hasNext()) { + ExcelCollectionParams param = (ExcelCollectionParams)var33.next(); + this.addListContinue(object, param, row, titlemap, targetId, pictures, params); + } + + if (this.isNotNullObject(pojoClass, object)) { + collection.add(object); + } + } catch (ExcelImportException var27) { + if (!var27.getType().equals(ExcelImportEnum.VERIFY_ERROR)) { + throw new ExcelImportException(var27.getType(), var27); + } + } + } + } + + return collection; + } + + private boolean isNotNullObject(Class pojoClass, Object object) { + try { + Method method = pojoClass.getMethod("isNullObject"); + if (method != null) { + Object flag = method.invoke(object); + if (flag != null && Boolean.parseBoolean(flag.toString())) { + return false; + } + } + } catch (NoSuchMethodException var5) { + System.out.println("没有该方法 isNullObject"); + } catch (IllegalAccessException var6) { + System.out.println("没有权限访问该方法 isNullObject"); + } catch (InvocationTargetException var7) { + System.out.println("方法调用失败 isNullObject"); + } + + return true; + } + + private void ignoreHeaderHandler(Map excelParams, ImportParams params) { + List ignoreList = new ArrayList(); + Iterator var4 = excelParams.keySet().iterator(); + + while(var4.hasNext()) { + String key = (String)var4.next(); + String temp = ((ExcelImportEntity)excelParams.get(key)).getGroupName(); + if (temp != null && temp.length() > 0) { + ignoreList.add(temp); + } + } + + params.setIgnoreHeaderList(ignoreList); + } + + private Map getTitleMap(Sheet sheet, Iterator rows, ImportParams params, List excelCollection) throws Exception { + Map titlemap = new HashMap(); + Iterator cellTitle = null; + String collectionName = null; + ExcelCollectionParams collectionParams = null; + Row headRow = null; + int headBegin = params.getTitleRows(); + + for(int allRowNum = sheet.getPhysicalNumberOfRows(); headRow == null && headBegin < allRowNum; headRow = sheet.getRow(headBegin++)) { + } + + if (headRow == null) { + throw new Exception("不识别该文件"); + } else { + if (ExcelUtil.isMergedRegion(sheet, headRow.getRowNum(), 0)) { + params.setHeadRows(2); + } else { + params.setHeadRows(1); + } + + cellTitle = headRow.cellIterator(); + + while(cellTitle.hasNext()) { + Cell cell = (Cell)cellTitle.next(); + String value = this.getKeyValue(cell); + if (StringUtils.isNotEmpty(value)) { + titlemap.put(cell.getColumnIndex(), value); + } + } + + for(int j = headBegin; j < headBegin + params.getHeadRows() - 1; ++j) { + headRow = sheet.getRow(j); + cellTitle = headRow.cellIterator(); + + while(cellTitle.hasNext()) { + Cell cell = (Cell)cellTitle.next(); + String value = this.getKeyValue(cell); + if (StringUtils.isNotEmpty(value)) { + int columnIndex = cell.getColumnIndex(); + if (ExcelUtil.isMergedRegion(sheet, cell.getRowIndex() - 1, columnIndex)) { + collectionName = ExcelUtil.getMergedRegionValue(sheet, cell.getRowIndex() - 1, columnIndex); + if (params.isIgnoreHeader(collectionName)) { + titlemap.put(cell.getColumnIndex(), value); + } else { + titlemap.put(cell.getColumnIndex(), collectionName + "_" + value); + } + } else { + titlemap.put(cell.getColumnIndex(), value); + } + } + } + } + + return titlemap; + } + } + + private ExcelCollectionParams getCollectionParams(List excelCollection, String collectionName) { + Iterator var3 = excelCollection.iterator(); + + ExcelCollectionParams excelCollectionParams; + do { + if (!var3.hasNext()) { + return null; + } + + excelCollectionParams = (ExcelCollectionParams)var3.next(); + } while(!collectionName.equals(excelCollectionParams.getExcelName())); + + return excelCollectionParams; + } + + public ExcelImportResult importExcelByIs(InputStream inputstream, Class pojoClass, ImportParams params) throws Exception { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Excel import start ,class is {}", pojoClass); + } + + List result = new ArrayList(); + Workbook book = null; + boolean isXSSFWorkbook = false; + if (!((InputStream)inputstream).markSupported()) { + inputstream = new PushbackInputStream((InputStream)inputstream, 8); + } + + book = WorkbookFactory.create((InputStream)inputstream); + if (book instanceof XSSFWorkbook) { + isXSSFWorkbook = true; + } + + LOGGER.info(" >>> poi3升级到4.0兼容改造工作, isXSSFWorkbook = " + isXSSFWorkbook); + int sheetNum = book.getNumberOfSheets(); + if (sheetNum > 1) { + params.setSheetNum(sheetNum); + } + + this.createErrorCellStyle(book); + + for(int i = 0; i < params.getSheetNum(); ++i) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" start to read excel by is ,startTime is {}", System.currentTimeMillis()); + } + + Map pictures; + if (isXSSFWorkbook) { + pictures = PoiPublicUtil.getSheetPictrues07((XSSFSheet)book.getSheetAt(i), (XSSFWorkbook)book); + } else { + pictures = PoiPublicUtil.getSheetPictrues03((HSSFSheet)book.getSheetAt(i), (HSSFWorkbook)book); + } + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" end to read excel by is ,endTime is {}", (new Date()).getTime()); + } + + result.addAll(this.importExcel(result, book.getSheetAt(i), pojoClass, params, pictures)); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" end to read excel list by pos ,endTime is {}", (new Date()).getTime()); + } + } + + if (params.isNeedSave()) { + this.saveThisExcel(params, pojoClass, isXSSFWorkbook, book); + } + + return new ExcelImportResult(result, this.verfiyFail, book); + } + + public static byte[] getBytes(InputStream is) throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + byte[] data = new byte[100000]; + + int len; + while((len = is.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, len); + } + + buffer.flush(); + return buffer.toByteArray(); + } + + private void saveFieldValue(ImportParams params, Object object, Cell cell, Map excelParams, String titleString, Row row) throws Exception { + Object value = this.cellValueServer.getValue(params.getDataHanlder(), object, cell, excelParams, titleString); + if (object instanceof Map) { + if (params.getDataHanlder() != null) { + params.getDataHanlder().setMapValue((Map)object, titleString, value); + } else { + ((Map)object).put(titleString, value); + } + } else { + ExcelVerifyHanlderResult verifyResult = this.verifyHandlerServer.verifyData(object, value, titleString, ((ExcelImportEntity)excelParams.get(titleString)).getVerify(), params.getVerifyHanlder()); + if (!verifyResult.isSuccess()) { + Cell errorCell = row.createCell(row.getLastCellNum()); + errorCell.setCellValue(verifyResult.getMsg()); + errorCell.setCellStyle(this.errorCellStyle); + this.verfiyFail = true; + throw new ExcelImportException(ExcelImportEnum.VERIFY_ERROR); + } + + this.setValues((ExcelImportEntity)excelParams.get(titleString), object, value); + } + + } + + private void saveImage(Object object, String picId, Map excelParams, String titleString, Map pictures, ImportParams params) throws Exception { + if (pictures != null && pictures.get(picId) != null) { + PictureData image = (PictureData)pictures.get(picId); + byte[] data = image.getData(); + String fileName = "pic" + Math.round(Math.random() * 1.0E11D); + fileName = fileName + "." + PoiPublicUtil.getFileExtendName(data); + int saveType = ((ExcelImportEntity)excelParams.get(titleString)).getSaveType(); + if (saveType == 1) { + String path = PoiPublicUtil.getWebRootPath(this.getSaveUrl((ExcelImportEntity)excelParams.get(titleString), object)); + File savefile = new File(path); + if (!savefile.exists()) { + savefile.mkdirs(); + } + + savefile = new File(path + "/" + fileName); + FileOutputStream fos = new FileOutputStream(savefile); + fos.write(data); + fos.close(); + this.setValues((ExcelImportEntity)excelParams.get(titleString), object, this.getSaveUrl((ExcelImportEntity)excelParams.get(titleString), object) + "/" + fileName); + } else if (saveType == 2) { + this.setValues((ExcelImportEntity)excelParams.get(titleString), object, data); + } else { + ImportFileServiceI importFileService = null; + + try { + importFileService = (ImportFileServiceI)ApplicationContextUtil.getContext().getBean(ImportFileServiceI.class); + } catch (Exception var14) { + System.err.println(var14.getMessage()); + } + + if (importFileService != null) { + String dbPath = importFileService.doUpload(data); + this.setValues((ExcelImportEntity)excelParams.get(titleString), object, dbPath); + } + } + + } + } + + private void createErrorCellStyle(Workbook workbook) { + this.errorCellStyle = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setColor((short)10); + this.errorCellStyle.setFont(font); + } +} diff --git a/juvenile-prosecution-vue/src/utils/request.js b/juvenile-prosecution-vue/src/utils/request.js index 53cc107..9ece1c5 100644 --- a/juvenile-prosecution-vue/src/utils/request.js +++ b/juvenile-prosecution-vue/src/utils/request.js @@ -17,7 +17,7 @@ let apiBaseUrl = window._CONFIG['domianURL'] || "/jeecg-boot"; const service = axios.create({ //baseURL: '/jeecg-boot', baseURL: apiBaseUrl, // api base_url - timeout: 9000 // 请求超时时间 + timeout: 250000 // 请求超时时间 }) const err = (error) => { diff --git a/juvenile-prosecution-vue/src/views/business/MinorList.vue b/juvenile-prosecution-vue/src/views/business/MinorList.vue index ba65411..f4f7172 100644 --- a/juvenile-prosecution-vue/src/views/business/MinorList.vue +++ b/juvenile-prosecution-vue/src/views/business/MinorList.vue @@ -6,7 +6,7 @@ - + @@ -66,6 +66,10 @@ 编辑 查看 + + + 删除 + @@ -337,7 +341,7 @@ export default { } let param = { 'fileName': name, 'type': type } console.log('导出参数', param) - downFile(this.url.importExcelUrl, param).then((data) => { + downFile(this.url.exportXlsUrl, param).then((data) => { console.log(data) if (!data) { this.$message.warning('文件下载失败') diff --git a/juvenile-prosecution-vue/src/views/business/SourceCom.vue b/juvenile-prosecution-vue/src/views/business/SourceCom.vue new file mode 100644 index 0000000..8554da4 --- /dev/null +++ b/juvenile-prosecution-vue/src/views/business/SourceCom.vue @@ -0,0 +1,44 @@ + + + + \ No newline at end of file diff --git a/juvenile-prosecution-vue/src/views/business/SourceList.vue b/juvenile-prosecution-vue/src/views/business/SourceList.vue index d3627cd..1dfe504 100644 --- a/juvenile-prosecution-vue/src/views/business/SourceList.vue +++ b/juvenile-prosecution-vue/src/views/business/SourceList.vue @@ -1,12 +1,10 @@