From 854e002211fd2a3e9bc4bb4244df0776c4a61033 Mon Sep 17 00:00:00 2001 From: chenwei Date: Wed, 10 Jul 2024 16:30:23 +0800 Subject: [PATCH] 资金日报,导出功能 --- backend/chkpower/src/main/java/com/hotent/chkpower/controller/WDailyFundsController.java | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------- backend/chkpower/src/main/java/com/hotent/chkpower/dao/WDailyFundsDao.java | 2 ++ backend/chkpower/src/main/java/com/hotent/chkpower/manager/WDailyFundsManager.java | 3 +++ backend/chkpower/src/main/java/com/hotent/chkpower/manager/impl/WDailyFundsManagerImpl.java | 6 ++++++ backend/chkpower/src/main/resources/doc/dailyFundsByDateExport.xls | Bin 0 -> 22528 bytes backend/chkpower/src/main/resources/mapper/WDailyFundsMapper.xml | 6 ++++++ frontend/front/src/components/tableSlot/dailyFunds/updateInspBtn.vue | 49 +++++++++++++++++++++++++++++++++++++------------ 7 files changed, 201 insertions(+), 43 deletions(-) create mode 100644 backend/chkpower/src/main/resources/doc/dailyFundsByDateExport.xls diff --git a/backend/chkpower/src/main/java/com/hotent/chkpower/controller/WDailyFundsController.java b/backend/chkpower/src/main/java/com/hotent/chkpower/controller/WDailyFundsController.java index 5bd790c..6f0ed43 100644 --- a/backend/chkpower/src/main/java/com/hotent/chkpower/controller/WDailyFundsController.java +++ b/backend/chkpower/src/main/java/com/hotent/chkpower/controller/WDailyFundsController.java @@ -1,7 +1,12 @@ package com.hotent.chkpower.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import com.hotent.chkpower.dto.WDailyFundsInspDto; +import com.hotent.chkpower.manager.WCurrentManager; +import jodd.util.ObjectUtil; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -16,54 +21,165 @@ import com.hotent.base.controller.BaseController; import com.hotent.chkpower.model.WDailyFunds; import com.hotent.chkpower.manager.WDailyFundsManager; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; + /** * 每日资金 前端控制器 * - * @company 广州宏天软件股份有限公司 * @author cw + * @company 广州宏天软件股份有限公司 * @since 2024-07-08 */ @RestController @RequestMapping("/wDailyFunds/v1/") public class WDailyFundsController extends BaseController { - /** - * 根据id获取每日资金数据详情 - * @param id - * @return - * @throws Exception - * ModelAndView - */ - @GetMapping(value="/getDetail") - @ApiOperation(value="根据id获取每日资金数据详情",httpMethod = "GET",notes = "根据id获取每日资金数据详情") - public CommonResult getDetail(@ApiParam(name="id",value="业务对象主键", required = true)@RequestParam(required=true) String id) throws Exception{ - return CommonResult.ok().value(baseService.getDetail(id)); - } + @Resource + private WCurrentManager wCurrentManager; + + /** + * 根据id获取每日资金数据详情 + * + * @param id + * @return + * @throws Exception ModelAndView + */ + @GetMapping(value = "/getDetail") + @ApiOperation(value = "根据id获取每日资金数据详情", httpMethod = "GET", notes = "根据id获取每日资金数据详情") + public CommonResult getDetail(@ApiParam(name = "id", value = "业务对象主键", required = true) @RequestParam(required = true) String id) throws Exception { + return CommonResult.ok().value(baseService.getDetail(id)); + } + /** - * 新增,更新每日资金 - * @param wDailyFunds - * @throws Exception - * @return - * @exception - */ + * 新增,更新每日资金 + * + * @param wDailyFunds + * @return + * @throws Exception + * @throws + */ + + + @PostMapping(value = "/save") + @ApiOperation(value = "新增,更新每日资金数据", httpMethod = "POST", notes = "新增,更新每日资金数据") + public CommonResult save(@ApiParam(name = "WDailyFunds", value = "每日资金对象", required = true) @RequestBody WDailyFunds wDailyFunds) throws Exception { + String msg = StringUtil.isEmpty(wDailyFunds.getId()) ? "添加每日资金成功" : "更新每日资金成功"; + baseService.createOrUpdate(wDailyFunds); + return CommonResult.ok().message(msg); + } + @PostMapping(value = "/updateInsp") + public CommonResult updateInsp(@RequestBody WDailyFundsInspDto wDailyFundsInspDto) throws Exception { + baseService.updateInsp(wDailyFundsInspDto); + return CommonResult.ok().message("成功"); + } + private BigDecimal aggregateBalance(HashMap data, String key, BigDecimal aggregate) { + // 直接检查值是否存在并为非空,避免了额外的containsKey调用 + Object value = data.get(key); + if (value != null && !value.equals("")) { + return aggregate.add(new BigDecimal(((Number) value).doubleValue())); + } else { + return BigDecimal.ZERO; + } + } + + /** + * 资金日报导出 + * + * @param response + * @param date + * @throws Exception + */ + @GetMapping("dailyFundsByDateExport") + public void DailyFundsByDateExport(HttpServletResponse response, String date) throws Exception { + HashMap map = new HashMap(); + map.put("date", date); + List gslxList = wCurrentManager.getCurrentOrgTypeList(); - @PostMapping(value="/save") - @ApiOperation(value = "新增,更新每日资金数据", httpMethod = "POST", notes = "新增,更新每日资金数据") - public CommonResult save(@ApiParam(name="WDailyFunds",value="每日资金对象", required = true)@RequestBody WDailyFunds wDailyFunds) throws Exception{ - String msg = StringUtil.isEmpty(wDailyFunds.getId()) ? "添加每日资金成功" : "更新每日资金成功"; - baseService.createOrUpdate(wDailyFunds); - return CommonResult.ok().message(msg); - } + BigDecimal F_yesterday_account_balance_zs = BigDecimal.ZERO; + BigDecimal F_today_account_balance_zs = BigDecimal.ZERO; + BigDecimal F_account_balance_difference_zs = BigDecimal.ZERO; + BigDecimal F_today_net_cash_flow_zs = BigDecimal.ZERO; + BigDecimal F_today_freeze_amount_zs = BigDecimal.ZERO; + BigDecimal F_today_freezing_zs = BigDecimal.ZERO; - @PostMapping(value="/updateInsp") - public CommonResult updateInsp(@RequestBody WDailyFundsInspDto wDailyFundsInspDto) throws Exception{ - baseService.updateInsp(wDailyFundsInspDto); - return CommonResult.ok().message("成功"); - } + List> list = new ArrayList>(); + for (String orgType : gslxList) { + List> listData = baseService.getDailyFundsByDateList(orgType, date); + if (listData == null || listData.size() == 0) { + break; + } + BigDecimal F_yesterday_account_balance = BigDecimal.ZERO; + BigDecimal F_today_account_balance = BigDecimal.ZERO; + BigDecimal F_account_balance_difference = BigDecimal.ZERO; + BigDecimal F_today_net_cash_flow = BigDecimal.ZERO; + BigDecimal F_today_freeze_amount = BigDecimal.ZERO; + BigDecimal F_today_freezing = BigDecimal.ZERO; + for (HashMap data : listData) { + F_yesterday_account_balance = aggregateBalance(data, "F_yesterday_account_balance", F_yesterday_account_balance); + F_today_account_balance = aggregateBalance(data, "F_today_account_balance", F_today_account_balance); + F_account_balance_difference = aggregateBalance(data, "F_account_balance_difference", F_account_balance_difference); + F_today_net_cash_flow = aggregateBalance(data, "F_today_net_cash_flow", F_today_net_cash_flow); + F_today_freeze_amount = aggregateBalance(data, "F_today_freeze_amount", F_today_freeze_amount); + F_today_freezing = aggregateBalance(data, "F_today_freezing", F_today_freezing); + } + HashMap xjMap = new HashMap<>(); + xjMap.put("F_org_type", "小计(" + orgType + ")"); + xjMap.put("F_yesterday_account_balance", F_yesterday_account_balance.setScale(2, RoundingMode.HALF_UP).toString()); + xjMap.put("F_today_account_balance", F_today_account_balance.setScale(2, RoundingMode.HALF_UP).toString()); + xjMap.put("F_account_balance_difference", F_account_balance_difference.setScale(2, RoundingMode.HALF_UP).toString()); + xjMap.put("F_today_net_cash_flow", F_today_net_cash_flow.setScale(2, RoundingMode.HALF_UP).toString()); + xjMap.put("F_today_freeze_amount", F_today_freeze_amount.setScale(2, RoundingMode.HALF_UP).toString()); + xjMap.put("F_today_freezing", F_today_freezing.setScale(2, RoundingMode.HALF_UP).toString()); + listData.add(xjMap); + list.addAll(listData); + F_yesterday_account_balance_zs = F_yesterday_account_balance_zs.add(F_yesterday_account_balance); + F_today_account_balance_zs= F_today_account_balance_zs.add(F_today_account_balance); + F_account_balance_difference_zs=F_account_balance_difference_zs.add(F_account_balance_difference); + F_today_net_cash_flow_zs=F_today_net_cash_flow_zs.add(F_today_net_cash_flow); + F_today_freeze_amount_zs=F_today_freeze_amount_zs.add(F_today_freeze_amount); + F_today_freezing_zs=F_today_freezing_zs.add(F_today_freezing); + } + HashMap hzMap = new HashMap<>(); + hzMap.put("F_org_type", "汇总"); + hzMap.put("F_yesterday_account_balance", F_yesterday_account_balance_zs.setScale(2, RoundingMode.HALF_UP).toString()); + hzMap.put("F_today_account_balance", F_today_account_balance_zs.setScale(2, RoundingMode.HALF_UP).toString()); + hzMap.put("F_account_balance_difference", F_account_balance_difference_zs.setScale(2, RoundingMode.HALF_UP).toString()); + hzMap.put("F_today_net_cash_flow", F_today_net_cash_flow_zs.setScale(2, RoundingMode.HALF_UP).toString()); + hzMap.put("F_today_freeze_amount", F_today_freeze_amount_zs.setScale(2, RoundingMode.HALF_UP).toString()); + hzMap.put("F_today_freezing", F_today_freezing_zs.setScale(2, RoundingMode.HALF_UP).toString()); + list.add(hzMap); + map.put("list", list); + TemplateExportParams params = new TemplateExportParams("doc/dailyFundsByDateExport.xls"); + params.setColForEach(true); + Workbook workbook = ExcelExportUtil.exportExcel(params, map); + String filedisplay = "资金日报.xls"; + response.setContentType("APPLICATION/OCTET-STREAM"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filedisplay, "utf-8")); + OutputStream os = null; + try { + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (os != null) + os.close(); + } + } } diff --git a/backend/chkpower/src/main/java/com/hotent/chkpower/dao/WDailyFundsDao.java b/backend/chkpower/src/main/java/com/hotent/chkpower/dao/WDailyFundsDao.java index 42814ce..59bdf92 100644 --- a/backend/chkpower/src/main/java/com/hotent/chkpower/dao/WDailyFundsDao.java +++ b/backend/chkpower/src/main/java/com/hotent/chkpower/dao/WDailyFundsDao.java @@ -27,4 +27,6 @@ public interface WDailyFundsDao extends BaseMapper { List selectWDailyFundsNews(@Param("wCurrentList") List> wCurrentList, @Param("fDate") LocalDateTime fDate); + List> getDailyFundsByDateList(@Param("fOrgType") String fOrgType, @Param("fDate") String fDate); + } diff --git a/backend/chkpower/src/main/java/com/hotent/chkpower/manager/WDailyFundsManager.java b/backend/chkpower/src/main/java/com/hotent/chkpower/manager/WDailyFundsManager.java index 28d2065..015ec70 100644 --- a/backend/chkpower/src/main/java/com/hotent/chkpower/manager/WDailyFundsManager.java +++ b/backend/chkpower/src/main/java/com/hotent/chkpower/manager/WDailyFundsManager.java @@ -37,4 +37,7 @@ public interface WDailyFundsManager extends BaseManager { void updateInsp(WDailyFundsInspDto wDailyFundsInspDto); + + List> getDailyFundsByDateList(String orgType, String date); + } diff --git a/backend/chkpower/src/main/java/com/hotent/chkpower/manager/impl/WDailyFundsManagerImpl.java b/backend/chkpower/src/main/java/com/hotent/chkpower/manager/impl/WDailyFundsManagerImpl.java index 049070b..453584e 100644 --- a/backend/chkpower/src/main/java/com/hotent/chkpower/manager/impl/WDailyFundsManagerImpl.java +++ b/backend/chkpower/src/main/java/com/hotent/chkpower/manager/impl/WDailyFundsManagerImpl.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -126,6 +127,11 @@ public class WDailyFundsManagerImpl extends BaseManagerImpl> getDailyFundsByDateList(String orgType, String date) { + return baseMapper.getDailyFundsByDateList(orgType,date); + } + private void verifyInitWDailyFunds(LocalDateTime fDate) { Integer count = baseMapper.selectWDailyFundsCount(fDate); if (count == null || count == 0) { diff --git a/backend/chkpower/src/main/resources/doc/dailyFundsByDateExport.xls b/backend/chkpower/src/main/resources/doc/dailyFundsByDateExport.xls new file mode 100644 index 0000000..0226302 Binary files /dev/null and b/backend/chkpower/src/main/resources/doc/dailyFundsByDateExport.xls differ diff --git a/backend/chkpower/src/main/resources/mapper/WDailyFundsMapper.xml b/backend/chkpower/src/main/resources/mapper/WDailyFundsMapper.xml index 791f2c1..b629674 100644 --- a/backend/chkpower/src/main/resources/mapper/WDailyFundsMapper.xml +++ b/backend/chkpower/src/main/resources/mapper/WDailyFundsMapper.xml @@ -102,4 +102,10 @@ + + diff --git a/frontend/front/src/components/tableSlot/dailyFunds/updateInspBtn.vue b/frontend/front/src/components/tableSlot/dailyFunds/updateInspBtn.vue index 784b6bc..a59a2f7 100644 --- a/frontend/front/src/components/tableSlot/dailyFunds/updateInspBtn.vue +++ b/frontend/front/src/components/tableSlot/dailyFunds/updateInspBtn.vue @@ -1,6 +1,7 @@