|
|
@@ -23,6 +23,7 @@ import com.cyksj.mapper.manage.coupon.CouponDistributePopularizeMapper;
|
|
|
import com.cyksj.mapper.manage.distribute.*;
|
|
|
import com.cyksj.mapper.manage.distribute.equipment.UserDistributeEquipmentMapper;
|
|
|
import com.cyksj.mapper.manage.distribute.sub.UserDistributeSubMapper;
|
|
|
+import com.cyksj.model.dto.UserDistributeOrderDataDto;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.BusinessDistributeDefaultRateDetailReq;
|
|
|
import com.cyksj.model.request.DistributeApplyMoneyReq;
|
|
|
@@ -298,9 +299,40 @@ public class DistributeController {
|
|
|
* 固定推广者列表
|
|
|
*/
|
|
|
@GetMapping
|
|
|
- public Result<SearchResult<UserDistributeViews>> distributeList(String nickname, String showId, String startTime, String endTime, Boolean isSpecialEp) {
|
|
|
+ public Result<SearchResult<UserDistributeViews>> distributeList(Long userId, String nickname, String showId, String startTime, String endTime, Boolean isSpecialEp, String sort, String order) {
|
|
|
long adminId = StpUtil.getLoginIdAsLong();
|
|
|
MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap());
|
|
|
+ String tb2 = "user_distribute ud";
|
|
|
+ builder.put("tb2", tb2);
|
|
|
+ if (userId != null) {
|
|
|
+ builder.field(UserDistributeViews::getUserId, userId);
|
|
|
+ } else {
|
|
|
+ if ((StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) || (StrUtil.isNotBlank(sort) && List.of("inviteNum", "orders", "distributeUserNum", "distributeOrdersMoney", "distributeConsumerRate").contains(sort))) {
|
|
|
+ tb2 = "select ud.* " +
|
|
|
+ " from user_distribute ud left join user_distribute_shared us on us.shared_id = ud.user_id left join order_don od on od.user_id = us.user_id and od.is_fixed_distribute = 1" +
|
|
|
+ " and od.status not in ('noPayment', 'close')";
|
|
|
+ if (StrUtil.isNotBlank(startTime)) {
|
|
|
+ tb2 += String.format(" and od.created_time >= '%s' and od.created_time < '%s'", startTime, endTime);
|
|
|
+ }
|
|
|
+ tb2 += " where ud.deleted group by ud.id,ud.user_id,ud.business_id,ud.remark,ud.created_time,ud.update_time,ud.business_bind_time,ud.type";
|
|
|
+ if ("inviteNum".equals(sort)) {
|
|
|
+ tb2 += String.format(" order by count(DISTINCT us.user_id) %s", order);
|
|
|
+ }
|
|
|
+ if ("orders".equals(sort)) {
|
|
|
+ tb2 += String.format(" order by count(od.id) %s", order);
|
|
|
+ }
|
|
|
+ if ("distributeUserNum".equals(sort)) {
|
|
|
+ tb2 += String.format(" order by count(DISTINCT CASE WHEN od.status != 'refund' THEN us.user_id ELSE null END) %s", order);
|
|
|
+ }
|
|
|
+ if ("distributeOrdersMoney".equals(sort)) {
|
|
|
+ tb2 += String.format(" order by (ifnull(sum(if(od.is_dp and od.ori_money != 0,od.ori_money,od.money)),0) - ifnull(sum(od.refund_money),0)) %s", order);
|
|
|
+ }
|
|
|
+ if ("distributeConsumerRate".equals(sort)) {
|
|
|
+ tb2 += String.format(" order by (ifnull(cast(count(DISTINCT CASE WHEN od.status != 'refund' THEN us.user_id ELSE null END)/count(DISTINCT us.user_id) as decimal(10,2)),0)) %s", order);
|
|
|
+ }
|
|
|
+ builder.put("tb2", String.format("(%s) ud", tb2));
|
|
|
+ }
|
|
|
+ }
|
|
|
//是否是商务人员
|
|
|
if (userBusinessRateService.isBusiness(adminId)) {
|
|
|
builder.field(UserDistributeViews::getBusinessId, adminId);
|
|
|
@@ -314,27 +346,27 @@ public class DistributeController {
|
|
|
builder.field(UserDistributeViews::getUserId, userIds).op(Operator.InList);
|
|
|
}
|
|
|
}
|
|
|
- String timeSql = StrUtil.EMPTY;
|
|
|
- if (StrUtil.isNotBlank(startTime)) {
|
|
|
- timeSql += String.format("and od.created_time >= '%s'", startTime);
|
|
|
- }
|
|
|
- if (StrUtil.isNotBlank(endTime)) {
|
|
|
- timeSql += String.format("and od.created_time < '%s'", endTime);
|
|
|
- }
|
|
|
- if (StrUtil.isNotBlank(timeSql)) {
|
|
|
- builder.put("time", timeSql);
|
|
|
- //按时间筛选 固定推广人分销情况 倒序
|
|
|
- builder.orderBy(UserDistributeViews::getDistributeOrdersMoney).desc();
|
|
|
- }
|
|
|
if (isSpecialEp != null) {
|
|
|
//是否是特殊设备分销渠道商
|
|
|
String condition = String.format(" and %s (select 1 from user_distribute_equipment up where up.distribute_id = ud.id limit 1)", isSpecialEp ? "exists" : "not exists");
|
|
|
builder.put("condition", condition);
|
|
|
}
|
|
|
+
|
|
|
Map<Long, String> businessNameMap = new ConcurrentHashMap<>();
|
|
|
SearchResult<UserDistributeViews> search = beanSearcher.search(UserDistributeViews.class,
|
|
|
builder.build());
|
|
|
search.getDataList().forEach(view -> {
|
|
|
+ //查询订单数据
|
|
|
+ Long dsUserId = view.getUserId();
|
|
|
+ UserDistributeOrderDataDto orderDataDto = orderDonMapper.selectUserDistributeOrders(dsUserId, startTime, endTime);
|
|
|
+ if (orderDataDto != null) {
|
|
|
+ view.setInviteNum(orderDataDto.getInviteNum());
|
|
|
+ view.setOrders(orderDataDto.getOrders());
|
|
|
+ view.setDistributeOrdersMoney(orderDataDto.getDistributeOrdersMoney());
|
|
|
+ view.setDistributeConsumerRate(orderDataDto.getDistributeConsumerRate());
|
|
|
+ view.setDistributeUserNum(orderDataDto.getDistributeUserNum());
|
|
|
+ }
|
|
|
+
|
|
|
if (view.getDistributeOrdersMoney().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
Optional.ofNullable(userDistributeMapper.selectSoldMaxGoods(view.getUserId())).ifPresent(title -> view.setGoodsTitle(title));
|
|
|
}
|