From 71b9ac1d2459239d2c5340b384f1536b156fc003 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 20 六月 2025 08:39:50 +0800
Subject: [PATCH] 表阀一体机协议,根据王江海测试问题,进行修改完善
---
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 736 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 719 insertions(+), 17 deletions(-)
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 ded6fa1..8ef5072 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,19 +1,13 @@
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;
-import com.dy.pipIrrGlobal.daoSe.SeClientMapper;
-import com.dy.pipIrrGlobal.daoSe.SeRechargeHistoryMapper;
+import com.dy.pipIrrGlobal.daoSe.*;
import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
import com.dy.pipIrrGlobal.pojoSe.SeClientCard;
import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
-import com.dy.pipIrrGlobal.voSe.VoTermActiveCard;
-import com.dy.pipIrrGlobal.voSe.VoTermRecharge;
-import com.dy.pipIrrTerminal.card.dto.ActiveCard;
-import com.dy.pipIrrTerminal.card.dto.CardSimple;
-import com.dy.pipIrrTerminal.card.dto.DtoRecharge;
-import com.dy.pipIrrTerminal.card.dto.DtoReissue;
+import com.dy.pipIrrGlobal.voSe.*;
+import com.dy.pipIrrTerminal.card.dto.*;
import com.dy.pipIrrTerminal.card.enums.CardStateENUM;
import com.dy.pipIrrTerminal.card.enums.LastOperateENUM;
import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM;
@@ -52,6 +46,9 @@
@Autowired
private SeRechargeHistoryMapper seRechargeHistoryMapper;
+
+ @Autowired
+ private SeManagerCardMapper seManagerCardMapper;
@Value("${project.projectNo}")
private Integer projectNo;
@@ -99,6 +96,74 @@
}
/**
+ * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鎸傚け
+ * @param po
+ * @return true:鍙互鎶ュけ
+ */
+ public Map canReportLoss(DtoLoss 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()));
+ //card.setProtocol(map_card.get("protocol").toString());
+
+ map.put("success", true);
+ map.put("content", card);
+ return map;
+ }
+
+ /**
+ * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互瑙i攣
+ * @param po
+ * @return
+ */
+ public Map canUnlock(DtoUnlock po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+
+ Long cardNum = po.getCardNum();
+ // 鍒ゆ柇褰撳墠姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏈ˉ鍗★紝浠呭凡缁忔寕澶卞叾鏈ˉ鍗$殑鍙互瑙i攣
+ if (!isLostAndUnreplaced(cardNum)) {
+ map.put("msg", "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔");
+ 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);
+ return map;
+ }
+ /**
* 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱
* @param po
* @return true:鍙互琛ュ崱
@@ -135,6 +200,108 @@
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);
+ return map;
+ }
+
+ /**
+ * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ユ墸
+ * @param po
+ * @return
+ */
+ public Map canRepay(DtoRepaySupplement 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);
+ return map;
+ }
+
+ /**
+ * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互杩旇繕
+ * @param po
+ * @return
+ */
+ public Map canSupplement(DtoRepaySupplement 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);
@@ -198,6 +365,7 @@
return dtf.format(dateTime) + sb.toString();
}
+ @Transactional(rollbackFor = Exception.class)
public Map addCardAndOperate(ActiveCard po, Long cardNum, String orderNo) {
Map map = new HashMap<>();
map.put("success", false);
@@ -211,6 +379,7 @@
seClientCard.setClientid(po.getClientId());
seClientCard.setMoney(po.getAmount());
seClientCard.setState(CardStateENUM.INVALID.getCode());
+ seClientCard.setOrderNo(orderNo);
if (po.getOriginalCardId() != null) {
// 琛ュ崱
seClientCard.setOriginalCardId(po.getOriginalCardId());
@@ -266,7 +435,8 @@
* @param cardNum
* @return
*/
- public Map plusRecharge(ActiveCard po, Long cardNum) {
+ @Transactional(rollbackFor = Exception.class)
+ public Map plusRecharge(ActiveCard po, Long cardNum, String orderNo) {
Map map = new HashMap<>();
map.put("success", false);
map.put("content", null);
@@ -283,7 +453,7 @@
dtoRecharge.setMoney(0f);
dtoRecharge.setGift(0f);
dtoRecharge.setPrice(0f);
- Map map_plusRecharge = addRecharge(dtoRecharge);
+ Map map_plusRecharge = addRecharge(dtoRecharge, orderNo);
if (!map_plusRecharge.get("success").equals(true)) {
map.put("msg", "寮�鍗″け璐�-鍏呭�煎紓甯�");
return map;
@@ -325,7 +495,7 @@
}
if (amount != null && amount > 0 && originalCardId == null) {
- Map map_plusRecharge = plusRecharge(po, cardNum);
+ Map map_plusRecharge = plusRecharge(po, cardNum, orderNo);
if(map_plusRecharge.get("success").equals(false)) {
map.put("msg", map_plusRecharge.get("msg").toString());
return map;
@@ -355,7 +525,7 @@
* @return
*/
@Transactional(rollbackFor = Exception.class)
- public Map addRecharge(DtoRecharge po) {
+ public Map addRecharge(DtoRecharge po, String orderNo) {
Map map = new HashMap<>();
map.put("success", false);
map.put("content", null);
@@ -376,7 +546,9 @@
}
Long cardId = Long.parseLong(map_cardAndClient.get("cardId").toString());
Long clientId = Long.parseLong(map_cardAndClient.get("clientId").toString());
- String orderNo = generateOrderNo();
+ if(orderNo == null || orderNo.length() <= 0) {
+ orderNo = generateOrderNo();
+ }
/**
* 娣诲姞姘村崱鍏呭�兼搷浣滆褰�
@@ -393,7 +565,7 @@
seCardOperate.setRemarks(po.getRemarks());
seCardOperate.setOperator(po.getOperator());
seCardOperate.setOperateDt(new Date());
- seCardOperate.setOrderNo(orderNo);
+ seCardOperate.setOrderNo(orderNo + "p");
seCardOperate.setOperateValid((byte) 1);
seCardOperateMapper.insert(seCardOperate);
Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
@@ -419,6 +591,7 @@
seRechargeHistory.setOperator(po.getOperator());
seRechargeHistory.setOperatedt(new Date());
seRechargeHistory.setOperateValid((byte) 1);
+ seRechargeHistory.setOrderNo(orderNo);
seRechargeHistoryMapper.insert(seRechargeHistory);
Long rec_seRechargeHistory = Optional.ofNullable(seRechargeHistory.getId()).orElse(0L);
if (rec_seRechargeHistory == 0) {
@@ -426,10 +599,11 @@
return map;
}
- VoTermRecharge voTermRecharge = new VoTermRecharge();
+ VoTermCommon voTermRecharge = new VoTermCommon();
voTermRecharge.setProjectNo(projectNo);
voTermRecharge.setCardNum(po.getCardNum());
voTermRecharge.setOrderNo(orderNo);
+ voTermRecharge.setBalance(afterRecharge);
map.put("success", true);
map.put("msg", "鎿嶄綔鎴愬姛");
@@ -480,4 +654,532 @@
map.put("content", voTermActiveCard);
return map;
}
+
+ /**
+ * 鎸傚け
+ * @param po
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map reportLoss(DtoLoss po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+
+ Map map_canReportLoss = canReportLoss(po);
+ if(map_canReportLoss.get("success").equals(false)) {
+ map.put("msg", map_canReportLoss.get("msg").toString());
+ return map;
+ }
+ CardSimple card = (CardSimple) map_canReportLoss.get("content");
+ Long cardId = card.getCardId();
+ Long clientId = card.getClientId();
+
+ Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+ Float refund = Optional.ofNullable(po.getRefund()).orElse(0f);
+
+ SeClientCard seClientCard = new SeClientCard();
+ seClientCard.setId(cardId);
+ seClientCard.setMoney(money);
+ seClientCard.setLossdtdt(new Date());
+ seClientCard.setState(CardStateENUM.LOSS.getCode());
+ seClientCard.setLastoper(LastOperateENUM.LOSS.getCode());
+ Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+ if (rec_updateClientCard == 0) {
+ map.put("msg", "鎸傚け澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
+ return map;
+ }
+
+ SeCardOperate seCardOperate = new SeCardOperate();
+ seCardOperate.setCardId(cardId);
+ seCardOperate.setClientId(clientId);
+ seCardOperate.setMoney(money);
+ seCardOperate.setTradeAmount(-refund);
+ seCardOperate.setPaymentId(1L);
+ seCardOperate.setOperateType(OperateTypeENUM.LOSS.getCode());
+ seCardOperate.setRemarks(po.getRemarks());
+ seCardOperate.setOperator(po.getOperator());
+ seCardOperate.setOperateDt(new Date());
+ seCardOperate.setOperateValid((byte) 2);
+ seCardOperateMapper.insert(seCardOperate);
+ if (seCardOperate.getId() == 0) {
+ map.put("msg", "鎸傚け澶辫触-鎸傚け璁板綍鍐欏叆寮傚父");
+ return map;
+ }
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ return map;
+ }
+
+ /**
+ * 瑙i攣
+ * @param po
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map unlock(DtoUnlock po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+
+ Map map_canUnlock = canUnlock(po);
+ if(map_canUnlock.get("success").equals(false)) {
+ map.put("msg", map_canUnlock.get("msg").toString());
+ return map;
+ }
+ CardSimple card = (CardSimple) map_canUnlock.get("content");
+ Long cardId = card.getCardId();
+ Long clientId = card.getClientId();
+
+ /**
+ * 淇敼鍐滄埛鍗′俊鎭細
+ * 鎸傚け鏃堕棿
+ * 鏈�鍚庢搷浣滅被鍨�-4
+ */
+ SeClientCard seClientCard = new SeClientCard();
+ seClientCard.setId(cardId);
+ seClientCard.setUnlockdt(new Date());
+ seClientCard.setMoney(po.getMoney());
+ seClientCard.setState(CardStateENUM.NORMAL.getCode());
+ seClientCard.setLastoper(LastOperateENUM.UNLOCK.getCode());
+ Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0);
+ if (rec_updateClientCard == 0) {
+ map.put("msg", "瑙i攣澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�");
+ return map;
+ }
+
+ /**
+ * 娣诲姞瑙i攣璁板綍
+ */
+ SeCardOperate seCardOperate = new SeCardOperate();
+ seCardOperate.setCardId(cardId);
+ seCardOperate.setClientId(clientId);
+ seCardOperate.setMoney(po.getMoney());
+ seCardOperate.setOperateType(OperateTypeENUM.UNLOCK.getCode());
+ seCardOperate.setRemarks(po.getRemarks());
+ seCardOperate.setOperator(po.getOperator());
+ seCardOperate.setOperateDt(new Date());
+ seCardOperate.setOperateValid((byte) 2);
+ seCardOperateMapper.insert(seCardOperate);
+ Long rec = Optional.ofNullable(seCardOperate.getId()).orElse(0L);
+ if (rec == 0) {
+ map.put("msg", "瑙i攣澶辫触-瑙i攣璁板綍鍐欏叆寮傚父");
+ return map;
+ }
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ return map;
+ }
+
+ /**
+ * 閿�鍗�
+ * @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
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map repay(DtoRepaySupplement po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+ String orderNo = generateOrderNo();
+ Date operateTime = new Date();
+ Double waterPrice = Optional.ofNullable(prWaterPriceMapper.getPrice()).orElse(0.0);
+
+ Map map_canRepay = canRepay(po);
+ if(map_canRepay.get("success").equals(false)) {
+ map.put("msg", map_canRepay.get("msg").toString());
+ return map;
+ }
+ CardSimple card = (CardSimple) map_canRepay.get("content");
+ Long cardId = card.getCardId();
+ Long clientId = card.getClientId();
+
+ SeCardOperate seCardOperate = new SeCardOperate();
+ seCardOperate.setCardId(cardId);
+ seCardOperate.setClientId(clientId);
+ seCardOperate.setMoney(po.getBalance());
+ seCardOperate.setRefundAmount(po.getRepayMorny());
+ seCardOperate.setOperateType(OperateTypeENUM.REFUND.getCode());
+ seCardOperate.setRemarks(po.getRemarks());
+ seCardOperate.setOperator(po.getOperator());
+ seCardOperate.setOperateDt(operateTime);
+ seCardOperate.setOrderNo(orderNo);
+ seCardOperate.setOperateValid((byte) 1);
+ seCardOperateMapper.insert(seCardOperate);
+ if (seCardOperate.getId() == 0) {
+ map.put("msg", "琛ユ墸澶辫触-琛ユ墸璁板綍鍐欏叆寮傚父");
+ return map;
+ }
+
+ VoRepaySupplement voRepaySupplement = new VoRepaySupplement();
+ voRepaySupplement.setBalance(po.getBalance() - po.getRepayMorny());
+ voRepaySupplement.setWaterPrice(waterPrice);
+ voRepaySupplement.setTime(operateTime);
+ voRepaySupplement.setOrderNo(orderNo);
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ map.put("content", voRepaySupplement);
+ return map;
+ }
+
+ /**
+ * 杩旇繕
+ * @param po
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map supplement(DtoRepaySupplement po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+ String orderNo = generateOrderNo();
+ Date operateTime = new Date();
+ Double waterPrice = Optional.ofNullable(prWaterPriceMapper.getPrice()).orElse(0.0);
+
+ Map map_canSupplement = canSupplement(po);
+ if(map_canSupplement.get("success").equals(false)) {
+ map.put("msg", map_canSupplement.get("msg").toString());
+ return map;
+ }
+ CardSimple card = (CardSimple) map_canSupplement.get("content");
+ Long cardId = card.getCardId();
+ Long clientId = card.getClientId();
+
+ SeCardOperate seCardOperate = new SeCardOperate();
+ seCardOperate.setCardId(cardId);
+ seCardOperate.setClientId(clientId);
+ seCardOperate.setMoney(po.getBalance());
+ seCardOperate.setRefundAmount(po.getSupplementMoney());
+ seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode());
+ seCardOperate.setRemarks(po.getRemarks());
+ seCardOperate.setOperator(po.getOperator());
+ seCardOperate.setOperateDt(operateTime);
+ seCardOperate.setOrderNo(orderNo);
+ seCardOperate.setOperateValid((byte) 1);
+ seCardOperateMapper.insert(seCardOperate);
+ if (seCardOperate.getId() == 0) {
+ map.put("msg", "杩旇繕澶辫触-杩旇繕璁板綍鍐欏叆寮傚父");
+ return map;
+ }
+ VoRepaySupplement voRepaySupplement = new VoRepaySupplement();
+ voRepaySupplement.setBalance(po.getBalance() + po.getSupplementMoney());
+ voRepaySupplement.setWaterPrice(waterPrice);
+ voRepaySupplement.setTime(operateTime);
+ voRepaySupplement.setOrderNo(orderNo);
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ map.put("content", voRepaySupplement);
+ return map;
+ }
+
+ /**
+ * 鎿嶄綔鍥炶皟
+ * @param po
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map callBack(DtoCallBack po) {
+ Map map = new HashMap<>();
+ map.put("success", false);
+ map.put("content", null);
+
+ String cardAddr = po.getCardAddr();
+ Integer operateType = po.getOperateType();
+ String orderNumber = po.getOrderNumber();
+
+ Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr);
+ if (cardId == null || cardId.equals(0)) {
+ map.put("msg", "鎮ㄦ寚瀹氱殑姘村崱涓嶅瓨鍦�");
+ return map;
+ }
+
+ if(operateType == 1) {
+ /**
+ * 寮�鍗℃搷浣滄墽琛岄�氱煡
+ * 1.渚濇嵁璁㈠崟鍙峰皢鏃犳晥鐘舵�佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥
+ * 2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥
+ * 3.濡傛灉寮�鍗″悓姝ュ厖鍊�
+ * 淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥
+ * 淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥
+ * 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅
+ */
+ Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+ Integer rec_card = turnCardValidByOrderNumber(orderNumber);
+ if (rec_ope == 0 || rec_card == 0) {
+ map.put("msg", "涓嶅瓨鍦ㄦ湭鐢熸晥鐨勬按鍗�");
+ return map;
+ }
+
+ if(isMergeRecharge(cardId)) {
+ turnOperateValidByOrderNumber(orderNumber + "p");
+ 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;
+ }
+ } else if (operateType == 5) {
+ /**
+ * 琛ユ墸鎿嶄綔鎵ц閫氱煡
+ * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+ * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+ */
+ Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+ Integer rec_card = updateCardInfo_repay(cardId, orderNumber);
+ if (rec_ope == 0 || rec_card == 0) {
+ map.put("msg", "琛ユ墸鍥炶皟澶辫触");
+ return map;
+ }
+ } else if (operateType == 6) {
+ /**
+ * 杩旇繕鎿嶄綔鎵ц閫氱煡
+ * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥
+ * 2. 淇敼姘村崱琛ㄦ搷浣滀俊鎭強浣欓
+ */
+ Integer rec_ope = turnOperateValidByOrderNumber(orderNumber);
+ Integer rec_card = updateCardInfo_supplement(cardId, orderNumber);
+ if (rec_ope == 0 || rec_card == 0) {
+ map.put("msg", "杩旇繕鍥炶皟澶辫触");
+ return map;
+ }
+ }
+
+ map.put("success", true);
+ map.put("msg", "鎿嶄綔鎴愬姛");
+ return map;
+ }
+
+ // 鏍规嵁璁㈠崟鍙峰皢鎿嶄綔璁板綍鏀逛负鏈夋晥
+ public Integer turnOperateValidByOrderNumber(String orderNumber) {
+ return seCardOperateMapper.turnOperateValidByOrderNumber(orderNumber);
+ }
+
+ // 鏍规嵁璁㈠崟鍙峰皢姘村崱鏀逛负鏈夋晥
+ public Integer turnCardValidByOrderNumber(String orderNumber) {
+ return seClientCardMapper.turnCardValidByOrderNumber(orderNumber);
+ }
+
+ // 鏍规嵁璁㈠崟鍙峰皢鍏呭�煎巻鍙叉敼涓烘湁鏁�
+ public Integer turnRechargeHistoryValidByOrderNumber(String orderNumber) {
+ return seRechargeHistoryMapper.turnRechargeHistoryValidByOrderNumber(orderNumber);
+ }
+
+ // 鏍规嵁cardId鍒ゆ柇鏄惁鏄悎骞跺厖鍊�
+ public Boolean isMergeRecharge(Long cardId) {
+ Integer plusRechargeCount = seCardOperateMapper.getPlusRechargeCount(cardId);
+ if (plusRechargeCount == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ // 淇敼姘村崱淇℃伅
+ public Boolean updateCard(Long cardId, String orderNumber) {
+ VoAfterRecharge voAfterRecharge = seCardOperateMapper.getBalanceAfterRecharge(orderNumber);
+
+ SeClientCard clientCard = new SeClientCard();
+ clientCard.setId(cardId);
+ clientCard.setMoney(voAfterRecharge.getBalanceAfterRecharge());
+ clientCard.setRechargedt(voAfterRecharge.getOperateTime());
+ clientCard.setLastoper(LastOperateENUM.RECHARGE.getCode());
+ Integer rec_updateClientCard = seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+ if (rec_updateClientCard == null || rec_updateClientCard == 0) {
+ return false;
+ }
+ 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);
+ }
+
+ /**
+ * 淇敼琛ユ墸姘村崱琛ㄨ褰曞強浣欓
+ * @param cardId
+ * @param orderNumber
+ * @return
+ */
+ public Integer updateCardInfo_repay(Long cardId, String orderNumber) {
+ VoRepaySupplementSimple po = seCardOperateMapper.getCardOperateByOrderNumber(orderNumber);
+ Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+ Float refundAmount = Optional.ofNullable(po.getRefundAmount()).orElse(0f);
+ Date operateTime = po.getOperateTime();
+
+ SeClientCard clientCard = new SeClientCard();
+ clientCard.setId(cardId);
+ clientCard.setRefunddt(operateTime);
+ clientCard.setMoney(money - refundAmount);
+ clientCard.setState(CardStateENUM.NORMAL.getCode());
+ clientCard.setLastoper(LastOperateENUM.REFUND.getCode());
+ return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+ }
+
+ /**
+ * 淇敼杩旇繕姘村崱琛ㄨ褰曞強浣欓
+ * @param cardId
+ * @param orderNumber
+ * @return
+ */
+ public Integer updateCardInfo_supplement(Long cardId, String orderNumber) {
+ VoRepaySupplementSimple po = seCardOperateMapper.getCardOperateByOrderNumber(orderNumber);
+ Float money = Optional.ofNullable(po.getMoney()).orElse(0f);
+ Float refundAmount = Optional.ofNullable(po.getRefundAmount()).orElse(0f);
+ Date operateTime = po.getOperateTime();
+
+ SeClientCard clientCard = new SeClientCard();
+ clientCard.setId(cardId);
+ clientCard.setRefunddt(operateTime);
+ clientCard.setMoney(money + refundAmount);
+ clientCard.setState(CardStateENUM.NORMAL.getCode());
+ clientCard.setLastoper(LastOperateENUM.WRITE_BACK.getCode());
+ return seClientCardMapper.updateByPrimaryKeySelective(clientCard);
+ }
+
+ /**
+ * 鍒ゆ柇鎸囧畾姘村崱鏄惁涓烘寕澶辩姸鎬佷笖鏃犺ˉ鍗¤褰�
+ * @param cardNum
+ * @return
+ */
+ public Boolean isLostAndUnreplaced(Long cardNum) {
+ Integer lostCount = seClientCardMapper.getLostCount(cardNum);
+ Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum);
+ if (lostCount > 0 && replacedCount == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * 璇诲彇姘村崱淇℃伅
+ * @param cardAddr
+ * @return
+ */
+ public VoTermCard readCard(String cardAddr) {
+ VoTermCard voTermCard = seClientCardMapper.getTermCardInfo(cardAddr);
+ if(voTermCard != null) {
+ return voTermCard;
+ }
+
+ VoTermCard voTermManagerCard = seManagerCardMapper.getTermManagerCardInfo(cardAddr);
+ if(voTermManagerCard != null) {
+ return voTermManagerCard;
+ }
+
+ return null;
+ }
}
--
Gitblit v1.8.0