From 04585acb4f7af05e9a944c2914a8550963fbcf59 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期五, 27 六月 2025 09:16:41 +0800 Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV --- pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 1030 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 996 insertions(+), 34 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..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,27 +1,35 @@ 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; -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.SeManagementCard; import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory; -import com.dy.pipIrrGlobal.voSe.VoTermActiveCard; -import com.dy.pipIrrGlobal.voSe.VoTermRecharge; +import com.dy.pipIrrGlobal.voSe.*; 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.enums.CardStateENUM; import com.dy.pipIrrTerminal.card.enums.LastOperateENUM; +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; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; 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.*; @@ -51,11 +59,21 @@ @Autowired private SeRechargeHistoryMapper seRechargeHistoryMapper; + @Autowired + private SeManagerCardMapper seManagerCardMapper; + + @Autowired + private SeManagementCardMapper seManagementCardMapper; + + @Autowired + private IDLongGenerator idLongGenerator; + @Value("${project.projectNo}") private Integer projectNo; /** * 鏍规嵁姘村崱鍦板潃鍒ゆ柇璇ュ崱鏄惁鍙互寮�鍗� + * * @param cardAddr * @return true:鍙互寮�鍗� */ @@ -77,6 +95,7 @@ /** * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鍏呭�� + * * @param po * @return true:鍙互鍏呭�� */ @@ -87,7 +106,7 @@ String stateName = Optional.ofNullable(seClientCardMapper.getCardStateByCardNum(po.getCardNum())).orElse(""); // 鍗曠嫭鍏呭�兼椂鍗$墖蹇呴』涓烘甯� - if((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) { + if ((po.getRechargeType() == RechargeTypeENUM.RECHARGE.getCode()) && !stateName.equals("姝e父")) { map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔"); return map; } @@ -98,6 +117,7 @@ /** * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互鎸傚け + * * @param po * @return true:鍙互鎶ュけ */ @@ -108,7 +128,7 @@ Long cardNum = po.getCardNum(); String stateName = seClientCardMapper.getCardStateByCardNum(cardNum); - if(stateName == null || stateName.equals("") || !stateName.equals("姝e父")) { + if (stateName == null || stateName.equals("") || !stateName.equals("姝e父")) { map.put("msg", stateName + ", " + "姘村崱鐘舵�佷笉鏀寔褰撳墠鎿嶄綔"); return map; } @@ -124,7 +144,42 @@ 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()); + // 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); @@ -133,6 +188,7 @@ /** * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互琛ュ崱 + * * @param po * @return true:鍙互琛ュ崱 */ @@ -144,7 +200,7 @@ Long cardNum = po.getCardNum(); Integer lostCount = seClientCardMapper.getLostCount(cardNum); Integer replacedCount = seClientCardMapper.getReplacedCount(cardNum); - if(lostCount == 0 || replacedCount > 0) { + if (lostCount == 0 || replacedCount > 0) { map.put("msg", "姘村崱鏈寕澶辨垨宸茶ˉ鍗★紝涓嶈兘琛ュ崱"); return map; } @@ -175,7 +231,113 @@ } /** + * 鏍规嵁姘村崱缂栧彿鍒ゆ柇璇ュ崱鏄惁鍙互娉ㄩ攢 + * + * @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); + return map; + } + + /** * 鏍规嵁鍐滄埛缂栧彿鑾峰彇5绾ц鏀垮尯鍒掍覆areaCode锛岃ˉ鍗¤繃绋嬩腑寮�鏂板崱浣跨敤 + * * @param clientId * @return */ @@ -245,6 +407,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()); @@ -296,12 +459,13 @@ /** * 寮�鍗¢檮鍔犲厖鍊� + * * @param po * @param cardNum * @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 +482,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; @@ -329,6 +493,7 @@ /** * 婵�娲绘垨琛ュ崱 + * * @param po * @return */ @@ -346,7 +511,7 @@ } Map map_cardNum = generateCardNum(po.getClientId()); - if(map_cardNum.get("success").equals(false)) { + if (map_cardNum.get("success").equals(false)) { map.put("msg", map_cardNum.get("msg").toString()); return map; } @@ -354,20 +519,20 @@ String orderNo = generateOrderNo(); Map map_addCardAndOperate = addCardAndOperate(po, cardNum, orderNo); - if(map_addCardAndOperate.get("success").equals(false)) { + if (map_addCardAndOperate.get("success").equals(false)) { map.put("msg", map_addCardAndOperate.get("msg").toString()); return map; } if (amount != null && amount > 0 && originalCardId == null) { - Map map_plusRecharge = plusRecharge(po, cardNum); - if(map_plusRecharge.get("success").equals(false)) { + Map map_plusRecharge = plusRecharge(po, cardNum, orderNo); + if (map_plusRecharge.get("success").equals(false)) { map.put("msg", map_plusRecharge.get("msg").toString()); return map; } } - 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(); @@ -386,17 +551,18 @@ /** * 鍏呭�� + * * @param po * @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); Map map_canRecharge = canRecharge(po); - if(map_canRecharge.get("success").equals(false)) { + if (map_canRecharge.get("success").equals(false)) { map.put("msg", map_canRecharge.get("msg").toString()); return map; } @@ -411,7 +577,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 +596,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 +622,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,10 +630,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", "鎿嶄綔鎴愬姛"); @@ -474,6 +644,7 @@ /** * 琛ュ崱 + * * @param po * @return */ @@ -484,7 +655,7 @@ map.put("content", null); Map map_canReissue = canReissue(po); - if(map_canReissue.get("success").equals(false)) { + if (map_canReissue.get("success").equals(false)) { map.put("msg", map_canReissue.get("msg").toString()); return map; } @@ -516,6 +687,12 @@ return map; } + /** + * 鎸傚け + * + * @param po + * @return + */ @Transactional(rollbackFor = Exception.class) public Map reportLoss(DtoLoss po) { Map map = new HashMap<>(); @@ -523,7 +700,7 @@ map.put("content", null); Map map_canReportLoss = canReportLoss(po); - if(map_canReportLoss.get("success").equals(false)) { + if (map_canReportLoss.get("success").equals(false)) { map.put("msg", map_canReportLoss.get("msg").toString()); return map; } @@ -540,7 +717,8 @@ seClientCard.setLossdtdt(new Date()); seClientCard.setState(CardStateENUM.LOSS.getCode()); seClientCard.setLastoper(LastOperateENUM.LOSS.getCode()); - Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)).orElse(0); + Integer rec_updateClientCard = Optional.ofNullable(seClientCardMapper.updateByPrimaryKeySelective(seClientCard)) + .orElse(0); if (rec_updateClientCard == 0) { map.put("msg", "鎸傚け澶辫触-鍐滄埛鍗′慨鏀瑰紓甯�"); return map; @@ -568,6 +746,230 @@ 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.SUPPLEMENT.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<>(); @@ -578,29 +980,589 @@ Integer operateType = po.getOperateType(); String orderNumber = po.getOrderNumber(); + // 鍏堟鏌ユ槸鍚︿负绠$悊鍗� + if (operateType.equals(OperateTypeENUM.MANAGEMENT_CARD_WRITE.getCode().intValue())) { + // 绠$悊绫诲瀷鍗″啓鍗¢�昏緫 + return handleManagementCardWrite(cardAddr, orderNumber); + } + + // 澶勭悊鍐滄埛鍗¢�昏緫 Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr); if (cardId == null || cardId.equals(0)) { map.put("msg", "鎮ㄦ寚瀹氱殑姘村崱涓嶅瓨鍦�"); return map; } - if(operateType == 1) { + if (operateType.equals(OperateTypeENUM.ACTIVE.getCode().intValue())) { /** * 寮�鍗℃搷浣滄墽琛岄�氱煡 - * 1.渚濇嵁姘村崱鍦板潃銆佽鍗曞彿灏嗘棤鏁堢姸鎬佺殑鎿嶄綔璁板綍鏀逛负鏈夋晥 - * 2.渚濇嵁姘村崱ID灏嗘棤鏁堢姸鎬佺殑姘村崱璁板綍鏀逛负鏈夋晥 - * 3.濡傛灉寮�鍗″悓姝ュ厖鍊� - * 淇敼鍏呭�兼搷浣滆褰曚负鏈夋晥 - * 淇敼鍏呭�煎巻鍙茶褰曚负鏈夋晥 - * 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅 + * 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.equals(OperateTypeENUM.RECHARGE.getCode().intValue())) { + /** + * 鍏呭�兼搷浣滄墽琛岄�氱煡 + * 1. 鎿嶄綔璁板綍鏀逛负鏈夋晥 + * 2. 鍏呭�煎巻鍙茶褰曟敼涓烘湁鏁� + * 3. 淇敼姘村崱琛ㄧ殑鎿嶄綔淇℃伅 + */ + turnOperateValidByOrderNumber(orderNumber + "p"); + turnRechargeHistoryValidByOrderNumber(orderNumber); + updateCard(cardId, orderNumber + "p"); + } else if (operateType.equals(OperateTypeENUM.CANCEL.getCode().intValue())) { + /** + * 閿�鍗℃搷浣滄墽琛岄�氱煡 + * 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.equals(OperateTypeENUM.REISSUE.getCode().intValue())) { + /** + * 琛ュ崱鎿嶄綔鎵ц閫氱煡 + * 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.equals(OperateTypeENUM.REFUND.getCode().intValue())) { + /** + * 琛ユ墸鎿嶄綔鎵ц閫氱煡 + * 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.equals(OperateTypeENUM.SUPPLEMENT.getCode().intValue())) { + /** + * 杩旇繕鎿嶄綔鎵ц閫氱煡 + * 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; } + + /** + * 澶勭悊绠$悊绫诲瀷鍗″啓鍗″洖璋� + * + * @param cardAddr 鍗″湴鍧� + * @param orderNumber 璁㈠崟鍙� + * @return 澶勭悊缁撴灉 + */ + private Map<String, Object> handleManagementCardWrite(String cardAddr, String orderNumber) { + Map<String, Object> map = new HashMap<>(); + map.put("success", false); + map.put("content", null); + + try { + // 鏍规嵁鍗″湴鍧�鍜岃鍗曞彿鏌ユ壘绠$悊鍗� + SeManagementCard managementCard = seManagementCardMapper.selectOne( + com.baomidou.mybatisplus.core.toolkit.Wrappers.<SeManagementCard>lambdaQuery() + .eq(SeManagementCard::getCardAddr, cardAddr) + .eq(SeManagementCard::getOrderNo, orderNumber)); + + if (managementCard == null) { + map.put("msg", "鏈壘鍒板搴旂殑绠$悊鍗¤褰�"); + return map; + } + + // 鏇存柊绠$悊鍗$姸鎬佷负姝e父 + managementCard.setState(ManagementCardStateENUM.NORMAL.getCode()); + + int updateResult = seManagementCardMapper.updateByPrimaryKeySelective(managementCard); + if (updateResult > 0) { + map.put("success", true); + map.put("msg", "绠$悊鍗″啓鍗″畬鎴愶紝鐘舵�佸凡鏇存柊涓烘甯�"); + } else { + map.put("msg", "绠$悊鍗$姸鎬佹洿鏂板け璐�"); + } + } catch (Exception e) { + log.error("澶勭悊绠$悊鍗″啓鍗″洖璋冨紓甯�", e); + map.put("msg", "澶勭悊绠$悊鍗″啓鍗″洖璋冩椂鍙戠敓寮傚父锛�" + e.getMessage()); + } + + 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; + } + + /** + * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃 + * + * @param vo 鏌ヨ鏉′欢 + * @return 姘村崱鍒楄〃 + */ + public QueryResultVo<List<VoCards>> getCards(QoCards vo) { + Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo); + Long itemTotal = seClientCardMapper.getCardsCount(params); + + QueryResultVo<List<VoCards>> rsVo = new QueryResultVo<>(); + rsVo.pageSize = vo.pageSize; + rsVo.pageCurr = vo.pageCurr; + + if (itemTotal > 0) { + rsVo.calculateAndSet(itemTotal, params); + List<VoCards> list = seClientCardMapper.getCards(params); + rsVo.obj = list; + } else { + rsVo.obj = new ArrayList<>(); + rsVo.itemTotal = 0L; + } + + return rsVo; + } + + /** + * 鑾峰彇宸叉寕澶辩殑姘村崱鍒楄〃 + * + * @param vo 鏌ヨ鏉′欢 + * @return 宸叉寕澶辩殑姘村崱鍒楄〃 + */ + public QueryResultVo<List<VoCards>> getLostCards(QoLostCards vo) { + Map<String, Object> params = new HashMap<>(); + params.put("pageCurr", vo.pageCurr); + params.put("pageSize", vo.pageSize); + params.put("state", 2); // 鎸傚け鐘舵�� + + Long itemTotal = seClientCardMapper.getLostCardsCount(params); + + QueryResultVo<List<VoCards>> rsVo = new QueryResultVo<>(); + rsVo.pageSize = vo.pageSize; + rsVo.pageCurr = vo.pageCurr; + + if (itemTotal > 0) { + rsVo.calculateAndSet(itemTotal, params); + List<VoCards> list = seClientCardMapper.getLostCards(params); + rsVo.obj = list; + } else { + rsVo.obj = new ArrayList<>(); + rsVo.itemTotal = 0L; + } + + return rsVo; + } + + /** + * 鏍规嵁姘村崱缂栧彿鑾峰彇鍗′俊鎭� + * + * @param cardNum 姘村崱缂栧彿 + * @return 鍗′俊鎭� + */ + public VoCardByClientNum getCardByCardNum(String cardNum) { + return seClientCardMapper.getCardByCardNum(cardNum); + } + + /** + * 鍒涘缓绠$悊鍗� + * + * @param dto 鍒涘缓绠$悊鍗TO + * @return 鍒涘缓缁撴灉 + */ + @Transactional(rollbackFor = Exception.class) + public Map<String, Object> createManagementCard(CreateManagementCardDto dto) { + Map<String, Object> result = new HashMap<>(); + result.put("success", false); + + try { + // 妫�鏌ュ崱鍦板潃鏄惁宸插瓨鍦� + if (isCardAddrExists(dto.getCardAddr())) { + result.put("msg", "鍒涘缓澶辫触-姝ゅ崱鍦板潃宸插瓨鍦�"); + return result; + } + + // 鍙傝�僼ermActiveCard閫昏緫锛氱敓鎴愯鍗曞彿 + String orderNo = generateOrderNo(); + + // 浣跨敤IDLongGenerator鐢熸垚鍞竴ID + Long id = idLongGenerator.generate(); + Date createTime = new Date(); + + // 鏋勫缓绠$悊鍗″璞� + SeManagementCard managementCard = SeManagementCard.builder() + .id(id) + .protocol(dto.getProtocol()) + .cardAddr(dto.getCardAddr()) + .securityCode(dto.getSecurityCode()) + .cardType(dto.getCardType()) + .createTime(createTime) + .orderNo(orderNo) + .districtCode(dto.getDistrictCode()) + .projectNo(dto.getProjectNo() != null ? dto.getProjectNo() : this.projectNo) + .ip(dto.getIp()) + .domain(dto.getDomain()) + .openClostTime(dto.getOpenClostTime()) + .remarks(dto.getRemarks()) + .state(ManagementCardStateENUM.UNWRITTEN.getCode()) // 榛樿鐘舵�佷负鏈啓鍗� + .build(); + + // 鎻掑叆鏁版嵁搴� + int insertResult = seManagementCardMapper.insertSelective(managementCard); + + if (insertResult > 0) { + result.put("success", true); + result.put("content", orderNo); // 杩斿洖璁㈠崟鍙� + result.put("msg", "璇锋眰鎴愬姛"); + } else { + result.put("msg", "绠$悊鍗″垱寤哄け璐�-鏁版嵁搴撴彃鍏ュ紓甯�"); + } + + } catch (Exception e) { + log.error("鍒涘缓绠$悊鍗″紓甯�: {}", e.getMessage(), e); + result.put("msg", "绠$悊鍗″垱寤哄け璐�: " + e.getMessage()); + } + + return result; + } + + /** + * 妫�鏌ュ崱鐗囧湴鍧�鏄惁宸插瓨鍦� + * + * @param cardAddr 鍗$墖鍦板潃 + * @return true-宸插瓨鍦紝false-涓嶅瓨鍦� + */ + public boolean isCardAddrExists(String cardAddr) { + // 浣跨敤涓�娆℃煡璇㈡鏌ヤ袱涓〃涓槸鍚﹀瓨鍦ㄨ鍗″湴鍧� + // 1. 绠$悊鍗¤〃锛氭墍鏈夎褰曢兘妫�鏌� + // 2. 鍐滄埛姘村崱琛細鍙鏌ユ甯�(1)鍜屾寕澶�(3)鐘舵�佺殑璁板綍 + 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; + } } -- Gitblit v1.8.0