zhubaomin
2024-09-14 b65723ac8b1ee5f6e1ae9a1744c9080b26302eff
2024-09-14 朱宝民 水卡使用情况(充值、消费、余额)
5个文件已修改
2个文件已添加
236 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -6,6 +6,7 @@
import com.dy.pipIrrGlobal.voSe.VoCardInfo1;
import com.dy.pipIrrGlobal.voSe.VoCards;
import com.dy.pipIrrGlobal.voSe.VoCards2;
import com.dy.pipIrrGlobal.voSt.VoCardUsage;
import com.dy.pipIrrGlobal.voWe.VoCards3;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -202,4 +203,19 @@
     * @return
     */
    Long getCountByCardAddrAndState(String cardAddr);
    /**
     * 获取指定时间段水卡使用情况记录数量
     * @param params
     * @return
     */
    List<VoCardUsage> getCardUsagesCount(Map<?, ?> params);
    /**
     * 获取指定时间段水卡使用情况:充值合计、消费合计、余额
     * @param params
     * @return
     */
    List<VoCardUsage> getCardUsages(Map<?, ?> params);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSt/VoCardUsage.java
New file
@@ -0,0 +1,45 @@
package com.dy.pipIrrGlobal.voSt;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
/**
 * @author ZhuBaoMin
 * @date 2024-09-13 16:14
 * @LastEditTime 2024-09-13 16:14
 * @Description 水卡使用统计视图
 */
