Sfoglia il codice sorgente

fix : SDK后台功能修改优化

bilingfeng 1 anno fa
parent
commit
3a8b7f723b
15 ha cambiato i file con 443 aggiunte e 102 eliminazioni
  1. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  2. 10 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/OrderController.java
  3. 12 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameUserRoleListParam.java
  4. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/AgentChoiceVO.java
  5. 25 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserRoleListVO.java
  6. 209 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/OrderExcelVO.java
  7. 11 10
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IAgentService.java
  8. 10 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IOrderService.java
  9. 59 17
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java
  10. 17 13
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java
  11. 9 13
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserServiceImpl.java
  12. 55 16
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java
  13. 4 15
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java
  14. 14 17
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java
  15. 1 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Agent.java

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -21,7 +21,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0, 删掉dubbo的group> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0, SDK后台功能修改优化> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 10 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/OrderController.java

@@ -20,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * @author : lingfeng
  * @time : 2022-11-07
@@ -51,4 +53,12 @@ public class OrderController {
     public ResultVO<IPage<LogPayCpVO>> callCpList(@Validated @RequestBody PayCallCpLogParam param) {
         return ResultVO.ok(logPayCpService.callCpList(param));
     }
+
+    @ApiOperation(value = "订单Excel下载")
+    @PostMapping(value = "/list/excel")
+    @PreAuthorize(permissionKey = "manage:order:orderExcel")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功")})
+    public void getOrderExcel(@Validated @RequestBody OrderParam param, HttpServletResponse response) {
+        orderService.getOrderExcel(param, response);
+    }
 }

+ 12 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameUserRoleListParam.java

