From 9d0512aa6a192ee105ff9251e68a4360c7355319 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期二, 10 六月 2025 18:34:53 +0800 Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV --- 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