liurunyu
4 天以前 04585acb4f7af05e9a944c2914a8550963fbcf59
Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
7个文件已修改
1个文件已添加
297 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java
@@ -97,7 +97,7 @@
     * @param cardNum 水卡编号
     * @return 水卡操作记录列表
     */
    List<Map<String, Object>> getOperateRecordsByCardNum(@Param("cardNum") Long cardNum);
    List<Map<String, Object>> getOperateRecordsByCardNum(@Param("cardNum") Long cardNum, @Param("cardAddr") String cardAddr);
    /**
     * 根据水卡编号获取余额
@@ -105,7 +105,7 @@
     * @param cardNum 水卡编号
     * @return 余额
     */
    Float getMoneyByCardNum(@Param("cardNum") Long cardNum);
    Float getMoneyByCardNum(@Param("cardNum") Long cardNum, @Param("cardAddr") String cardAddr);
    /**
     * 根据水卡编号获取充值总额
@@ -113,7 +113,7 @@
     * @param cardNum
     * @return
     */
    Float sumRechargeByCardNum(@Param("cardNum") Long cardNum);
    Float sumRechargeByCardNum(@Param("cardNum") Long cardNum, @Param("cardAddr") String cardAddr);
    /**
     * 根据水卡编号获取卡片状态
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -386,7 +386,7 @@
    WHEN 2 THEN '充值'
    WHEN 3 THEN '销卡'
    WHEN 5 THEN '补扣'
    WHEN 10 THEN '反写'
<!--    WHEN 6 THEN '返还'-->
    END) AS operateType,
    (IFNULL(ope.trade_amount,0.00) + IFNULL(ope.card_cost,0.00)) AS tradeAmount,
    IFNULL(ope.trade_amount,0.00) AS waterCost,
@@ -411,7 +411,7 @@
    LEFT JOIN se_payment_method pay ON ope.payment_id = pay.id
    LEFT JOIN ba_user us ON ope.operator = us.id
    <where>
      AND ope.operate_type IN(1,2,3,5,10)
      AND ope.operate_type IN(1,2,3,5)
      AND ope.operate_valid = 2
      <if test = "villageId != null and villageId > 0">
        AND cli.villageId = #{villageId}
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -401,17 +401,34 @@
    LEFT JOIN se_client_card card ON card.id = ope.card_id
    LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id
    LEFT JOIN ba_user user ON user.id = ope.operator
    WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT}
    <!--        SELECT *-->
    <!--        FROM v_operate-->
    <!--        WHERE cardNum = #{cardNum,jdbcType=BIGINT}-->
<!--    WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT}-->
    <where>
      AND ope.operate_valid = 2
      AND ope.operate_type in (1,2,3)
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum = #{cardNum}
      </if>
      <if test="cardAddr != null and cardAddr != ''">
        AND card.cardAddr = #{cardAddr}
      </if>
    </where>
  </select>
  <!--根据水卡编号获取余额-->
  <select id="getMoneyByCardNum" resultType="java.lang.Float">
    SELECT money
    FROM se_client_card
    WHERE cardNum = #{cardNum,jdbcType=BIGINT}
<!--    WHERE cardNum = #{cardNum,jdbcType=BIGINT}-->
    <where>
      <if test="cardNum != null and cardNum != ''">
        AND cardNum = #{cardNum}
      </if>
      <if test="cardAddr != null and cardAddr != ''">
        AND cardAddr = #{cardAddr}
      </if>
    </where>
  </select>
  <!--根据水卡编号获取充值总额-->
@@ -419,7 +436,16 @@
    SELECT SUM(his.amount) AS amount
    FROM se_recharge_history his
    INNER JOIN se_client_card card ON his.cardId = card.id
    WHERE card.cardNum = #{cardNum,jdbcType=BIGINT}
<!--    WHERE card.cardNum = #{cardNum,jdbcType=BIGINT}-->
    <where>
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum = #{cardNum}
      </if>
      <if test="cardAddr != null and cardAddr != ''">
        AND card.cardAddr = #{cardAddr}
      </if>
    </where>
  </select>
  <!--根据水卡编号获取卡片状态:1-开卡,2-补卡,3-充值,4-挂失,5-注销,6-解锁,7-冲正,8-消费-->
pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java
@@ -93,9 +93,9 @@
     * @return
     */
    public Map getOperateRecordsAndMoney(Long cardNum) {
        List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum)).orElse(new ArrayList<>());
        Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f);
        Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum)).orElse(0f);
        List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum, null)).orElse(new ArrayList<>());
        Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum,null)).orElse(0f);
        Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum, null)).orElse(0f);
        Map map = new HashMap();
        map.put("mondy", mondy);
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java
@@ -9,6 +9,7 @@
import com.dy.pipIrrTerminal.card.dto.*;
import com.dy.pipIrrTerminal.card.qo.QoCards;
import com.dy.pipIrrTerminal.card.qo.QoLostCards;
import com.dy.pipIrrTerminal.card.qo.QoTransaction;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -392,4 +393,38 @@
            return BaseResponseUtils.buildErrorMsg(result.get("msg").toString());
        }
    }
    /**
     * 根据指定条件获取交易明细
     *
     * @param vo
     * @return
     */
    @GetMapping(path = "getTransactions")
    @SsoAop()
    public BaseResponse<Map> getOperates(QoTransaction vo) {
        try {
            return BaseResponseUtils.buildSuccess(cardSv.getTransactions(vo));
        } catch (Exception e) {
            log.error("查询交易记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
    @GetMapping(path = "/getOperateRecords")
    @SsoAop()
    public BaseResponse<List<Map<String, Object>>> getOperateRecordsAndMoney(QoCards qo){
        try {
            Long cardNum = qo.getCardNum();
            String cardAddr = qo.getCardAddr();
            if (cardNum == null && cardAddr == null) {
                return BaseResponseUtils.buildErrorMsg("请输入卡号或卡地址");
            }
            Map map = cardSv.getOperateRecordsAndMoney(cardNum, cardAddr);
            return BaseResponseUtils.buildSuccess(map);
        } catch (Exception e) {
            log.error("查询操作记录异常", e);
            return BaseResponseUtils.buildException(e.getMessage()) ;
        }
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java
@@ -1,5 +1,8 @@
package com.dy.pipIrrTerminal.card;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
@@ -17,6 +20,7 @@
import com.dy.pipIrrTerminal.card.enums.ManagementCardStateENUM;
import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM;
import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM;
import com.dy.pipIrrTerminal.card.qo.QoTransaction;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import com.dy.common.util.IDLongGenerator;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -527,7 +532,7 @@
            }
        }
        Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum)).orElse(0f);
        Float balance = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, null)).orElse(0f);
        Double waterPrice = prWaterPriceMapper.getPrice();
        VoTermActiveCard voTermActiveCard = new VoTermActiveCard();
