TdCBusinessAcctServiceImpl.java 8.91 KB
package com.zteits.business.biz.impl;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.clouds.common.cache.sys.SysCodeValueCacheUtil;
import com.clouds.common.constants.CodeValKindEnum;
import com.clouds.common.utils.AmountUtils;
import com.clouds.common.utils.DateUtil;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.util.CollectionUtil;
import com.zteits.business.dao.TdCBusinessAcctDao;
import com.zteits.business.domain.TdCBusinessAcct;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.bean.PageBean;
import com.zteits.clouds.api.dto.business.dto.BusinessAccountDetailCountDTO;
import com.zteits.clouds.api.dto.business.dto.BusinessAccountDetailSummaryDTO;
import com.zteits.clouds.api.dto.business.dto.BusinessAccountInOutDetailForPageDTO;
import com.zteits.clouds.api.dto.business.dto.TdCBusinessAcctDTO;
import com.zteits.clouds.api.dto.business.param.BusinessAccountInOutDetailRequest;
import com.zteits.clouds.api.dto.business.param.TdCBusinessAcctRequest;
import com.zteits.clouds.api.dto.clouds.param.BatchDeleteByPrimaryKeyRequest;
import com.zteits.clouds.api.service.business.TdCBusinessAcctService;
import com.zteits.sys.pagepaper.PageBeanUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Component
public class TdCBusinessAcctServiceImpl implements TdCBusinessAcctService {
    @Autowired
    private TdCBusinessAcctDao tdCBusinessAcctDao;

    @Override
    public BizResult<List<TdCBusinessAcctDTO>> queryTdCBusinessAcct(TdCBusinessAcctRequest request) {
        List<TdCBusinessAcctDTO> tdCBusinessAcctDTOS = new ArrayList<>();
        List<TdCBusinessAcct> tdCBusinessAccts = tdCBusinessAcctDao.queryTdCBusinessAcct(request);
        if (CollectionUtils.isEmpty(tdCBusinessAccts)) {
            return new BizResult<>(tdCBusinessAcctDTOS);
        }
        for (TdCBusinessAcct source : tdCBusinessAccts) {
            TdCBusinessAcctDTO dto = new TdCBusinessAcctDTO();
            BeanUtils.copyProperties(source, dto);
            tdCBusinessAcctDTOS.add(dto);
        }
        return new BizResult<>(tdCBusinessAcctDTOS);
    }

