diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java index 605af32e..4870dab1 100644 --- a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java @@ -46,6 +46,13 @@ public class StaticConfig { StaticConfig.needPassword = needPassword; } + public static String TEMPLATE_PATH; + + @Value("${template.path.templatePath}") + public void setTemplatePath(String templatePath) { + StaticConfig.TEMPLATE_PATH = templatePath; + } + /*@Bean public void initStatic() { diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/PayWorkingGroupMapper.java b/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/PayWorkingGroupMapper.java index 02722ec3..15f2390b 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/PayWorkingGroupMapper.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/PayWorkingGroupMapper.java @@ -275,4 +275,7 @@ public interface PayWorkingGroupMapper extends BaseMapper { List overallDepartmentStatistics(@Param("year") String year, @Param("type") String type); List allDepartmentStatistics(@Param("year") String year, @Param("type") String type); + + List queryPageListForCompanyClassification(@Param("companyComeMoneySearch") CompanyComeMoneySearch companyComeMoneySearch); + } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/xml/PayWorkingGroupMapper.xml b/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/xml/PayWorkingGroupMapper.xml index 8277835c..bd3fa5ba 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/xml/PayWorkingGroupMapper.xml +++ b/jero-boot-incoming-payment/src/main/java/com/jero/project/mapper/xml/PayWorkingGroupMapper.xml @@ -2696,4 +2696,30 @@ and pack = 0 ) dataAll group by DATE_FORMAT(paymentDate, '%Y-%m') order by paymentDate + + diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/IPayWorkingGroupService.java b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/IPayWorkingGroupService.java index 32d3ba8c..85a1d341 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/IPayWorkingGroupService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/IPayWorkingGroupService.java @@ -267,4 +267,6 @@ public interface IPayWorkingGroupService extends IService { * @param response */ void exportAllFile(HttpServletRequest request, HttpServletResponse response, PayWorkingGroup payWorkingGroup); + + List queryPageListForCompanyClassification(CompanyComeMoneySearch companyComeMoneySearch); } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayWorkingGroupServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayWorkingGroupServiceImpl.java index 0b3c613c..02b35a20 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayWorkingGroupServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/project/service/impl/PayWorkingGroupServiceImpl.java @@ -1023,6 +1023,11 @@ public class PayWorkingGroupServiceImpl extends ServiceImpl queryPageListForCompanyClassification(CompanyComeMoneySearch companyComeMoneySearch) { + return payWorkingGroupMapper.queryPageListForCompanyClassification(companyComeMoneySearch); + } + private void createEntry(ZipOutputStream zipos, String folderPath, Set addedEntries) throws IOException { if (!addedEntries.contains(folderPath)) { zipos.putNextEntry(new ZipEntry(folderPath)); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/statistics/controller/CompanyComeMoneyStatisticsController.java b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/controller/CompanyComeMoneyStatisticsController.java index fa97b0a4..098cbd2a 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/statistics/controller/CompanyComeMoneyStatisticsController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/controller/CompanyComeMoneyStatisticsController.java @@ -1,5 +1,6 @@ package com.jero.statistics.controller; +import cn.hutool.core.collection.CollStreamUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; @@ -8,9 +9,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.DictModel; +import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.company.entity.PayCompanyManagement; import com.jero.company.service.IPayCompanyManagementService; +import com.jero.config.StaticConfig; import com.jero.modules.system.mapper.SysUserMapper; import com.jero.project.service.IPayWorkingGroupService; import com.jero.statistics.entity.*; @@ -20,7 +24,10 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.TemplateExportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -29,9 +36,15 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.net.URLEncoder; import java.text.DecimalFormat; import java.util.*; +import static cn.hutool.poi.excel.sax.AttributeName.s; + /** * @author zql * @date 2021/9/23 14:07 @@ -212,6 +225,202 @@ public class CompanyComeMoneyStatisticsController { } + /** + * 分类统计 + * + * @param companyComeMoneySearch 企业来款统计 + */ + @RequiresPermissions("companyPaymentStatistics:search") + @ApiOperation(value = "企业来款统计-分类统计") + @GetMapping(value = "/classification") + public Result classification(CompanyComeMoneySearch companyComeMoneySearch, + HttpServletResponse response) { + String chargeCompanyId = companyComeMoneySearch.getChargeCompanyId(); + List chargeCompanyIds = StrUtil.split(chargeCompanyId, ','); + companyComeMoneySearch.setChargeCompanyIds(chargeCompanyIds); + + String year = companyComeMoneySearch.getYear(); + List years = StrUtil.split(year, ','); + companyComeMoneySearch.setYears(years); + Map map = new HashMap<>(); + //获取表头 + List dictModels = sysBaseAPI.queryDictItemsByCode("payment_charge_use"); + List> titleList = new ArrayList<>(); + for (String s : years) { + Map lm = new HashMap<>(); + lm.put("name", s + "年度待确收金额"); + lm.put("je", "t.je_"+s); + + titleList.add(lm); + } + for (String s : years) { + for (DictModel dictModel : dictModels) { + Map lm = new HashMap<>(); + String text = dictModel.getText(); + String value = dictModel.getValue(); + lm.put("name", s + "年度-" + text +"-待确收金额"); + lm.put("je", "t.je_"+s+"_"+value); + titleList.add(lm); + } + } + map.put("titleList", titleList); + //获取数据 + List list = payWorkingGroupService.queryPageListForCompanyClassification(companyComeMoneySearch); + List> valList = new ArrayList<>(); + //先按企业id分组 + Map> companyIdKeyMap = CollStreamUtil.groupByKey(list, CompanyComeMoneyClassificationList::getCompanyId); + for (String companyId : chargeCompanyIds) { + Map lm = new HashMap<>(); + //获取单一企业数据 + List companyDateList = companyIdKeyMap.get(companyId); + if (companyDateList.isEmpty()) { + continue; + }else { + String companyName = companyDateList.get(0).getCompanyName(); + lm.put("name", companyName); + } + //按年份分组 + Map> yearKeyMap = CollStreamUtil.groupByKey(companyDateList, CompanyComeMoneyClassificationList::getYear); + for (String yearKey : years) { + //获得单一年数据 + List dataList = yearKeyMap.get(yearKey); + BigDecimal bigDecimal = new BigDecimal("0.00"); + for (CompanyComeMoneyClassificationList list1 : dataList) { + String allMoney = list1.getAllMoney(); + bigDecimal = bigDecimal.add(new BigDecimal(allMoney)); + } + lm.put("je_"+yearKey, bigDecimal.toString()); + } + for (String yearKey : years) { + //获得单一年数据 + List dataList = yearKeyMap.get(yearKey); + for (DictModel dictModel : dictModels) { + BigDecimal bigDecimal = new BigDecimal("0.00"); + String value = dictModel.getValue(); + for (CompanyComeMoneyClassificationList list2 : dataList) { + if (list2.getChargeUse().equals(value)) { + String allMoney = list2.getAllMoney(); + bigDecimal = bigDecimal.add(new BigDecimal(allMoney)); + } + } + lm.put("je_"+yearKey+"_"+value, bigDecimal.toString()); + } + } + valList.add(lm); + } + map.put("valList", valList); + return Result.OK(map); + + }/** + * 分类统计 + * + * @param companyComeMoneySearch 企业来款统计 + */ + @RequiresPermissions("companyPaymentStatistics:search") + @ApiOperation(value = "企业来款统计-分类统计导出") + @GetMapping(value = "/classificationExcel") + public void classificationExcel(CompanyComeMoneySearch companyComeMoneySearch, + HttpServletResponse response) { + String chargeCompanyId = companyComeMoneySearch.getChargeCompanyId(); + List chargeCompanyIds = StrUtil.split(chargeCompanyId, ','); + companyComeMoneySearch.setChargeCompanyIds(chargeCompanyIds); + + String year = companyComeMoneySearch.getYear(); + List years = StrUtil.split(year, ','); + companyComeMoneySearch.setYears(years); + Map map = new HashMap<>(); + //获取表头 + List dictModels = sysBaseAPI.queryDictItemsByCode("payment_charge_use"); + List> titleList = new ArrayList<>(); + for (String s : years) { + Map lm = new HashMap<>(); + lm.put("name", s + "年度待确收金额"); + lm.put("je", "t.je_"+s); + + titleList.add(lm); + } + for (String s : years) { + for (DictModel dictModel : dictModels) { + Map lm = new HashMap<>(); + String text = dictModel.getText(); + String value = dictModel.getValue(); + lm.put("name", s + "年度-" + text +"-待确收金额"); + lm.put("je", "t.je_"+s+"_"+value); + titleList.add(lm); + } + } + map.put("titleList", titleList); + //获取数据 + List list = payWorkingGroupService.queryPageListForCompanyClassification(companyComeMoneySearch); + List> valList = new ArrayList<>(); + //先按企业id分组 + Map> companyIdKeyMap = CollStreamUtil.groupByKey(list, CompanyComeMoneyClassificationList::getCompanyId); + for (String companyId : chargeCompanyIds) { + Map lm = new HashMap<>(); + //获取单一企业数据 + List companyDateList = companyIdKeyMap.get(companyId); + if (companyDateList.isEmpty()) { + continue; + }else { + String companyName = companyDateList.get(0).getCompanyName(); + lm.put("name", companyName); + } + //按年份分组 + Map> yearKeyMap = CollStreamUtil.groupByKey(companyDateList, CompanyComeMoneyClassificationList::getYear); + for (String yearKey : years) { + //获得单一年数据 + List dataList = yearKeyMap.get(yearKey); + BigDecimal bigDecimal = new BigDecimal("0.00"); + for (CompanyComeMoneyClassificationList list1 : dataList) { + String allMoney = list1.getAllMoney(); + bigDecimal = bigDecimal.add(new BigDecimal(allMoney)); + } + lm.put("je_"+yearKey, bigDecimal.toString()); + } + for (String yearKey : years) { + //获得单一年数据 + List dataList = yearKeyMap.get(yearKey); + for (DictModel dictModel : dictModels) { + BigDecimal bigDecimal = new BigDecimal("0.00"); + String value = dictModel.getValue(); + for (CompanyComeMoneyClassificationList list2 : dataList) { + if (list2.getChargeUse().equals(value)) { + String allMoney = list2.getAllMoney(); + bigDecimal = bigDecimal.add(new BigDecimal(allMoney)); + } + } + lm.put("je_"+yearKey+"_"+value, bigDecimal.toString()); + } + } + valList.add(lm); + } + map.put("valList", valList); + + + String excelName = "企业来款分类统计导出模板.xlsx"; + String tPath = StaticConfig.TEMPLATE_PATH + excelName; + + TemplateExportParams params = new TemplateExportParams(tPath); + params.setColForEach(true); + Workbook workbook = ExcelExportUtil.exportExcel(params, map); + try { + response.setContentType("application/ms-excel;charset=UTF-8"); + response.setContentType("application/x-download"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment;filename=".concat(String.valueOf(URLEncoder.encode("征集问题.xls", "UTF-8")))); + ServletOutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + workbook.close(); + + if (outputStream != null) { + outputStream.close(); + } + }catch (Exception e){ + + } + + } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneyClassificationList.java b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneyClassificationList.java new file mode 100644 index 00000000..ae803ea2 --- /dev/null +++ b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneyClassificationList.java @@ -0,0 +1,28 @@ +package com.jero.statistics.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @author zql + * @date 2021/9/23 14:09 + */ +@Data +public class CompanyComeMoneyClassificationList { + + @ApiModelProperty(value = "企业id") + private String companyId; + + @ApiModelProperty(value = "企业名称") + private String companyName; + + @ApiModelProperty(value = "年度待确收金额") + private String allMoney; + + @ApiModelProperty(value = "年份") + private String year; + + @ApiModelProperty(value = "来款用途") + private String chargeUse; +} diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneySearch.java b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneySearch.java index 2055f662..55cc2d22 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneySearch.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/statistics/entity/CompanyComeMoneySearch.java @@ -24,6 +24,7 @@ public class CompanyComeMoneySearch { @ApiModelProperty(value = "来款年份") private String year; + private List years; @ApiModelProperty(value = "应收总金额") private String allMoney; diff --git a/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot-single-startup/src/main/resources/application-dev.yml index 2a20140c..a6db1531 100644 --- a/jero-boot-single-startup/src/main/resources/application-dev.yml +++ b/jero-boot-single-startup/src/main/resources/application-dev.yml @@ -361,4 +361,6 @@ template: #批复文件pdf pdf: D:\\hzwl\\income_payments\\income_payments_managerment\\template\\approvalTemplate.pdf #入会申请表word - applicationWord: E:\\biao_zhun_suo\\template\\applicationWord.docx \ No newline at end of file + applicationWord: E:\\biao_zhun_suo\\template\\applicationWord.docx + #模版目录 + templatePath: D:\\hzwl\\income_payments\\income_payments_managerment\\template\\ \ No newline at end of file diff --git a/template/企业来款分类统计导出模板.xlsx b/template/企业来款分类统计导出模板.xlsx new file mode 100644 index 00000000..3a24478b Binary files /dev/null and b/template/企业来款分类统计导出模板.xlsx differ