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; }