|  | @@ -2,7 +2,10 @@ package com.zanxiang.game.data.serve.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import com.zanxiang.erp.security.util.SecurityUtil;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.dto.AdsOrderDetailListDTO;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.dto.AdsOrderDetailTotalDTO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.entity.AdsOrderDetail;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 | 
	
		
			
				|  |  | +import com.zanxiang.game.data.serve.pojo.vo.AdsOrderDetailTotalVO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.vo.AdsOrderDetailVO;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.service.IAdsOrderDetailService;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.utils.Page;
 | 
	
	
		
			
				|  | @@ -11,8 +14,10 @@ import lombok.extern.slf4j.Slf4j;
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  |  import org.nutz.dao.Cnd;
 | 
	
		
			
				|  |  |  import org.nutz.dao.Dao;
 | 
	
		
			
				|  |  | +import org.nutz.dao.Sqls;
 | 
	
		
			
				|  |  |  import org.nutz.dao.pager.Pager;
 | 
	
		
			
				|  |  | -import org.nutz.dao.util.cri.Exps;
 | 
	
		
			
				|  |  | +import org.nutz.dao.sql.Criteria;
 | 
	
		
			
				|  |  | +import org.nutz.dao.sql.Sql;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -28,79 +33,190 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public Page<AdsOrderDetailVO> listOfPage(AdsOrderDetailListDTO dto) {
 | 
	
		
			
				|  |  | -        if (StringUtils.isBlank(dto.getZxPitcherId()) && !SecurityUtil.isManager()) {
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getPitcherId()) && !SecurityUtil.isManager()) {
 | 
	
		
			
				|  |  |              // 只有管理员才能查看全部数据
 | 
	
		
			
				|  |  | -            dto.setZxPitcherId(SecurityUtil.getUserId().toString());
 | 
	
		
			
				|  |  | +            dto.setPitcherId(SecurityUtil.getUserId().toString());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          Pager pager = dto.toPage();
 | 
	
		
			
				|  |  | -        Cnd cnd = Cnd.where("1", "=", "1");
 | 
	
		
			
				|  |  | -        if (dto.getBeginOrderTime() != null) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOrderCreateTime, ">=", dto.getBeginOrderTime());
 | 
	
		
			
				|  |  | +        Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getOrderId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_id", dto.getOrderId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getCpOrderId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("cp_order_id", dto.getCpOrderId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getMerchantOrderNo())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("merchant_order_no", dto.getMerchantOrderNo());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getUserId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("game_user_id", dto.getUserId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getUsername())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("username", dto.getUsername());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getServerName())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("server_name", dto.getServerName());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getGameId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_game_id", dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getChannelId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("agent_id", dto.getChannelId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getAccountId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("account_id", dto.getAccountId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getPitcherId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("zx_pitcher_id", dto.getPitcherId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getDeviceSystem())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("os", dto.getDeviceSystem());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getProductName())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("product_name", dto.getProductName());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getPayWay())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("payway", dto.getPayWay());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getMerchantNo())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("pay_account_id", dto.getMerchantNo());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getStatus())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_status", dto.getStatus());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getCpStatus())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("cp_status", dto.getCpStatus());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (dto.getEndOrderTime() != null) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOrderCreateTime, "<=", dto.getEndOrderTime());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getIsFirstRecharge())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("is_first_recharge", dto.getIsFirstRecharge());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
 | 
	
		
			
				|  |  | +            //下单时间,订单创建时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("day", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegTimeStart() != null && dto.getRegTimeEnd() != null) {
 | 
	
		
			
				|  |  | +            //玩家注册时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("reg_time", dto.getRegTimeStart(), dto.getRegTimeEnd());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getPayTimeStart() != null && dto.getPayTimeEnd() != null) {
 | 
	
		
			
				|  |  | +            //支付时间,订单充值时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("pay_time", dto.getPayTimeStart(), dto.getPayTimeEnd());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegPayIntervalTimeMin() != null) {
 | 
	
		
			
				|  |  | +            cri.where().andGTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMin());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegPayIntervalTimeMax() != null) {
 | 
	
		
			
				|  |  | +            cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //默认排序方式
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getSortType())) {
 | 
	
		
			
				|  |  | +            dto.setSortType(OrderByEnum.DESC.getOrderType());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getSortFiled())) {
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("day", dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("order_create_time", dto.getSortType());
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        List<AdsOrderDetailVO> records = dao.query(AdsOrderDetail.class, cri, pager).stream().map(this::toVO).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        pager.setRecordCount(dao.count(AdsOrderDetail.class, cri));
 | 
	
		
			
				|  |  | +        return new Page<>(records, pager);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public AdsOrderDetailTotalVO orderTotal(AdsOrderDetailTotalDTO dto) {
 | 
	
		
			
				|  |  | +        if (StringUtils.isBlank(dto.getPitcherId()) && !SecurityUtil.isManager()) {
 | 
	
		
			
				|  |  | +            // 只有管理员才能查看全部数据
 | 
	
		
			
				|  |  | +            dto.setPitcherId(SecurityUtil.getUserId().toString());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getSourceSystem, "=", dto.getSourceSystem());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getOrderId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOrderId, "=", dto.getOrderId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_id", dto.getOrderId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getCpOrderId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getCpOrderId, "=", dto.getCpOrderId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("cp_order_id", dto.getCpOrderId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getMerchantOrderNo())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getMerchantOrderNo, "=", dto.getMerchantOrderNo());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getZxPitcherId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getZxPitcherId, "=", dto.getZxPitcherId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("merchant_order_no", dto.getMerchantOrderNo());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getGameUserId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getGameUserId, "=", dto.getGameUserId());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getUserId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("game_user_id", dto.getUserId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getUsername())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getUsername, "like", "%" + dto.getUsername() + "%");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getParentId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getParentId, "=", dto.getParentId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("username", dto.getUsername());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getOrderGameId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOrderGameId, "=", dto.getOrderGameId());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getServerName())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("server_name", dto.getServerName());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getGameId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getGameId, "=", dto.getGameId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_game_id", dto.getGameId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getChannelId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("agent_id", dto.getChannelId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getAccountId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getAccountId, "=", dto.getAccountId());
 | 
	
		
			
				|  |  | +            cri.where().andEquals("account_id", dto.getAccountId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getAgentId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getAgentId, "=", dto.getAgentId());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getPitcherId())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("zx_pitcher_id", dto.getPitcherId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getOs())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOs, "=", dto.getOs());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getDeviceSystem())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("os", dto.getDeviceSystem());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getOrderStatus())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getOrderStatus, "=", dto.getOrderStatus());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getProductName())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("product_name", dto.getProductName());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getPayway())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getPayway, "=", dto.getPayway());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getPayWay())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("payway", dto.getPayWay());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getRoleId())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getRoleId, "=", dto.getRoleId());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getMerchantNo())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("pay_account_id", dto.getMerchantNo());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (StringUtils.isNotBlank(dto.getRoleName())) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getRoleName, "=", dto.getRoleName());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getStatus())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("order_status", dto.getStatus());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (dto.getBeginRegTime() != null) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getRegTime, ">=", dto.getBeginRegTime());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getCpStatus())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("cp_status", dto.getCpStatus());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (dto.getEndRegTime() != null) {
 | 
	
		
			
				|  |  | -            cnd.and(AdsOrderDetail::getRegTime, "<=", dto.getEndRegTime());
 | 
	
		
			
				|  |  | +        if (StringUtils.isNotBlank(dto.getIsFirstRecharge())) {
 | 
	
		
			
				|  |  | +            cri.where().andEquals("is_first_recharge", dto.getIsFirstRecharge());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        cnd.orderBy(dto.getSortFiled(), dto.getSortType());
 | 
	
		
			
				|  |  | -        List<AdsOrderDetailVO> records = dao.query(AdsOrderDetail.class, cnd, pager).stream().map(this::toVO).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -        pager.setRecordCount(dao.count(AdsOrderDetail.class, cnd));
 | 
	
		
			
				|  |  | -        return new Page<>(records, pager);
 | 
	
		
			
				|  |  | +        if (dto.getBeginDate() != null && dto.getEndDate() != null) {
 | 
	
		
			
				|  |  | +            //下单时间,订单创建时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("day", dto.getBeginDate(), dto.getEndDate());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegTimeStart() != null && dto.getRegTimeEnd() != null) {
 | 
	
		
			
				|  |  | +            //玩家注册时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("reg_time", dto.getRegTimeStart(), dto.getRegTimeEnd());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getPayTimeStart() != null && dto.getPayTimeEnd() != null) {
 | 
	
		
			
				|  |  | +            //支付时间,订单充值时间
 | 
	
		
			
				|  |  | +            cri.where().andBetween("pay_time", dto.getPayTimeStart(), dto.getPayTimeEnd());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegPayIntervalTimeMin() != null) {
 | 
	
		
			
				|  |  | +            cri.where().andGTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMin());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (dto.getRegPayIntervalTimeMax() != null) {
 | 
	
		
			
				|  |  | +            cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create("""
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(amount), 0) as amount,
 | 
	
		
			
				|  |  | +                    IFNULL(SUM(real_amount), 0) as real_amount
 | 
	
		
			
				|  |  | +                FROM
 | 
	
		
			
				|  |  | +                    game_ads.ads_order_detail
 | 
	
		
			
				|  |  | +                """ + cri);
 | 
	
		
			
				|  |  | +        sql.setCallback(Sqls.callback.entity());
 | 
	
		
			
				|  |  | +        sql.setEntity(dao.getEntity(AdsOrderDetailTotalVO.class));
 | 
	
		
			
				|  |  | +        dao.execute(sql);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return sql.getObject(AdsOrderDetailTotalVO.class);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private AdsOrderDetailVO toVO(AdsOrderDetail gameOrder) {
 |