From 62bf2ee66bb60c98a4c52df5b04ae735e75da583 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 20 六月 2025 14:22:37 +0800
Subject: [PATCH] feat(card): 添加水卡记录查询功能
---
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardSv.java | 58 +++++++++
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml | 30 +++++
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/CardCtrl.java | 60 ++++++++++
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoSe/SeClientCardMapper.java | 14 ++
pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java | 31 +++++
README.md | 124 ++++++++++++++++++++
6 files changed, 317 insertions(+), 0 deletions(-)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8797567
--- /dev/null
+++ b/README.md
@@ -0,0 +1,124 @@
+# pipIrr 鏅鸿兘鐏屾簤绯荤粺
+
+## 椤圭洰姒傝堪
+
+pipIrr鏄竴濂楀熀浜嶫ava鐨勬櫤鑳界閬撶亴婧夌郴缁熻В鍐虫柟妗堬紝鐢ㄤ簬瀹炵幇姘磋祫婧愮殑鏅鸿兘鍖栫鐞嗕笌鐏屾簤鎺у埗銆傜郴缁熼泦鎴愪簡杩滅▼缁堢鎺у埗銆丟IS鍦扮悊淇℃伅銆佹按璧勬簮鐩戞祴涓庡垎鏋愩�佸井淇℃帴鍏ョ瓑澶氱鍔熻兘锛屼负鏅烘収鍐滀笟鍜屾按鍒╁伐绋嬫彁渚涘叏闈㈢殑鎶�鏈敮鎸併��
+
+## 绯荤粺鏋舵瀯
+
+绯荤粺閲囩敤寰湇鍔℃灦鏋勶紝鍩轰簬Spring Boot 3鏋勫缓锛屼富瑕佸寘鎷互涓嬪嚑涓牳蹇冮儴鍒嗭細
+
+- **鍓嶇搴旂敤灞�**锛氭彁渚沇eb鐣岄潰銆佺Щ鍔ㄥ簲鐢ㄣ�佸井淇″叕浼楀彿绛夊绉嶄氦浜掓柟寮�
+- **涓氬姟鏈嶅姟灞�**锛氬鐞嗘牳蹇冧笟鍔¢�昏緫锛屽寘鎷亴婧夌鐞嗐�侀」鐩鐞嗐�佹暟鎹粺璁$瓑
+- **涓棿浠跺眰**锛氭彁渚汻TU(杩滅▼缁堢鍗曞厓)閫氫俊銆佺涓夋柟绯荤粺闆嗘垚绛夊姛鑳�
+- **鍩虹璁炬柦灞�**锛氭彁渚涙暟鎹瓨鍌ㄣ�佺紦瀛樸�佹秷鎭槦鍒楃瓑鍩虹鏈嶅姟
+
+## 妯″潡璇存槑
+
+### 鐖舵ā鍧� (pipIrr-platform)
+
+浣滀负鏁翠釜椤圭洰鐨勭埗妯″潡锛岀鐞嗕緷璧栫増鏈拰鏋勫缓閰嶇疆銆�
+
+### 鏍稿績瀛愭ā鍧�
+
+- **pipIrr-common**: 鍏叡缁勪欢锛屾彁渚涘伐鍏风被銆侀�氱敤閰嶇疆绛�
+- **pipIrr-global**: 鍏ㄥ眬閰嶇疆鍜屾湇鍔�
+- **pipIrr-web**: Web搴旂敤妯″潡闆嗗悎
+ - pipIrr-web-base: 鍩虹鏁版嵁鏈嶅姟
+ - pipIrr-web-sso: 鍗曠偣鐧诲綍鏈嶅姟
+ - pipIrr-web-irrigate: 鐏屾簤绠$悊
+ - pipIrr-web-gis: GIS鍦扮悊淇℃伅鏈嶅姟
+ - pipIrr-web-project: 椤圭洰绠$悊
+ - pipIrr-web-statistics: 鏁版嵁缁熻鍒嗘瀽
+ - pipIrr-web-remote: 杩滅▼鎺у埗
+ - pipIrr-web-wechat: 寰俊闆嗘垚
+ - pipIrr-web-app: 绉诲姩搴旂敤鏈嶅姟
+ - pipIrr-web-file: 鏂囦欢绠$悊
+ - pipIrr-web-operation: 杩愮淮绠$悊
+ - pipIrr-web-sell: 閿�鍞鐞�
+ - pipIrr-web-temp: 涓存椂妯″潡
+- **pipIrr-mw**: 涓棿浠舵湇鍔�
+ - pipIrr-mw-rtu: RTU璁惧閫氫俊
+ - pipIrr-mw-rtu3rd: 绗笁鏂筊TU闆嗘垚
+ - pipIrr-mw-simulate-rtu: RTU妯℃嫙鍣�
+ - pipIrr-mwTest-server: 娴嬭瘯鏈嶅姟鍣�
+ - pipIrr-mwTest-client: 娴嬭瘯瀹㈡埛绔�
+
+## 鎶�鏈爤
+
+- **鍩虹妗嗘灦**: Spring Boot 3.1.3
+- **JDK鐗堟湰**: Java 20
+- **Web鏈嶅姟**: Tomcat 10.1.12
+- **鏁版嵁搴�**: MySQL 8.0.33
+- **ORM妗嗘灦**: MyBatis-Plus 3.5.3.2
+- **鏁版嵁搴撹繛鎺ユ睜**: Druid 1.2.20
+- **API鏂囨。**: SpringDoc OpenAPI 2.2.0
+- **JSON澶勭悊**: FastJSON 2.0.40
+- **瀵硅薄鏄犲皠**: MapStruct 1.5.5.Final
+- **宸ュ叿闆�**: Hutool 5.8.22
+- **鏃ュ織妗嗘灦**: Log4j2 2.20.0
+
+## 寮�鍙戠幆澧冩惌寤�
+
+### 鍓嶇疆鏉′欢
+
+- JDK 20
+- Maven 3.8+
+- MySQL 8.0+
+- IDE鎺ㄨ崘: IntelliJ IDEA
+
+### 鏋勫缓姝ラ
+
+1. 鍏嬮殕浠g爜搴�
+ ```bash
+ git clone <repository-url>
+ ```
+
+2. 瀵煎叆椤圭洰鍒癐DE
+ 浣跨敤IDEA瀵煎叆Maven椤圭洰
+
+3. 閰嶇疆鏁版嵁搴�
+ 鍦ㄧ浉搴旈厤缃枃浠朵腑璁剧疆鏁版嵁搴撹繛鎺ヤ俊鎭�
+
+4. 缂栬瘧椤圭洰
+ ```bash
+ mvn clean package
+ ```
+
+## 閮ㄧ讲璇存槑
+
+### 寮�鍙戠幆澧�
+```bash
+mvn spring-boot:run -Dspring.profiles.active=dev
+```
+
+### 鐢熶骇鐜
+1. 鎵撳寘搴旂敤
+ ```bash
+ mvn clean package -Dspring.profiles.active=prod
+ ```
+
+2. 杩愯jar鍖�
+ ```bash
+ java -jar <妯″潡鍚�>-<鐗堟湰鍙�>.jar
+ ```
+
+## 椤圭洰鏂囨。
+
+璇︾粏鐨勯」鐩枃妗d綅浜� `pipIrr-platform/鏂囨。/` 鐩綍涓嬶紝鍖呮嫭锛�
+- API鎺ュ彛鏂囨。
+- 鏁版嵁搴撹璁�
+- 閮ㄧ讲鎸囧崡
+- 缂栫爜瑙勮寖
+
+## 鐗堟湰淇℃伅
+
+褰撳墠鐗堟湰: 1.0.0
+
+## 璐$尞鎸囧崡
+
+1. Fork 鏈粨搴�
+2. 鍒涘缓鍔熻兘鍒嗘敮 (`git checkout -b feature/AmazingFeature`)
+3. 鎻愪氦鍙樻洿 (`git commit -m 'Add some AmazingFeature'`)
+4. 鎺ㄩ�佸埌鍒嗘敮 (`git push origin feature/AmazingFeature`)
+5. 鍒涘缓Pull Request
\ 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 0773dfd..fdf3276 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
@@ -268,4 +268,18 @@
* @return
*/
VoTermCard getTermCardInfo(@Param("cardAddr")String cardAddr);
+
+ /**
+ * 鑾峰彇宸叉寕澶辨按鍗″垪琛ㄨ褰曟暟閲�
+ * @param params
+ * @return
+ */
+ Long getLostCardsCount(Map<?, ?> params);
+
+ /**
+ * 鑾峰彇宸叉寕澶辨按鍗″垪琛�
+ * @param params
+ * @return
+ */
+ List<VoCards> getLostCards(Map<?, ?> params);
}
\ 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 3714787..cd47ae0 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -808,4 +808,34 @@
ORDER BY card.createDt DESC
LIMIT 1
</select>
+
+ <!--鑾峰彇宸叉寕澶辨按鍗″垪琛ㄨ褰曟暟閲�-->
+ <select id="getLostCardsCount" parameterType="java.util.Map" resultType="java.lang.Long">
+ SELECT COUNT(*) AS recordCount
+ FROM se_client_card card
+ LEFT JOIN se_client cli ON card.clientId = cli.id
+ WHERE card.state = 3
+ </select>
+
+ <!--鑾峰彇宸叉寕澶辨按鍗″垪琛�-->
+ <select id="getLostCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
+ SELECT cli.clientNum,
+ cli.name AS clientName,
+ card.cardNum,
+ cli.phone,
+ cli.idCard,
+ card.state AS cardState,
+ '宸叉寕澶�' AS stateName,
+ '鍐滄埛鍗�' AS cardType,
+ FORMAT(card.money, 2) AS money
+ FROM se_client_card card
+ LEFT JOIN se_client cli ON card.clientId = cli.id
+ WHERE card.state = 3
+ ORDER BY card.lossDtDt DESC
+ <trim prefix="limit ">
+ <if test="start != null and count != null">
+ #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+ </if>
+ </trim>
+ </select>
</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 3eef618..07925c5 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,8 +4,16 @@
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.common.webUtil.QueryResultVo;
+import com.dy.common.webUtil.ResultCodeMsg;
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 io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -256,4 +264,56 @@
}
}
+ /**
+ * 鏍规嵁鎸囧畾鏉′欢鑾峰彇姘村崱鍒楄〃锛岀粓绔簲鐢ㄧ▼搴忎娇鐢�
+ * @param vo
+ * @return
+ */
+ @Operation(summary = "鑾峰緱涓�椤垫按鍗¤褰�", description = "杩斿洖涓�椤垫按鍗℃暟鎹�")
+ @ApiResponses(value = {
+ @ApiResponse(
+ responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+ description = "杩斿洖涓�椤垫按鍗℃暟鎹紙BaseResponse.content:QueryResultVo[{}]锛�",
+ content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+ schema = @Schema(implementation = VoCards.class))}
+ )
+ })
+ @GetMapping(path = "getcards")
+ @SsoAop()
+ public BaseResponse<QueryResultVo<List<VoCards>>> getcards(QoCards vo){
+ try {
+ QueryResultVo<List<VoCards>> res = cardSv.getCards(vo);
+ return BaseResponseUtils.buildSuccess(res);
+ } catch (Exception e) {
+ log.error("鏌ヨ姘村崱寮傚父", e);
+ return BaseResponseUtils.buildException(e.getMessage()) ;
+ }
+ }
+
+ /**
+ * 鑾峰彇宸叉寕澶辩殑姘村崱鍒楄〃锛岀粓绔簲鐢ㄧ▼搴忎娇鐢�
+ * @param vo
+ * @return
+ */
+ @Operation(summary = "鑾峰緱涓�椤靛凡鎸傚け姘村崱璁板綍", description = "杩斿洖涓�椤靛凡鎸傚け姘村崱鏁版嵁")
+ @ApiResponses(value = {
+ @ApiResponse(
+ responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE,
+ description = "杩斿洖涓�椤靛凡鎸傚け姘村崱鏁版嵁锛圔aseResponse.content:QueryResultVo[{}]锛�",
+ content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE,
+ schema = @Schema(implementation = VoCards.class))}
+ )
+ })
+ @GetMapping(path = "getlostcards")
+ @SsoAop()
+ public BaseResponse<QueryResultVo<List<VoCards>>> getLostCards(QoLostCards vo){
+ try {
+ QueryResultVo<List<VoCards>> res = cardSv.getLostCards(vo);
+ return BaseResponseUtils.buildSuccess(res);
+ } catch (Exception e) {
+ log.error("鏌ヨ宸叉寕澶辨按鍗″紓甯�", e);
+ return BaseResponseUtils.buildException(e.getMessage()) ;
+ }
+ }
+
}
\ No newline at end of file
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 8ef5072..1c33313 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,7 @@
package com.dy.pipIrrTerminal.card;
import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
import com.dy.pipIrrGlobal.daoSe.*;
import com.dy.pipIrrGlobal.pojoSe.SeCardOperate;
@@ -8,11 +9,14 @@
import com.dy.pipIrrGlobal.pojoSe.SeRechargeHistory;
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.OperateTypeENUM;
import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM;
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;
@@ -1182,4 +1186,58 @@
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;
+ }
}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java
new file mode 100644
index 0000000..a816357
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoCards.java
@@ -0,0 +1,31 @@
+package com.dy.pipIrrTerminal.card.qo;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @author ZhuBaoMin
+ * @date 2025-01-15
+ * @LastEditTime 2025-01-15
+ * @Description 缁堢妯″潡姘村崱璁板綍鏌ヨ鏉′欢
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Schema(name = "姘村崱璁板綍鏌ヨ鏉′欢")
+public class QoCards extends QueryConditionVo {
+
+ @Schema(description = "鍐滄埛缂栧彿")
+ public Long clientNum;
+
+ @Schema(description = "鍐滄埛濮撳悕")
+ private String clientName;
+
+ @Schema(description = "姘村崱缂栧彿")
+ public Long cardNum;
+}
\ No newline at end of file
--
Gitblit v1.8.0