分账表格优化
This commit is contained in:
parent
84bb5727e9
commit
c321b41ad7
@ -3,7 +3,7 @@ package com.ycwl.basic.profitsharing.controller;
|
|||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery;
|
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.profitsharing.service.ProfitSharingRecordService;
|
||||||
import com.ycwl.basic.utils.ApiResponse;
|
import com.ycwl.basic.utils.ApiResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@ -11,8 +11,6 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/profitSharingRecord/v1")
|
@RequestMapping("/api/profitSharingRecord/v1")
|
||||||
@Api(tags = "利润分成记录相关接口")
|
@Api(tags = "利润分成记录相关接口")
|
||||||
@ -23,11 +21,9 @@ public class ProfitSharingRecordController {
|
|||||||
|
|
||||||
@ApiOperation("根据景区ID查询利润分成记录,支持分页,按创建时间倒序")
|
@ApiOperation("根据景区ID查询利润分成记录,支持分页,按创建时间倒序")
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
public ApiResponse<PageInfo<ProfitSharingRecordRespVO>> queryPage(@RequestBody ProfitSharingRecordReqQuery req) {
|
public ApiResponse<ProfitSharingRecordTableRespVo> queryPage(@RequestBody ProfitSharingRecordReqQuery req) {
|
||||||
PageHelper.startPage(req.getPageNum(), req.getPageSize(), "create_time desc");
|
ProfitSharingRecordTableRespVo records = profitSharingRecordService.list(req);
|
||||||
List<ProfitSharingRecordRespVO> records = profitSharingRecordService.list(req);
|
return ApiResponse.success(records);
|
||||||
PageInfo<ProfitSharingRecordRespVO> pageInfo = new PageInfo<>(records);
|
|
||||||
return ApiResponse.success(pageInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -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<String> columns;
|
||||||
|
private List<ProfitSharingTableRecordVO> list;
|
||||||
|
private PageInfo page;
|
||||||
|
}
|
@ -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<String, ProfitSharingRecordRespVO> records;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.ycwl.basic.profitsharing.mapper;
|
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.ProfitSharingRecordReqQuery;
|
||||||
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO;
|
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO;
|
||||||
import com.ycwl.basic.profitsharing.entity.ProfitSharingRecord;
|
import com.ycwl.basic.profitsharing.entity.ProfitSharingRecord;
|
||||||
@ -13,6 +14,10 @@ import java.util.List;
|
|||||||
public interface ProfitSharingRecordMapper {
|
public interface ProfitSharingRecordMapper {
|
||||||
List<ProfitSharingRecordRespVO> list(ProfitSharingRecordReqQuery req);
|
List<ProfitSharingRecordRespVO> list(ProfitSharingRecordReqQuery req);
|
||||||
|
|
||||||
|
List<ProfitSharingRecordGroupVO> listGroupByOrderId(ProfitSharingRecordReqQuery req);
|
||||||
|
|
||||||
|
List<ProfitSharingRecordRespVO> listByOrderIds(List<Long> orderIds);
|
||||||
|
|
||||||
void batchInsert(List<ProfitSharingRecord> records);
|
void batchInsert(List<ProfitSharingRecord> records);
|
||||||
|
|
||||||
void deleteByScenicIdAndOrderId(Long scenicId, Long orderId, String reason);
|
void deleteByScenicIdAndOrderId(Long scenicId, Long orderId, String reason);
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package com.ycwl.basic.profitsharing.service;
|
package com.ycwl.basic.profitsharing.service;
|
||||||
|
|
||||||
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery;
|
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordReqQuery;
|
||||||
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO;
|
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordTableRespVo;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ProfitSharingRecordService {
|
public interface ProfitSharingRecordService {
|
||||||
List<ProfitSharingRecordRespVO> list(ProfitSharingRecordReqQuery req);
|
ProfitSharingRecordTableRespVo list(ProfitSharingRecordReqQuery req);
|
||||||
}
|
}
|
@ -1,23 +1,83 @@
|
|||||||
package com.ycwl.basic.profitsharing.service.impl;
|
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.ProfitSharingRecordReqQuery;
|
||||||
import com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO;
|
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.mapper.ProfitSharingRecordMapper;
|
||||||
|
import com.ycwl.basic.profitsharing.repository.ProfitSharingRepository;
|
||||||
import com.ycwl.basic.profitsharing.service.ProfitSharingRecordService;
|
import com.ycwl.basic.profitsharing.service.ProfitSharingRecordService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ProfitSharingRecordServiceImpl implements ProfitSharingRecordService {
|
public class ProfitSharingRecordServiceImpl implements ProfitSharingRecordService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProfitSharingRecordMapper profitSharingRecordMapper;
|
private ProfitSharingRecordMapper profitSharingRecordMapper;
|
||||||
|
@Autowired
|
||||||
|
private ProfitSharingRepository profitSharingRepository;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ProfitSharingRecordRespVO> list(ProfitSharingRecordReqQuery req) {
|
public ProfitSharingRecordTableRespVo list(ProfitSharingRecordReqQuery req) {
|
||||||
return profitSharingRecordMapper.list(req);
|
ProfitSharingRecordTableRespVo respVo = new ProfitSharingRecordTableRespVo();
|
||||||
|
PageHelper.startPage(req.getPageNum(), req.getPageSize(), "create_time desc");
|
||||||
|
List<ProfitSharingRecordGroupVO> list = profitSharingRecordMapper.listGroupByOrderId(req);
|
||||||
|
PageInfo pageInfo = new PageInfo<>(list);
|
||||||
|
respVo.setPage(pageInfo);
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
return respVo;
|
||||||
|
}
|
||||||
|
List<ProfitSharingRecordRespVO> recordList = profitSharingRecordMapper.listByOrderIds(list.stream().map(ProfitSharingRecordGroupVO::getOrderId).collect(Collectors.toList()));
|
||||||
|
List<Long> scenicList = recordList.stream().map(ProfitSharingRecordRespVO::getScenicId).distinct().collect(Collectors.toList());
|
||||||
|
List<ProfitSharingConfig> 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<String> columnName = scenicConfig.stream()
|
||||||
|
.flatMap(item -> item.getUsers().stream())
|
||||||
|
.map(ProfitSharingUser::getName)
|
||||||
|
.distinct().collect(Collectors.toList());
|
||||||
|
respVo.setColumns(columnName);
|
||||||
|
List<ProfitSharingTableRecordVO> 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<String, ProfitSharingRecordRespVO> 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -39,4 +39,39 @@
|
|||||||
</where>
|
</where>
|
||||||
ORDER BY r.create_time desc
|
ORDER BY r.create_time desc
|
||||||
</select>
|
</select>
|
||||||
|
<select id="listGroupByOrderId" resultType="com.ycwl.basic.profitsharing.dto.ProfitSharingRecordGroupVO">
|
||||||
|
SELECT order_id, min(create_time) as create_time
|
||||||
|
FROM profit_sharing_record r
|
||||||
|
<where>
|
||||||
|
<if test="withDeleted != true">
|
||||||
|
delete_time is null
|
||||||
|
</if>
|
||||||
|
<if test="scenicId != null">
|
||||||
|
AND r.scenic_id = #{scenicId}
|
||||||
|
</if>
|
||||||
|
<if test="status != null">
|
||||||
|
AND r.status = #{status}
|
||||||
|
</if>
|
||||||
|
<if test="rateMode != null">
|
||||||
|
AND r.rate_mode = #{rateMode}
|
||||||
|
</if>
|
||||||
|
<if test="startTime != null">
|
||||||
|
AND r.create_time >= #{startTime}
|
||||||
|
</if>
|
||||||
|
<if test="endTime != null">
|
||||||
|
AND r.create_time <= #{endTime}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
GROUP BY order_id
|
||||||
|
</select>
|
||||||
|
<select id="listByOrderIds" resultType="com.ycwl.basic.profitsharing.dto.ProfitSharingRecordRespVO">
|
||||||
|
SELECT r.*, s.name as scenic_name
|
||||||
|
FROM profit_sharing_record r
|
||||||
|
LEFT JOIN scenic s ON s.id = r.scenic_id
|
||||||
|
WHERE r.order_id IN
|
||||||
|
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
|
||||||
|
#{orderId}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY r.create_time desc
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
Loading…
x
Reference in New Issue
Block a user