From 328d62da52e86863cb68e677e66cf341a7753ef6 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Tue, 11 Nov 2025 09:49:08 +0800 Subject: [PATCH] =?UTF-8?q?11.11=20=E9=80=80=E6=AC=BE,=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Export/ExportService.java | 2 + .../com/example/demo/Export/ExportServiceImpl.java | 26 +- .../demo/controller/cash/CashRefundController.java | 4 + .../demo/controller/coin/ExportController.java | 18 ++ .../java/com/example/demo/domain/DTO/CashDTO.java | 39 +++ .../example/demo/domain/vo/cash/CashRecordDTO.java | 21 +- .../demo/domain/vo/cash/CashRecordRefund.java | 4 +- .../com/example/demo/domain/vo/cash/LhlAudit.java | 3 +- .../com/example/demo/domain/vo/coin/IdName.java | 13 + .../demo/mapper/cash/CashCollectionMapper.java | 4 + .../example/demo/mapper/cash/CashRefundMapper.java | 6 +- .../com/example/demo/mapper/coin/AuditMapper.java | 5 + .../com/example/demo/mapper/coin/MarketMapper.java | 4 + .../demo/service/coin/ExportExcelService.java | 2 + .../example/demo/service/listen/CashListener.java | 36 +++ .../serviceImpl/cash/CashRefundServiceImpl.java | 290 +++++++++++++-------- .../serviceImpl/coin/ExportExcelServiceImpl.java | 19 ++ .../resources/cashMapper/CashCollectionMapper.xml | 16 ++ src/main/resources/cashMapper/CashRefundMapper.xml | 32 ++- src/main/resources/mapper/AuditMapper.xml | 69 ++--- src/main/resources/mapper/MarketMapper.xml | 6 + 21 files changed, 452 insertions(+), 167 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/DTO/CashDTO.java create mode 100644 src/main/java/com/example/demo/domain/vo/coin/IdName.java create mode 100644 src/main/java/com/example/demo/service/listen/CashListener.java diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index a907536..f190b38 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -30,4 +30,6 @@ public interface ExportService { Result addExportOnline(OnlineDTO dto); //现金负责人退款导出 Result addExportFinance(FinanceDTO dto); + + Result addExportCash(CashDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index ad7e322..e86d041 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -127,8 +127,13 @@ public class ExportServiceImpl implements ExportService { } else if(dto instanceof FinanceDTO financeDTO){ financeDTO.setAccount(Integer.valueOf(account)); financeDTO.setUrl(""); - financeDTO.setFileName(generateFileName("现金明细", adminName)); + financeDTO.setFileName(generateFileName("现金退款明细", adminName)); financeDTO.setDataNum(0); + } else if(dto instanceof CashDTO cashDTO){ + cashDTO.setAccount(Integer.valueOf(account)); + cashDTO.setUrl(""); + cashDTO.setFileName(generateFileName("现金收款明细", adminName)); + cashDTO.setDataNum(0); } } @@ -226,6 +231,16 @@ public class ExportServiceImpl implements ExportService { financeDTO.getFileName(), financeDTO.getDataNum() ); + }else if (dto instanceof CashDTO cashDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + cashDTO.getType(), + cashDTO.getState(), + cashDTO.getUrl(), + cashDTO.getFileName(), + cashDTO.getDataNum() + ); } } @@ -256,6 +271,8 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); }else if(dto instanceof FinanceDTO financeDTO){ requestData.put(requestDataKey, financeDTO.getCashRecordDTO()); + }else if (dto instanceof CashDTO cashDTO){ + requestData.put(requestDataKey, cashDTO.getCashCollection()); } exportData.put("requestData", requestData); @@ -314,6 +331,11 @@ public class ExportServiceImpl implements ExportService { @Override public Result addExportFinance(FinanceDTO dto) { - return addExport(dto, "现金明细", "finance:queue:export_queue", "cashRecordDTO"); + return addExport(dto, "现金退款明细", "finance:queue:export_queue", "cashRecordDTO"); + } + + @Override + public Result addExportCash(CashDTO dto) { + return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection"); } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java index 1aec3c7..bced193 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -233,4 +233,8 @@ public class CashRefundController { return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } + @PostMapping("/ceshi") + public Result ceshi() { + return Result.success("测试消息"); + } } diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java index 01c3f14..07b9eca 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -6,6 +6,7 @@ import com.example.demo.Util.RedisLockUtil; import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; +import com.example.demo.domain.DTO.CashDTO; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.ExportExcelService; import com.example.demo.service.coin.GoldDetailService; @@ -215,4 +216,21 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportCash") + public Result exportCash(@Valid @RequestBody CashDTO dto) { + String lockKey = "export:lock:" + dto.getToken(); + String requestId = UUID.randomUUID().toString(); + long expireTime = 5000; + try { + // 尝试获取锁 + if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { + throw new BusinessException("操作太频繁,请稍后重试"); + } + // 执行业务逻辑 + return exportService.addExportCash(dto); + }finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); + } + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/DTO/CashDTO.java b/src/main/java/com/example/demo/domain/DTO/CashDTO.java new file mode 100644 index 0000000..09aeea1 --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/CashDTO.java @@ -0,0 +1,39 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.vo.bean.BeanOnlineRechargeInfo; +import com.example.demo.domain.vo.cash.CashCollection; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName CashDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:26 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CashDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 13; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 20; + private CashCollection cashCollection; +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java index 8856418..fdc39a8 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java @@ -22,7 +22,7 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class CashRecordDTO extends CashRecordRefund{ +public class CashRecordDTO{ private String activity;// 活动 private String goodsName;// 商品名称 private Integer goodsNum;// 商品数量 @@ -33,7 +33,7 @@ public class CashRecordDTO extends CashRecordRefund{ private BigDecimal paymentAmount;// 支付金额 private String receivedCurrency;// 收款币种 private BigDecimal receivedAmount;// 收款金额 - private BigDecimal handlingCharges;// 手续费 + private BigDecimal handlingCharge;// 手续费 private String payBankCode;// 付款银行 private String payType;// 支付方式 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @@ -50,7 +50,9 @@ public class CashRecordDTO extends CashRecordRefund{ //到账日期 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private LocalDateTime receivedTime; + @ExcelIgnore private List goodsNames;// 商品名称 + @ExcelIgnore private List markets;// 地区 @@ -88,16 +90,17 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 永久金币 */ - private Integer permanentGold; + private BigDecimal permanentGold; /** * 免费金币 */ - private Integer freeGold; + private BigDecimal freeGold; /** * 审核人id */ + @ExcelIgnore private Integer auditId; /** @@ -117,6 +120,7 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 提交人id */ + @ExcelIgnore private Integer submitterId; /** @@ -206,6 +210,7 @@ public class CashRecordDTO extends CashRecordRefund{ /** * 关联收款id */ + @ExcelIgnore private Integer relatedId; @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @@ -217,20 +222,26 @@ public class CashRecordDTO extends CashRecordRefund{ private String auditName; private String executorName; private String marketName; + @ExcelIgnore private List statuses; - + @ExcelIgnore private String processInstanceId; // 流程实例ID + @ExcelIgnore private String currentTaskId; // 当前任务ID private String areaServise; private String areaFinance; private String areaCharge; private String headFinance; + @ExcelIgnore private String sortField; + @ExcelIgnore private String sortOrder; + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date sTime; // 开始时间 + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date eTime; // 结束时间 diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java index 5883655..7e4f6bf 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java @@ -192,10 +192,12 @@ public class CashRecordRefund { private String headFinance; private String sortField; private String sortOrder; - + @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date sTime; // 开始时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date eTime; // 结束时间 + private Integer partRefundGold; + private Integer partRefundFree; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java index 6a05965..d2a66e5 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java +++ b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java @@ -16,8 +16,9 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class LhlAudit { + private Integer id; private String areaServise;// private String areaFinance; private String areaCharge; private String headFinace; -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/coin/IdName.java b/src/main/java/com/example/demo/domain/vo/coin/IdName.java new file mode 100644 index 0000000..fa550d3 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/coin/IdName.java @@ -0,0 +1,13 @@ +package com.example.demo.domain.vo.coin; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class IdName { + private Integer id; + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index 94e23d5..139c995 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java @@ -1,5 +1,6 @@ package com.example.demo.mapper.cash; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.GOrder; import com.example.demo.domain.entity.RechargeActivity; @@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -54,4 +56,6 @@ public interface CashCollectionMapper { int markSynced(@Param("orderId") Integer orderId); //根据id查询收款订单 CashCollection selectById(Integer id); + + List selectBatchIds(Set relatedIds); } diff --git a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java index 980016b..ee5fa3a 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java @@ -1,10 +1,12 @@ package com.example.demo.mapper.cash; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.RefundUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; +import java.util.Set; /** * @program: GOLD @@ -32,4 +34,6 @@ public interface CashRefundMapper { //获取各阶段审核人 LhlAudit getAudit(Integer id); List exSelect(CashRecordDTO cashRecordDTO); -} + + List getAuditBatch(Set auditIds); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java index e5f9409..ec9280b 100644 --- a/src/main/java/com/example/demo/mapper/coin/AuditMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/AuditMapper.java @@ -1,5 +1,7 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; +import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.coin.RechargeAudit; @@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; +import java.util.Set; /** * @program: gold-java @@ -46,4 +49,6 @@ public interface AuditMapper { String getName(Integer auditId); //更新首充日期 void updateFirstRecharge(Integer jwcode); + + List getNamesByIds(Set submitterIds); } diff --git a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java index 4feda3d..99adcd3 100644 --- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java @@ -1,8 +1,11 @@ package com.example.demo.mapper.coin; +import cn.hutool.core.lang.Opt; import com.example.demo.domain.entity.Market; +import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Set; public interface MarketMapper { List getMarket(); @@ -15,4 +18,5 @@ public interface MarketMapper { Market getMarketIdDao(String country); Market getMarketIdBytype(String market); String getMarketById(String market); + List getMarketByIds(@Param("marketIds") Set marketIds); } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java index 669f8f3..c65b87e 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -36,4 +36,6 @@ public interface ExportExcelService { Exception OnlineExcel(String message) throws Exception; //负责人退款导出 Exception FinanceExcel(String message) throws Exception; + + Exception CashExcel(String message) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/listen/CashListener.java b/src/main/java/com/example/demo/service/listen/CashListener.java new file mode 100644 index 0000000..16cdfbc --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/CashListener.java @@ -0,0 +1,36 @@ +package com.example.demo.service.listen; + +import com.example.demo.Util.RedisUtil; +import com.example.demo.service.coin.ExportExcelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @program: GOLD + * @ClassName CashListener + * @description: + * @author: huangqizhen + * @create: 2025−11-09 09:42 + * @Version 1.0 + **/ +@Component +public class CashListener extends BaseMessageListener { + @Autowired + private ExportExcelService exportExcelService; + + protected CashListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "cash:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.CashExcel(message); + } catch (Exception e) { + handleException(e, message); + + } + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java index cefa8bd..6bfef96 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -1,8 +1,9 @@ package com.example.demo.serviceImpl.cash; - +import com.example.demo.domain.entity.Admin; import com.example.demo.Util.BusinessException; import com.example.demo.Util.GoldTistV2; import com.example.demo.controller.coin.AuditController; +import com.example.demo.domain.entity.Market; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.cash.*; @@ -13,20 +14,18 @@ import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.AuditMapper; import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.RefundMapper; -import com.example.demo.service.cash.CashCollectionService; import com.example.demo.service.cash.RefundService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import static org.apache.commons.lang3.StringUtils.substring; @@ -58,48 +57,97 @@ public class CashRefundServiceImpl implements RefundService { @Override public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { PageHelper.startPage(pageNum, pageSize); -// System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.select(cashRecordDTO); + + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + + list.forEach(item -> { + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - if(cashCollection.getFreeGold()== null){ - cashCollection.setFreeGold(0); + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); } - if(cashCollection.getPermanentGold()== null){ - cashCollection.setPermanentGold(0); + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); } - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); }); + return new PageInfo<>(list); } + private void processCashCollection(CashRecordDTO item, CashCollection cashCollection) { + // 设置默认值 + Integer freeGold = cashCollection.getFreeGold() != null ? cashCollection.getFreeGold() : 0; + Integer permanentGold = cashCollection.getPermanentGold() != null ? cashCollection.getPermanentGold() : 0; + + BigDecimal free = new BigDecimal(freeGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + BigDecimal permanent = new BigDecimal(permanentGold).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); + + item.setGold(permanent); + item.setFree(free); + item.setActivity(cashCollection.getActivity()); + item.setPaymentCurrency(cashCollection.getPaymentCurrency()); + item.setPaymentAmount(cashCollection.getPaymentAmount()); + item.setReceivedCurrency(cashCollection.getReceivedCurrency()); + item.setReceivedAmount(cashCollection.getReceivedAmount()); + item.setPayType(cashCollection.getPayType()); + item.setPayTime(cashCollection.getPayTime()); + item.setPayBankCode(cashCollection.getBankCode()); + item.setPaySubmitter(cashCollection.getSubmitterName()); + item.setAudit(cashCollection.getAuditName()); + item.setReceivedTime(cashCollection.getReceivedTime()); + item.setPayVoucher(cashCollection.getVoucher()); + item.setPayRemark(cashCollection.getRemark()); + item.setHandlingCharge(cashCollection.getHandlingCharge()); + + // 处理金币金额 + if (item.getPermanentGold() != null) { + item.setPermanentGold(item.getPermanentGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); + } + if (item.getFreeGold() != null) { + item.setFreeGold(item.getFreeGold().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)); + } + } + @Override public int add(CashRecordRefund cashRecordRefund) throws Exception { if(cashRecordRefund.getJwcode()==null){ @@ -270,44 +318,58 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.financeSelect(cashRecordDTO); - System.out.println( list); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - if(cashCollection.getFreeGold()== null){ - cashCollection.setFreeGold(0); + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); + }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); } - if(cashCollection.getPermanentGold()== null){ - cashCollection.setPermanentGold(0); + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); } - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); }); + return new PageInfo<>(list); } @@ -316,38 +378,58 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.exSelect(cashRecordDTO); + if (list.isEmpty()) { + return new PageInfo<>(list); + } + + // 批量收集ID + Set relatedIds = new HashSet<>(); + Set marketIds = new HashSet<>(); + Set submitterIds = new HashSet<>(); + Set auditIds = new HashSet<>(); + list.forEach(item -> { - CashCollection cashCollection = cashCollectionMapper.selectById(item.getRelatedId()); - String marketName - = marketMapper.getMarketById(item.getMarket()); - String submitter = auditMapper.getName(item.getSubmitterId()); - LhlAudit lhlAudit = cashRefundMapper.getAudit(item.getAuditId()); - BigDecimal free = new BigDecimal(cashCollection.getFreeGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - BigDecimal permanent = new BigDecimal(cashCollection.getPermanentGold()) - .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); - item.setGold(permanent); - item.setFree(free); - item.setActivity(cashCollection.getActivity()); - item.setPaymentCurrency(cashCollection.getPaymentCurrency()); - item.setPaymentAmount(cashCollection.getPaymentAmount()); - item.setReceivedCurrency(cashCollection.getReceivedCurrency()); - item.setReceivedAmount(cashCollection.getReceivedAmount()); - item.setPayType(cashCollection.getPayType()); - item.setPayTime(cashCollection.getPayTime()); - item.setPayBankCode(cashCollection.getBankCode()); - item.setPaySubmitter(cashCollection.getSubmitterName()); - item.setAudit(cashCollection.getAuditName()); - item.setReceivedTime(cashCollection.getReceivedTime()); - item.setPayVoucher(cashCollection.getVoucher()); - item.setPayRemark(cashCollection.getRemark()); - item.setMarketName(marketName); - item.setSubmitter(submitter); - item.setAreaServise(lhlAudit.getAreaServise()); - item.setAreaFinance(lhlAudit.getAreaFinance()); - item.setAreaCharge(lhlAudit.getAreaCharge()); - item.setHeadFinance(lhlAudit.getHeadFinace()); + if (item.getRelatedId() != null) relatedIds.add(item.getRelatedId()); + if (item.getMarket() != null) marketIds.add(Integer.valueOf(item.getMarket())); + if (item.getSubmitterId() != null) submitterIds.add(item.getSubmitterId()); + if (item.getAuditId() != null) auditIds.add(item.getAuditId()); }); + + // 批量查询 + Map cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds) + .stream().collect(Collectors.toMap(CashCollection::getId, Function.identity())); + + Map marketNameMap = marketMapper.getMarketByIds(marketIds) + .stream().collect(Collectors.toMap(Market::getId, Market::getName)); + + Map submitterNameMap = auditMapper.getNamesByIds(submitterIds) + .stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName)); + + Map auditMap = cashRefundMapper.getAuditBatch(auditIds) + .stream().collect(Collectors.toMap(LhlAudit::getId, Function.identity())); + + // 处理数据 + list.forEach(item -> { + CashCollection cashCollection = cashCollectionMap.get(item.getRelatedId()); + if (cashCollection != null) { + processCashCollection(item, cashCollection); + } + + String marketName = marketNameMap.get(item.getMarket()); + String submitter = submitterNameMap.get(item.getSubmitterId()); + LhlAudit lhlAudit = auditMap.get(item.getAuditId()); + + item.setMarketName(marketName != null ? marketName : ""); + item.setSubmitter(submitter != null ? submitter : ""); + + if (lhlAudit != null) { + item.setAreaServise(lhlAudit.getAreaServise()); + item.setAreaFinance(lhlAudit.getAreaFinance()); + item.setAreaCharge(lhlAudit.getAreaCharge()); + item.setHeadFinance(lhlAudit.getHeadFinace()); + } + }); + return new PageInfo<>(list); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java index 5e4d0cc..0b4b6d0 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -19,6 +19,7 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.export.Goldmingxi; import com.example.demo.domain.vo.bean.*; +import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.coin.*; @@ -285,6 +286,22 @@ public class ExportExcelServiceImpl implements ExportExcelService { } @Override + public Exception CashExcel(String message) throws Exception { + return exportExcelGeneric(message, "cashUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("cashCollection"); + CashCollection cashCollection = objectMapper.treeToValue(beanRechargeNode, CashCollection.class); + page.setCashCollection(cashCollection); + return cashRefundController.export(page); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + + @Override public List getExcel(Export export) { List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); System.out.println(list+"-------------------------------"); @@ -523,6 +540,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { return BeanOnlineRechargeInfo.class; case "financeUser": return CashRecordDTO.class; + case "cashUser": + return CashCollection.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 99c6b6f..ce94b08 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -255,4 +255,20 @@ left join recharge_activity ra on ra.id = cr.activity where cr.id=#{id} + \ No newline at end of file diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index b9dd5fe..8887167 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -26,15 +26,15 @@ refund_amount, related_id, audit_id, - status, + status ) VALUES ( #{jwcode}, #{name}, #{market}, #{orderCode}, #{bankCode}, - #{permanentGold}, - #{freeGold}, + #{partRefundGold}, + #{partRefundFree}, #{submitterId}, #{submitterMarket}, #{voucher}, @@ -51,7 +51,7 @@ #{refundAmount}, #{id}, #{auditId}, - #{status}, + #{status} ); @@ -73,7 +73,7 @@ - update cash_record + update cash_record_refund set status = 10, refund_model = #{refundModel}, @@ -81,15 +81,15 @@ where id = #{id} - update cash_record set status = 11 - where order_type =2 and id = #{id} + update cash_record_refund set status = 11 + where id = #{id} - update cash_record set status = #{status},executor = #{executor},reject_reason = #{rejectReason} - where order_type =2 and id = #{id} + update cash_record_refund set status = #{status},executor = #{executor},reject_reason = #{rejectReason} + where id = #{id} - update cash_record set refund_currency = #{refundCurrency}, + update cash_record_refund set refund_currency = #{refundCurrency}, refund_amount = #{refundAmount}, refund_channels = #{refundChannels}, refund_time = #{refundTime}, @@ -97,10 +97,10 @@ refund_voucher = #{refundVoucher}, status = #{status}, executor = #{executor} - where order_type =2 and id = #{id} + where id = #{id} - update cash_record + update cash_record_collection set status = #{status} @@ -378,4 +378,12 @@ + + \ No newline at end of file diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index ffa4b51..25cc1c4 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -1,7 +1,6 @@ - update user_gold_record set audit_id = #{auditId}, @@ -12,43 +11,29 @@ order by create_time DESC limit 1 - update user - set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0), - sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0), - sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0), - sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0), - current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0), - current_free_june = current_free_june + COALESCE(#{currentFreeJune},0), - current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0), - current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0), - recharge_num = recharge_num+COALESCE(#{rechargeNum},0) - - + + + current_permanent_gold = current_permanent_gold + #{currentPermanentGold}, + + + current_free_june = current_free_june + #{currentFreeJune}, + + + current_free_december = current_free_december + #{currentFreeDecember}, + + + current_task_gold = current_task_gold + #{currentTaskGold}, + + where jwcode = #{jwcode} - update user_gold_record set is_refund = #{isRefund} - where order_code = #{orderCode} - - - update user - set first_recharge = NOW() - where jwcode = #{jwcode} + where order_code = #{orderCode} and type in (0,1) - - - - - - - - - - + + + + + update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null + + \ No newline at end of file diff --git a/src/main/resources/mapper/MarketMapper.xml b/src/main/resources/mapper/MarketMapper.xml index 7f59272..496fe44 100644 --- a/src/main/resources/mapper/MarketMapper.xml +++ b/src/main/resources/mapper/MarketMapper.xml @@ -38,4 +38,10 @@ + \ No newline at end of file