From 5a9dbde4116479e4823be8dbf5cb4f57f5f85efe Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期二, 10 六月 2025 14:07:10 +0800 Subject: [PATCH] 销卡、充值回调、销卡回调 --- pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 240 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 228 insertions(+), 12 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 a5e5bbe..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; @@ -9,8 +8,9 @@ import com.dy.pipIrrGlobal.pojoSe.SeCardOperate; import com.dy.pipIrrGlobal.pojoSe.SeClientCard; 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; @@ -175,6 +175,40 @@ } /** + * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互娉ㄩ攢 + * @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; + } + + /** * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤 * @param clientId * @return @@ -245,6 +279,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()); @@ -301,7 +336,7 @@ * @return */ @Transactional(rollbackFor = Exception.class) - public Map plusRecharge(ActiveCard po, Long cardNum) { + public Map plusRecharge(ActiveCard po, Long cardNum, String orderNo) { Map map = new HashMap<>(); map.put("success", false); map.put("content", null); @@ -318,7 +353,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; @@ -360,7 +395,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; @@ -390,7 +425,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); @@ -411,7 +446,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(); + } /** * 娣诲姞姘村崱鍏呭�兼搷浣滆褰� @@ -428,7 +465,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); @@ -454,6 +491,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) { @@ -461,7 +499,7 @@ return map; } - VoTermRecharge voTermRecharge = new VoTermRecharge(); + VoTermCommon voTermRecharge = new VoTermCommon(); voTermRecharge.setProjectNo(projectNo); voTermRecharge.setCardNum(po.getCardNum()); voTermRecharge.setOrderNo(orderNo); @@ -516,6 +554,11 @@ return map; } + /** + * 鎸傚け + * @param po + * @return + */ @Transactional(rollbackFor = Exception.class) public Map reportLoss(DtoLoss po) { Map map = new HashMap<>(); @@ -568,6 +611,60 @@ 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 callBack(DtoCallBack po) { Map map = new HashMap<>(); @@ -587,20 +684,139 @@ if(operateType == 1) { /** * 寮�鍗℃搷浣滄墽琛岄�氱煡 - * 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; + } } - - 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); + } } -- Gitblit v1.8.0