Browse Source

11.11 退款,导出全部接口

huangqizheng/feature-20251104113536-现金管理二期退款修改
huangqizhen 2 weeks ago
parent
commit
328d62da52
  1. 2
      src/main/java/com/example/demo/Export/ExportService.java
  2. 26
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 4
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  4. 18
      src/main/java/com/example/demo/controller/coin/ExportController.java
  5. 39
      src/main/java/com/example/demo/domain/DTO/CashDTO.java
  6. 21
      src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
  7. 4
      src/main/java/com/example/demo/domain/vo/cash/CashRecordRefund.java
  8. 3
      src/main/java/com/example/demo/domain/vo/cash/LhlAudit.java
  9. 13
      src/main/java/com/example/demo/domain/vo/coin/IdName.java
  10. 4
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  11. 6
      src/main/java/com/example/demo/mapper/cash/CashRefundMapper.java
  12. 5
      src/main/java/com/example/demo/mapper/coin/AuditMapper.java
  13. 4
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  14. 2
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  15. 36
      src/main/java/com/example/demo/service/listen/CashListener.java
  16. 290
      src/main/java/com/example/demo/serviceImpl/cash/CashRefundServiceImpl.java
  17. 19
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  18. 16
      src/main/resources/cashMapper/CashCollectionMapper.xml
  19. 32
      src/main/resources/cashMapper/CashRefundMapper.xml
  20. 69
      src/main/resources/mapper/AuditMapper.xml
  21. 6
      src/main/resources/mapper/MarketMapper.xml

2
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);
}

26
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");
}
}

4
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("测试消息");
}
}

18
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);
}
}
}

39
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: 202511-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;
}

21
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<String> goodsNames;// 商品名称
@ExcelIgnore
private List<String> 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<Integer> 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; // 结束时间

4
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;
}

3
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;
}
}

13
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;
}

4
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<CashCollection> selectBatchIds(Set<Integer> relatedIds);
}

6
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<CashRecordDTO> exSelect(CashRecordDTO cashRecordDTO);
}
List<LhlAudit> getAuditBatch(Set<Integer> auditIds);
}

5
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<Admin> getNamesByIds(Set<Integer> submitterIds);
}

4
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<Market> getMarket();
@ -15,4 +18,5 @@ public interface MarketMapper {
Market getMarketIdDao(String country);
Market getMarketIdBytype(String market);
String getMarketById(String market);
List<Market> getMarketByIds(@Param("marketIds") Set<Integer> marketIds);
}

2
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;
}

36
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: 202511-09 09:42
* @Version 1.0
**/
@Component
public class CashListener extends BaseMessageListener<String> {
@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);
}
}
}

290
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<CashRecordDTO> select(Integer pageNum, Integer pageSize, CashRecordDTO cashRecordDTO) {
PageHelper.startPage(pageNum, pageSize);
// System.out.println(goldDetail.getMarkets());
List<CashRecordDTO> list = cashRefundMapper.select(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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<CashRecordDTO> list = cashRefundMapper.financeSelect(cashRecordDTO);
System.out.println( list);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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<CashRecordDTO> list = cashRefundMapper.exSelect(cashRecordDTO);
if (list.isEmpty()) {
return new PageInfo<>(list);
}
// 批量收集ID
Set<Integer> relatedIds = new HashSet<>();
Set<Integer> marketIds = new HashSet<>();
Set<Integer> submitterIds = new HashSet<>();
Set<Integer> 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<Integer, CashCollection> cashCollectionMap = cashCollectionMapper.selectBatchIds(relatedIds)
.stream().collect(Collectors.toMap(CashCollection::getId, Function.identity()));
Map<Integer, String> marketNameMap = marketMapper.getMarketByIds(marketIds)
.stream().collect(Collectors.toMap(Market::getId, Market::getName));
Map<Integer, String> submitterNameMap = auditMapper.getNamesByIds(submitterIds)
.stream().collect(Collectors.toMap(Admin::getId, Admin::getAdminName));
Map<Integer, LhlAudit> 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);
}

19
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<Export> getExcel(Export export) {
List<Export> 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);
}

