From 5a9dbde4116479e4823be8dbf5cb4f57f5f85efe Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期二, 10 六月 2025 14:07:10 +0800
Subject: [PATCH] 销卡、充值回调、销卡回调
---
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCommon.java | 4
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 164 ++++++++++++++++++++++++++++++++
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml | 18 +++
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml | 7 +
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCancel.java | 50 ++++++++++
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java | 15 +++
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java | 27 ++++
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java | 6 +
8 files changed, 282 insertions(+), 9 deletions(-)
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
index 0e602ba..ac754fc 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeCardOperateMapper.java
@@ -7,6 +7,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -260,4 +261,18 @@
* @return
*/
SeCardOperate getCardOperate(@Param("operateType") Integer operateType, @Param("cardId") Long cardId);
+
+ /**
+ * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿鑾峰彇闈炰氦鏄撻噾棰�
+ * @param orderNumber
+ * @return
+ */
+ Float getNoTradeAmount(String orderNumber);
+
+ /**
+ * 鍏呭�兼満鐢ㄦ牴鎹鍗曞彿鑾峰彇鎿嶄綔鏃堕棿
+ * @param orderNumber
+ * @return
+ */
+ Date getOperateTime(String orderNumber);
}
\ No newline at end of file
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 6c15b86..15f798f 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
@@ -258,4 +258,10 @@
*/
Long getOriginalCardIdByCardId(@Param("cardId") Long cardId);
+ /**
+ * 鍏呭�兼満鐢ㄦ牴鎹ˉ鍗$殑璁㈠崟鍙峰皢鎸傚け姘村崱浣欓缃浂
+ * @param orderNumber
+ * @return
+ */
+ Integer emptyCardBalance(@Param("orderNumber")String orderNumber);
}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermRecharge.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCommon.java
similarity index 86%
rename from pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermRecharge.java
rename to pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCommon.java
index 10af526..0c30807 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermRecharge.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voSe/VoTermCommon.java
@@ -12,12 +12,12 @@
* @author ZhuBaoMin
* @date 2025-05-08 15:59
* @LastEditTime 2025-05-08 15:59
- * @Description 鍏呭�兼満鍏呭�艰繑鍥炶鍥惧璞�
+ * @Description 鍏呭�兼満閫氱敤杩斿洖瑙嗗浘瀵硅薄锛堝厖鍊笺�侀攢鍗★級
*/
@Data
@JsonPropertyOrder({"projectNo", "cardNum", "orderNo"})
-public class VoTermRecharge {
+public class VoTermCommon {
public static final long serialVersionUID = 202505081559001L;
private Integer projectNo;
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 853405e..5f0e848 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeCardOperateMapper.xml
@@ -1111,4 +1111,22 @@
SELECT * FROM se_card_operate
WHERE operate_type = #{operateType} AND card_id = #{cardId} ORDER BY operate_dt DESC LIMIT 1
</select>
+
+ <!--鍏呭�兼満鐢ㄦ牴鎹鍗曞彿鑾峰彇闈炰氦鏄撻噾棰�-->
+ <select id="getNoTradeAmount" resultType="java.lang.Float">
+ SELECT
+ IFNULL(SUM(trade_amount), 0) AS noTradeAmount
+ FROM se_card_operate
+ WHERE order_no = #{orderNumber}
+ </select>
+
+ <!--鍏呭�兼満鐢ㄦ牴鎹鍗曞彿鑾峰彇鎿嶄綔鏃堕棿-->
+ <select id="getOperateTime" resultType="java.util.Date">
+ SELECT
+ operate_dt AS operateTime
+ FROM se_card_operate
+ WHERE order_no = #{orderNumber}
+ ORDER BY operate_dt DESC
+ LIMIT 1
+ </select>
</mapper>
\ No newline at end of file
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 a6c5b32..cd74144 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -781,4 +781,11 @@
<select id="getOriginalCardIdByCardId" resultType="java.lang.Long">
SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId};
</select>
+
+ <!--鍏呭�兼満鐢ㄦ牴鎹ˉ鍗$殑璁㈠崟鍙峰皢鎸傚け姘村崱浣欓缃浂-->
+ <update id="emptyCardBalance">
+ UPDATE se_client_card
+ SET money = 0
+ WHERE id = (SELECT original_card_id FROM se_client_card WHERE id = (SELECT card_id FROM se_card_operate WHERE order_no = #{orderNumber}))
+ </update>
</mapper>
\ No newline at end of file
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 bb657d2..8e56ce4 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
@@ -4,7 +4,7 @@
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
+import com.dy.pipIrrGlobal.voSe.VoTermCommon;
import com.dy.pipIrrTerminal.card.dto.*;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
@@ -62,7 +62,7 @@
*/
@PostMapping(path = "termRecharge", consumes = MediaType.APPLICATION_JSON_VALUE)
@SsoAop()
- public BaseResponse<VoTermRecharge> termRecharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult) {
+ public BaseResponse<VoTermCommon> termRecharge(@RequestBody @Valid DtoRecharge po, BindingResult bindingResult) {
if (bindingResult != null && bindingResult.hasErrors()) {
return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
}
@@ -104,7 +104,7 @@
*/
@PostMapping(path = "termReissue", consumes = MediaType.APPLICATION_JSON_VALUE)
@SsoAop()
- public BaseResponse<VoTermRecharge> termReissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult) {
+ public BaseResponse<VoTermCommon> termReissue(@RequestBody @Valid DtoReissue po, BindingResult bindingResult) {
if (bindingResult != null && bindingResult.hasErrors()) {
return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
}
@@ -118,6 +118,27 @@
}
/**
+ * 閿�鍗�
+ * @param po
+ * @param bindingResult
+ * @return
+ */
+ @PostMapping(path = "termCancel", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<VoTermCommon> termCancel(@RequestBody @Valid DtoCancel po, BindingResult bindingResult) {
+ if (bindingResult != null && bindingResult.hasErrors()) {
+ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
+ }
+
+ Map map_result = cardSv.cancel(po);
+ if(map_result.get("success").equals(false)) {
+ return BaseResponseUtils.buildErrorMsg(map_result.get("msg").toString());
+ }
+ return BaseResponseUtils.buildSuccess(map_result.get("content")) ;
+
+ }
+
+ /**
* 鎿嶄綔鎵ц鍥炶皟
* @param po
* @param bindingResult
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 af93c99..5c63db2 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,6 +1,5 @@
package com.dy.pipIrrTerminal.card;
-import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
import com.dy.pipIrrGlobal.daoSe.SeCardOperateMapper;
import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper;
@@ -11,7 +10,7 @@
import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
import com.dy.pipIrrGlobal.voSe.VoAfterRecharge;
import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
+import com.dy.pipIrrGlobal.voSe.VoTermCommon;
import com.dy.pipIrrTerminal.card.dto.*;
import com.dy.pipIrrTerminal.card.enums.CardStateENUM;
import com.dy.pipIrrTerminal.card.enums.LastOperateENUM;
@@ -23,7 +22,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -170,6 +168,40 @@
card.setCardId(Long.parseLong(map_card.get("cardId").toString()));
card.setClientId(Long.parseLong(map_card.get("clientId").toString()));
card.setProtocol(map_card.get("protocol").toString());
+
+ map.put("success", true);
+ map.put("content", card);
+ return map;
+ }
+
+ /**
+ * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互娉ㄩ攢
+ * @param po
+ * @return
+ */
+ public Map canCancel(DtoCancel po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+
+ Long cardNum = po.getCardNum();
+ String stateName = seClientCardMapper.getCardStateByCardNum(cardNum);
+ if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) {
+ map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+ return map;
+ }
+
+ /**
+ * 渚濇嵁姘村崱缂栧彿鑾峰彇姘村崱琛ㄤ富閿強鍐滄埛缂栧彿
+ */
+ Map map_card = Optional.ofNullable(seClientCardMapper.getCardIdAndClientNum(cardNum)).orElse(new HashMap());
+ if (map_card == null || map_card.size() <= 0) {
+ map.put("msg", "鍗″彿閿欒锛岃鍗′笉瀛樺湪");
+ return map;
+ }
+ CardSimple card = new CardSimple();
+ card.setCardId(Long.parseLong(map_card.get("cardId").toString()));
+ card.setClientId(Long.parseLong(map_card.get("clientId").toString()));
map.put("success", true);
map.put("content", card);
@@ -467,7 +499,7 @@
return map;
}
- VoTermRecharge voTermRecharge = new VoTermRecharge();
+ VoTermCommon voTermRecharge = new VoTermCommon();
voTermRecharge.setProjectNo(projectNo);
voTermRecharge.setCardNum(po.getCardNum());
voTermRecharge.setOrderNo(orderNo);
@@ -522,6 +554,11 @@
return map;
}
+ /**
+ * 鎸傚け
+ * @param po
+ * @return
+ */
@Transactional(rollbackFor = Exception.class)
public Map reportLoss(DtoLoss po) {
Map map = new HashMap<>();
@@ -575,6 +612,55 @@
}
/**
+ * 閿�鍗�
+ * @param po
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map cancel(DtoCancel po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+ String orderNo = generateOrderNo();
+
+ Map map_canCancel = canCancel(po);
+ if(map_canCancel.get("success").equals(false)) {
+ map.put("msg", map_canCancel.get("msg").toString());
+ return map;
+ }
+ CardSimple card = (CardSimple) map_canCancel.get("content");
+ Long cardId = card.getCardId();
+ Long clientId = card.getClientId();
+
+ SeCardOperate seCardOperate = new SeCardOperate();
+ seCardOperate.setCardId(cardId);
+ seCardOperate.setClientId(clientId);
+ seCardOperate.setTradeAmount(-po.getRefund());
+ seCardOperate.setPaymentId(po.getRefundType());
+ seCardOperate.setOperateType(OperateTypeENUM.CANCEL.getCode());
+ seCardOperate.setRemarks(po.getRemarks());
+ seCardOperate.setOperator(po.getOperator());
+ seCardOperate.setOperateDt(new Date());
+ seCardOperate.setOrderNo(orderNo);
+ seCardOperate.setOperateValid((byte) 1);
+ seCardOperateMapper.insert(seCardOperate);
+ if (seCardOperate.getId() == 0) {
+ map.put("msg", "閿�鍗″け璐�-閿�鍗¤褰曞啓鍏ュ紓甯�");
+ return map;
+ }
+
+ VoTermCommon voTermCandel = new VoTermCommon();
+ voTermCandel.setProjectNo(projectNo);
+ voTermCandel.setCardNum(po.getCardNum());
+ voTermCandel.setOrderNo(orderNo);
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ map.put("content", voTermCandel);
+ return map;
+ }
+
+ /**
* 鎿嶄綔鍥炶皟
* @param po
* @return
@@ -617,6 +703,46 @@
turnRechargeHistoryValidByOrderNumber(orderNumber);
updateCard(cardId, orderNumber+"p");
}
+ } else if (operateType == 2) {
+ /**
+ * 鍏呭�兼搷浣滄墽琛岄�氱煡
+ * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+ * 2. 鍏呭�煎巻鍙茶褰曟敼涓烘湁鏁�
+ * 3. 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+ */
+ turnOperateValidByOrderNumber(orderNumber + "p");
+ turnRechargeHistoryValidByOrderNumber(orderNumber);
+ updateCard(cardId, orderNumber+"p");
+ }else if (operateType == 3) {
+ /**
+ * 閿�鍗℃搷浣滄墽琛岄�氱煡
+ * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+ * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+ */
+
+ Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+ Integer rec_card = updateCardInfo(cardId, orderNumber);
+ if (rec_ope == 0 || rec_card == 0) {
+ map.put("msg", "閿�鍗″洖璋冨け璐�");
+ return map;
+ }
+
+ } else if (operateType == 4) {
+ /**
+ * 琛ュ崱鎿嶄綔鎵ц閫氱煡
+ * 1. 鏂版按鍗¤褰曟敼涓烘湁鏁�
+ * 2. 寮�鍗℃搷浣滆褰曟敼涓烘湁鏁�
+ * 3. 濡傛灉瀛樺湪閫�杩橀噾棰�
+ * 娓呯┖鍘熷崱浣欓
+ */
+ Integer rec_card = turnCardValidByOrderNumber(orderNumber);
+ Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+ emptyCardBalance(orderNumber);
+ if (rec_card == 0 || rec_ope == 0) {
+ map.put("msg", "琛ュ崱鍥炶皟澶辫触");
+ return map;
+ }
+
}
map.put("success", true);
@@ -663,4 +789,34 @@
}
return true;
}
+
+ /**
+ * 濡傛灉琛ュ崱鏃堕��杩樹簡閲戦锛屾竻绌烘寕澶卞崱浣欓
+ * @param orderNumber
+ */
+ public Integer emptyCardBalance(String orderNumber) {
+ Integer rec_empty = 0;
+ Float noTradeAmount = seCardOperateMapper.getNoTradeAmount(orderNumber);
+ if(noTradeAmount != null && noTradeAmount > 0) {
+ rec_empty = seClientCardMapper.emptyCardBalance(orderNumber);
+ }
+ return rec_empty;
+ }
+
+ /**
+ * 淇敼娉ㄩ攢姘村崱琛ㄧ殑璁板綍鍙婁綑棰濓紙0锛�
+ * @param orderNumber
+ * @return
+ */
+ public Integer updateCardInfo(Long cardId, String orderNumber) {
+ Date operateTime = seCardOperateMapper.getOperateTime(orderNumber);
+
+ SeClientCard clientCard = new SeClientCard();
+ clientCard.setId(cardId);
+ clientCard.setCanceldt(operateTime);
+ clientCard.setMoney(0f);
+ clientCard.setState(CardStateENUM.CANCELLED.getCode());
+ clientCard.setLastoper(LastOperateENUM.CANCEL.getCode());
+ return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+ }
}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCancel.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCancel.java
new file mode 100644
index 0000000..0f00829
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/dto/DtoCancel.java
@@ -0,0 +1,50 @@
+package com.dy.pipIrrTerminal.card.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Positive;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-06-10 10:33
+ * @LastEditTime 2025-06-10 10:33
+ * @Description 閿�鍗′紶杈撳璞�
+ */
+
+@Data
+@Builder
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
+public class DtoCancel {
+ public static final long serialVersionUID = 202506101034001L;
+
+ /**
+ * 姘村崱缂栧彿
+ */
+ @NotNull(message = "姘村崱缂栧彿涓嶈兘涓虹┖")
+ private Long cardNum;
+
+ /**
+ * 閫�娆鹃噾棰�
+ */
+ private Float refund;
+
+ /**
+ * 閫�娆炬柟寮�;
+ */
+ private Long refundType;
+
+ /**
+ * 澶囨敞淇℃伅
+ */
+ private String remarks;
+
+ /**
+ * 鎿嶄綔浜虹紪鍙�
+ */
+ @NotNull(message = "鎿嶄綔浜虹紪鍙蜂笉鑳戒负绌�")
+ private Long operator;
+}
--
Gitblit v1.8.0