@@ -1414,4 +1419,150 @@
        Long totalCount = seClientCardMapper.checkCardAddrExists(cardAddr);
        return totalCount != null && totalCount > 0;
    }
    /**
     * 根据指定条件获取交易记录
     *
     * @param vo
     * @return
     */
    public Map getTransactions(QoTransaction vo) {
        DecimalFormat df = new DecimalFormat("0.00");
        // 补齐查询时间
        String operateTimeStart = vo.operateTimeStart;
        String operateTimeStop = vo.operateTimeStop;
        if (operateTimeStart != null) {
            operateTimeStart = operateTimeStart + " 00:00:00";
            vo.setOperateTimeStart(operateTimeStart);
        }
        if (operateTimeStop != null) {
            operateTimeStop = operateTimeStop + " 23:59:59";
            vo.setOperateTimeStop(operateTimeStop);
        }
        // 生成查询参数
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo);
        // 获取符合条件的记录数
        Long itemTotal = Optional.ofNullable(seCardOperateMapper.getTransactionRecordCount(params)).orElse(0L);
        QueryResultVo<List<VoTradeDetails>> rsVo = new QueryResultVo<>();
        rsVo.pageSize = vo.pageSize;
        rsVo.pageCurr = vo.pageCurr;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = seCardOperateMapper.getTransactions(params);
        List<VoTradeDetails> list = rsVo.obj;
        if (list.size() == 0) {
            return new HashMap();
        }
