From f4040d9bc0426f9075f68a2e26ee8732ab714ac1 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 01 七月 2025 14:43:40 +0800
Subject: [PATCH] remote模块,增加表阀一体机协议的10、21、35、36、37、38命令功能
---
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdCtrl.java | 225 ++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdCtrl.java | 232 ++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdDto.java | 33 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA2/CdCtrl.java | 6
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdCtrl.java | 130 ++++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdDto.java | 30 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdCtrl.java | 232 ++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdSv.java | 15
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdDto.java | 33 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java | 6
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdSv.java | 80 ++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd21/CdDto.java | 3
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdParam.java | 33 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdSv.java | 80 ++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdDto.java | 30 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdDto.java | 21
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdParam.java | 21
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdParam.java | 26
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdSv.java | 80 ++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdParam.java | 33 +
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdCtrl.java | 225 ++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdSv.java | 80 ++
pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdParam.java | 26
23 files changed, 1,673 insertions(+), 7 deletions(-)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdCtrl.java
new file mode 100644
index 0000000..75d04c1
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdCtrl.java
@@ -0,0 +1,130 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd10;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCdXyVo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.IPUtils;
+import com.dy.common.util.NumUtil;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.monitor.common.ComCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/15 10:42
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "璁剧疆璁惧缁堢鍦板潃")
+@RestController("p202404V201Cd10Ctrl")
+@RequestMapping(path = "p202404V201/cd10")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends ComCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String ComCode = "10" ;
+
+ @Autowired
+ private CdSv sv ;
+ /**
+ * 鍚戣澶囷紙鎺у埗鍣級鍙戦�佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, ComCode, dto, bindingResult);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
+ .rtuNewAddr(dto.rtuNewAddr)//鎺у埗鍣ㄦ柊鍦板潃
+ .build();
+ res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+ Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
+ com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+ com.param = comParam ;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, null);
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(DtoBase dto) {
+ if(dto != null){
+ CdDto myo = (CdDto) dto ;
+ //鍦板潃绀轰緥 37142501020100013
+ if(!NumUtil.isPlusIntNumber(myo.rtuNewAddr)){
+ return "鎺у埗鍣ㄦ柊鍦板潃涓嶆纭�" ;
+ }
+ if(myo.rtuNewAddr.length() != 17 || myo.rtuNewAddr.startsWith("0")){
+ return "鎺у埗鍣ㄦ柊鍦板潃涓嶆纭�" ;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, JSONObject resultData, Callback callback){
+ String msg;
+ if(resultData != null){
+ JSONObject codeData = resultData.getJSONObject("data") ;
+ if(codeData == null){
+ msg = RtuSuccessMsg ;
+ }else {
+ String json = codeData.toJSONString();
+ DataCdXyVo cvo = JSON.parseObject(json, DataCdXyVo.class) ;
+ if(cvo != null){
+ msg = cvo.toStr(false) ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdDto.java
new file mode 100644
index 0000000..325e1e3
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdDto.java
@@ -0,0 +1,21 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd10;
+
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/15 10:42
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends DtoBase {
+ public static final long serialVersionUID = 202505151042001L;
+ @NotEmpty(message = "鎺у埗鍣ㄦ柊鍦板潃涓嶈兘涓虹┖")
+ public String rtuNewAddr ;//鎺у埗鍣ㄦ柊鍦板潃
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdParam.java
new file mode 100644
index 0000000..91521ba
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdParam.java
@@ -0,0 +1,21 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd10;
+
+import com.dy.pipIrrRemote.monitor.common.CdParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/15 10:42
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends CdParameter {
+ public Integer channel ;//IP閫氶亾鍙�(鍙栧�艰寖鍥� 1銆�2).
+ public String rtuNewAddr ;//鎺у埗鍣ㄦ柊鍦板潃
+ }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdSv.java
new file mode 100644
index 0000000..ebc5670
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd10/CdSv.java
@@ -0,0 +1,15 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd10;
+
+import com.dy.pipIrrRemote.monitor.common.ComSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/15 10:42
+ * @Description
+ */
+@Slf4j
+@Service("cd10Sv")
+public class CdSv extends ComSv {
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd21/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd21/CdDto.java
index cf0da7a..345ff18 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd21/CdDto.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd21/CdDto.java
@@ -1,6 +1,7 @@
package com.dy.pipIrrRemote.monitor.p202404V201.cd21;
import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -17,7 +18,7 @@
public static final long serialVersionUID = 202505151042001L;
@NotNull(message = "IP閫氶亾鍙蜂笉鑳戒负绌�")
public Integer channel ;//IP閫氶亾鍙�(鍙栧�艰寖鍥� 1銆�2).
- @NotNull(message = "IP涓嶈兘涓虹┖")
+ @NotEmpty(message = "IP涓嶈兘涓虹┖")
public String ip ;//IP锛堜緥濡� 125.235.35.89锛�
@NotNull(message = "绔彛鍙蜂笉鑳戒负绌�")
public Integer port ;//绔彛鍙凤紙0~65536锛�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdCtrl.java
new file mode 100644
index 0000000..101e22d
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdCtrl.java
@@ -0,0 +1,225 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd35;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd92_A2Vo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.monitor.common.ComCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 08:30
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "APP绔繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�")
+@RestController("p202404V201Cd35Ctrl")
+@RequestMapping(path = "p202404V201/cd35")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends ComCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String ComCode = "35" ;
+
+ private static final Double MaxRemainMoney = com.dy.pipIrrRemote.monitor.p202404V201.cd92.CdCtrl.MaxRemainMoney;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+
+ @Autowired
+ private CdSv sv ;
+ /**
+ * 鍚戣澶囷紙鎺у埗鍣級鍙戦�佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, ComCode, dto, bindingResult);
+ if (res == null) {
+ if(dto.vtCardId == null || "".equals(dto.vtCardId.trim())){
+ Long vtId = sv.selectVcIdByIntakeId(dto.getIntakeId()) ;
+ if(vtId == null) {
+ return BaseResponseUtils.buildErrorMsg("璇烽�夋嫨涓�寮犺櫄鎷熷崱");
+ }else{
+ dto.vtCardId = vtId.toString() ;
+ }
+ }
+ VoVirtualCard vcPo = sv.selectClientVtCardById(Long.parseLong(dto.vtCardId.trim())) ;
+ if(vcPo == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒板啘鎴疯櫄鎷熷崱") ;
+ }
+ if(vcPo.getInUse().booleanValue()){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱宸茬粡琚崰鐢紝涓嶈兘鍐嶅簲鐢ㄥ叾寮�闃�") ;
+ }
+ if(vcPo.getMoney() <= 0.0){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ Double waterPrice = sv.selectWaterPrice() ;
+ if(waterPrice == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒版按浠�") ;
+ }
+ String orderNo = RandomStringUtils.randomNumeric(16) ;
+ CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
+ .icCardNo("" + vcPo.getVcNum())//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ .waterRemain(0.0)//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .moneyRemain(vcPo.getMoney())//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .waterPrice(waterPrice)//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .elePrice(0.0)//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .orderNo(orderNo)//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ .minutes(dto.minutes)//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+ .build();
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+ Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
+ com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+ com.param = comParam;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, new Callback() {
+ @Override
+ public void call(Object obj) {
+ Boolean success = (Boolean) obj;
+ if(success){
+ // 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅
+ sv.addOrUpdateOftenUseIntake(dto.getOperator(), dto.getIntakeId()) ;
+ //寮�闃�鎴愬姛锛岃櫄鎷熷崱璁板綍涓婃爣璁板凡琚崰鐢�
+ sv.setVcUsed(vcPo.getId(), dto.getIntakeId());
+ //璁板綍寮�闃�鍛戒护锛屼互澶囪繙绋嬪叧闃�
+ RmCommandOpen comOpen = sv.getCommandOpen(dto.getIntakeId());
+ if(comOpen == null){
+ RmCommandOpen po = newRmCommandOpen(comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.saveCommandOpen(po);
+ }else{
+ setRmCommandOpen(comOpen, comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.updateCommandOpen(comOpen);
+ }
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ });
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(DtoBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, JSONObject resultData, Callback callback){
+ String msg;
+ if(resultData != null){
+ JSONObject codeData = resultData.getJSONObject("data") ;
+ if(codeData == null){
+ msg = RtuSuccessMsg ;
+ }else {
+ String json = codeData.toJSONString();
+ DataCd92_A2Vo cvo = JSON.parseObject(json, DataCd92_A2Vo.class) ;
+ if(cvo != null){
+ if(callback != null){
+ if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)1){
+ callback.call(true);//寮�闃�鎴愬姛
+ }else{
+ callback.call(false);//寮�闃�澶辫触
+ }
+ }
+ msg = cvo.toStr(false) ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+
+ private RmCommandOpen newRmCommandOpen(Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ RmCommandOpen po = new RmCommandOpen() ;
+ this.setRmCommandOpen(po, comId, protocol, comCode, comName, intakeId, rtuAddr, vcNum, orderNo, operator);
+ return po ;
+ }
+ private void setRmCommandOpen(RmCommandOpen po,
+ Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ po.comId = comId ;
+ po.protocol = protocol ;
+ po.commandCode = comCode ;
+ po.commandName = comName ;
+ po.intakeId = intakeId ;
+ po.rtuAddr = rtuAddr ;
+ po.vcNum = vcNum ;
+ po.orderNo = orderNo ;
+ po.operator = operator ;
+ po.sendTime = new Date() ;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdDto.java
new file mode 100644
index 0000000..95e4eb3
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdDto.java
@@ -0,0 +1,30 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd35;
+
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 08:30
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends DtoBase {
+
+ public static final long serialVersionUID = 202505130833001L;
+
+ @NotEmpty(message = "鐢ㄦ埛铏氭嫙鍗′笉鑳戒负绌�")
+ public String vtCardId ;//鐢ㄦ埛鍗�(铏氭嫙鍗�)搴忓垪鍙凤紙17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+
+ @NotNull(message = "鐢ㄦ按鏃堕暱涓嶈兘涓虹┖")
+ @Min(value = 1, message = "鐢ㄦ按鏃堕暱涓嶈兘灏忎簬1")
+ @Max(value = 9999, message = "鐢ㄦ按鏃堕暱涓嶈兘澶т簬9999")
+ public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdParam.java
new file mode 100644
index 0000000..db66565
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdParam.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd35;
+
+import com.dy.pipIrrRemote.monitor.common.CdParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 08:30
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends CdParameter {
+ public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+ public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdSv.java
new file mode 100644
index 0000000..32bbf49
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd35/CdSv.java
@@ -0,0 +1,80 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd35;
+
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandOpenMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.monitor.common.ComSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 08:30
+ * @Description
+ */
+@Slf4j
+@Service("cd35Sv")
+public class CdSv extends ComSv {
+ @Autowired
+ protected SeVirtualCardMapper seVirtualCardDao ;
+ @Autowired
+ protected PrWaterPriceMapper prWaterPriceDao ;
+ @Autowired
+ protected PrIntakeVcMapper prIntakeVcDao ;
+ @Autowired
+ protected RmCommandOpenMapper rmCommandOpenDao ;
+
+ public VoVirtualCard selectClientVtCardById(Long id){
+ return seVirtualCardDao.getVcById(id) ;
+ }
+ public Double selectWaterPrice(){
+ return prWaterPriceDao.getPrice() ;
+ }
+ /**
+ * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+ * @param intakeId
+ * @return
+ */
+ public Long selectVcIdByIntakeId(Long intakeId) {
+ return prIntakeVcDao.getVcIdByIntakeId(intakeId);
+ }
+ /**
+ * 璁剧疆铏氭嫙鍗¤鍗犵敤
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void setVcUsed(Long id, Long intakeId){
+ SeVirtualCard po = new SeVirtualCard() ;
+ po.setId(id);
+ po.setIntakeId(intakeId);
+ po.setInUse((byte)1);
+ po.setOpenTime(new Date());
+ seVirtualCardDao.updateByPrimaryKeySelective(po);
+ }
+
+ public RmCommandOpen getCommandOpen(Long intakeId){
+ List<RmCommandOpen> list = rmCommandOpenDao.selectByIntakeId(intakeId) ;
+ if(list != null && list.size() > 0){
+ return list.get(0) ;
+ }
+ return null ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void saveCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.insert(po) ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void updateCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.updateByPrimaryKeySelective(po) ;
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdCtrl.java
new file mode 100644
index 0000000..7073b2e
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdCtrl.java
@@ -0,0 +1,225 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd36;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd92_A2Vo;
+import com.dy.common.util.Callback;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.monitor.common.ComCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:01
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "APP绔繙绋嬪畾閲忓紑鍚按娉�/闃�闂�")
+@RestController("p202404V201Cd36Ctrl")
+@RequestMapping(path = "p202404V201/cd36")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends ComCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String ComCode = "36" ;
+
+ private static final Double MaxRemainMoney = com.dy.pipIrrRemote.monitor.p202404V201.cd92.CdCtrl.MaxRemainMoney;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+
+ @Autowired
+ private CdSv sv ;
+ /**
+ * 鍚戣澶囷紙鎺у埗鍣級鍙戦�佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, ComCode, dto, bindingResult);
+ if (res == null) {
+ if(dto.vtCardId == null || "".equals(dto.vtCardId.trim())){
+ Long vtId = sv.selectVcIdByIntakeId(dto.getIntakeId()) ;
+ if(vtId == null) {
+ return BaseResponseUtils.buildErrorMsg("璇烽�夋嫨涓�寮犺櫄鎷熷崱");
+ }else{
+ dto.vtCardId = vtId.toString() ;
+ }
+ }
+ VoVirtualCard vcPo = sv.selectClientVtCardById(Long.parseLong(dto.vtCardId.trim())) ;
+ if(vcPo == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒板啘鎴疯櫄鎷熷崱") ;
+ }
+ if(vcPo.getInUse().booleanValue()){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱宸茬粡琚崰鐢紝涓嶈兘鍐嶅簲鐢ㄥ叾寮�闃�") ;
+ }
+ if(vcPo.getMoney() <= 0.0){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ Double waterPrice = sv.selectWaterPrice() ;
+ if(waterPrice == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒版按浠�") ;
+ }
+ String orderNo = RandomStringUtils.randomNumeric(16) ;
+ CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
+ .icCardNo("" + vcPo.getVcNum())//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ .waterRemain(0.0)//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .moneyRemain(vcPo.getMoney())//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .waterPrice(waterPrice)//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .elePrice(0.0)//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .orderNo(orderNo)//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ .waterAmount(dto.waterAmount)//棰勭敤姘撮噺锛�0~9999 m3锛�
+ .build();
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+ Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
+ com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+ com.param = comParam;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, new Callback() {
+ @Override
+ public void call(Object obj) {
+ Boolean success = (Boolean) obj;
+ if(success){
+ // 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅
+ sv.addOrUpdateOftenUseIntake(dto.getOperator(), dto.getIntakeId()) ;
+ //寮�闃�鎴愬姛锛岃櫄鎷熷崱璁板綍涓婃爣璁板凡琚崰鐢�
+ sv.setVcUsed(vcPo.getId(), dto.getIntakeId());
+ //璁板綍寮�闃�鍛戒护锛屼互澶囪繙绋嬪叧闃�
+ RmCommandOpen comOpen = sv.getCommandOpen(dto.getIntakeId());
+ if(comOpen == null){
+ RmCommandOpen po = newRmCommandOpen(comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.saveCommandOpen(po);
+ }else{
+ setRmCommandOpen(comOpen, comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.updateCommandOpen(comOpen);
+ }
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ });
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(DtoBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, JSONObject resultData, Callback callback){
+ String msg;
+ if(resultData != null){
+ JSONObject codeData = resultData.getJSONObject("data") ;
+ if(codeData == null){
+ msg = RtuSuccessMsg ;
+ }else {
+ String json = codeData.toJSONString();
+ DataCd92_A2Vo cvo = JSON.parseObject(json, DataCd92_A2Vo.class) ;
+ if(cvo != null){
+ if(callback != null){
+ if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)1){
+ callback.call(true);//寮�闃�鎴愬姛
+ }else{
+ callback.call(false);//寮�闃�澶辫触
+ }
+ }
+ msg = cvo.toStr(false) ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+
+ private RmCommandOpen newRmCommandOpen(Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ RmCommandOpen po = new RmCommandOpen() ;
+ this.setRmCommandOpen(po, comId, protocol, comCode, comName, intakeId, rtuAddr, vcNum, orderNo, operator);
+ return po ;
+ }
+ private void setRmCommandOpen(RmCommandOpen po,
+ Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ po.comId = comId ;
+ po.protocol = protocol ;
+ po.commandCode = comCode ;
+ po.commandName = comName ;
+ po.intakeId = intakeId ;
+ po.rtuAddr = rtuAddr ;
+ po.vcNum = vcNum ;
+ po.orderNo = orderNo ;
+ po.operator = operator ;
+ po.sendTime = new Date() ;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdDto.java
new file mode 100644
index 0000000..92fd113
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdDto.java
@@ -0,0 +1,30 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd36;
+
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:01
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends DtoBase {
+
+ public static final long serialVersionUID = 202505130833001L;
+
+ @NotEmpty(message = "鐢ㄦ埛铏氭嫙鍗′笉鑳戒负绌�")
+ public String vtCardId ;//鐢ㄦ埛鍗�(铏氭嫙鍗�)搴忓垪鍙凤紙17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+
+ @NotNull(message = "鐢ㄦ按閲忎笉鑳戒负绌�")
+ @Min(value = 1, message = "鐢ㄦ按閲忎笉鑳藉皬浜�1")
+ @Max(value = 9999, message = "鐢ㄦ按閲忎笉鑳藉ぇ浜�9999")
+ public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdParam.java
new file mode 100644
index 0000000..7fb5b22
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdParam.java
@@ -0,0 +1,26 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd36;
+
+import com.dy.pipIrrRemote.monitor.common.CdParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:01
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends CdParameter {
+ public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+ public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdSv.java
new file mode 100644
index 0000000..d8f2c3f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd36/CdSv.java
@@ -0,0 +1,80 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd36;
+
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandOpenMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.monitor.common.ComSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:01
+ * @Description
+ */
+@Slf4j
+@Service("cd36Sv")
+public class CdSv extends ComSv {
+ @Autowired
+ protected SeVirtualCardMapper seVirtualCardDao ;
+ @Autowired
+ protected PrWaterPriceMapper prWaterPriceDao ;
+ @Autowired
+ protected PrIntakeVcMapper prIntakeVcDao ;
+ @Autowired
+ protected RmCommandOpenMapper rmCommandOpenDao ;
+
+ public VoVirtualCard selectClientVtCardById(Long id){
+ return seVirtualCardDao.getVcById(id) ;
+ }
+ public Double selectWaterPrice(){
+ return prWaterPriceDao.getPrice() ;
+ }
+ /**
+ * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+ * @param intakeId
+ * @return
+ */
+ public Long selectVcIdByIntakeId(Long intakeId) {
+ return prIntakeVcDao.getVcIdByIntakeId(intakeId);
+ }
+ /**
+ * 璁剧疆铏氭嫙鍗¤鍗犵敤
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void setVcUsed(Long id, Long intakeId){
+ SeVirtualCard po = new SeVirtualCard() ;
+ po.setId(id);
+ po.setIntakeId(intakeId);
+ po.setInUse((byte)1);
+ po.setOpenTime(new Date());
+ seVirtualCardDao.updateByPrimaryKeySelective(po);
+ }
+
+ public RmCommandOpen getCommandOpen(Long intakeId){
+ List<RmCommandOpen> list = rmCommandOpenDao.selectByIntakeId(intakeId) ;
+ if(list != null && list.size() > 0){
+ return list.get(0) ;
+ }
+ return null ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void saveCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.insert(po) ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void updateCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.updateByPrimaryKeySelective(po) ;
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdCtrl.java
new file mode 100644
index 0000000..c282baf
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdCtrl.java
@@ -0,0 +1,232 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd37;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd92_A2Vo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.DateTime;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.monitor.common.ComCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:30
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "APP绔鍒掕繙绋嬪畾鏃跺紑鍚按娉�/闃�闂�")
+@RestController("p202404V201Cd37Ctrl")
+@RequestMapping(path = "p202404V201/cd37")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends ComCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String ComCode = "37" ;
+
+ private static final Double MaxRemainMoney = com.dy.pipIrrRemote.monitor.p202404V201.cd92.CdCtrl.MaxRemainMoney;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+
+ @Autowired
+ private CdSv sv ;
+ /**
+ * 鍚戣澶囷紙鎺у埗鍣級鍙戦�佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, ComCode, dto, bindingResult);
+ if (res == null) {
+ if(dto.vtCardId == null || "".equals(dto.vtCardId.trim())){
+ Long vtId = sv.selectVcIdByIntakeId(dto.getIntakeId()) ;
+ if(vtId == null) {
+ return BaseResponseUtils.buildErrorMsg("璇烽�夋嫨涓�寮犺櫄鎷熷崱");
+ }else{
+ dto.vtCardId = vtId.toString() ;
+ }
+ }
+ VoVirtualCard vcPo = sv.selectClientVtCardById(Long.parseLong(dto.vtCardId.trim())) ;
+ if(vcPo == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒板啘鎴疯櫄鎷熷崱") ;
+ }
+ if(vcPo.getInUse().booleanValue()){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱宸茬粡琚崰鐢紝涓嶈兘鍐嶅簲鐢ㄥ叾寮�闃�") ;
+ }
+ if(vcPo.getMoney() <= 0.0){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ Double waterPrice = sv.selectWaterPrice() ;
+ if(waterPrice == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒版按浠�") ;
+ }
+ String orderNo = RandomStringUtils.randomNumeric(16) ;
+ int[] ymdHms = DateTime.yyyy_MM_dd_HH_MM_SS_2_ymdhmsGroup(dto.ymdHms) ;
+ CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
+ .icCardNo("" + vcPo.getVcNum())//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ .waterRemain(0.0)//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .moneyRemain(vcPo.getMoney())//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .waterPrice(waterPrice)//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .elePrice(0.0)//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .orderNo(orderNo)//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ .year(ymdHms[0])//骞�
+ .month(ymdHms[1])//鏈�
+ .day(ymdHms[2])//鏃�
+ .hour(ymdHms[3])//鏃�
+ .minute(ymdHms[4])//鍒�
+ .minutes(dto.minutes)//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+ .build();
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+ Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
+ com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+ com.param = comParam;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, new Callback() {
+ @Override
+ public void call(Object obj) {
+ Boolean success = (Boolean) obj;
+ if(success){
+ // 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅
+ sv.addOrUpdateOftenUseIntake(dto.getOperator(), dto.getIntakeId()) ;
+ //寮�闃�鎴愬姛锛岃櫄鎷熷崱璁板綍涓婃爣璁板凡琚崰鐢�
+ sv.setVcUsed(vcPo.getId(), dto.getIntakeId());
+ //璁板綍寮�闃�鍛戒护锛屼互澶囪繙绋嬪叧闃�
+ RmCommandOpen comOpen = sv.getCommandOpen(dto.getIntakeId());
+ if(comOpen == null){
+ RmCommandOpen po = newRmCommandOpen(comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.saveCommandOpen(po);
+ }else{
+ setRmCommandOpen(comOpen, comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.updateCommandOpen(comOpen);
+ }
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ });
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(DtoBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, JSONObject resultData, Callback callback){
+ String msg;
+ if(resultData != null){
+ JSONObject codeData = resultData.getJSONObject("data") ;
+ if(codeData == null){
+ msg = RtuSuccessMsg ;
+ }else {
+ String json = codeData.toJSONString();
+ DataCd92_A2Vo cvo = JSON.parseObject(json, DataCd92_A2Vo.class) ;
+ if(cvo != null){
+ if(callback != null){
+ if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)1){
+ callback.call(true);//寮�闃�鎴愬姛
+ }else{
+ callback.call(false);//寮�闃�澶辫触
+ }
+ }
+ msg = cvo.toStr(false) ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+
+ private RmCommandOpen newRmCommandOpen(Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ RmCommandOpen po = new RmCommandOpen() ;
+ this.setRmCommandOpen(po, comId, protocol, comCode, comName, intakeId, rtuAddr, vcNum, orderNo, operator);
+ return po ;
+ }
+ private void setRmCommandOpen(RmCommandOpen po,
+ Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ po.comId = comId ;
+ po.protocol = protocol ;
+ po.commandCode = comCode ;
+ po.commandName = comName ;
+ po.intakeId = intakeId ;
+ po.rtuAddr = rtuAddr ;
+ po.vcNum = vcNum ;
+ po.orderNo = orderNo ;
+ po.operator = operator ;
+ po.sendTime = new Date() ;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdDto.java
new file mode 100644
index 0000000..568c6ee
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdDto.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd37;
+
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:30
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends DtoBase {
+
+ public static final long serialVersionUID = 202505130833001L;
+
+ @NotEmpty(message = "鐢ㄦ埛铏氭嫙鍗′笉鑳戒负绌�")
+ public String vtCardId ;//鐢ㄦ埛鍗�(铏氭嫙鍗�)搴忓垪鍙凤紙17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+
+ @NotEmpty(message = "璁″垝寮�闃�鏃堕棿涓嶈兘涓虹┖")
+ public String ymdHms ;//骞存湀鏃ユ椂鍒嗙锛堟牸寮弝yyy-MM-dd HH:mm:SS锛�
+
+ @NotNull(message = "鐢ㄦ按鏃堕暱涓嶈兘涓虹┖")
+ @Min(value = 1, message = "鐢ㄦ按鏃堕暱涓嶈兘灏忎簬1")
+ @Max(value = 9999, message = "鐢ㄦ按鏃堕暱涓嶈兘澶т簬9999")
+ public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdParam.java
new file mode 100644
index 0000000..b5ba5dd
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdParam.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd37;
+
+import com.dy.pipIrrRemote.monitor.common.CdParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:30
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends CdParameter {
+ public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+ public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+
+ public Integer year ; //璁″垝寮�闃�鏃堕棿---骞�
+ public Integer month ;//璁″垝寮�闃�鏃堕棿---鏈�
+ public Integer day ;//璁″垝寮�闃�鏃堕棿---鏃�
+ public Integer hour ;//璁″垝寮�闃�鏃堕棿---鏃�
+ public Integer minute ;//璁″垝寮�闃�鏃堕棿---鍒�
+
+ public Integer minutes ;//鐢ㄦ按鏃堕暱锛�0~9999鍒嗛挓锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdSv.java
new file mode 100644
index 0000000..ed7db47
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd37/CdSv.java
@@ -0,0 +1,80 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd37;
+
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandOpenMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.monitor.common.ComSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:30
+ * @Description
+ */
+@Slf4j
+@Service("cd37Sv")
+public class CdSv extends ComSv {
+ @Autowired
+ protected SeVirtualCardMapper seVirtualCardDao ;
+ @Autowired
+ protected PrWaterPriceMapper prWaterPriceDao ;
+ @Autowired
+ protected PrIntakeVcMapper prIntakeVcDao ;
+ @Autowired
+ protected RmCommandOpenMapper rmCommandOpenDao ;
+
+ public VoVirtualCard selectClientVtCardById(Long id){
+ return seVirtualCardDao.getVcById(id) ;
+ }
+ public Double selectWaterPrice(){
+ return prWaterPriceDao.getPrice() ;
+ }
+ /**
+ * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+ * @param intakeId
+ * @return
+ */
+ public Long selectVcIdByIntakeId(Long intakeId) {
+ return prIntakeVcDao.getVcIdByIntakeId(intakeId);
+ }
+ /**
+ * 璁剧疆铏氭嫙鍗¤鍗犵敤
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void setVcUsed(Long id, Long intakeId){
+ SeVirtualCard po = new SeVirtualCard() ;
+ po.setId(id);
+ po.setIntakeId(intakeId);
+ po.setInUse((byte)1);
+ po.setOpenTime(new Date());
+ seVirtualCardDao.updateByPrimaryKeySelective(po);
+ }
+
+ public RmCommandOpen getCommandOpen(Long intakeId){
+ List<RmCommandOpen> list = rmCommandOpenDao.selectByIntakeId(intakeId) ;
+ if(list != null && list.size() > 0){
+ return list.get(0) ;
+ }
+ return null ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void saveCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.insert(po) ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void updateCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.updateByPrimaryKeySelective(po) ;
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdCtrl.java
new file mode 100644
index 0000000..a900eca
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdCtrl.java
@@ -0,0 +1,232 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd38;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.aop.SsoAop;
+import com.dy.common.mw.protocol.Command;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd92_A2Vo;
+import com.dy.common.util.Callback;
+import com.dy.common.util.DateTime;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import com.dy.pipIrrRemote.monitor.common.ComCtrl;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.http.MediaType;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:47
+ * @Description
+ */
+@Slf4j
+@Tag(name = "杩滅▼鍛戒护", description = "APP绔繙绋嬭鍒掑畾閲忓紑鍚按娉�/闃�闂�")
+@RestController("p202404V201Cd38Ctrl")
+@RequestMapping(path = "p202404V201/cd38")
+@RequiredArgsConstructor
+@Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞�
+public class CdCtrl extends ComCtrl {
+
+ private static final String RtuSuccessMsg = "鎺у埗鍣ㄦ帴鏀跺苟鎵ц鍛戒护鎴愬姛锛屾棤杩斿洖鏁版嵁";
+
+ private static final String ComCode = "38" ;
+
+ private static final Double MaxRemainMoney = com.dy.pipIrrRemote.monitor.p202404V201.cd92.CdCtrl.MaxRemainMoney;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+
+ @Autowired
+ private CdSv sv ;
+ /**
+ * 鍚戣澶囷紙鎺у埗鍣級鍙戦�佸懡浠�
+ * @param dto 鍓嶇鍙戞潵鐨勫�煎璞�
+ * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋�
+ * @return 杩斿洖鍓嶇
+ */
+ @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE)
+ @SsoAop()
+ public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) {
+ BaseResponse<Object> res ;
+ //鍙戦�佸懡浠ゅ墠-1锛氶獙璇�
+ res = super.pre1(sv, ComCode, dto, bindingResult);
+ if(res == null) {
+ //鍙戦�佸懡浠ゅ墠-2锛氳幏寰楁暟鎹�
+ res = super.pre2(sv, ComCode, dto, bindingResult);
+ if (res == null) {
+ if(dto.vtCardId == null || "".equals(dto.vtCardId.trim())){
+ Long vtId = sv.selectVcIdByIntakeId(dto.getIntakeId()) ;
+ if(vtId == null) {
+ return BaseResponseUtils.buildErrorMsg("璇烽�夋嫨涓�寮犺櫄鎷熷崱");
+ }else{
+ dto.vtCardId = vtId.toString() ;
+ }
+ }
+ VoVirtualCard vcPo = sv.selectClientVtCardById(Long.parseLong(dto.vtCardId.trim())) ;
+ if(vcPo == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒板啘鎴疯櫄鎷熷崱") ;
+ }
+ if(vcPo.getInUse().booleanValue()){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱宸茬粡琚崰鐢紝涓嶈兘鍐嶅簲鐢ㄥ叾寮�闃�") ;
+ }
+ if(vcPo.getMoney() <= 0.0){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ }
+ Double waterPrice = sv.selectWaterPrice() ;
+ if(waterPrice == null){
+ return BaseResponseUtils.buildErrorMsg("鏈嶅姟绔嚭閿欙紝鏈緱鍒版按浠�") ;
+ }
+ String orderNo = RandomStringUtils.randomNumeric(16) ;
+ int[] ymdHms = DateTime.yyyy_MM_dd_HH_MM_SS_2_ymdhmsGroup(dto.ymdHms) ;
+ CdParam comParam = CdParam.builder().commandCode(ComCode).projectNo(projectNo).controllerType(controllerType)
+ .icCardNo("" + vcPo.getVcNum())//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ .waterRemain(0.0)//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .moneyRemain(vcPo.getMoney())//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ .waterPrice(waterPrice)//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .elePrice(0.0)//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ .orderNo(orderNo)//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+ .year(ymdHms[0])//骞�
+ .month(ymdHms[1])//鏈�
+ .day(ymdHms[2])//鏃�
+ .hour(ymdHms[3])//鏃�
+ .minute(ymdHms[4])//鍒�
+ .waterAmount(dto.waterAmount)//棰勭敤姘撮噺锛�0~9999 m3锛�
+ .build();
+ //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇�
+ res = super.pre3(sv, dto.getIntakeId(), dto.getOperator(), ComCode, comParam);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature
+ super.pre4();
+ try {
+ //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛�
+ Command com = sv.createOuterCommand(ctrlPo.getRtuAddr(), "" + comId, ComCode);
+ com.rtuResultSendWebUrl = rtuResultSendWebUrl;
+ com.param = comParam;
+ //鍙戦�佸懡浠�
+ res = super.doSend(sv, com);
+ if (res == null) {
+ //鍙戦�佸懡浠ゅ悗
+ res = super.after(ComCode, new Callback() {
+ @Override
+ public void call(Object obj) {
+ Boolean success = (Boolean) obj;
+ if(success){
+ // 娣诲姞甯哥敤鍙栨按鍙f垨鏇存柊浣跨敤淇℃伅
+ sv.addOrUpdateOftenUseIntake(dto.getOperator(), dto.getIntakeId()) ;
+ //寮�闃�鎴愬姛锛岃櫄鎷熷崱璁板綍涓婃爣璁板凡琚崰鐢�
+ sv.setVcUsed(vcPo.getId(), dto.getIntakeId());
+ //璁板綍寮�闃�鍛戒护锛屼互澶囪繙绋嬪叧闃�
+ RmCommandOpen comOpen = sv.getCommandOpen(dto.getIntakeId());
+ if(comOpen == null){
+ RmCommandOpen po = newRmCommandOpen(comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.saveCommandOpen(po);
+ }else{
+ setRmCommandOpen(comOpen, comId, ctrlPo.getProtocol(), ComCode, comName, dto.getIntakeId(), ctrlPo.getRtuAddr(), vcPo.getVcNum(), orderNo, dto.getOperator()) ;
+ sv.updateCommandOpen(comOpen);
+ }
+ }
+ }
+ @Override
+ public void call(Object... objs) {
+ }
+ @Override
+ public void exception(Exception e) {
+ }
+ });
+ }
+ } catch (Exception e) {
+ res = BaseResponseUtils.buildFail("鏈嶅姟绔瀯閫犲苟鍚戦�氫俊涓棿浠跺彂閫佽姹傛椂寮傚父" + (e.getMessage() == null ? "" : e.getMessage()));
+ } finally {
+ //鏈�缁�
+ super.end();
+ }
+ }
+ }
+ }
+ return res ;
+ }
+
+ @Override
+ protected String checkDto(DtoBase dto) {
+ return null;
+ }
+
+ @Override
+ protected String dealComResult(String code, JSONObject resultData, Callback callback){
+ String msg;
+ if(resultData != null){
+ JSONObject codeData = resultData.getJSONObject("data") ;
+ if(codeData == null){
+ msg = RtuSuccessMsg ;
+ }else {
+ String json = codeData.toJSONString();
+ DataCd92_A2Vo cvo = JSON.parseObject(json, DataCd92_A2Vo.class) ;
+ if(cvo != null){
+ if(callback != null){
+ if(cvo.opResult != null && cvo.opResult.byteValue() == (byte)1){
+ callback.call(true);//寮�闃�鎴愬姛
+ }else{
+ callback.call(false);//寮�闃�澶辫触
+ }
+ }
+ msg = cvo.toStr(false) ;
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ }
+ }else{
+ msg = RtuSuccessMsg ;
+ }
+ return msg;
+ }
+
+ private RmCommandOpen newRmCommandOpen(Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ RmCommandOpen po = new RmCommandOpen() ;
+ this.setRmCommandOpen(po, comId, protocol, comCode, comName, intakeId, rtuAddr, vcNum, orderNo, operator);
+ return po ;
+ }
+ private void setRmCommandOpen(RmCommandOpen po,
+ Long comId,
+ String protocol,
+ String comCode,
+ String comName,
+ Long intakeId,
+ String rtuAddr,
+ Long vcNum,
+ String orderNo,
+ Long operator){
+ po.comId = comId ;
+ po.protocol = protocol ;
+ po.commandCode = comCode ;
+ po.commandName = comName ;
+ po.intakeId = intakeId ;
+ po.rtuAddr = rtuAddr ;
+ po.vcNum = vcNum ;
+ po.orderNo = orderNo ;
+ po.operator = operator ;
+ po.sendTime = new Date() ;
+ }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdDto.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdDto.java
new file mode 100644
index 0000000..67027c3
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdDto.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd38;
+
+import com.dy.pipIrrRemote.common.dto.DtoBase;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:47
+ * @Description
+ */
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class CdDto extends DtoBase {
+
+ public static final long serialVersionUID = 202505130833001L;
+
+ @NotEmpty(message = "鐢ㄦ埛铏氭嫙鍗′笉鑳戒负绌�")
+ public String vtCardId ;//鐢ㄦ埛鍗�(铏氭嫙鍗�)搴忓垪鍙凤紙17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+
+ @NotEmpty(message = "璁″垝寮�闃�鏃堕棿涓嶈兘涓虹┖")
+ public String ymdHms ;//骞存湀鏃ユ椂鍒嗙锛堟牸寮弝yyy-MM-dd HH:mm:SS锛�
+
+ @NotNull(message = "鐢ㄦ按閲忎笉鑳戒负绌�")
+ @Min(value = 1, message = "鐢ㄦ按閲忎笉鑳藉皬浜�1")
+ @Max(value = 9999, message = "鐢ㄦ按閲忎笉鑳藉ぇ浜�9999")
+ public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdParam.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdParam.java
new file mode 100644
index 0000000..f96de36
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdParam.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd38;
+
+import com.dy.pipIrrRemote.monitor.common.CdParameter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:47
+ * @Description
+ */
+@Data
+@ToString(callSuper = true)
+@EqualsAndHashCode(callSuper = true)
+@SuperBuilder
+public class CdParam extends CdParameter {
+ public String icCardNo ;//鐢ㄦ埛鍗″簭鍒楀彿锛�17浣嶆暟瀛楋級锛�6瀛楄妭BCD锛�2瀛楄妭HEX锛�
+ public Double waterRemain ;//鐢ㄦ埛鍓╀綑姘撮噺, 涓や釜灏忔暟鐐�, 鍗曚綅m3, 0~99999999.99
+ public Double moneyRemain ;//鐢ㄦ埛鍓╀綑閲戦, 涓や釜灏忔暟鐐�, 鍗曚綅鍏�, 0~999999.99
+ public Double waterPrice ;//姘撮噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public Double elePrice ;//鐢甸噺鍗曚环 鍗曚綅:鍏�, 2涓皬鏁扮偣
+ public String orderNo ;//璁㈠崟鍙凤紙16浣嶆暟瀛楋級
+
+ public Integer year ; //璁″垝寮�闃�鏃堕棿---骞�
+ public Integer month ;//璁″垝寮�闃�鏃堕棿---鏈�
+ public Integer day ;//璁″垝寮�闃�鏃堕棿---鏃�
+ public Integer hour ;//璁″垝寮�闃�鏃堕棿---鏃�
+ public Integer minute ;//璁″垝寮�闃�鏃堕棿---鍒�
+
+ public Integer waterAmount ;//棰勭敤姘撮噺锛�0~9999 m3锛�
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdSv.java
new file mode 100644
index 0000000..281338b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd38/CdSv.java
@@ -0,0 +1,80 @@
+package com.dy.pipIrrRemote.monitor.p202404V201.cd38;
+
+import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper;
+import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper;
+import com.dy.pipIrrGlobal.daoRm.RmCommandOpenMapper;
+import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmCommandOpen;
+import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard;
+import com.dy.pipIrrGlobal.voSe.VoVirtualCard;
+import com.dy.pipIrrRemote.monitor.common.ComSv;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/30 9:47
+ * @Description
+ */
+@Slf4j
+@Service("cd38Sv")
+public class CdSv extends ComSv {
+ @Autowired
+ protected SeVirtualCardMapper seVirtualCardDao ;
+ @Autowired
+ protected PrWaterPriceMapper prWaterPriceDao ;
+ @Autowired
+ protected PrIntakeVcMapper prIntakeVcDao ;
+ @Autowired
+ protected RmCommandOpenMapper rmCommandOpenDao ;
+
+ public VoVirtualCard selectClientVtCardById(Long id){
+ return seVirtualCardDao.getVcById(id) ;
+ }
+ public Double selectWaterPrice(){
+ return prWaterPriceDao.getPrice() ;
+ }
+ /**
+ * 鏍规嵁鍙栨按鍙D鑾峰彇涓庝箣缁戝畾铏氭嫙鍗D
+ * @param intakeId
+ * @return
+ */
+ public Long selectVcIdByIntakeId(Long intakeId) {
+ return prIntakeVcDao.getVcIdByIntakeId(intakeId);
+ }
+ /**
+ * 璁剧疆铏氭嫙鍗¤鍗犵敤
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void setVcUsed(Long id, Long intakeId){
+ SeVirtualCard po = new SeVirtualCard() ;
+ po.setId(id);
+ po.setIntakeId(intakeId);
+ po.setInUse((byte)1);
+ po.setOpenTime(new Date());
+ seVirtualCardDao.updateByPrimaryKeySelective(po);
+ }
+
+ public RmCommandOpen getCommandOpen(Long intakeId){
+ List<RmCommandOpen> list = rmCommandOpenDao.selectByIntakeId(intakeId) ;
+ if(list != null && list.size() > 0){
+ return list.get(0) ;
+ }
+ return null ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void saveCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.insert(po) ;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void updateCommandOpen(RmCommandOpen po){
+ rmCommandOpenDao.updateByPrimaryKeySelective(po) ;
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java
index bbad1d9..bcb00a2 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cd92/CdCtrl.java
@@ -45,7 +45,7 @@
private static final String ComCode = "92" ;
- private static final Double maxRemainMoney = 9999.9999D ;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+ public static final Double MaxRemainMoney = 9999.9999D ;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
@Autowired
private CdSv sv ;
@@ -83,8 +83,8 @@
if(vcPo.getMoney() <= 0.0){
return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
}
- if(vcPo.getMoney() >= maxRemainMoney){
- return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + maxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
}
Double waterPrice = sv.selectWaterPrice() ;
if(waterPrice == null){
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA2/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA2/CdCtrl.java
index 2cb9cd0..e1acabb 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA2/CdCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/p202404V201/cdA2/CdCtrl.java
@@ -45,7 +45,7 @@
private static final String ComCode = "A2" ;
- private static final Double maxRemainMoney = 9999.9999D ;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
+ private static final Double MaxRemainMoney = com.dy.pipIrrRemote.monitor.p202404V201.cd92.CdCtrl.MaxRemainMoney;//鍗忚鏀寔鐨勫墿浣欓噾棰濇渶澶у��
@Autowired
private CdSv sv ;
@@ -83,8 +83,8 @@
if(vcPo.getMoney() <= 0.0){
return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濅负0锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
}
- if(vcPo.getMoney() >= maxRemainMoney){
- return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + maxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
+ if(vcPo.getMoney() >= MaxRemainMoney){
+ return BaseResponseUtils.buildErrorMsg("鍐滄埛璇ヨ櫄鎷熷崱涓墿浣欓噾棰濆ぇ浜庡崗璁敮鎸佺殑鏈�澶у��" + MaxRemainMoney + "锛屼笉鑳藉啀搴旂敤鍏跺紑闃�") ;
}
Double waterPrice = sv.selectWaterPrice() ;
if(waterPrice == null){
--
Gitblit v1.8.0