TdCAcctPayoutServiceImpl.java 5.49 KB
package com.zteits.pay.biz;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.zteits.clouds.api.dto.pay.AcctRechargeStatisticDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.date.DateField;
import com.xiaoleilu.hutool.date.DateUtil;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.bean.PageBean;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.owner.dto.OwnerPayOutDTO;
import com.zteits.clouds.api.dto.owner.param.OwnerRequest;
import com.zteits.clouds.api.dto.pay.AcctPayoutDTO;
import com.zteits.clouds.api.dto.pay.param.AcctPayoutForPageRequest;
import com.zteits.clouds.api.dto.pay.param.AcctPayoutRequest;
import com.zteits.clouds.api.dto.pay.param.QueryAcctPayoutByPayOrderIdReq;
import com.zteits.clouds.api.service.pay.TdCAcctPayoutService;
import com.zteits.pay.dao.TdCAcctPayoutDao;
import com.zteits.pay.domain.TdCAcctPayout;
import com.zteits.pay.pagepager.PageBeanUtil;

@Service("com.zteits.pay.biz.TdCAcctPayoutServiceImpl")
public class TdCAcctPayoutServiceImpl implements TdCAcctPayoutService{
	
	@Autowired
	private TdCAcctPayoutDao  tdCAcctPayoutDao;
	
	@Override
	public BizResult<Boolean> insertPayout(AcctPayoutRequest request) {
		TdCAcctPayout acctPayoutDO = new TdCAcctPayout();
		BeanUtils.copyProperties(request, acctPayoutDO);
		Long flg = tdCAcctPayoutDao.insertPayout(acctPayoutDO);
		return new BizResult<Boolean>(flg > 0?true:false);
	}

	/**
	 * 通过支付单id查询个人账户支出表.<br/>
	 * @param request
	 * @return
	 * 2018年4月12日  wangfs.<br/>
	 */
	@Override
	public BizResult<List<AcctPayoutDTO>> queryAcctPayoutByPayOrderId(QueryAcctPayoutByPayOrderIdReq request) {
		List<AcctPayoutDTO> acctPayoutDTOList = new ArrayList<>();
		List<TdCAcctPayout> tdCAcctPayouts = tdCAcctPayoutDao.queryAcctPayoutByPayOrderId(request.getPayOrderId());
		if(!CollectionUtils.isEmpty(tdCAcctPayouts)){
			for(TdCAcctPayout acctPayout : tdCAcctPayouts) {
				AcctPayoutDTO acctPayoutDTO = new AcctPayoutDTO();
				BeanUtils.copyProperties(acctPayout, acctPayoutDTO);
				acctPayoutDTOList.add(acctPayoutDTO);
			}
		}
		return new BizResult<List<AcctPayoutDTO>>(acctPayoutDTOList);
	}

	@Override
	public BizResult<PageBean<AcctPayoutDTO>> queryAcctPayoutForPage(AcctPayoutForPageRequest request) {
		PageInfo<TdCAcctPayout> pageInfo = tdCAcctPayoutDao.queryAcctPayoutForPage(request , request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize());
		PageBean<AcctPayoutDTO> pageBean = new PageBean<AcctPayoutDTO>();
		PageBeanUtil.copyProperties(pageInfo, pageBean, AcctPayoutDTO.class);
		return new BizResult<>(pageBean);
	}

	@Override
	public BizResult<AcctRechargeStatisticDTO> statisticAcctPayOut(AcctPayoutForPageRequest request) {
		AcctRechargeStatisticDTO dto = tdCAcctPayoutDao.statisticAcctPayOut(request);
		return new BizResult<>(dto);
	}

	@Override
	public BizResult<Boolean> updatePayout(AcctPayoutRequest request) {
		TdCAcctPayout acctPayoutDO = new TdCAcctPayout();
		BeanUtils.copyProperties(request, acctPayoutDO);
		Integer flg = tdCAcctPayoutDao.updatePayout(acctPayoutDO);
		return new BizResult<Boolean>(flg > 0?true:false);
	}
	
	@Override
    public BizResult<List<OwnerPayOutDTO>> queryOwnerPayOutByMonth(OwnerRequest request) {
        if (request.getBeginTime() == null || request.getEndTime() == null) {
            request.setBeginTime(DateUtil.offset(new Date(), DateField.YEAR, -1));
            request.setEndTime(DateUtil.endOfMonth(new Date()));
        }
        if (StringUtils.isEmpty(request.getCustId())) {
            throw new BizException(ErrorType.PARAMM_NULL, "custId为空!");
        }
        List<OwnerPayOutDTO> list = tdCAcctPayoutDao.queryOwnerPayOutByMonth(request);
        
        //填充数据为null的数据
        Date beginTimes = request.getBeginTime();
        Date endTimes = request.getEndTime();
        list = fillDatas(list, request, beginTimes, endTimes);
        return new BizResult<>(list);
    }
	
	/**
     * 填充为空的数据
     *
     * @param list
     * @param request
     * @return 2018年7月30日 wangfei
     */
    private List<OwnerPayOutDTO> fillDatas(List<OwnerPayOutDTO> list, OwnerRequest request, Date beginTimes,
        Date endTimes) {
        List<OwnerPayOutDTO> result = new ArrayList<>();
        DateFormat monthformat = new SimpleDateFormat("yyyy-MM");
        Date time = beginTimes;
        //先遍历放入result所有为零的数据
        while (time.getTime() < (endTimes.getTime())) {
            OwnerPayOutDTO dto = new OwnerPayOutDTO();
            dto.setDateStr(DateUtil.format(time, monthformat));
            dto.setFee(0L);
            result.add(dto);
            time = DateUtil.offsetMonth(time, 1);
        }
        //再替换有结果的数据
        for (OwnerPayOutDTO r : result) {
            for (OwnerPayOutDTO l : list) {
                if (r.getDateStr().equals(l.getDateStr())) {
                    BeanUtils.copyProperties(l, r);
                }
            }
        }
        return result;
    }

}