Browse Source

04-03 地区-支付方式树形结构

lijianlin/feature-20260401-现金管理四期
lijianlin 6 days ago
parent
commit
a3565c96b0
  1. 15
      src/main/java/com/example/demo/controller/coin/MarketController.java
  2. 18
      src/main/java/com/example/demo/domain/DTO/AreaPayTypeDTO.java
  3. 2
      src/main/java/com/example/demo/domain/entity/CashRecord.java
  4. 20
      src/main/java/com/example/demo/domain/vo/cash/AreaPayTypeTreeVO.java
  5. 16
      src/main/java/com/example/demo/domain/vo/cash/PayTypeVO.java
  6. 3
      src/main/java/com/example/demo/mapper/coin/MarketMapper.java
  7. 4
      src/main/java/com/example/demo/service/coin/MarketService.java
  8. 6
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  9. 40
      src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java
  10. 12
      src/main/resources/mapper/MarketMapper.xml

15
src/main/java/com/example/demo/controller/coin/MarketController.java

@ -2,6 +2,7 @@ package com.example.demo.controller.coin;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Market;
import com.example.demo.domain.vo.cash.AreaPayTypeTreeVO;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.MarketService;
import com.example.demo.Util.LanguageTranslationUtil;
@ -48,6 +49,20 @@ public class MarketController {
}
}
//获取市场-支付方式树形结构
@RequestMapping("/getAreaPayTypeTree")
public Result getAreaPayTypeTree(@RequestHeader(defaultValue = "zh_CN") String lang) {
try {
List<AreaPayTypeTreeVO> marketsTree = marketService.getAreaPayTypeTree();
return Result.success(marketsTree);
} catch (Exception e) {
log.error("获取市场列表失败", e);
return Result.error("获取市场列表失败");
}
}
/**
* 递归转换市场名称为指定语言

18
src/main/java/com/example/demo/domain/DTO/AreaPayTypeDTO.java

@ -0,0 +1,18 @@
package com.example.demo.domain.DTO;
import lombok.Data;
/**
* @program: gold-java
* @ClassName AreaPayTypeDTO
* @description:
* @author: Ethan
* @create: 202604-03 16:06
* @Version 1.0
**/
@Data
public class AreaPayTypeDTO {
private Integer areaId;
private String areaName;
private Integer payTypeId;
private String payTypeName;
}

2
src/main/java/com/example/demo/domain/entity/CashRecord.java

