package com.dy.pipIrrStatistics.stClient; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.dy.common.webUtil.QueryResultVo; 
 | 
import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper ; 
 | 
import com.dy.pipIrrGlobal.daoSt.StClientAmountMonthMapper ; 
 | 
import com.dy.pipIrrGlobal.daoSt.StClientAmountYearMapper ; 
 | 
import com.dy.pipIrrGlobal.voSt.*; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.dubbo.common.utils.PojoUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.text.ParseException; 
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * @Author: liurunyu 
 | 
 * @Date: 2024/12/30 15:22 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class StClientSv { 
 | 
  
 | 
    private StClientAmountDayMapper stClientAmountDayDao ; 
 | 
    private StClientAmountMonthMapper stClientAmountMonthDao ; 
 | 
    private StClientAmountYearMapper stClientAmountYearDao ; 
 | 
    @Autowired 
 | 
    private void setDao(StClientAmountDayMapper dao){ 
 | 
        this.stClientAmountDayDao = dao ; 
 | 
    } 
 | 
    @Autowired 
 | 
    private void setDao(StClientAmountMonthMapper dao){ 
 | 
        this.stClientAmountMonthDao = dao ; 
 | 
    } 
 | 
    @Autowired 
 | 
    private void setDao(StClientAmountYearMapper dao){ 
 | 
        this.stClientAmountYearDao = dao ; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询农户用水日统计 
 | 
     * @param qo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoStClientAmountDay>> selectStClientAmountDay(StClientQo qo) { 
 | 
        QueryResultVo<List<VoStClientAmountDay>> rsVo = new QueryResultVo<>() ; 
 | 
        // 生成查询参数 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; 
 | 
        // 获取符合条件的记录数 
 | 
        Long itemTotal = stClientAmountDayDao.selectCountDayStatistics(params) ; 
 | 
  
 | 
        if(itemTotal != null && itemTotal > 0) { 
 | 
            rsVo.pageSize = qo.pageSize; 
 | 
            rsVo.pageCurr = qo.pageCurr; 
 | 
            rsVo.calculateAndSet(itemTotal, params); 
 | 
  
 | 
            List<VoStClientIdAmountYearRecord> clientIds = stClientAmountDayDao.selectClientIds4DayStatistics(params); 
 | 
            String clientIdsJson = JSON.toJSONString(clientIds) ; 
 | 
            params.put("clientIdsJson", clientIdsJson); 
 | 
  
 | 
            rsVo.obj = stClientAmountDayDao.selectDayStatistics(params); 
 | 
        } 
 | 
        return rsVo ; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询农户用水月统计 
 | 
     * @param qo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoStClientAmountMonth>> selectStClientAmountMonth(StClientQo qo)  { 
 | 
        QueryResultVo<List<VoStClientAmountMonth>> rsVo = new QueryResultVo<>() ; 
 | 
        // 生成查询参数 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; 
 | 
        // 获取符合条件的记录数 
 | 
        Long itemTotal = stClientAmountMonthDao.selectCountMonthStatistics(params) ; 
 | 
  
 | 
        if(itemTotal != null && itemTotal > 0) { 
 | 
            rsVo.pageSize = qo.pageSize; 
 | 
            rsVo.pageCurr = qo.pageCurr; 
 | 
            rsVo.calculateAndSet(itemTotal, params); 
 | 
  
 | 
            List<VoStClientIdAmountYearRecord> clientIds = stClientAmountMonthDao.selectClientIds4MonthStatistics(params); 
 | 
            String clientIdsJson = JSON.toJSONString(clientIds) ; 
 | 
            params.put("clientIdsJson", clientIdsJson); 
 | 
  
 | 
            rsVo.obj = stClientAmountMonthDao.selectMonthStatistics(params); 
 | 
        } 
 | 
        return rsVo ; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询农户用水年统计 
 | 
     * @param qo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<VoStClientAmountYear> selectStClientAmountYear(StClientQo qo, List<Integer> yearGrp) throws ParseException { 
 | 
        QueryResultVo<VoStClientAmountYear> rsQrVo = new QueryResultVo<>() ; 
 | 
  
 | 
        VoStClientAmountYear rsVo = new VoStClientAmountYear(); 
 | 
        rsVo.yearGrp = yearGrp ; 
 | 
        rsQrVo.obj = rsVo ; 
 | 
  
 | 
        boolean oneYear = yearGrp.size() == 1? true : false ; 
 | 
        // 生成查询参数 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; 
 | 
        // 获取符合条件的记录数 
 | 
        Long itemTotal = stClientAmountYearDao.selectCountYearStatistics(params) ; 
 | 
  
 | 
        if(itemTotal != null && itemTotal > 0) { 
 | 
            rsQrVo.pageSize = qo.pageSize; 
 | 
            rsQrVo.pageCurr = qo.pageCurr; 
 | 
            rsQrVo.calculateAndSet(itemTotal, params); 
 | 
  
 | 
            List<VoStClientIdAmountYearRecord> clientIds = stClientAmountYearDao.selectClientIds4YearStatistics(params); 
 | 
            String clientIdsJson = JSON.toJSONString(clientIds) ; 
 | 
  
 | 
            List<VoStClientAmountYearRecords> group = new ArrayList<>(); 
 | 
            int count = 1 ; 
 | 
            for(int year: yearGrp){ 
 | 
                params.put("year", year); 
 | 
                params.put("clientIdsJson", clientIdsJson); 
 | 
                List<VoStClientAmountYearRecord> list = stClientAmountYearDao.selectYearStatistics(params); 
 | 
                if(group.isEmpty()){ 
 | 
                    this.completion(group, list); 
 | 
                } 
 | 
                this.merge(count, group, list) ; 
 | 
                count += 1 ; 
 | 
            } 
 | 
            rsVo.records = group ; 
 | 
        } 
 | 
  
 | 
        return rsQrVo ; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 补全, 集合中没有就生成一个 
 | 
     * @param group 
 | 
     * @param list 
 | 
     */ 
 | 
    private void completion(List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){ 
 | 
        boolean found ; 
 | 
        for (VoStClientAmountYearRecord voInList : list) { 
 | 
            found = false ; 
 | 
            for(VoStClientAmountYearRecords voInGrp : group) { 
 | 
                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) { 
 | 
                    found = true ; 
 | 
                } 
 | 
            } 
 | 
            if(!found) { 
 | 
                VoStClientAmountYearRecords vo4s = new VoStClientAmountYearRecords(); 
 | 
                vo4s.clientId = voInList.clientId; 
 | 
                vo4s.clientNum = voInList.clientNum; 
 | 
                vo4s.clientName = voInList.clientName; 
 | 
                vo4s.clientAddress = voInList.clientAddress; 
 | 
                group.add(vo4s) ; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 合并, 集合中有就合并 
 | 
     * @param count 
 | 
     * @param group 
 | 
     * @param list 
 | 
     */ 
 | 
    private void merge(int count, List<VoStClientAmountYearRecords> group, List<VoStClientAmountYearRecord> list){ 
 | 
        for (VoStClientAmountYearRecord voInList : list) { 
 | 
            VoStClientAmountYearRecords voInGrp_ = null ; 
 | 
            for(VoStClientAmountYearRecords voInGrp : group) { 
 | 
                if(voInList.clientId.longValue() == voInGrp.clientId.longValue()) { 
 | 
                    voInGrp_ = voInGrp ; 
 | 
                    break ; 
 | 
                } 
 | 
            } 
 | 
            if(voInGrp_ != null){ 
 | 
                this.merge(count, voInGrp_, voInList); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 合并值 
 | 
     * @param count 
 | 
     * @param vo4s 
 | 
     * @param vo 
 | 
     */ 
 | 
    private void merge(int count, VoStClientAmountYearRecords vo4s, VoStClientAmountYearRecord vo){ 
 | 
        switch (count){ 
 | 
            case 1: 
 | 
                vo4s.amount1 = vo.amount; 
 | 
                vo4s.money1 = vo.money; 
 | 
                vo4s.times1 = vo.times; 
 | 
                break; 
 | 
            case 2: 
 | 
                vo4s.amount2 = vo.amount; 
 | 
                vo4s.money2 = vo.money; 
 | 
                vo4s.times2 = vo.times; 
 | 
                break; 
 | 
            case 3: 
 | 
                vo4s.amount3 = vo.amount; 
 | 
                vo4s.money3 = vo.money; 
 | 
                vo4s.times3 = vo.times; 
 | 
                break; 
 | 
            case 4: 
 | 
                vo4s.amount4 = vo.amount; 
 | 
                vo4s.money4 = vo.money; 
 | 
                vo4s.times4 = vo.times; 
 | 
                break; 
 | 
            case 5: 
 | 
                vo4s.amount5 = vo.amount; 
 | 
                vo4s.money5 = vo.money; 
 | 
                vo4s.times5 = vo.times; 
 | 
                break; 
 | 
            case 6: 
 | 
                vo4s.amount6 = vo.amount; 
 | 
                vo4s.money6 = vo.money; 
 | 
                vo4s.times6 = vo.times; 
 | 
                break; 
 | 
            case 7: 
 | 
                vo4s.amount7 = vo.amount; 
 | 
                vo4s.money7 = vo.money; 
 | 
                vo4s.times7 = vo.times; 
 | 
                break; 
 | 
            case 8: 
 | 
                vo4s.amount8 = vo.amount; 
 | 
                vo4s.money8 = vo.money; 
 | 
                vo4s.times8 = vo.times; 
 | 
                break; 
 | 
            case 9: 
 | 
                vo4s.amount9 = vo.amount; 
 | 
                vo4s.money9 = vo.money; 
 | 
                vo4s.times9 = vo.times; 
 | 
                break; 
 | 
            case 10: 
 | 
                vo4s.amount10 = vo.amount; 
 | 
                vo4s.money10 = vo.money; 
 | 
                vo4s.times10 = vo.times; 
 | 
                break; 
 | 
        } 
 | 
    } 
 | 
} 
 |