//元谋一期陆常丽需求把赠送金额与充值金额分开显示
        for (int i = list.size()-1; i >= 0 ; i--) {
            Optional.ofNullable(list.get(i).getGift()).orElse(0d);
            if (!list.get(i).getGift().equals(0d)){
                Double gift1 = list.get(i).getGift();//赠送金额
                String districtTitle = list.get(i).getDistrictTitle();//地址
                String clientNum = list.get(i).getClientNum();//农户编号
                String clientName = list.get(i).getClientName();//农户姓名
                String phone = list.get(i).getPhone();//手机号
                Date tradeTime = list.get(i).getTradeTime();//交易时间
                String orderNumber = list.get(i).getOrderNumber();//订单编号
                String cardNum = list.get(i).getCardNum();//卡编号
                String idCard = list.get(i).getIdCard();//身份证
                String cashierName = list.get(i).getCashierName();//操作人
                Double money = list.get(i).getMoney();//余额
                Double cardCost1 = list.get(i).getCardCost();//购卡金额
                Double tradeAmount = list.get(i).getTradeAmount();//交易金额
                Double waterCost1 = list.get(i).getWaterCost();//购水金额
                Double refundAmount1 = list.get(i).getRefundAmount();//返回金额
                String paymentName = list.get(i).getPaymentName();//支付方式
                String operateType = list.get(i).getOperateType();//业务类型
                String cardState = list.get(i).getCardState();//卡状态
                Long villageId = list.get(i).getVillageId();//村id
                Long cashierId = list.get(i).getCashierId();//收银员id
                list.get(i).setGift(0d);
                list.get(i).setMoney(money-gift1);
                VoTradeDetails voTradeDetail = new VoTradeDetails();
                voTradeDetail.setDistrictTitle(districtTitle);//2
                voTradeDetail.setClientNum(clientNum);//2
                voTradeDetail.setClientName(clientName);//2
                voTradeDetail.setPhone(phone);//2
                voTradeDetail.setOperateType("赠送");//2
                voTradeDetail.setTradeTime(tradeTime);//2
                voTradeDetail.setWaterCost(0d);//2
                voTradeDetail.setCardCost(0d);//2
                voTradeDetail.setGift(gift1);//2
                voTradeDetail.setTradeAmount(0d);//2
                voTradeDetail.setRefundAmount(refundAmount1);//2
                voTradeDetail.setMoney(money);//待2
                voTradeDetail.setPaymentName("赠送");//2
                voTradeDetail.setOrderNumber(orderNumber);//2
                voTradeDetail.setCardNum(cardNum);//2
                voTradeDetail.setIdCard(idCard);//2
                voTradeDetail.setCashierName(cashierName);//2
                voTradeDetail.setCashierId(cashierId);//2
                voTradeDetail.setCardState(cardState);//2
                voTradeDetail.setVillageId(villageId);//2
                list.add(voTradeDetail);
                itemTotal = itemTotal + 1;
            }
        }
        list.sort(Comparator.comparing(VoTradeDetails::getTradeTime));
        rsVo.obj = list;
        rsVo.calculateAndSet(itemTotal, params);
        // 遍历交易明细记录,汇总购水金额、购卡金额
        Double totalWaterCost = 0.0;
        Double totalCardCost = 0.0;
        Double totalGift = 0.0;
        Double totalRefund = 0.0;
        JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));
        for (int i = 0; i < array.size(); i++) {
            JSONObject job = array.getJSONObject(i);
            Double waterCost = Optional.ofNullable(job.getDouble("waterCost")).orElse(0.0);
            Double cardCost = Optional.ofNullable(job.getDouble("cardCost")).orElse(0.0);
            Double gift = Optional.ofNullable(job.getDouble("gift")).orElse(0.0);
            Double refundAmount = Optional.ofNullable(job.getDouble("refundAmount")).orElse(0.0);
            totalWaterCost = totalWaterCost + waterCost;
            totalCardCost = totalCardCost + cardCost;
            totalGift = totalGift + gift;
            totalRefund = totalRefund + refundAmount;
        }
        Map map_record = new HashMap();
        map_record.put("list", rsVo);
        Map map_result = new HashMap();
        map_result.put("waterCost", df.format(totalWaterCost));
        map_result.put("cardCost", df.format(totalCardCost));
        map_result.put("gift", df.format(totalGift));
        map_result.put("refund", df.format(totalRefund));
        map_result.put("records", map_record);
        return map_result;
    }
    /**
     * 根据水卡编号或水卡地址获取操作记录及余额
     * @param cardNum
     * @return
     */
    public Map getOperateRecordsAndMoney(Long cardNum, String cardAddr) {
        List<Map<String, Object>> list = Optional.ofNullable(seClientCardMapper.getOperateRecordsByCardNum(cardNum, cardAddr)).orElse(new ArrayList<>());
        Float mondy = Optional.ofNullable(seClientCardMapper.getMoneyByCardNum(cardNum, cardAddr)).orElse(0f);
        Float amount = Optional.ofNullable(seClientCardMapper.sumRechargeByCardNum(cardNum, cardAddr)).orElse(0f);
        Map map = new HashMap();
        map.put("mondy", mondy);
        map.put("amount", amount);
        map.put("list", list);
        return map;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java
@@ -17,15 +17,25 @@
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(name = "水卡记录查询条件")
public class QoCards extends QueryConditionVo {
    @Schema(description = "农户编号")
    /**
     * 农户编号
     */
    public Long clientNum;
    @Schema(description = "农户姓名")
    /**
     * 农户姓名
     */
    private String clientName;
    @Schema(description = "水卡编号")
    /**
     * 水卡编号
     */
    public Long cardNum;
    /**
     * 水卡地址
     */
    private String cardAddr;
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java
New file
@@ -0,0 +1,37 @@
package com.dy.pipIrrTerminal.card.qo;
import com.dy.common.webUtil.QueryConditionVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
/**
 * @author ZhuBaoMin
 * @date 2025-06-26 10:43
 * @LastEditTime 2025-06-26 10:43
 * @Description 交易明细查询对象
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QoTransaction extends QueryConditionVo {
    /**
     * 交易查询起始时间
     */
    public String operateTimeStart;
    /**
     * 交易查询结束时间
     */
    public String operateTimeStop;
    /**
     * 收银员ID
     */
    public Long cashierId;
}