From c321b41ad7cfb4f3338a169baaaa603cd5208d97 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 24 Feb 2025 10:31:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E8=B4=A6=E8=A1=A8=E6=A0=BC=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProfitSharingRecordController.java | 12 ++-- .../dto/ProfitSharingRecordGroupVO.java | 11 ++++ .../dto/ProfitSharingRecordTableRespVo.java | 14 ++++ .../dto/ProfitSharingTableRecordVO.java | 27 ++++++++ .../mapper/ProfitSharingRecordMapper.java | 5 ++ .../service/ProfitSharingRecordService.java | 5 +- .../impl/ProfitSharingRecordServiceImpl.java | 64 ++++++++++++++++++- .../mapper/ProfitSharingRecordMapper.xml | 35 ++++++++++ 8 files changed, 160 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordGroupVO.java create mode 100644 src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordTableRespVo.java create mode 100644 src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingTableRecordVO.java diff --git a/src/main/java/com/ycwl/basic/profitsharing/controller/ProfitSharingRecordController.java b/src/main/java/com/ycwl/basic/profitsharing/controller/ProfitSharingRecordController.java index 38e34fe..be3e462 100644 --- a/src/main/java/com/ycwl/basic/profitsharing/controller/ProfitSharingRecordController.java +++ b/src/main/java/com/ycwl/basic/profitsharing/controller/ProfitSharingRecordController.java @@ -3,7 +3,7 @@ package com.ycwl.basic.profitsharing.controller; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery; -import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO; +import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordTableRespVo; import com.ycwl.basic.profitsharing.service.ProfitSharingRecordService; import com.ycwl.basic.utils.ApiResponse; import io.swagger.annotations.Api; @@ -11,8 +11,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; - @RestController @RequestMapping("/api/profitSharingRecord/v1") @Api(tags = "利润分成记录相关接口") @@ -23,11 +21,9 @@ public class ProfitSharingRecordController { @ApiOperation("根据景区ID查询利润分成记录,支持分页,按创建时间倒序") @PostMapping("/page") - public ApiResponse> queryPage(@RequestBody ProfitSharingRecordReqQuery req) { - PageHelper.startPage(req.getPageNum(), req.getPageSize(), "create_time desc"); - List records = profitSharingRecordService.list(req); - PageInfo pageInfo = new PageInfo<>(records); - return ApiResponse.success(pageInfo); + public ApiResponse queryPage(@RequestBody ProfitSharingRecordReqQuery req) { + ProfitSharingRecordTableRespVo records = profitSharingRecordService.list(req); + return ApiResponse.success(records); } } diff --git a/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordGroupVO.java b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordGroupVO.java new file mode 100644 index 0000000..c7dbd2f --- /dev/null +++ b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordGroupVO.java @@ -0,0 +1,11 @@ +package com.ycwl.basic.profitsharing.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class ProfitSharingRecordGroupVO { + private Long orderId; + private Date createTime; +} diff --git a/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordTableRespVo.java b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordTableRespVo.java new file mode 100644 index 0000000..738b5d5 --- /dev/null +++ b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingRecordTableRespVo.java @@ -0,0 +1,14 @@ +package com.ycwl.basic.profitsharing.dto; + +import com.github.pagehelper.PageInfo; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class ProfitSharingRecordTableRespVo { + private List columns; + private List list; + private PageInfo page; +} diff --git a/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingTableRecordVO.java b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingTableRecordVO.java new file mode 100644 index 0000000..0a39d2d --- /dev/null +++ b/src/main/java/com/ycwl/basic/profitsharing/dto/ProfitSharingTableRecordVO.java @@ -0,0 +1,27 @@ +package com.ycwl.basic.profitsharing.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.Map; + +@Data +public class ProfitSharingTableRecordVO { + + @ApiModelProperty(value = "景区ID") + private Long scenicId; + private String scenicName; + + @ApiModelProperty(value = "订单ID") + private Long orderId; + + @ApiModelProperty(value = "订单金额") + private BigDecimal orderAmount; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + private Map records; +} diff --git a/src/main/java/com/ycwl/basic/profitsharing/mapper/ProfitSharingRecordMapper.java b/src/main/java/com/ycwl/basic/profitsharing/mapper/ProfitSharingRecordMapper.java index 5e66fbd..7d53302 100644 --- a/src/main/java/com/ycwl/basic/profitsharing/mapper/ProfitSharingRecordMapper.java +++ b/src/main/java/com/ycwl/basic/profitsharing/mapper/ProfitSharingRecordMapper.java @@ -1,5 +1,6 @@ package com.ycwl.basic.profitsharing.mapper; +import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordGroupVO; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO; import com.ycwl.basic.profitsharing.entity.ProfitSharingRecord; @@ -13,6 +14,10 @@ import java.util.List; public interface ProfitSharingRecordMapper { List list(ProfitSharingRecordReqQuery req); + List listGroupByOrderId(ProfitSharingRecordReqQuery req); + + List listByOrderIds(List orderIds); + void batchInsert(List records); void deleteByScenicIdAndOrderId(Long scenicId, Long orderId, String reason); diff --git a/src/main/java/com/ycwl/basic/profitsharing/service/ProfitSharingRecordService.java b/src/main/java/com/ycwl/basic/profitsharing/service/ProfitSharingRecordService.java index d3abe23..1d9beea 100644 --- a/src/main/java/com/ycwl/basic/profitsharing/service/ProfitSharingRecordService.java +++ b/src/main/java/com/ycwl/basic/profitsharing/service/ProfitSharingRecordService.java @@ -1,9 +1,8 @@ package com.ycwl.basic.profitsharing.service; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery; -import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO; -import java.util.List; +import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordTableRespVo; public interface ProfitSharingRecordService { - List list(ProfitSharingRecordReqQuery req); + ProfitSharingRecordTableRespVo list(ProfitSharingRecordReqQuery req); } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/profitsharing/service/impl/ProfitSharingRecordServiceImpl.java b/src/main/java/com/ycwl/basic/profitsharing/service/impl/ProfitSharingRecordServiceImpl.java index d1517b8..3d65b3c 100644 --- a/src/main/java/com/ycwl/basic/profitsharing/service/impl/ProfitSharingRecordServiceImpl.java +++ b/src/main/java/com/ycwl/basic/profitsharing/service/impl/ProfitSharingRecordServiceImpl.java @@ -1,23 +1,83 @@ package com.ycwl.basic.profitsharing.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordGroupVO; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery; import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO; +import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordTableRespVo; +import com.ycwl.basic.profitsharing.dto.ProfitSharingTableRecordVO; +import com.ycwl.basic.profitsharing.entity.ProfitSharingConfig; +import com.ycwl.basic.profitsharing.entity.ProfitSharingUser; import com.ycwl.basic.profitsharing.mapper.ProfitSharingRecordMapper; +import com.ycwl.basic.profitsharing.repository.ProfitSharingRepository; import com.ycwl.basic.profitsharing.service.ProfitSharingRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Service public class ProfitSharingRecordServiceImpl implements ProfitSharingRecordService { @Autowired private ProfitSharingRecordMapper profitSharingRecordMapper; + @Autowired + private ProfitSharingRepository profitSharingRepository; @Override - public List list(ProfitSharingRecordReqQuery req) { - return profitSharingRecordMapper.list(req); + public ProfitSharingRecordTableRespVo list(ProfitSharingRecordReqQuery req) { + ProfitSharingRecordTableRespVo respVo = new ProfitSharingRecordTableRespVo(); + PageHelper.startPage(req.getPageNum(), req.getPageSize(), "create_time desc"); + List list = profitSharingRecordMapper.listGroupByOrderId(req); + PageInfo pageInfo = new PageInfo<>(list); + respVo.setPage(pageInfo); + if (list.isEmpty()) { + return respVo; + } + List recordList = profitSharingRecordMapper.listByOrderIds(list.stream().map(ProfitSharingRecordGroupVO::getOrderId).collect(Collectors.toList())); + List scenicList = recordList.stream().map(ProfitSharingRecordRespVO::getScenicId).distinct().collect(Collectors.toList()); + List scenicConfig = scenicList.stream() + .map(scenicId -> profitSharingRepository.getScenicConfig(scenicId)) + .filter(item -> !Objects.isNull(item) && !Objects.isNull(item.getUsers())) + .filter(item -> !item.getUsers().isEmpty()) + .collect(Collectors.toList()); + List columnName = scenicConfig.stream() + .flatMap(item -> item.getUsers().stream()) + .map(ProfitSharingUser::getName) + .distinct().collect(Collectors.toList()); + respVo.setColumns(columnName); + List data = list.stream() + .collect(Collectors.groupingBy(ProfitSharingRecordGroupVO::getOrderId)) + .keySet() + .stream() + .map(profitSharingRecordGroupVOS -> { + return recordList.stream().filter(item -> item.getOrderId().equals(profitSharingRecordGroupVOS)).collect(Collectors.toList()); + }) + .map(value -> { + Map map = new HashMap<>(); + value.forEach(item -> { + map.put(item.getUserName(), item); + }); + ProfitSharingTableRecordVO vo = new ProfitSharingTableRecordVO(); + ProfitSharingRecordRespVO recordRespVO = value.get(0); + vo.setOrderId(recordRespVO.getOrderId()); + vo.setScenicId(recordRespVO.getScenicId()); + vo.setScenicName(recordRespVO.getScenicName()); + vo.setCreateTime(recordRespVO.getCreateTime()); + vo.setOrderAmount(recordRespVO.getOrderAmount()); + vo.setRecords(map); + return vo; + }) + .sorted((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime())) + .collect(Collectors.toList()); + respVo.setList(data); + return respVo; } } \ No newline at end of file diff --git a/src/main/resources/mapper/ProfitSharingRecordMapper.xml b/src/main/resources/mapper/ProfitSharingRecordMapper.xml index 45133b0..0604fe4 100644 --- a/src/main/resources/mapper/ProfitSharingRecordMapper.xml +++ b/src/main/resources/mapper/ProfitSharingRecordMapper.xml @@ -39,4 +39,39 @@ ORDER BY r.create_time desc + + \ No newline at end of file