From 686f7e7691744e6f3aecfa944516bbd101744396 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 20 六月 2025 17:05:31 +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         |   58 +++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoLostCards.java |   28 ++++
 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 ++++++++++++++++++++
 7 files changed, 345 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
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoLostCards.java b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoLostCards.java
new file mode 100644
index 0000000..342084a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-terminal/src/main/java/com/dy/pipIrrTerminal/card/qo/QoLostCards.java
@@ -0,0 +1,28 @@
+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 QoLostCards extends QueryConditionVo {
+
+    @Schema(description = "椤电爜", example = "1")
+    public Integer pageCurr;
+
+    @Schema(description = "姣忛〉鏁伴噺", example = "10")
+    public Integer pageSize;
+} 
\ No newline at end of file

--
Gitblit v1.8.0