From 686b5fbb2fae4f83c175724303965b927ccbf379 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Sat, 8 Nov 2025 09:41:52 +0800 Subject: [PATCH] =?UTF-8?q?11.8=20=E5=AF=BC=E5=87=BA=E4=B8=8E=E9=80=80?= =?UTF-8?q?=E6=AC=BE?= 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 | 22 ++ .../demo/controller/cash/CashRefundController.java | 78 ++++++- .../demo/controller/coin/ExportController.java | 20 ++ .../com/example/demo/domain/DTO/FinanceDTO.java | 36 ++++ .../example/demo/domain/vo/cash/CashRecordDTO.java | 232 +++++++++++++++++++-- .../demo/domain/vo/cash/CashRecordRefund.java | 6 +- .../com/example/demo/domain/vo/cash/LhlAudit.java | 23 ++ .../example/demo/mapper/cash/CashRefundMapper.java | 8 +- .../com/example/demo/mapper/coin/MarketMapper.java | 1 + .../example/demo/service/cash/RefundService.java | 4 + .../demo/service/coin/ExportExcelService.java | 2 + .../demo/service/listen/FinanceListener.java | 36 ++++ .../serviceImpl/cash/CashRefundServiceImpl.java | 161 +++++++++++++- .../serviceImpl/coin/ExportExcelServiceImpl.java | 26 +++ .../resources/cashMapper/CashCollectionMapper.xml | 18 +- src/main/resources/cashMapper/CashRefundMapper.xml | 107 +++++++++- src/main/resources/mapper/MarketMapper.xml | 3 + 18 files changed, 741 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/example/demo/domain/DTO/FinanceDTO.java create mode 100644 src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java create mode 100644 src/main/java/com/example/demo/service/listen/FinanceListener.java diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index f0b2475..a907536 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -28,4 +28,6 @@ public interface ExportService { Result addExportBean(BeanRechargeDTO dto); Result addExportOnline(OnlineDTO dto); + //现金负责人退款导出 + Result addExportFinance(FinanceDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index d4eb27c..ad7e322 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -124,6 +124,11 @@ public class ExportServiceImpl implements ExportService { articleDTO.setUrl(""); articleDTO.setFileName(generateFileName("文章明细", adminName)); articleDTO.setDataNum(0); + } else if(dto instanceof FinanceDTO financeDTO){ + financeDTO.setAccount(Integer.valueOf(account)); + financeDTO.setUrl(""); + financeDTO.setFileName(generateFileName("现金明细", adminName)); + financeDTO.setDataNum(0); } } @@ -211,6 +216,16 @@ public class ExportServiceImpl implements ExportService { onlineDTO.getFileName(), onlineDTO.getDataNum() ); + }else if (dto instanceof FinanceDTO financeDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + financeDTO.getType(), + financeDTO.getState(), + financeDTO.getUrl(), + financeDTO.getFileName(), + financeDTO.getDataNum() + ); } } @@ -239,6 +254,8 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, beanRechargeDTO.getBeanSystemRechargeInfo()); } else if (dto instanceof OnlineDTO onlineDTO){ requestData.put(requestDataKey, onlineDTO.getBeanOnlineRechargeInfo()); + }else if(dto instanceof FinanceDTO financeDTO){ + requestData.put(requestDataKey, financeDTO.getCashRecordDTO()); } exportData.put("requestData", requestData); @@ -294,4 +311,9 @@ public class ExportServiceImpl implements ExportService { public Result addExportOnline(OnlineDTO dto) { return addExport(dto, "在线明细", "online:queue:export_queue", "beanOnlineRechargeInfo"); } + + @Override + public Result addExportFinance(FinanceDTO dto) { + return addExport(dto, "现金明细", "finance:queue:export_queue", "cashRecordDTO"); + } } \ 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 9614661..1aec3c7 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -3,6 +3,7 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; +import com.example.demo.domain.vo.cash.CashRecordDTO; import com.example.demo.domain.vo.cash.CashRecordDone; import com.example.demo.domain.vo.cash.CashRecordRefund; import com.example.demo.domain.vo.coin.Page; @@ -44,6 +45,8 @@ public class CashRefundController { private RefundService refundService; @Autowired MarketService marketService; + + /** * 当地财务负责人退款记录 */ @@ -67,20 +70,20 @@ public class CashRefundController { } // 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDone() != null ? page.getCashRecordDone().getMarkets() : null; + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 - if (page.getCashRecordDone() != null) { + if (page.getCashRecordDTO() != null) { // 保持 requestedMarkets 不变,原样接受 // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null } } else { // 普通用户:必须校验权限 if (requestedMarkets == null || requestedMarkets.isEmpty()) { - page.getCashRecordDone().setMarkets(markets); + page.getCashRecordDTO().setMarkets(markets); } if (!markets.containsAll(requestedMarkets)) { return Result.error("无权限!请求的市场不在授权范围内。"); @@ -102,6 +105,50 @@ public class CashRefundController { } } /** + * 执行人查看退款现金记录 + */ + @PostMapping("/exSelect") + public Result executor(@RequestBody Page page) throws Exception { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + +// 解析 token 获取用户信息 + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + List userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); + List markets = marketService.getMarketIds(userMarkets); + +// 校验分页参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + return Result.error("页码数为空!"); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + return Result.error("页大小为空!"); + } + +// 获取传入的市场列表 + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; + +// 权限校验逻辑 + if (markets.contains("9") || markets.contains("9999")) { + // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets + // 如果业务需要,也可以在这里做空值处理 + if (page.getCashRecordDTO() != null) { + // 保持 requestedMarkets 不变,原样接受 + // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null + } + } else { + // 普通用户:必须校验权限 + if (requestedMarkets == null || requestedMarkets.isEmpty()) { + page.getCashRecordDTO().setMarkets(markets); + } + if (!markets.containsAll(requestedMarkets)) { + return Result.error("无权限!请求的市场不在授权范围内。"); + } + // 校验通过,保持 requestedMarkets 不变 + } + return Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + } + /** * 查询客服提交现金记录 */ @PostMapping("/selecta") @@ -161,4 +208,29 @@ public class CashRefundController { } } + /** + * 新增线上退款订单 + */ + @PostMapping("/addOnline") + public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund){ + try { + return Result.success(refundService.add(cashRecordRefund)); + } catch (Exception e) { + return Result.error(e.getMessage()); + } + } + + @PostMapping("/export") + public Result export(@RequestBody Page page) throws Exception { + +// 校验分页参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + return Result.error("页码数为空!"); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + return Result.error("页大小为空!"); + } + + return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + } } 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 d6e120f..01c3f14 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -195,4 +195,24 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + /** + * 负责人退款导出 + */ + @PostMapping("/exportFinance") + public Result exportFinance(@Valid @RequestBody FinanceDTO 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.addExportFinance(dto); + } finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); + } + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java new file mode 100644 index 0000000..d98283a --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/FinanceDTO.java @@ -0,0 +1,36 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.vo.cash.CashRecordDTO; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName FinanceDTO + * @description: + * @author: huangqizhen + * @create: 2025−11-06 21:22 + * @Version 1.0 + **/ +@Data +@NoArgsConstructor +public class FinanceDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 12; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + private CashRecordDTO cashRecordDTO; + + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 5000; +} 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 c7c2f63..8856418 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 @@ -1,9 +1,14 @@ package com.example.demo.domain.vo.cash; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; import java.util.List; /** @@ -16,24 +21,217 @@ import java.util.List; **/ @Data @AllArgsConstructor +@NoArgsConstructor public class CashRecordDTO extends CashRecordRefund{ - private Integer activity; - private String goodsName; - private Integer goodsNum; - private String numUnit; - private BigDecimal gold; - private BigDecimal free; - private String paymentCurrency; - private BigDecimal paymentAmount; - private String receiveCurrency; - private BigDecimal receiveAmount; - private BigDecimal handlingCharges; - private String payType; - private String receivedMarket; - private String payVoucher; - private String payRemark; - private List goodsNames; - private List markets; + private String activity;// 活动 + private String goodsName;// 商品名称 + private Integer goodsNum;// 商品数量 + private String numUnit;// 商品单位 + private BigDecimal gold;//永久金币 + private BigDecimal free;//免费金币 + private String paymentCurrency;// 支付币种 + private BigDecimal paymentAmount;// 支付金额 + private String receivedCurrency;// 收款币种 + private BigDecimal receivedAmount;// 收款金额 + private BigDecimal handlingCharges;// 手续费 + private String payBankCode;// 付款银行 + private String payType;// 支付方式 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime payTime;// 付款时间 + private String receivedMarket;// 收款地区 + private String payVoucher;// 支付凭证 + private String payRemark;// 支付备注 + //提交人 + private String paySubmitter; + //提交人 + private String Submitter; + //审核人 + private String audit; + //到账日期 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private LocalDateTime receivedTime; + private List goodsNames;// 商品名称 + private List markets;// 地区 + /** + * 序号 + */ + private Integer id; + + /** + * 精网号 + */ + private Integer jwcode; + + /** + * 姓名 + */ + private String userName; + private String name; + + /** + * 所属地区 + */ + private String market; + + /** + * 金币订单号 + */ + private String orderCode; + + /** + * 银行流水订单号 + */ + private String bankCode; + + /** + * 永久金币 + */ + private Integer permanentGold; + + /** + * 免费金币 + */ + private Integer freeGold; + + /** + * 审核人id + */ + private Integer auditId; + + /** + * 订单状态(1位代表收款,2位代表退款) + 0:线下财务待审核;1:线下财务审核通过待填手续费;2线下财务审核驳回;5:手动撤回待编辑提交 + 3:link线上财务复核待填手续费 + 4:收款流程全部结束 + 6:退款 + --------------------------------------------- + 10:地区财务待审核;11:地区财务手动撤回待编辑提交12:地区财务驳回; + 20:地区负责人待审核;22:地区负责人驳回; + 30:总部财务待审核;32:总部财务驳回; + 40:执行人待处理;41:执行人已处理,退款结束 + */ + private Integer status; + + /** + * 提交人id + */ + private Integer submitterId; + + /** + * 提交人地区 + */ + private String submitterMarket; + + /** + * 转账凭证 + */ + private String voucher; + + /** + * 备注 + */ + private String remark; + + /** + * 驳回理由 + */ + private String rejectReason; + + /** + * 退款备注(理由),客服填写 + */ + private String refundReason; + + /** + * 退款方式(0全额/1部分) + */ + private Integer refundModel; + + /** + * 退款执行人OA号 + */ + private Integer executor; + + /** + * 退款途径 + */ + private String refundChannels; + + /** + * 退款日期(到天) + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date refundTime; + + /** + * 退款备注(执行人填写) + */ + private String refundRemark; + + /** + * 退款截图 + */ + private String refundVoucher; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date updateTime; + + /** + * 审核时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date auditTime; + + /** + * 退款币种 + */ + private String refundCurrency; + + /** + * 退款金额 + */ + private String refundAmount; + + /** + * 关联收款id + */ + private Integer relatedId; + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @ExcelIgnore + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + private String submitterName; + private String auditName; + private String executorName; + private String marketName; + private List statuses; + + private String processInstanceId; // 流程实例ID + private String currentTaskId; // 当前任务ID + + private String areaServise; + private String areaFinance; + private String areaCharge; + private String headFinance; + private String sortField; + private String sortOrder; + + @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; // 结束时间 + } 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 5be39cf..5883655 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 @@ -17,7 +17,6 @@ import lombok.NoArgsConstructor; */ @Data @NoArgsConstructor -@AllArgsConstructor public class CashRecordRefund { /** * 序号 @@ -32,6 +31,7 @@ public class CashRecordRefund { /** * 姓名 */ + private String userName; private String name; /** @@ -126,6 +126,7 @@ public class CashRecordRefund { /** * 退款日期(到天) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date refundTime; /** @@ -141,16 +142,19 @@ public class CashRecordRefund { /** * 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date createTime; /** * 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date updateTime; /** * 审核时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") private Date auditTime; /** 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 new file mode 100644 index 0000000..6a05965 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java @@ -0,0 +1,23 @@ +package com.example.demo.domain.vo.cash; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @program: GOLD + * @ClassName LhlAudit + * @description: + * @author: huangqizhen + * @create: 2025−11-05 16:45 + * @Version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LhlAudit { + private String areaServise;// + private String areaFinance; + private String areaCharge; + private String headFinace; +} 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 4c1039a..980016b 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java +++ b/src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java @@ -1,9 +1,6 @@ package com.example.demo.mapper.cash; -import com.example.demo.domain.vo.cash.CashCollection; -import com.example.demo.domain.vo.cash.CashRecordDTO; -import com.example.demo.domain.vo.cash.CashRecordDone; -import com.example.demo.domain.vo.cash.CashRecordRefund; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.RefundUser; import org.apache.ibatis.annotations.Mapper; @@ -32,4 +29,7 @@ public interface CashRefundMapper { void addAudit(CashRecordDone cashRecordDone); void updateAudit(CashRecordDone cashRecordDone); List financeSelect(CashRecordDTO cashRecordDTO); + //获取各阶段审核人 + LhlAudit getAudit(Integer id); + List exSelect(CashRecordDTO cashRecordDTO); } 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 9102db8..4feda3d 100644 --- a/src/main/java/com/example/demo/mapper/coin/MarketMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/MarketMapper.java @@ -14,4 +14,5 @@ public interface MarketMapper { Market getMarketIdDao(String country); Market getMarketIdBytype(String market); + String getMarketById(String market); } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/cash/RefundService.java b/src/main/java/com/example/demo/service/cash/RefundService.java index 57f1035..389b237 100644 --- a/src/main/java/com/example/demo/service/cash/RefundService.java +++ b/src/main/java/com/example/demo/service/cash/RefundService.java @@ -32,4 +32,8 @@ public interface RefundService { int finalreview(CashRecordDone cashRecordDone); PageInfo financeSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); + + PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO); + //新增线上退款记录 + void addOnline(CashRecordRefund cashRecordRefund); } 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 c0d316b..669f8f3 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -34,4 +34,6 @@ public interface ExportExcelService { Exception OnlineExcel(String message) throws Exception; + //负责人退款导出 + Exception FinanceExcel(String message) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/listen/FinanceListener.java b/src/main/java/com/example/demo/service/listen/FinanceListener.java new file mode 100644 index 0000000..b72b110 --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/FinanceListener.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 FinanceListener + * @description: + * @author: huangqizhen + * @create: 2025−11-06 21:35 + * @Version 1.0 + **/ +@Component +public class FinanceListener extends BaseMessageListener{ + @Autowired + private ExportExcelService exportExcelService; + + @Autowired + public FinanceListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "finance:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.FinanceExcel(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 8dbce7a..cefa8bd 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java @@ -1,16 +1,19 @@ package com.example.demo.serviceImpl.cash; +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.User; import com.example.demo.domain.entity.UserGoldRecord; -import com.example.demo.domain.vo.cash.CashRecordDTO; -import com.example.demo.domain.vo.cash.CashRecordDone; -import com.example.demo.domain.vo.cash.CashRecordRefund; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.Result; +import com.example.demo.exception.SystemException; +import com.example.demo.mapper.cash.CashCollectionMapper; 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; @@ -19,6 +22,7 @@ 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; @@ -46,11 +50,53 @@ public class CashRefundServiceImpl implements RefundService { private AuditMapper auditMapper; @Autowired private MarketMapper marketMapper; + @Autowired + private CashCollectionMapper cashCollectionMapper; + @Autowired + private AuditController auditController; + @Override public PageInfo select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.select(cashRecordDTO); + 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(cashCollection.getPermanentGold()== null){ + cashCollection.setPermanentGold(0); + } + 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); } @@ -224,6 +270,115 @@ CashRecordDone cashRecordDone1 = new CashRecordDone(); PageHelper.startPage(pageNum, pageSize); // System.out.println(goldDetail.getMarkets()); List list = cashRefundMapper.financeSelect(cashRecordDTO); + System.out.println( list); + 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(cashCollection.getPermanentGold()== null){ + cashCollection.setPermanentGold(0); + } + 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); } + + @Override + public PageInfo exSelect(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) { + PageHelper.startPage(pageNum, pageSize); +// System.out.println(goldDetail.getMarkets()); + List list = cashRefundMapper.exSelect(cashRecordDTO); + 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()); + }); + return new PageInfo<>(list); + } + + @Override + public void addOnline(CashRecordRefund cashRecordRefund) { + if(cashRecordRefund.getJwcode()==null){ + throw new BusinessException("未输入精网号") ; + } + if(cashRecordRefund.getRefundModel()== null){ + throw new BusinessException("请填充退款类型") ; + } + if(cashRecordRefund.getRefundReason()== null){ + throw new BusinessException("请填写退款理由") ; + } + CashRecordDone cashRecordDonetwo = new CashRecordDone(); + cashRecordDonetwo.setAreaServise(cashRecordRefund.getAreaServise()); + cashRefundMapper.addAudit(cashRecordDonetwo); + cashRecordRefund.setAuditId(cashRecordDonetwo.getId()); + + cashRecordRefund.setStatus(20); + //生成订单号后半部分 + String orderNumber = cashRecordRefund.getOrderCode(); + //构建订单信息 + cashRecordRefund.setOrderCode("TK" + orderNumber); //订单号 + cashRecordRefund.setMarket(String.valueOf(Integer.valueOf(marketMapper.getMarketId(cashRecordRefund.getMarket())))); + cashRefundMapper.insert(cashRecordRefund); + CashRecordDone cashRecordDone1 = new CashRecordDone(); + cashRecordDone1.setId(cashRecordRefund.getId()); + cashRecordDone1.setStatus(6); + if (cashRecordDone1.getId()!=null||cashRecordDone1.getOrderCode()!= null) + cashRefundMapper.updateStatus(cashRecordDone1); + else throw new SystemException("提交失败") ; + } } 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 862ec37..5e4d0cc 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -8,6 +8,7 @@ import com.example.demo.Util.ExcelUploadUtil; import com.example.demo.Util.JWTUtil; import com.example.demo.controller.bean.BeanConsumeController; import com.example.demo.controller.bean.BeanRechargeController; +import com.example.demo.controller.cash.CashRefundController; import com.example.demo.controller.coin.ConsumeController; import com.example.demo.controller.coin.GoldDetailController; import com.example.demo.controller.coin.RechargeController; @@ -18,10 +19,14 @@ 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.CashRecordDTO; import com.example.demo.domain.vo.coin.*; +import com.example.demo.mapper.cash.CashRefundMapper; import com.example.demo.mapper.coin.ExportMapper; +import com.example.demo.service.cash.RefundService; import com.example.demo.service.coin.ExportExcelService; +import com.example.demo.serviceImpl.cash.CashRefundServiceImpl; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -32,6 +37,7 @@ import com.example.demo.service.coin.AiEmotionService; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.Finance; import org.apache.xmlbeans.impl.xb.xsdschema.Attribute; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -76,6 +82,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { private BeanRechargeController beanRechargeController; @Autowired private AuthenticationManager authenticationManager; + @Autowired + private CashRefundController cashRefundController; // 每页查询的数据量 private static final int PAGE_SIZE = 5000; @Autowired @@ -261,6 +269,22 @@ public class ExportExcelServiceImpl implements ExportExcelService { } @Override + public Exception FinanceExcel(String message) throws Exception { + return exportExcelGeneric(message, "financeUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("cashRecordDTO"); + CashRecordDTO cashRecordDTO = objectMapper.treeToValue(beanRechargeNode, CashRecordDTO.class); + page.setCashRecordDTO(cashRecordDTO); + 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+"-------------------------------"); @@ -497,6 +521,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { return BeanSystemRechargeInfo.class; case "onlineUser": return BeanOnlineRechargeInfo.class; + case "financeUser": + return CashRecordDTO.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); } diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 974dc80..b26aac5 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -241,12 +241,16 @@ limit #{size} \ No newline at end of file diff --git a/src/main/resources/cashMapper/CashRefundMapper.xml b/src/main/resources/cashMapper/CashRefundMapper.xml index 3ecb7a7..b9dd5fe 100644 --- a/src/main/resources/cashMapper/CashRefundMapper.xml +++ b/src/main/resources/cashMapper/CashRefundMapper.xml @@ -6,7 +6,6 @@ jwcode, name, market, - activity, order_code, bank_code, permanent_gold, @@ -32,7 +31,6 @@ #{jwcode}, #{name}, #{market}, - #{activity}, #{orderCode}, #{bankCode}, #{permanentGold}, @@ -133,7 +131,7 @@ - select crr.id, crr.jwcode, @@ -158,14 +156,15 @@ la.head_finance, crc.activity, crc.goods_name, - crc.goods_num, + crc.good_num as goodsNum, crc.num_unit, crc.pay_type, crc.pay_time, crc.voucher, crc.remark, crc.payment_currency, - crc.payment_amount, + crc.payment_amount + from cash_record_refund crr left join lhl_audit la on la.id = crr.audit_id left join cash_record_collection crc on crc.id = crr.related_id @@ -215,7 +214,7 @@ ORDER BY ${sortField} ${sortOrder} - ORDER BY create_time DESC + ORDER BY crr.create_time DESC @@ -225,7 +224,7 @@ crr.name, crr.market, crc.goods_name, - crc.goods_num, + crc.good_num as goodsNum, crc.num_unit, crr.refund_model, crr.submitter_id, @@ -235,9 +234,14 @@ crr.permanent_gold, crr.free_gold, crr.audit_id, - crr.related_id + crr.related_id, + la.area_servise, + la.area_finance, + la.area_charge, + la.head_finance from cash_record_refund crr left join cash_record_collection crc on crc.id = crr.related_id + left join lhl_audit la on la.id = crr.audit_id and crr.status = #{status} @@ -285,8 +289,93 @@ ORDER BY ${sortField} ${sortOrder} - ORDER BY create_time DESC + ORDER BY crr.create_time DESC + + + \ No newline at end of file diff --git a/src/main/resources/mapper/MarketMapper.xml b/src/main/resources/mapper/MarketMapper.xml index 734f78a..7f59272 100644 --- a/src/main/resources/mapper/MarketMapper.xml +++ b/src/main/resources/mapper/MarketMapper.xml @@ -35,4 +35,7 @@ + \ No newline at end of file