@ -83,7 +83,7 @@ public class CashRecord implements Serializable {
private LocalDateTime refundTime; // 退款日期到天
private String refundRemark; // 退款备注执行人填写
private String refundVoucher; // 退款截图
private Integer performanceMarket; // 业绩地区
private String performanceMarket; // 业绩地区
private String performanceMarketName; // 业绩地区名称
// 系统字段
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

20
src/main/java/com/example/demo/domain/vo/cash/AreaPayTypeTreeVO.java

@ -0,0 +1,20 @@
package com.example.demo.domain.vo.cash;
import lombok.Data;
import java.util.List;
/**
* @program: gold-java
* @ClassName AreaPayTypeTreeVO
* @description:
* @author: Ethan
* @create: 202604-03 16:04
* @Version 1.0
**/
@Data
public class AreaPayTypeTreeVO {
private Integer id; // 地区ID
private String name; // 地区名称
private List<PayTypeVO> children; // 支付方式列表
}

16
src/main/java/com/example/demo/domain/vo/cash/PayTypeVO.java

@ -0,0 +1,16 @@
package com.example.demo.domain.vo.cash;
import lombok.Data;
/**
* @program: gold-java
* @ClassName PayTypeVO
* @description:
* @author: Ethan
* @create: 202604-03 16:04
* @Version 1.0
**/
@Data
public class PayTypeVO {
private Integer id;
private String name;
}

3
src/main/java/com/example/demo/mapper/coin/MarketMapper.java

@ -1,6 +1,7 @@
package com.example.demo.mapper.coin;
import cn.hutool.core.lang.Opt;
import com.example.demo.domain.DTO.AreaPayTypeDTO;
import com.example.demo.domain.entity.Market;
import org.apache.ibatis.annotations.Param;
@ -23,4 +24,6 @@ public interface MarketMapper {
String getMarketById(String market);
//获取市场id
List<Market> getMarketByIds(@Param("marketIds") Set<Integer> marketIds);
//获取市场-支付方式树形结构
List<AreaPayTypeDTO> selectAreaPayTypeList();
}

4
src/main/java/com/example/demo/service/coin/MarketService.java

@ -1,6 +1,7 @@
package com.example.demo.service.coin;
import com.example.demo.domain.entity.Market;
import com.example.demo.domain.vo.cash.AreaPayTypeTreeVO;
import java.util.List;
@ -19,4 +20,7 @@ public interface MarketService {
List<String> getMarketIds(List<String> list);
//dao获取市场id
String getMarketIdsDao(String country);
//获取市场-支付方式树形结构
List<AreaPayTypeTreeVO> getAreaPayTypeTree();
}

6
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -140,9 +140,9 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setOrderType(1); //订单类型1-收款
cashRecord.setMarket(cashCollection.getMarket());
if(areaInfo.getArea().equals("0")){
cashRecord.setPerformanceMarket(Integer.valueOf(cashCollection.getMarket()));
cashRecord.setPerformanceMarket(cashCollection.getMarket());
}else {
cashRecord.setPerformanceMarket(Integer.valueOf(areaInfo.getArea()));
cashRecord.setPerformanceMarket(areaInfo.getArea());
}
//地区根据 jwcode 插入
@ -521,6 +521,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
}else cashRecord.setName("未知");
cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(gOrder.getJwcode()));
cashRecord.setPerformanceMarket(cashRecord.getMarket());
if (gOrder.getType().equals("gold")){ //充金豆
cashRecord.setActivity("99");
cashRecord.setGoodsName("Link充值金豆");
@ -545,6 +546,7 @@ public class CashCollectionServiceImpl implements CashCollectionService {
cashRecord.setPayType("IOS内购");
cashRecord.setBankCode(gOrder.getIosTransactionId());
cashRecord.setReceivedMarket("4");
cashRecord.setPerformanceMarket("4");
cashRecord.setPayload("IOS");
break;
case 5:

40
src/main/java/com/example/demo/serviceImpl/coin/MarketServiceImpl.java

@ -1,12 +1,17 @@
package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.DTO.AreaPayTypeDTO;
import com.example.demo.domain.entity.Market;
import com.example.demo.domain.vo.cash.AreaPayTypeTreeVO;
import com.example.demo.domain.vo.cash.PayTypeVO;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.service.coin.MarketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@ -83,4 +88,39 @@ public class MarketServiceImpl implements MarketService {
return "24030"; // 异常时返回默认市场
}
}
@Override
public List<AreaPayTypeTreeVO> getAreaPayTypeTree() {
// 1. 查询关联数据
List<AreaPayTypeDTO> dtoList = marketMapper.selectAreaPayTypeList();
// 2. 按地区分组
Map<Integer, List<AreaPayTypeDTO>> groupByArea = dtoList.stream()
.collect(Collectors.groupingBy(AreaPayTypeDTO::getAreaId));
List<AreaPayTypeTreeVO> treeList = new ArrayList<>();
// 3. 封装树形
for (Map.Entry<Integer, List<AreaPayTypeDTO>> entry : groupByArea.entrySet()) {
AreaPayTypeDTO first = entry.getValue().get(0);
AreaPayTypeTreeVO tree = new AreaPayTypeTreeVO();
tree.setId(first.getAreaId());
tree.setName(first.getAreaName());
// 封装支付方式
List<PayTypeVO> children = entry.getValue().stream()
.map(dto -> {
PayTypeVO vo = new PayTypeVO();
vo.setId(dto.getPayTypeId());
vo.setName(dto.getPayTypeName());
return vo;
})
.distinct() // 去重
.collect(Collectors.toList());
tree.setChildren(children);
treeList.add(tree);
}
return treeList;
}
}

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

@ -55,4 +55,16 @@
</foreach>
</if>
</select>
<select id="selectAreaPayTypeList" resultType="com.example.demo.domain.DTO.AreaPayTypeDTO">
SELECT
m.id AS areaId,
m.name AS areaName,
pt.id AS payTypeId,
pt.name AS payTypeName
FROM payment_type_tree ptt
LEFT JOIN market m ON ptt.area_id = m.id
LEFT JOIN payment_type pt ON ptt.type_id = pt.id
WHERE m.id IS NOT NULL AND pt.id IS NOT NULL
ORDER BY areaId
</select>
</mapper>
Loading…
Cancel
Save