From e330368cb9fdfaede328c6622abac6ecbdd6f223 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期四, 26 六月 2025 15:46:21 +0800 Subject: [PATCH] 获取交易明细接口,根据水卡编号或水卡地址获取操作记录接口 --- pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 153 ++++++++++++++++++++++++++++++ pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml | 4 pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml | 38 ++++++- pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java | 37 +++++++ pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java | 35 +++++++ pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java | 6 pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java | 6 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java | 18 ++ 8 files changed, 278 insertions(+), 19 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java index 8757677..e75da6e 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java +++ b/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); /** * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗$墖鐘舵�� diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml index 6f3c47b..f039398 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml +++ b/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} diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml index 76c469e..ff87890 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml +++ b/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-瑙i攣锛�7-鍐叉锛�8-娑堣垂--> diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java index c2f14e6..f3850e6 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-sell/src/main/java/com/dy/pipIrrSell/clientCard/ClientCardSv.java +++ b/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); diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java index 8a4e1b4..fdb93a4 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java +++ b/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()) ; + } + } } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java index 31520d5..645050d 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java +++ b/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();//鏉慽d + Long cashierId = list.get(i).getCashierId();//鏀堕摱鍛榠d + + 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; + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java index a816357..6fc3087 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java +++ b/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; } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java new file mode 100644 index 0000000..66a756b --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoTransaction.java @@ -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; + + /** + * 鏀堕摱鍛業D + */ + public Long cashierId; +} -- Gitblit v1.8.0