From bd5c9503ecdac1a57ac92ccdac1e44ae208ccc07 Mon Sep 17 00:00:00 2001 From: bai <1643359946@qq.com> Date: Fri, 28 Jul 2023 23:45:53 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B47=E6=9C=8828=E6=97=A5=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=BA=AB=E4=BB=BD=E9=85=8D=E7=BD=AE=E5=92=8C=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KcExportConfigTpkwcqkjzglxController.java | 17 +- .../modules/kc/config/export/Export.java | 241 ++++++++++++------ .../IKcExportConfigTpkwcqkjzglxService.java | 1 + ...KcExportConfigTpkwcqkjzglxServiceImpl.java | 45 ++++ .../resources/officetemplates/exp1/tpkqk.docx | Bin 14722 -> 14720 bytes 5 files changed, 225 insertions(+), 79 deletions(-) diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/controller/KcExportConfigTpkwcqkjzglxController.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/controller/KcExportConfigTpkwcqkjzglxController.java index e32ce7a4..d1c1bca0 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/controller/KcExportConfigTpkwcqkjzglxController.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/controller/KcExportConfigTpkwcqkjzglxController.java @@ -81,6 +81,21 @@ public class KcExportConfigTpkwcqkjzglxController extends JeecgController editAll(@RequestBody KcExportConfigTpkwcqkjzglx kcExportConfigTpkwcqkjzglx) { + kcExportConfigTpkwcqkjzglxService.editAll(kcExportConfigTpkwcqkjzglx); + return Result.OK("编辑成功!"); + } + /** * 编辑 * @@ -95,7 +110,7 @@ public class KcExportConfigTpkwcqkjzglxController extends JeecgController> groupConfigMap = Maps.newLinkedHashMap(); + + private GroupConfig genConfig(String key, String name, String dictKey){ + GroupConfig config = new GroupConfig(); + config.setKey(key); + config.setName(name); + config.setDictKey(dictKey); + return config; + } + + private void putGroupConfigMap(String key, GroupConfig config){ + if(groupConfigMap.containsKey(key)){ + List list = groupConfigMap.get(key); + list.add(config); + }else{ + List list = Lists.newArrayList(); + list.add(config); + groupConfigMap.put(key,list); + } + } + + private void initGroupConfigMap(){ + groupConfigMap = Maps.newLinkedHashMap(); + GroupConfig config; + config = genConfig("oneList","学院(部)教务委员会委员","340");putGroupConfigMap(config.getKey(),config); + config = genConfig("twoList","行政负责人、教学副院(部)长及系(专业)负责人","220");putGroupConfigMap(config.getKey(),config); + config = genConfig("threeListSize","其他党政领导及辅导员","110");putGroupConfigMap(config.getKey(),config); + config = genConfig("threeListSize","其他党政领导及辅导员","210");putGroupConfigMap(config.getKey(),config); + config = genConfig("threeListSize","其他党政领导及辅导员","270");putGroupConfigMap(config.getKey(),config); + config = genConfig("threeListSize","其他党政领导及辅导员","280");putGroupConfigMap(config.getKey(),config); + config = genConfig("fourListSize","其他专任教师","1");putGroupConfigMap(config.getKey(),config); + } // /** // * // * 功能说明 : 将导出的文档片段按照list返回 @@ -86,16 +126,15 @@ public class Export extends BaseExport { public WordOperator export(KcExportConfigTpkwcqkjzglx kcExportConfigTpkwcqkjzglx, String xqxnParam) throws Exception{ String templateName = "exp1\\tpkqk.docx"; - - Map>> mainMapList = Maps.newHashMap(); + initGroupConfigMap(); WordOperator wo = ExportWord.getWordOperator(templateName); //********************************@A.单个内容替换***************************************************/ //********************************取数据***********************************************************/ Map result = Maps.newHashMap(); //取配置表中的用户 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper("a", kcExportConfigTpkwcqkjzglx,null); - queryWrapper.eq(StringUtils.isNotBlank(kcExportConfigTpkwcqkjzglx.getDwmc()),"b.dwmc",kcExportConfigTpkwcqkjzglx.getDwmc()); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(kcExportConfigTpkwcqkjzglx,null); +// queryWrapper.eq(StringUtils.isNotBlank(kcExportConfigTpkwcqkjzglx.getDwmc()),"b.dwmc",kcExportConfigTpkwcqkjzglx.getDwmc()); List KcExportConfigTpkwcqkjzglxList = kcExportConfigTpkwcqkjzglxService.list(queryWrapper); Map> ghMap = KcExportConfigTpkwcqkjzglxList.stream().collect(Collectors.groupingBy(KcExportConfigTpkwcqkjzglx::getGh)); Map> typeMap = KcExportConfigTpkwcqkjzglxList.stream().collect(Collectors.groupingBy(KcExportConfigTpkwcqkjzglx::getTklx)); @@ -127,97 +166,143 @@ public class Export extends BaseExport { // uqw.in("gh",typeMap.keySet()); // List xxhbuserList = xxhbuserService.list(uqw); - List oneList = typeMap.get("1"); - if(oneList == null || oneList.isEmpty()) oneList = Lists.newArrayList(); + Map> allListMap = Maps.newLinkedHashMap(); - List twoList = Lists.newArrayList(); - List twoList1 = typeMap.get("2"); - List twoList2 = typeMap.get("3"); - List twoList3 = typeMap.get("4"); + groupConfigMap.forEach((k,v) -> { + v.forEach(x -> { + if(typeMap.containsKey(x.getDictKey())){ +// allListMap.put(k,typeMap.get(x.getDictKey())); + if(allListMap.containsKey(k)){ + List list = allListMap.get(k); + list.addAll(typeMap.get(x.getDictKey())); + }else{ + List list = Lists.newArrayList(); + list.addAll(typeMap.get(x.getDictKey())); + allListMap.put(k,list); + } + }else{ + allListMap.put(k,Lists.newArrayList()); + } + }); + }); - if(twoList1 != null && !twoList1.isEmpty()) { - twoList.addAll(twoList1); - } - if(twoList2 != null && !twoList2.isEmpty()) { - twoList.addAll(twoList2); - } - if(twoList3 != null && !twoList3.isEmpty()) { - twoList.addAll(twoList3); - } - List threeList = Lists.newArrayList(); - List threeList1 = typeMap.get("5"); - List threeList2 = typeMap.get("6"); +// List oneList = typeMap.get("1"); +// if(oneList == null || oneList.isEmpty()) oneList = Lists.newArrayList(); - if(threeList1 != null && !threeList1.isEmpty()) { - threeList.addAll(threeList1); - } - if(threeList2 != null && !threeList2.isEmpty()) { - threeList.addAll(threeList2); - } +// List twoList = Lists.newArrayList(); +// List twoList1 = typeMap.get("2"); +// List twoList2 = typeMap.get("3"); +// List twoList3 = typeMap.get("4"); +// +// if(twoList1 != null && !twoList1.isEmpty()) { +// twoList.addAll(twoList1); +// } +// if(twoList2 != null && !twoList2.isEmpty()) { +// twoList.addAll(twoList2); +// } +// if(twoList3 != null && !twoList3.isEmpty()) { +// twoList.addAll(twoList3); +// } +// +// List threeList = Lists.newArrayList(); +// List threeList1 = typeMap.get("5"); +// List threeList2 = typeMap.get("6"); +// +// if(threeList1 != null && !threeList1.isEmpty()) { +// threeList.addAll(threeList1); +// } +// if(threeList2 != null && !threeList2.isEmpty()) { +// threeList.addAll(threeList2); +// } //********************************取数据END*********************************************************/ //********************************通用*************************************************************/ - //xym 学院名称 - result.put("xqxn",xqxnParam); + result.put("xym",kcExportConfigTpkwcqkjzglx.getDwmc());//学院名称 + result.put("xqxn",xqxnParam);//学期学年 //填进去数量 - result.put("oneListSize", StringUtils.defaultString(String.valueOf(oneList.size()),"0")); - result.put("twoListSize", StringUtils.defaultString(String.valueOf(twoList.size()),"0")); - result.put("threeListSize", StringUtils.defaultString(String.valueOf(threeList.size()),"0")); - //fourListSize + allListMap.forEach((k,v) -> { + result.put(k + "Size", StringUtils.defaultString(String.valueOf(v.size()),"0")); + }); +// result.put("oneListSize", StringUtils.defaultString(String.valueOf(oneList.size()),"0")); +// result.put("twoListSize", StringUtils.defaultString(String.valueOf(twoList.size()),"0")); +// result.put("threeListSize", StringUtils.defaultString(String.valueOf(threeList.size()),"0")); +// result.put("fourListSize", StringUtils.defaultString(String.valueOf(threeList.size()),"0")); //********************************表头END**********************************************************/ wo.replaceTextPlus(result); //********************************@A.单个内容替换END**************************************************/ - int index = 0; + final int[] index = {4}; List> mainList = Lists.newArrayList(); - oneList.forEach(x -> { - if(tktjMap.containsKey(x.getGh())) { - List tmpList = new ArrayList<>(); - mainList.add(tmpList); - KcTkcstj tkcstj = tktjMap.get(x.getGh()); - tmpList.add(null); - tmpList.add(StringUtils.defaultString(tkcstj.getJsxm(),x.getXm())); - tmpList.add(tkcstj.getTkxttj()); - } + + allListMap.forEach((k,v) -> { + v.forEach(x -> { + if(tktjMap.containsKey(x.getGh())) { + List tmpList = new ArrayList<>(); + mainList.add(tmpList); + KcTkcstj tkcstj = tktjMap.get(x.getGh()); +// tmpList.add(null); + int ytkcs = Integer.parseInt(StringUtils.defaultString(x.getYtkcs(),"0")); + if(ghMap.containsKey(x.getGh())){ + List list = ghMap.get(x.getGh()); + if(list != null && !list.isEmpty()){ + for(KcExportConfigTpkwcqkjzglx e : list){ + int c = Integer.parseInt(StringUtils.defaultString(e.getYtkcs(),"0")); + if(c > ytkcs) { + ytkcs = c; + } + } + } + } + tmpList.add(x.getXm()); + tmpList.add(formatDictTxt(x.getTklx(),"tpkwcqkjzglx")); + tmpList.add(String.valueOf(ytkcs));//取最大值 + + tmpList.add(tkcstj.getTkxttj()); + } + }); + WordOperator.fillNullCall(mainList,v,2,3); + //从固定位置开始添加(1为第二个表格,第二个1为固定位置) + wo.insert2Table(0, index[0], true, mainList); + index[0] += mainList.size() + 2; + mainList.clear(); }); - index = 4; - WordOperator.fillNullCall(mainList,oneList,2,3); - //从固定位置开始添加(1为第二个表格,第二个1为固定位置) - wo.insert2Table(0, index, true, mainList); - index += mainList.size() + 2; - mainList.clear(); - twoList.forEach(x -> { - if(tktjMap.containsKey(x.getGh())) { - List tmpList = new ArrayList<>(); - mainList.add(tmpList); - KcTkcstj tkcstj = tktjMap.get(x.getGh()); - tmpList.add(null); - tmpList.add(StringUtils.defaultString(tkcstj.getJsxm(),x.getXm())); - tmpList.add(tkcstj.getTkxttj()); - } - }); - //从固定位置开始添加(1为第二个表格,第二个1为固定位置) - WordOperator.fillNullCall(mainList,twoList,2,3); - wo.insert2Table(0, index, true, mainList); - index += mainList.size() + 2; - mainList.clear(); - threeList.forEach(x -> { - if(tktjMap.containsKey(x.getGh())) { - List tmpList = new ArrayList<>(); - mainList.add(tmpList); - KcTkcstj tkcstj = tktjMap.get(x.getGh()); - tmpList.add(null); - tmpList.add(StringUtils.defaultString(tkcstj.getJsxm(),x.getXm())); - tmpList.add(tkcstj.getTkxttj()); - } - }); - //从固定位置开始添加(1为第二个表格,第二个1为固定位置) - WordOperator.fillNullCall(mainList,threeList,2,3); - wo.insert2Table(0, index, true, mainList); + + + +// mainList.clear(); +// twoList.forEach(x -> { +// if(tktjMap.containsKey(x.getGh())) { +// List tmpList = new ArrayList<>(); +// mainList.add(tmpList); +// KcTkcstj tkcstj = tktjMap.get(x.getGh()); +// tmpList.add(null); +// tmpList.add(StringUtils.defaultString(tkcstj.getJsxm(),x.getXm())); +// tmpList.add(tkcstj.getTkxttj()); +// } +// }); +// //从固定位置开始添加(1为第二个表格,第二个1为固定位置) +// WordOperator.fillNullCall(mainList,twoList,2,3); +// wo.insert2Table(0, index[0], true, mainList); +// +// index[0] += mainList.size() + 2; +// mainList.clear(); +// threeList.forEach(x -> { +// if(tktjMap.containsKey(x.getGh())) { +// List tmpList = new ArrayList<>(); +// mainList.add(tmpList); +// KcTkcstj tkcstj = tktjMap.get(x.getGh()); +// tmpList.add(null); +// tmpList.add(StringUtils.defaultString(tkcstj.getJsxm(),x.getXm())); +// tmpList.add(tkcstj.getTkxttj()); +// } +// }); +// //从固定位置开始添加(1为第二个表格,第二个1为固定位置) +// WordOperator.fillNullCall(mainList,threeList,2,3); +// wo.insert2Table(0, index[0], true, mainList); return wo; } } diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/IKcExportConfigTpkwcqkjzglxService.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/IKcExportConfigTpkwcqkjzglxService.java index 696b741b..885df4aa 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/IKcExportConfigTpkwcqkjzglxService.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/IKcExportConfigTpkwcqkjzglxService.java @@ -11,4 +11,5 @@ import org.jeecg.modules.kc.config.entity.KcExportConfigTpkwcqkjzglx; */ public interface IKcExportConfigTpkwcqkjzglxService extends IService { + void editAll(KcExportConfigTpkwcqkjzglx kcExportConfigTpkwcqkjzglx); } diff --git a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/impl/KcExportConfigTpkwcqkjzglxServiceImpl.java b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/impl/KcExportConfigTpkwcqkjzglxServiceImpl.java index bd4d8912..4b20b7bb 100644 --- a/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/impl/KcExportConfigTpkwcqkjzglxServiceImpl.java +++ b/jeecg-module-main/src/main/java/org/jeecg/modules/kc/config/service/impl/KcExportConfigTpkwcqkjzglxServiceImpl.java @@ -1,11 +1,20 @@ package org.jeecg.modules.kc.config.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang.StringUtils; import org.jeecg.modules.kc.config.entity.KcExportConfigTpkwcqkjzglx; import org.jeecg.modules.kc.config.mapper.KcExportConfigTpkwcqkjzglxMapper; import org.jeecg.modules.kc.config.service.IKcExportConfigTpkwcqkjzglxService; +import org.jeecg.modules.kc.tksf.kctksfyq.entity.KcTksfyq; +import org.jeecg.modules.kc.tksf.kctksfyq.service.IKcTksfyqService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.List; + /** * @Description: kc_export_config_tpkwcqkjzglx * @Author: jeecg-boot @@ -15,4 +24,40 @@ import org.springframework.stereotype.Service; @Service public class KcExportConfigTpkwcqkjzglxServiceImpl extends ServiceImpl implements IKcExportConfigTpkwcqkjzglxService { + @Autowired + private IKcTksfyqService kcTksfyqService; + + @Override + public void editAll(KcExportConfigTpkwcqkjzglx kcExportConfigTpkwcqkjzglx) { + //结构名称 + if(StringUtils.isNotBlank(kcExportConfigTpkwcqkjzglx.getTklx())){ + List zwmcs = Arrays.asList(kcExportConfigTpkwcqkjzglx.getTklx().split(",")); +// QueryWrapper qw = new QueryWrapper<>(); +// qw.in("tklx",zwmcs); +// remove(qw); + zwmcs.forEach(x -> { + kcExportConfigTpkwcqkjzglx.setTklx(x); + kcExportConfigTpkwcqkjzglx.setId(null); + UpdateWrapper uw = new UpdateWrapper(); + uw.set("ytkcs",kcExportConfigTpkwcqkjzglx.getYtkcs()); + uw.eq("tklx",x); + update(uw); + }); + } + //结构名称 + if(StringUtils.isNotBlank(kcExportConfigTpkwcqkjzglx.getTklx())){ + List zwmcs = Arrays.asList(kcExportConfigTpkwcqkjzglx.getTklx().split(",")); + QueryWrapper qw = new QueryWrapper<>(); + qw.in("zwmc",zwmcs); + kcTksfyqService.remove(qw); + zwmcs.forEach(x -> { + KcTksfyq kcTksfyq = new KcTksfyq(); + kcTksfyq.setZwmc(x); + kcTksfyq.setId(null); + kcTksfyqService.save(kcTksfyq); + }); + + } + + } } diff --git a/jeecg-module-main/src/main/resources/officetemplates/exp1/tpkqk.docx b/jeecg-module-main/src/main/resources/officetemplates/exp1/tpkqk.docx index f0bc92f74d5c83daa9947db977b4f7800aca49e9..9b3b34c55708202f3945f1cc39f775dc5f593431 100644 GIT binary patch delta 5984 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