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