@@ -81,6 +81,18 @@ public class GameUserRoleListParam extends BaseListDTO<GameUserRole> {
     @ApiModelProperty(notes = "注册渠道对应的id")
     private Long channelId;
 
+    /**
+     * 归因推广账号
+     */
+    @ApiModelProperty(notes = "归因推广账号")
+    private String accountId;
+
+    /**
+     * 归因投放人员
+     */
+    @ApiModelProperty(notes = "归因投放人员")
+    private String pitcherId;
+
     /**
      * 操作系统对应的id
      */

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/AgentChoiceVO.java

@@ -1,6 +1,9 @@
 package com.zanxiang.game.module.manage.pojo.vo;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * @author : lingfeng
@@ -8,6 +11,9 @@ import lombok.Data;
  * @description : 推广渠道
  */
 @Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
 public class AgentChoiceVO {
 
     /**

+ 25 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserRoleListVO.java

@@ -183,4 +183,29 @@ public class GameUserRoleListVO {
      */
     @ApiModelProperty(notes = "最近充值时间")
     private LocalDateTime lastRechargeTime;
+
+    /**
+     * 归因投放人员id
+     */
+    @ApiModelProperty(notes = "归因投放人员id")
+    private Long pitcherId;
+
+    /**
+     * 归因投放人员名字
+     */
+    @ApiModelProperty(notes = "归因投放人员名字")
+    private String pitcherName;
+
+    /**
+     * 归因推广账号id
+     */
+    @ApiModelProperty(notes = "归因推广账号id")
+    private Long accountId;
+
+    /**
+     * 归因推广账号类型(1:腾讯、2:头条)
+     */
+    @ApiModelProperty(notes = "归因推广账号类型(1:腾讯、2:头条)")
+    private Integer accountType;
+
 }

+ 209 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/OrderExcelVO.java

@@ -0,0 +1,209 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import com.zanxiang.module.util.excel.ExcelAnno;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-25
+ * @description : 订单
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class OrderExcelVO {
+
+    /**
+     * 日期
+     */
+    @ExcelAnno(title = "日期")
+    private LocalDate dateTime;
+
+    /**
+     * 订单id
+     */
+    @ExcelAnno(title = "订单id")
+    private String orderId;
+
+    /**
+     * cp订单号
+     */
+    @ExcelAnno(title = "cp订单号")
+    private String cpOrderId;
+
+    /**
+     * 商户订单号
+     */
+    @ExcelAnno(title = "商户订单号")
+    private String merchantOrderNo;
+
+    /**
+     * 玩家ID
+     */
+    @ExcelAnno(title = "玩家ID")
+    private Long userId;
+
+    /**
+     * 玩家账号
+     */
+    @ExcelAnno(title = "玩家账号")
+    private String username;
+
+    /**
+     * 注册时间
+     */
+    @ExcelAnno(title = "注册时间")
+    private LocalDateTime regTime;
+
+    /**
+     * 渠道名称
+     */
+    @ExcelAnno(title = "渠道名称")
+    private String agentName;
+
+    /**
+     * cp名称
+     */
+    @ExcelAnno(title = "cp名称")
+    private String cpName;
+
+    /**
+     * 归因投放人员名字
+     */
+    @ExcelAnno(title = "归因投放人员名字")
+    private String pitcherName;
+
+    /**
+     * 归因推广账号id
+     */
+    @ExcelAnno(title = "归因推广账号id")
+    private Long accountId;
+
+    /**
+     * 推广账号类型(1:腾讯、2:头条)
+     */
+    @ExcelAnno(title = "推广账号类型(1:腾讯、2:头条)")
+    private Integer accountType;
+
+    /**
+     * 游戏名称
+     */
+    @ExcelAnno(title = "游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏类型
+     */
+    @ExcelAnno(title = "游戏类型名称")
+    private String gameCategoryName;
+
+    /**
+     * 产品名称
+     */
+    @ExcelAnno(title = "产品名称")
+    private String productName;
+
+    /**
+     * 订单金额
+     */
+    @ExcelAnno(title = "订单金额")
+    private BigDecimal amount;
+
+    /**
+     * 订单实付金额
+     */
+    @ExcelAnno(title = "订单实付金额")
+    private BigDecimal realAmount;
+
+    /**
+     * 支付方式
+     */
+    @ExcelAnno(title = "支付方式名称")
+    private String payWayName;
+
+    /**
+     * 支付场景
+     */
+    @ExcelAnno(title = "支付场景名称")
+    private String payDeviceName;
+
+    /**
+     * 商户号
+     */
+    @ExcelAnno(title = "商户号")
+    private String merchantNo;
+
+    /**
+     * 商户名称
+     */
+    @ExcelAnno(title = "商户名称")
+    private String merchantName;
+
+    /**
+     * 所在服务器名称
+     */
+    @ExcelAnno(title = "所在服务器名称")
+    private String serverName;
+
+    /**
+     * 角色名称
+     */
+    @ExcelAnno(title = "角色名称")
+    private String roleName;
+
+    /**
+     * 角色等级
+     */
+    @ExcelAnno(title = "角色等级")
+    private Long roleLevel;
+
+    /**
+     * 客户端操作系统, android, ios, windows, mac
+     */
+    @ExcelAnno(title = "客户端操作系统, android, ios, windows, mac")
+    private String deviceSystem;
+
+    /**
+     * 创建时间
+     */
+    @ExcelAnno(title = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 支付时间
+     */
+    @ExcelAnno(title = "支付时间")
+    private LocalDateTime payTime;
+
+    /**
+     * cp最后通知时间
+     */
+    @ExcelAnno(title = "cp最后通知时间")
+    private LocalDateTime lastCpNotifyTime;
+
+    /**
+     * 支付状态,1待支付,2 支付成功,-1 已取消
+     */
+    @ExcelAnno(title = "支付状态,1待支付,2 支付成功,-1 已取消")
+    private Integer status;
+
+    /**
+     * CP通知状态,1为待处理,2为成功,-1为失败
+     */
+    @ExcelAnno(title = "CP通知状态,1为待处理,2为成功,-1为失败")
+    private Integer cpStatus;
+
+    /**
+     * 是否首充 0 否 1 是
+     */
+    @ExcelAnno(title = "是否首充 0 否 1 是")
+    private Integer isFirstRecharge;
+}

+ 11 - 10
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IAgentService.java

@@ -9,6 +9,7 @@ import com.zanxiang.game.module.manage.pojo.vo.AgentAccountChoiceVO;
 import com.zanxiang.game.module.manage.pojo.vo.AgentChoiceVO;
 import com.zanxiang.game.module.manage.pojo.vo.AgentVO;
 import com.zanxiang.game.module.mybatis.entity.Agent;
+import reactor.util.function.Tuple2;
 
 import java.util.List;
 
@@ -33,16 +34,6 @@ public interface IAgentService extends IService<Agent> {
      */
     boolean add(AgentAddParam param);
 
-    /**
-     * 通过账户和投手id查询渠道id列表
-     *
-     * @param account   账户
-     * @param pitcherId 投手id
-     * @param agentId   代理人身份证
-     * @return {@link List}<{@link AgentDTO}>
-     */
-    List<AgentDTO> listUserAgent(String account, String pitcherId, Long agentId);
-
     /**
      * 配置将状态
      *
@@ -61,6 +52,16 @@ public interface IAgentService extends IService<Agent> {
      */
     boolean configBackPolicy(List<Long> agentIdList, Long backPolicyId);
 
+    /**
+     * 获取用户渠道列表
+     *
+     * @param account   账户
+     * @param pitcherId 投手id
+     * @param agentId   代理人身份证
+     * @return {@link Tuple2}<{@link List}<{@link Long}>, {@link List}<{@link AgentDTO}>>
+     */
+    Tuple2<List<Long>, List<AgentDTO>> getUserAgent(String account, String pitcherId, Long agentId);
+
     /**
      * 渠道账号选择接口
      *

+ 10 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IOrderService.java

@@ -8,6 +8,8 @@ import com.zanxiang.game.module.manage.pojo.vo.OrderListVO;
 import com.zanxiang.game.module.manage.pojo.vo.UserOrderListVO;
 import com.zanxiang.game.module.mybatis.entity.Order;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * @author : lingfeng
  * @time : 2022-07-05
@@ -30,4 +32,12 @@ public interface IOrderService extends IService<Order> {
      * @return {@link OrderListVO}
      */
     OrderListVO orderList(OrderParam param);
+
+    /**
+     * 订单excel下载
+     *
+     * @param param    参数
+     * @param response 响应
+     */
+    void getOrderExcel(OrderParam param, HttpServletResponse response);
 }

+ 59 - 17
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

@@ -10,13 +10,14 @@ import com.zanxiang.advertising.tencent.base.pojo.vo.UserActionSetRpcVO;
 import com.zanxiang.advertising.tencent.base.rpc.IAdAccountRpc;
 import com.zanxiang.advertising.tencent.base.rpc.IUserActionSetRpc;
 import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserGroupRpc;
 import com.zanxiang.erp.base.rpc.ISysUserRpc;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.back.base.ServerInfo;
 import com.zanxiang.game.back.base.pojo.vo.GameBackPolicyRpcVO;
 import com.zanxiang.game.back.base.rpc.IGameBackPolicyRpc;
-import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
+import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.params.AgentAddParam;
 import com.zanxiang.game.module.manage.pojo.params.AgentListParam;
 import com.zanxiang.game.module.manage.pojo.vo.AgentAccountChoiceVO;
@@ -37,6 +38,8 @@ import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import reactor.util.function.Tuple2;
+import reactor.util.function.Tuples;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -66,6 +69,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private IGameBackPolicyRpc gameBackPolicyRpc;
 
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserGroupRpc sysUserGroupRpc;
+
     @Override
     public IPage<AgentVO> listOfPage(AgentListParam param) {
         IPage<Agent> agentIPage = page(param.toPage(), new LambdaQueryWrapper<Agent>()
@@ -197,8 +203,20 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
     }
 
     @Override
-    public List<AgentDTO> listUserAgent(String account, String pitcherId, Long agentId) {
+    public Tuple2<List<Long>, List<AgentDTO>> getUserAgent(String account, String pitcherId, Long agentId) {
+        //自然量查询
+        if (Objects.equals(agentId, Agent.DEFAULT_AGENT)) {
+            //管理员
+            if (SecurityUtil.isManager()) {
+                return Tuples.of(Collections.singletonList(Agent.DEFAULT_AGENT), Collections.emptyList());
+            } else {
+                //非管理员不允许查询自然量
+                return Tuples.of(Collections.emptyList(), Collections.emptyList());
+            }
+        }
+        //渠道列表
         List<Agent> agentList;
+        List<AgentDTO> agentDTOList = new ArrayList<>();
         //超管权限
         if (SecurityUtil.isManager()) {
             agentList = super.list(new LambdaQueryWrapper<Agent>()
@@ -206,22 +224,44 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
                     .eq(Strings.isNotBlank(pitcherId), Agent::getCreateBy, pitcherId)
                     .eq(agentId != null, Agent::getId, agentId));
         } else {
-            agentList = super.list(new LambdaQueryWrapper<Agent>()
-                    .eq(Strings.isNotBlank(account), Agent::getAccountId, account)
-                    .eq(Agent::getCreateBy, Strings.isBlank(pitcherId) ? SecurityUtil.getUserId() : pitcherId)
-                    .eq(agentId != null, Agent::getId, agentId));
+            //判断是否是组长
+            List<Long> memberUserIdList = sysUserGroupRpc.memberUserId(SecurityUtil.getCompanyId(), SecurityUtil.getUserId()).getData();
+            //组长, 可查看自己或者组员数据
+            if (CollectionUtils.isNotEmpty(memberUserIdList)) {
+                agentList = super.list(new LambdaQueryWrapper<Agent>()
+                        .eq(Strings.isNotBlank(account), Agent::getAccountId, account)
+                        .eq(Strings.isNotBlank(pitcherId), Agent::getCreateBy, pitcherId)
+                        .in(Strings.isBlank(pitcherId), Agent::getCreateBy, memberUserIdList)
+                        .eq(agentId != null, Agent::getId, agentId));
+            } else {
+                //组员, 只允许查看自己的数据
+                agentList = super.list(new LambdaQueryWrapper<Agent>()
+                        .eq(Strings.isNotBlank(account), Agent::getAccountId, account)
+                        .eq(Agent::getCreateBy, SecurityUtil.getUserId())
+                        .eq(agentId != null, Agent::getId, agentId));
+            }
         }
-        if (CollectionUtils.isEmpty(agentList)) {
-            return Collections.emptyList();
+        if (CollectionUtils.isNotEmpty(agentList)) {
+            //设置归属投手
+            List<Long> createByList = agentList.stream().map(Agent::getCreateBy).collect(Collectors.toList());
+            Map<Long, String> userMap = sysUserRpc.getUserNameByIds(createByList).getData();
+            agentDTOList = agentList.stream().map(agent -> {
+                AgentDTO agentDTO = BeanUtil.copy(agent, AgentDTO.class);
+                agentDTO.setCreateByName(userMap.get(agent.getCreateBy()));
+                return agentDTO;
+            }).collect(Collectors.toList());
         }
-        //设置归属投手
-        List<Long> createByList = agentList.stream().map(Agent::getCreateBy).collect(Collectors.toList());
-        Map<Long, String> userMap = sysUserRpc.getUserNameByIds(createByList).getData();
-        return agentList.stream().map(agent -> {
-            AgentDTO agentDTO = BeanUtil.copy(agent, AgentDTO.class);
-            agentDTO.setCreateByName(userMap.get(agent.getCreateBy()));
-            return agentDTO;
-        }).collect(Collectors.toList());
+        //根据条件, 匹配渠道
+        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
+            return Tuples.of(Collections.emptyList(), Collections.emptyList());
+        }
+        //渠道id列表
+        List<Long> agentIds = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
+        //管理员可见自然量数据
+        if (SecurityUtil.isManager() && Strings.isBlank(account) && Strings.isBlank(pitcherId) && agentId == null) {
+            agentIds.add(Agent.DEFAULT_AGENT);
+        }
+        return Tuples.of(agentIds, agentDTOList);
     }
 
     @Override
@@ -233,8 +273,10 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 
     @Override
     public List<AgentChoiceVO> agentChoiceList() {
-        return super.list(new LambdaQueryWrapper<Agent>()
+        List<AgentChoiceVO> choiceVOList = super.list(new LambdaQueryWrapper<Agent>()
                 .eq(!SecurityUtil.isManager(), Agent::getCreateBy, SecurityUtil.getUserId())
         ).stream().map(agent -> BeanUtil.copy(agent, AgentChoiceVO.class)).collect(Collectors.toList());
+        choiceVOList.add(AgentChoiceVO.builder().id(Agent.DEFAULT_AGENT).agentName(Agent.DEFAULT_AGENT_NAME).build());
+        return choiceVOList;
     }
 }

+ 17 - 13
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.manage.pojo.dto.*;
 import com.zanxiang.game.module.manage.pojo.params.GameUserRoleListParam;
@@ -22,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -98,18 +98,13 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         if (gameMap != null && gameMap.isEmpty()) {
             return new Page<>();
         }
-        //渠道列表
-        List<AgentDTO> agentDTOList = agentService.listUserAgent(null, null, param.getChannelId());
-        //根据条件, 匹配渠道
-        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
+        List<Long> agentIdList = tuple2.getT1();
+        List<AgentDTO> agentDTOList = tuple2.getT2();
+        if (CollectionUtils.isEmpty(agentIdList)) {
             return new Page<>();
         }
-        //渠道id
-        List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //管理员可见自然量数据
-        if (SecurityUtil.isManager() && param.getChannelId() == null) {
-            agentIdList.add(Agent.DEFAULT_AGENT);
-        }
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
                 param.getNickname(), param.getRegIp());
@@ -125,7 +120,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         return page(param.toPage(), new QueryWrapper<GameUserRole>().lambda()
                 .in(CollectionUtils.isNotEmpty(userIdSet), GameUserRole::getUserId, userIdSet)
                 .eq(Strings.isNotBlank(param.getServerName()), GameUserRole::getServerName, param.getServerName())
-                .eq(Strings.isNotBlank(param.getRoleName()), GameUserRole::getRoleName, param.getRoleName())
+                .like(Strings.isNotBlank(param.getRoleName()), GameUserRole::getRoleName, param.getRoleName())
                 .in(gameMap != null, GameUserRole::getGameId, gameMap != null ? gameMap.keySet() : null)
                 .eq(Strings.isNotBlank(param.getOs()), GameUserRole::getOs, param.getOs())
                 .gt(Objects.equals(param.getIsRecharge(), Boolean.TRUE), GameUserRole::getRechargeCount, 0)
@@ -157,7 +152,16 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
             gameUserRoleListVO.setRegTime(userDTO.getCreateTime());
             gameUserRoleListVO.setAgentId(userDTO.getAgentId());
             AgentDTO agentDTO = agentMap.get(userDTO.getAgentId());
-            gameUserRoleListVO.setAgentName(agentDTO == null ? null : agentDTO.getAgentName());
+            if (agentDTO != null) {
+                gameUserRoleListVO.setAgentName(agentDTO.getAgentName());
+                gameUserRoleListVO.setAccountId(agentDTO.getAccountId());
+                gameUserRoleListVO.setPitcherId(agentDTO.getCreateBy());
+                gameUserRoleListVO.setPitcherName(agentDTO.getCreateByName());
+                gameUserRoleListVO.setAccountType(agentDTO.getAccountType());
+            }
+            if (Objects.equals(Agent.DEFAULT_AGENT, gameUserRoleListVO.getAgentId())) {
+                gameUserRoleListVO.setAgentName(Agent.DEFAULT_AGENT_NAME);
+            }
         }
         GameDTO gameDTO = CollectionUtils.isEmpty(gameMap) ? null : gameMap.get(gameUserRoleListVO.getGameId());
         if (gameDTO == null) {

+ 9 - 13
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserServiceImpl.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.CpDTO;
@@ -20,9 +19,9 @@ import com.zanxiang.game.module.mybatis.entity.GameUser;
 import com.zanxiang.game.module.mybatis.mapper.GameUserMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -62,19 +61,13 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
         if (gameMap != null && gameMap.isEmpty()) {
             return new Page<>();
         }
-        //渠道列表
-        List<AgentDTO> agentDTOList = agentService.listUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
-        //根据条件, 匹配渠道
-        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
+        List<Long> agentIdList = tuple2.getT1();
+        List<AgentDTO> agentDTOList = tuple2.getT2();
+        if (CollectionUtils.isEmpty(agentIdList)) {
             return new Page<>();
         }
-        //渠道id
-        List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //管理员可见自然量数据
-        if (SecurityUtil.isManager() && Strings.isBlank(param.getAccountId())
-                && Strings.isBlank(param.getPitcherId()) && param.getChannelId() == null) {
-            agentIdList.add(Agent.DEFAULT_AGENT);
-        }
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
                 param.getNickname(), null);
@@ -121,6 +114,9 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
                 gameUserListVO.setPitcherName(agentDTO.getCreateByName());
                 gameUserListVO.setAccountId(agentDTO.getAccountId());
             }
+            if (Objects.equals(Agent.DEFAULT_AGENT, userDTO.getAgentId())) {
+                gameUserListVO.setAgentName(Agent.DEFAULT_AGENT_NAME);
+            }
         }
         GameDTO gameDTO;
         if (CollectionUtils.isNotEmpty(gameMap) && gameMap.containsKey(gameUserListVO.getGameId())) {

+ 55 - 16
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
@@ -12,6 +13,7 @@ import com.zanxiang.game.module.base.pojo.enums.PayWayEnum;
 import com.zanxiang.game.module.manage.pojo.dto.*;
 import com.zanxiang.game.module.manage.pojo.params.OrderParam;
 import com.zanxiang.game.module.manage.pojo.params.UserOrderListParam;
+import com.zanxiang.game.module.manage.pojo.vo.OrderExcelVO;
 import com.zanxiang.game.module.manage.pojo.vo.OrderListVO;
 import com.zanxiang.game.module.manage.pojo.vo.OrderVO;
 import com.zanxiang.game.module.manage.pojo.vo.UserOrderListVO;
@@ -21,18 +23,20 @@ import com.zanxiang.game.module.mybatis.entity.Order;
 import com.zanxiang.game.module.mybatis.entity.User;
 import com.zanxiang.game.module.mybatis.mapper.OrderMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.module.util.excel.ExcelUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import com.zanxiang.module.web.util.WebExcelUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -96,19 +100,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     @Override
     public OrderListVO orderList(OrderParam param) {
-        //渠道列表
-        List<AgentDTO> agentDTOList = agentService.listUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
-        //根据条件, 匹配渠道
-        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
+        List<Long> agentIds = tuple2.getT1();
+        if (CollectionUtils.isEmpty(agentIds)) {
             return new OrderListVO(param.toPage().getSize());
         }
-        //渠道id列表
-        List<Long> agentIds = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //管理员可见自然量数据
-        if (SecurityUtil.isManager() && Strings.isBlank(param.getAccountId())
-                && Strings.isBlank(param.getPitcherId()) && param.getChannelId() == null) {
-            agentIds.add(Agent.DEFAULT_AGENT);
-        }
         //查询用户id和名字条件
         List<Long> userIds = null;
         if (Strings.isBlank(param.getUserId()) && Strings.isNotBlank(param.getUsername())) {
@@ -139,7 +136,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         List<Long> userIdList = orderListVOList.stream().map(OrderVO::getUserId).collect(Collectors.toList());
         Map<Long, UserDTO> userMap = userService.getByUserIds(userIdList);
         //渠道
-        Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
+        Map<Long, AgentDTO> agentMap = tuple2.getT2().stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         //游戏信息
         Map<Long, GameDTO> gameMap = gameService.gameMap(orderListVOList.stream()
                 .map(OrderVO::getGameId).collect(Collectors.toSet()));
@@ -173,6 +170,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             orderVO.setAccountType(agentDTO.getAccountType());
             orderVO.setAgentName(agentDTO.getAgentName());
         }
+        if (Objects.equals(orderVO.getAgentId(), Agent.DEFAULT_AGENT)) {
+            orderVO.setAgentName(Agent.DEFAULT_AGENT_NAME);
+        }
         //CP名称
         CpDTO cpDTO = cpMap.get(orderVO.getCpId());
         orderVO.setCpName(cpDTO == null ? null : cpDTO.getCpName());
@@ -225,4 +225,43 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
         return BeanUtil.copy(order, OrderVO.class);
     }
+
+    @Override
+    public void getOrderExcel(OrderParam param, HttpServletResponse response) {
+        if (!SecurityUtil.isAdmin()) {
+            throw new BaseException("没有下载权限");
+        }
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
+        List<Long> agentIds = tuple2.getT1();
+        List<AgentDTO> agentDTOList = tuple2.getT2();
+        //查询用户id和名字条件
+        List<User> userList = new ArrayList<>();
+        if (Strings.isBlank(param.getUserId()) && Strings.isNotBlank(param.getUsername())) {
+            userList = userService.list(new LambdaQueryWrapper<User>()
+                    .like(User::getUsername, param.getUsername()));
+        }
+        final List<Long> userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+        //excel下载
+        WebExcelUtil.httpExport(response, "游戏订单", OrderExcelVO.class, ((pageNumber, pageSize) -> {
+            //查询订单
+            List<OrderVO> orderVOList = page(new Page<>(pageNumber, pageSize), this.getListWrapper(param, agentIds, userIds, "*"))
+                    .convert(this::orderToVo).getRecords();
+            //商户列表
+            Map<String, PayMerchantDTO> payMerchantMap = payMerchantService.payMerchantMap();
+            //cp信息
+            Map<Long, CpDTO> cpMap = cpService.cpMap();
+            //玩家信息
+            List<Long> userIdList = orderVOList.stream().map(OrderVO::getUserId).collect(Collectors.toList());
+            Map<Long, UserDTO> userMap = userService.getByUserIds(userIdList);
+            //游戏信息
+            Map<Long, GameDTO> gameMap = gameService.gameMap(orderVOList.stream().map(OrderVO::getGameId).collect(Collectors.toSet()));
+            //渠道
+            Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
+            //字段信息补充更新
+            orderVOList.forEach(vo -> this.toVO(vo, userMap, gameMap, cpMap, agentMap, payMerchantMap));
+            //excel字段赋值
+            return orderVOList.stream().map(orderVO -> BeanUtil.copy(orderVO, OrderExcelVO.class)).collect(Collectors.toList());
+        }), ExcelUtil.DEFAULT_MAX_DATA_SIZE);
+    }
 }

+ 4 - 15
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.UserDTO;
 import com.zanxiang.game.module.manage.pojo.params.UserNameAuthListParam;
@@ -14,7 +13,6 @@ import com.zanxiang.game.module.manage.pojo.vo.UserCardVO;
 import com.zanxiang.game.module.manage.service.IAgentService;
 import com.zanxiang.game.module.manage.service.IUserCardService;
 import com.zanxiang.game.module.manage.service.IUserService;
-import com.zanxiang.game.module.mybatis.entity.Agent;
 import com.zanxiang.game.module.mybatis.entity.UserCard;
 import com.zanxiang.game.module.mybatis.mapper.UserCardMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
@@ -22,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import reactor.util.function.Tuple2;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -29,7 +28,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author : lingfeng
@@ -48,18 +46,9 @@ public class UserCardServiceImpl extends ServiceImpl<UserCardMapper, UserCard> i
 
     @Override
     public IPage<UserCardVO> getUserCardList(UserNameAuthListParam param) {
-        //渠道列表
-        List<AgentDTO> agentDTOList = agentService.listUserAgent(null, null, null);
-        //根据条件, 匹配渠道
-        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
-            return new Page<>();
-        }
-        //渠道id
-        List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //管理员可见自然量数据
-        if (SecurityUtil.isManager()) {
-            agentIdList.add(Agent.DEFAULT_AGENT);
-        }
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(null, null, null);
+        List<Long> agentIdList = tuple2.getT1();
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
                 param.getNickname(), null);

+ 14 - 17
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.CpDTO;
@@ -30,6 +29,7 @@ import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import reactor.util.function.Tuple2;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -69,21 +69,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if (gameMap != null && gameMap.isEmpty()) {
             return new Page<>();
         }
-        //渠道列表
-        List<AgentDTO> agentDTOList = agentService.listUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
-        //根据条件, 匹配渠道
-        if (CollectionUtils.isEmpty(agentDTOList) && !SecurityUtil.isManager()) {
+        //渠道获取
+        Tuple2<List<Long>, List<AgentDTO>> tuple2 = agentService.getUserAgent(param.getAccountId(), param.getPitcherId(), param.getChannelId());
+        List<Long> agentIdList = tuple2.getT1();
+        List<AgentDTO> agentDTOList = tuple2.getT2();
+        if (CollectionUtils.isEmpty(agentIdList)) {
             return new Page<>();
         }
-        //渠道id列表
-        List<Long> agentIdList = agentDTOList.stream().map(AgentDTO::getId).collect(Collectors.toList());
-        //管理员可见自然量数据
-        if (SecurityUtil.isManager() && Strings.isBlank(param.getAccountId())
-                && Strings.isBlank(param.getPitcherId()) && param.getChannelId() == null) {
-            agentIdList.add(Agent.DEFAULT_AGENT);
-        }
         Map<Long, CpDTO> cpMap = cpService.cpMap();
-        Map<Long, AgentDTO> agentMap = agentDTOList.stream().collect(Collectors.toMap(AgentDTO::getId, Function.identity()));
         //执行查询
         return page(param.toPage(), new QueryWrapper<User>().lambda()
                 .eq(param.getUserId() != null, User::getId, param.getUserId())
@@ -105,10 +98,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 .eq(param.getStatus() != null, User::getStatus, param.getStatus())
                 .in(CollectionUtils.isNotEmpty(agentIdList), User::getAgentId, agentIdList)
                 .orderByDesc(User::getCreateTime)
-        ).convert(u -> this.toVo(u, gameMap, cpMap, agentMap));
+        ).convert(u -> this.toVo(u, gameMap, cpMap, agentDTOList));
     }
 