@Data
@JsonPropertyOrder({ "clientName", "cardNum", "totalRecharge", "totalConsumption", "balance"})
public class VoCardUsage {
    private static final long serialVersionUID = 202409131615001L;
    /**
     * 农户姓名
     */
    private String clientName;
    /**
     * 水卡编号
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long cardNum;
    /**
     * 充值金额合计
     */
    private Float totalRecharge;
    /**
     * 消费金额合计
     */
    private Float totalConsumption;
    /**
     * 余额
     */
    private Float balance;
}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -650,4 +650,62 @@
        WHERE cardAddr = #{cardAddr}
          AND state IN (1, 3)
    </select>
    <!--获取指定时间段水卡使用情况记录数量-->
    <select id="getCardUsagesCount" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
        SELECT
            cli.name AS clientName,
            card.cardNum,
            (SELECT ROUND(SUM(rch.amount),2) FROM se_recharge_history rch WHERE rch.cardId = card.id AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}) AS totalRecharge,
            (SELECT ROUND(SUM(his.cl_this_money),2) FROM rm_open_close_valve_history his WHERE his.cl_ic_card_no = card.cardNum AND his.cl_dt BETWEEN #{timeStart} AND #{timeStop}) AS totalConsumption,
            ROUND(card.money,2) AS balance
        FROM se_client_card card
            INNER JOIN se_client cli ON cli.id = card.clientId
            INNER JOIN se_recharge_history rch ON rch.cardId = card.id
        <where>
            <if test="clientName != null and clientName != ''">
                AND cli.name like CONCAT('%', #{clientName}, '%')
            </if>
            <if test="cardNum != null and cardNum != ''">
                AND card.cardNum like CONCAT('%', #{cardNum}, '%')
            </if>
            <if test="clientNum != null and clientNum != ''">
                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
            </if>
        </where>
    </select>
    <!--获取指定时间段水卡使用情况:充值合计、消费合计、余额-->
    <select id="getCardUsages" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
        SELECT
            cli.name AS clientName,
            card.cardNum,
            (SELECT ROUND(SUM(rch.amount),2) FROM se_recharge_history rch WHERE rch.cardId = card.id AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}) AS totalRecharge,
            (SELECT ROUND(SUM(his.cl_this_money),2) FROM rm_open_close_valve_history his WHERE his.cl_ic_card_no = card.cardNum AND his.cl_dt BETWEEN #{timeStart} AND #{timeStop}) AS totalConsumption,
            ROUND(card.money,2) AS balance
        FROM se_client_card card
            INNER JOIN se_client cli ON cli.id = card.clientId
            INNER JOIN se_recharge_history rch ON rch.cardId = card.id
        <where>
            <if test="clientName != null and clientName != ''">
                AND cli.name like CONCAT('%', #{clientName}, '%')
            </if>
            <if test="cardNum != null and cardNum != ''">
                AND card.cardNum like CONCAT('%', #{cardNum}, '%')
            </if>
            <if test="clientNum != null and clientNum != ''">
                AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
            </if>
        </where>
        ORDER BY cli.name, card.cardNum
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
            </if>
        </trim>
    </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardCtrl.java
@@ -4,15 +4,20 @@
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.voSt.VoCardUsage;
import com.dy.pipIrrGlobal.voSt.VoICCard;
import com.dy.pipIrrStatistics.card.IcCardqo.CommonQO;
import com.dy.pipIrrStatistics.card.qo.CardUsageQO;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Objects;
/**
 * @author ZhuBaoMin
@@ -102,4 +107,25 @@
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    /**
     * 获取指定时间段水卡使用情况:充值合计、消费合计、余额
     * @param qo
     //* @param bindingResult
     * @return
     */
    @GetMapping(path = "/card_usage")
    @SsoAop()
    public BaseResponse<QueryResultVo<List<VoCardUsage>>> getCardUsages(@Valid CardUsageQO qo, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        try {
            return BaseResponseUtils.buildSuccess(icCardSv.getCardUsages(qo));
        } catch (Exception e) {
            log.error("获取开卡记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/IcCardSv.java
@@ -3,9 +3,10 @@
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
import com.dy.pipIrrGlobal.voSt.VoCardUsage;
import com.dy.pipIrrGlobal.voSt.VoICCard;
import com.dy.pipIrrGlobal.voSt.VoIntakeAccumulateAmount;
import com.dy.pipIrrStatistics.card.IcCardqo.CommonQO;
import com.dy.pipIrrStatistics.card.qo.CardUsageQO;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -150,4 +151,45 @@
        Double totalMoney = seClientCardMapper.getTotalMoneyIcCards();
        return totalMoney ;
    }
    /**
     * 获取指定时间段水卡使用情况:充值合计、消费合计、余额
     * @param qo
     * @return
     */
    public QueryResultVo<List<VoCardUsage>> getCardUsages(CardUsageQO qo) {
        String timeStart = qo.getTimeStart();
        String timeStop = qo.getTimeStop();
        if (timeStart != null && timeStart != ""){
            timeStart = timeStart + " 00:00:00";
        }else {
            timeStart = LocalDate.now() + " 00:00:00";
        }
        if (timeStop != null && timeStop != ""){
            timeStop = timeStop + " 23:59:59";
        }else {
            timeStop = LocalDateTime.now().toString();
        }
        qo.setTimeStart(timeStart);
        qo.setTimeStop(timeStop);
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
        //Long itemTotal = seCardOperateMapper.getOpenCountIcCardsCount(params);
        Integer itemTotal = 0;
        List<VoCardUsage> all = seClientCardMapper.getCardUsagesCount(params);
        if(all != null && all.size() > 0) {
            itemTotal = all.size();
        }
        QueryResultVo<List<VoCardUsage>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = qo.pageSize ;
        rsVo.pageCurr = qo.pageCurr ;
        rsVo.calculateAndSet(Long.parseLong(itemTotal.toString()), params);
        rsVo.obj = seClientCardMapper.getCardUsages(params);
        return rsVo ;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/VirtualCardCtrl.java
@@ -131,4 +131,5 @@
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/java/com/dy/pipIrrStatistics/card/qo/CardUsageQO.java
New file
@@ -0,0 +1,46 @@
package com.dy.pipIrrStatistics.card.qo;
import com.dy.common.webUtil.QueryConditionVo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author ZhuBaoMin
 * @date 2024-09-13 16:27
 * @LastEditTime 2024-09-13 16:27
 * @Description 水卡使用情况查询对象
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class CardUsageQO extends QueryConditionVo {
    /**
     * 查询开始时间
     */
    //@NotBlank(message = "查询开始时间不能为空")
    private String timeStart;
    /**
     * 查询结束时间
     */
    //@NotBlank(message = "查询结束时间不能为空")
    private String timeStop;
    /**
     * 农户姓名
     */
    private String clientName;
    /**
     * 水卡编号
     */
    private Long cardNum;
    /**
     * 农户编号
     */
    private String clientNum;
}