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