16
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -255,4 +255,20 @@
left join recharge_activity ra on ra.id = cr.activity
where cr.id=#{id}
</select>
<select id="selectBatchIds" resultType="com.example.demo.domain.vo.cash.CashCollection">
select cr.id,cr.jwcode,cr.name,cr.market,
cr.order_code,cr.bank_code,cr.goods_name,cr.good_num,cr.num_unit,cr.permanent_gold,cr.free_gold,
cr.payment_currency,cr.payment_amount,cr.received_currency,cr.received_amount,cr.handling_charge,
cr.pay_type,cr.received_market,cr.pay_time,cr.received_time,cr.audit_id,cr.status,cr.submitter_id,
cr.submitter_market,cr.voucher,cr.remark,cr.audit_time,a1.admin_name as submitterName,
a2.admin_name as auditName,ra.activity_name as activity
from cash_record_collection cr
left join admin a1 on cr.submitter_id = a1.id
left join admin a2 on cr.audit_id = a2.id
left join recharge_activity ra on ra.id = cr.activity
where cr.id IN
<foreach collection="relatedIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>

32
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}
);
</insert>
<insert id="addAudit" parameterType="com.example.demo.domain.vo.cash.CashRecordDone" useGeneratedKeys="true" keyProperty="id">
@ -73,7 +73,7 @@
</insert>
<update id="update">
update cash_record
update cash_record_refund
set
status = 10,
refund_model = #{refundModel},
@ -81,15 +81,15 @@
where id = #{id}
</update>
<update id="withdraw">
update cash_record set status = 11
where order_type =2 and id = #{id}
update cash_record_refund set status = 11
where id = #{id}
</update>
<update id="review">
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>
<update id="executor">
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>
<update id="updateStatus">
update cash_record
update cash_record_collection
set status = #{status}
<where>
<if test="id != null">
@ -378,4 +378,12 @@
</choose>
</select>
<select id="getAuditBatch" resultType="com.example.demo.domain.vo.cash.LhlAudit">
select * from lhl_audit
where id in
<foreach collection="auditIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>

69
src/main/resources/mapper/AuditMapper.xml

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.AuditMapper">
<!-- 修改订单审核人与审核状态-->
<update id="updateOrder">
update user_gold_record
set audit_id = #{auditId},
@ -12,43 +11,29 @@
order by create_time DESC
limit 1
</update>
<!--更新用户余额-->
<update id="updateUserGold">
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)
<set>
<if test="currentPermanentGold != null">
current_permanent_gold = current_permanent_gold + #{currentPermanentGold},
</if>
<if test="currentFreeJune != null">
current_free_june = current_free_june + #{currentFreeJune},
</if>
<if test="currentFreeDecember != null">
current_free_december = current_free_december + #{currentFreeDecember},
</if>
<if test="currentTaskGold != null">
current_task_gold = current_task_gold + #{currentTaskGold},
</if>
</set>
where jwcode = #{jwcode}
</update>
<!--修改消费订单为已退款-->
<update id="updateOrderRefund">
update user_gold_record
set is_refund = #{isRefund}
where order_code = #{orderCode}
</update>
<update id="updateFirstRecharge">
update user
set first_recharge = NOW()
where jwcode = #{jwcode}
where order_code = #{orderCode} and type in (0,1)
</update>
<!--根据订单号查未审核订单-->
<select id="selectOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record
where order_code = #{orderCode} and audit_status = 0
and flag=1
ORDER BY create_time DESC
limit 1
</select>
<!--多条件查询充值审核订单-->
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.coin.RechargeAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -113,7 +98,6 @@
</otherwise>
</choose>
</select>
<!--多条件查询退款审核订单-->
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.coin.RefundAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
@ -180,17 +164,20 @@
</otherwise>
</choose>
</select>
<!--根据订单号查订单-->
<select id="selectAllOrderByOrderCode" resultType="com.example.demo.domain.entity.UserGoldRecord">
select * from user_gold_record where order_code = #{orderCode} and flag=1
ORDER BY create_time DESC
limit 1
</select>
<select id="getAdminMarket" resultType="java.lang.String">
</select>
<select id="getName" resultType="java.lang.String">
select admin_name from admin where id = #{auditId}
</select>
</mapper>
<select id="getNamesByIds" resultType="com.example.demo.domain.entity.Admin">
select id, admin_name from admin
where id in
<foreach collection="submitterIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<update id="updateFirstRecharge">
update user set first_recharge = now() where jwcode = #{jwcode} and first_recharge is null
</update>
</mapper>

6
src/main/resources/mapper/MarketMapper.xml

@ -38,4 +38,10 @@
<select id="getMarketById" resultType="java.lang.String">
select name from market where id=#{market}
</select>
<select id="getMarketByIds" resultType="com.example.demo.domain.entity.Market">
select id,name from market where id in
<foreach collection="marketIds" item="marketId" open="(" separator="," close=")">
#{marketId}
</foreach>
</select>
</mapper>
Loading…
Cancel
Save