-    private UserListVO toVo(User user, Map<Long, GameDTO> gameMap, Map<Long, CpDTO> cpMap, Map<Long, AgentDTO> agentMap) {
+    private UserListVO toVo(User user, Map<Long, GameDTO> gameMap, Map<Long, CpDTO> cpMap, List<AgentDTO> agentDTOList) {
         UserListVO userListVO = BeanUtil.copy(user, UserListVO.class);
         if (Objects.isNull(userListVO)) {
             return null;
@@ -117,14 +110,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         userListVO.setMobile(user.getShowPhoneNum());
         userListVO.setRegIp(user.getIp());
         //渠道信息
-        AgentDTO agentDTO = agentMap.get(userListVO.getAgentId());
+        AgentDTO agentDTO = agentDTOList.stream().filter(dto -> Objects.equals(dto.getId(), userListVO.getAgentId()))
+                .findFirst().orElse(null);
         if (agentDTO != null) {
             userListVO.setAgentName(agentDTO.getAgentName());
-            userListVO.setAccountId(agentDTO.getAccountId());
             userListVO.setPitcherId(agentDTO.getCreateBy());
             userListVO.setPitcherName(agentDTO.getCreateByName());
+            userListVO.setAccountId(agentDTO.getAccountId());
             userListVO.setAccountType(agentDTO.getAccountType());
         }
+        if (Objects.equals(Agent.DEFAULT_AGENT, userListVO.getAgentId())) {
+            userListVO.setAgentName(Agent.DEFAULT_AGENT_NAME);
+        }
         //游戏信息
         GameDTO gameDTO = CollectionUtils.isNotEmpty(gameMap) ? gameMap.get(userListVO.getGameId()) : gameService.getById(userListVO.getGameId());
         if (gameDTO != null) {

+ 1 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/Agent.java

@@ -27,6 +27,7 @@ public class Agent implements Serializable {
     private static final long serialVersionUID = 1L;
 
     public static final Long DEFAULT_AGENT = 0L;
+    public static final String DEFAULT_AGENT_NAME = "自然量";
 
     public static final Integer PUT_STATUS_ING = 1;
     public static final Integer PUT_STATUS_STOP = 2;