    @Override
    public BizResult<PageBean<TdCBusinessAcctDTO>> queryTdCBusinessAcctForPage(TdCBusinessAcctRequest request) {
        PageBean<TdCBusinessAcctDTO> pageBean = new PageBean<>();
        PageInfo<TdCBusinessAcct> pageInfo = tdCBusinessAcctDao.queryTdCBusinessAcctForPage(request);
        if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) {
            PageBeanUtil.copyProperties(pageInfo, pageBean, TdCBusinessAcctDTO.class);
        }
        return new BizResult<>(pageBean);
    }

    @Override
    public BizResult<Boolean> batchDeleteTdCBusinessAcctByPrimaryKey(BatchDeleteByPrimaryKeyRequest request) {
        int delenum = tdCBusinessAcctDao.batchDeleteTdCBusinessAcctByPrimaryKey(request.getIds(), request.getOpId(), request.getsOpName());
        return new BizResult<>(delenum > 0);
    }

    @Override
    public BizResult<Boolean> saveTdCBusinessAcct(TdCBusinessAcctRequest request) {
        TdCBusinessAcct tdCBusinessAcct = new TdCBusinessAcct();
        BeanUtils.copyProperties(request, tdCBusinessAcct);
        int saveNum = tdCBusinessAcctDao.saveTdCBusinessAcct(tdCBusinessAcct);
        return new BizResult<>(saveNum > 0);
    }

    @Override
    public BizResult<Boolean> updateByPrimaryKeySelective(TdCBusinessAcctRequest request) {
        TdCBusinessAcct tdCBusinessAcct = new TdCBusinessAcct();
        BeanUtils.copyProperties(request, tdCBusinessAcct);
        int upNum = tdCBusinessAcctDao.updateByPrimaryKeySelective(tdCBusinessAcct);
        return new BizResult<>(upNum > 0);
    }

    /**
     * 分页查询商户账户余额充值与支出明细
     */
    @Override
    public BizResult<PageBean<BusinessAccountInOutDetailForPageDTO>> queryAccountInOutDetailsForPage(BusinessAccountInOutDetailRequest requestQ) {
        PageInfo<BusinessAccountInOutDetailForPageDTO> pageInfo = tdCBusinessAcctDao.queryAccountInOutDetailsForPage(requestQ);

        PageBean<BusinessAccountInOutDetailForPageDTO> pageBean = new PageBean<>();
        PageBeanUtil.copyProperties(pageInfo, pageBean, BusinessAccountInOutDetailForPageDTO.class);


        if (CollectionUtil.isNotEmpty(pageBean.getDataList())) {
            Map<String, String> rechargeKindMap = SysCodeValueCacheUtil.queryCodeValueAndNames(CodeValKindEnum.BUS_ACCOUNT_RECHARGE_KIND);
            Map<String, String> payTypeMap = SysCodeValueCacheUtil.queryCodeValueAndNames(CodeValKindEnum.BUS_ACCOUNT_PAY_TYPE);
            for (BusinessAccountInOutDetailForPageDTO dto : pageBean.getDataList()) {
                if ("1".equals(dto.getKind())) {
                    dto.setKindName("充值");
                    // 充值
                    String typeName = rechargeKindMap.get(dto.getType());
                    dto.setTypeName(typeName + "充值");

                    // 0:待审核  2:通过 3 :驳回
                    String payState = dto.getPayState();

                    dto.setPayStateDesc("0".equals(payState) ? "待审核" : "2".equals(payState) ? "充值成功" : "驳回");

                    dto.setChangeFeeDetail("+" + AmountUtils.changeF2Y(dto.getChangeFee() + ""));
                    dto.setOpTime(DateUtil.getDateString(dto.getCreateDate(), DateUtil.DATETIME_FORMAT) + "");
                } else {
                    // 2支出
                    dto.setKindName("支出");
                    // 充值
                    String typeName = payTypeMap.get(dto.getType());
                    dto.setTypeName(typeName);
                    dto.setPayStateDesc("支付成功");

                    dto.setChangeFeeDetail("-" + AmountUtils.changeF2Y(dto.getChangeFee() + ""));
                    dto.setOpTime(DateUtil.getDateString(dto.getCreateDate(), DateUtil.DATETIME_FORMAT) + "");
                }
            }
        }
        return new BizResult<>(pageBean);
    }

    /**
     * 余额明细总览
     *
     */
    @Override
    public BizResult<BusinessAccountDetailSummaryDTO> detailSummary(BusinessAccountInOutDetailRequest requestQ) {
        BusinessAccountDetailSummaryDTO summaryDTO = new BusinessAccountDetailSummaryDTO();

        if (StringUtils.isBlank(requestQ.getKind())) {

            // 查询全部的时候,分开查询两次
            requestQ.setKind("1");
            summaryDTO.setRechargeSummary(getDetailSummaryStr(requestQ));
            requestQ.setKind("2");
            summaryDTO.setPaySummary(getDetailSummaryStr(requestQ));
        } else {

            String resStr = getDetailSummaryStr(requestQ);
            // 1 充值, 2 支出
            if ("1".equals(requestQ.getKind())) {
                summaryDTO.setRechargeSummary(resStr);
            } else {
                summaryDTO.setPaySummary(resStr);
            }
        }


        return new BizResult<>(summaryDTO);
    }

    private String getDetailSummaryStr(BusinessAccountInOutDetailRequest requestQ) {
        List<BusinessAccountDetailCountDTO> detailCountDTOList = tdCBusinessAcctDao.detailSummary(requestQ);
        if ("1".equals(requestQ.getKind())) {


            long totalFee = 0L;
            long totalCount = 0L;
            for (BusinessAccountDetailCountDTO dto : detailCountDTOList) {
                totalCount += dto.getChangeCount();
                totalFee += dto.getTotalFee();
            }

            // 共18笔充值,充值总金额100.00元
            return "共" + totalCount + "笔充值,充值总金额" + AmountUtils.changeF2Y(totalFee) + "元";
        } else {
            long totalFee = 0L;
            long totalCount = 0L;
            long parkPayFee = 0L;
            long couponBuyFee = 0L;
            for (BusinessAccountDetailCountDTO dto : detailCountDTOList) {
                totalCount += dto.getChangeCount();
                totalFee += dto.getTotalFee();
                if ("1".equals(dto.getType())) {
                    // 购买卡券
                    couponBuyFee = dto.getTotalFee();
                } else {
                    parkPayFee = dto.getTotalFee();
                }
            }

            // 共18笔支出,支出总金额100.00元,停车费50.00元,卡券50.00元
            String summaryStr = "共" + totalCount + "笔支出,支出总金额" + AmountUtils.changeF2Y(totalFee) + "元,";
            String parkFeeStr = "停车费" + AmountUtils.changeF2Y(parkPayFee) + "元,";
            String couponBuyFeeStr = "卡券" + AmountUtils.changeF2Y(couponBuyFee) + "元,";
            if(parkPayFee > 0){
                summaryStr += parkFeeStr;
            }
            if(couponBuyFee > 0){
                summaryStr += couponBuyFeeStr;
            }
            return summaryStr.substring(0, summaryStr.length() -1);
        }

    }


}