10 小时以前 | zuoxiao | ![]() |
12 小时以前 | zhubaomin | ![]() |
13 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
17 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
20 小时以前 | liurunyu | ![]() |
21 小时以前 | liurunyu | ![]() |
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlParse.java
@@ -61,6 +61,14 @@ public static void parseAlarmAndState(byte[] bs, int index, AlarmVo vo){ byte b = bs[index] ; vo.statePump = (byte)(b & 0x1) ; //䏿µæ§ä¸ä½éå ¼å®¹ if(vo.statePump == 0){ vo.statePump = (byte)1; }else{ vo.statePump = (byte)0; } vo.alarmWaterRemain = (byte)((b >> 1) & 1) ; vo.alarm0WaterRemain = (byte)((b >> 2) & 1) ; vo.alarmExceedYear = (byte)((b >> 3) & 1) ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/AutoGenerateIdInterceptor.java
@@ -1,8 +1,5 @@ package com.dy.common.mybatis; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONWriter; import com.dy.common.po.BaseEntity; import com.dy.common.util.IDLongGenerator; import org.apache.ibatis.executor.Executor; pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/MyBatisGlConfig.java
New file @@ -0,0 +1,35 @@ package com.dy.pipIrrGlobal.config; import jakarta.annotation.PostConstruct; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import java.util.List; /** * @Author: liurunyu * @Date: 2025/4/27 9:31 * @Description */ @Configuration public class MyBatisGlConfig { @Autowired private List<SqlSessionFactory> sqlSessionFactoryList; @Value("${common.virtual_card_disable_set_inuse:false}") private Boolean disableSetInUse; /** * æ ¹æ®é ç½®æä»¶é ç½®ï¼é ç½®æ¦æªå¨ */ @PostConstruct public void addMyInterceptor() { for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) { if (disableSetInUse != null && disableSetInUse.booleanValue()) { sqlSessionFactory.getConfiguration().addInterceptor(new VirtualCardInUseInterceptor()); } } } } pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/config/VirtualCardInUseInterceptor.java
New file @@ -0,0 +1,61 @@ package com.dy.pipIrrGlobal.config; /** * @Author: liurunyu * @Date: 2025/4/27 9:19 * @Description */ import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Signature; import java.lang.reflect.Method; /** * æ¦æªèæå¡è¡¨çæ´æ°æä½ï¼ä½¿ä¸è½è®¾ç½®å ç¨ç¶ææä½ã */ @Intercepts({ @Signature( type = Executor.class, method = "update", args = { MappedStatement.class, Object.class } ) }) @Slf4j public class VirtualCardInUseInterceptor implements Interceptor { static int MAPPED_STATEMENT_INDEX = 0; static int PARAMETER_INDEX = 1; static String BASE_FIELD_SET_PRIMARY_KEY_FUNTION_SETINUSE = "setInUse"; @Override public Object intercept(Invocation invocation) throws Throwable { Object entity = invocation.getArgs()[PARAMETER_INDEX]; if (entity instanceof SeVirtualCard) { MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[MAPPED_STATEMENT_INDEX]; SqlCommandType commandType = mappedStatement.getSqlCommandType(); if (commandType.equals(SqlCommandType.UPDATE)) { Class<?> entityClass = entity.getClass(); Method setInUse = null; try { setInUse = entityClass.getMethod(BASE_FIELD_SET_PRIMARY_KEY_FUNTION_SETINUSE, Byte.class); } catch (Exception e) { //å½entityClass没æsetInUseæ¹æ³æ¶ï¼ä¼æåºå¼å¸¸ } if (setInUse != null) { setInUse.invoke(entity, (byte)0); } invocation.getArgs()[PARAMETER_INDEX] = entity; } } return invocation.proceed(); } } pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(121·þÎñÆ÷).yml
@@ -2,3 +2,8 @@ # 233æå¡å¨ï¼ym,mj,sp,test # 121æå¡å¨ï¼mq,yq,hlj,gz,lz,jc spring_main_datasource_names: mq,yq,hlj,gz,lz,jc # èæå¡è¡¨å段in_useæä¸ºå ç¨ç¶æï¼å½ä¸ºtrueæ¶ç»ä¸è®¾ç½®å¼ä¸º0 # 233æå¡å¨ï¼false # 121æå¡å¨ï¼true virtual_card_disable_set_inuse: true pipIrr-platform/pipIrr-global/src/main/resources/application-common-web(233·þÎñÆ÷).yml
@@ -2,3 +2,8 @@ # 233æå¡å¨ï¼ym,mj,sp,test # 121æå¡å¨ï¼mq,yq,hlj,gz,lz,jc spring_main_datasource_names: ym,mj,sp,test # èæå¡è¡¨å段in_useæä¸ºå ç¨ç¶æï¼å½ä¸ºtrueæ¶ç»ä¸è®¾ç½®å¼ä¸º0 # 233æå¡å¨ï¼false # 121æå¡å¨ï¼true virtual_card_disable_set_inuse: false pipIrr-platform/pipIrr-global/src/main/resources/application-common-web.yml
@@ -2,3 +2,8 @@ # 233æå¡å¨ï¼ym,mj,sp,test # 121æå¡å¨ï¼mq,yq,hlj,gz,lz,jc spring_main_datasource_names: ym,mj,sp,test # èæå¡è¡¨å段in_useæä¸ºå ç¨ç¶æï¼å½ä¸ºtrueæ¶ç»ä¸è®¾ç½®å¼ä¸º0 # 233æå¡å¨ï¼false # 121æå¡å¨ï¼true virtual_card_disable_set_inuse: false pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -477,4 +477,9 @@ #èæå¡é ç½®åæ° vc: #èæå¡æä½ä½é¢æ¥è¦å¼ alarmValue: 10 alarmValue: 10 #è½®çé ç½® rotation: #è½®çç»æåå¼éæ¶é´ preOpeningTime: 10 pipIrr-platform/pipIrr-global/src/main/resources/mapper/BaUserMapper.xml
@@ -373,8 +373,7 @@ COUNT(*) AS recordCount FROM ba_user user <where> user.supperAdmin != 1 AND user.deleted = 0 user.deleted = 0 <if test = "phone != null and phone !=''"> AND user.phone= #{phone} </if> pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
@@ -113,25 +113,24 @@ if(vo.orgTag == null || vo.orgTag.trim().length() == 0){ return BaseResponseUtils.buildErrorMsg("æªéæ©ç»ç»åä½"); } if(vo.token == null || vo.token.trim().length() == 0){ return BaseResponseUtils.buildErrorMsg("æ token"); } if(vo.code == null || vo.code.trim().length() == 0){ return BaseResponseUtils.buildErrorMsg("请è¾å ¥éªè¯ç "); } //æç»ç»å使 ç¾ä½ä¸ºæ°æ®æºåç§° DataSourceContext.set(vo.orgTag); // 仿°æ®åºè·åéªè¯ç Map map = sv.getCodeByToken(vo.token); Long expiration = Long.parseLong(map.get("expiration").toString()); Long currentTimestamp = System.currentTimeMillis(); if(currentTimestamp > expiration) { return BaseResponseUtils.buildErrorMsg("éªè¯ç å·²è¶ æ¶"); } String localCode = map.get("code").toString(); if(!vo.code.equals(localCode)) { return BaseResponseUtils.buildErrorMsg("éªè¯ç é误"); if(vo.token != null && vo.token.trim().length() > 0) { // ä»sessionä¸è·åéªè¯ç //HttpSession session = (HttpSession) request.getSession(); //String localCode = session.getAttribute(token).toString(); // 仿°æ®åºè·åéªè¯ç Map map = sv.getCodeByToken(vo.token); Long expiration = Long.parseLong(map.get("expiration").toString()); Long currentTimestamp = System.currentTimeMillis(); if(currentTimestamp > expiration) { return BaseResponseUtils.buildErrorMsg("éªè¯ç å·²è¶ æ¶"); } String localCode = map.get("code").toString(); if(!vo.code.equals(localCode)) { return BaseResponseUtils.buildErrorMsg("éªè¯ç é误"); } } if(!sv.existPhone(vo.phone)){ pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/testFun/Test4VirtualCardSetInUseCtrl.java
New file @@ -0,0 +1,40 @@ package com.dy.pipIrrTemp.testFun; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author: liurunyu * @Date: 2025/4/27 10:25 * @Description */ @Slf4j @RestController @RequestMapping(path = "test4Vir") public class Test4VirtualCardSetInUseCtrl { private Test4VirtualCardSetInUseSv sv; @Autowired private void setSv(Test4VirtualCardSetInUseSv sv) { this.sv = sv; } /** * å é¤ä¸äºæ¼æç»è®¡ * @return */ @GetMapping(path = "doSome") @SsoAop() public BaseResponse<Boolean> doSome(){ this.sv.doSome(); return BaseResponseUtils.buildSuccess(true); } } pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/testFun/Test4VirtualCardSetInUseSv.java
New file @@ -0,0 +1,28 @@ package com.dy.pipIrrTemp.testFun; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoSe.SeVirtualCard; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @Author: liurunyu * @Date: 2025/4/27 10:26 * @Description */ @Slf4j @Service public class Test4VirtualCardSetInUseSv { @Autowired private SeVirtualCardMapper seVirtualCardMapper; @Transactional(rollbackFor = Exception.class) public void doSome(){ SeVirtualCard po = new SeVirtualCard(); po.setId(Long.parseLong("2025042116533800009")); po.setInUse((byte) 1); seVirtualCardMapper.updateByPrimaryKeySelective(po) ; } } pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanCtrl.java
@@ -22,6 +22,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigatePlan/IrrigatePlanSv.java
@@ -74,6 +74,9 @@ private static final Integer irrPlanDelayDefault = 5 ;//è½®çä¸è®¡åå¼éçé»è®¤å»¶è¿æ¶é¿ @Value("${rotation.preOpeningTime}") private Long preOpeningTime; /** * æ·»å çæºè®¡å * @param po @@ -218,8 +221,13 @@ // 计ç®ä¸ä¸ç»çå¼å§æ¶é´ LocalDateTime LocalscheduleStartTime = scheduleStartTime.toInstant().atZone(ZoneId.systemDefault()) .toLocalDateTime(); LocalscheduleStartTime = LocalscheduleStartTime.plusMinutes(schedule.getDuration()); LocalscheduleStartTime = LocalscheduleStartTime.minusMinutes(2); LocalscheduleStartTime = LocalscheduleStartTime.minusMinutes(preOpeningTime); scheduleStartTime = Date.from(LocalscheduleStartTime.atZone(ZoneId.systemDefault()).toInstant()); // ç¡®ä¿ä¸ä¸ç»çå¼å§æ¶é´ä¸æ©äºè®¡åå¼å§æ¶é´ if(scheduleStartTime.before(planStartTime)) { scheduleStartTime = planStartTime; } } // æ·»å çæºè®¡åæä½è®°å½ pipIrr-platform/Îĵµ/README.md
New file @@ -0,0 +1,124 @@ # pipIrr æºè½çæºç³»ç» ## é¡¹ç®æ¦è¿° pipIrræ¯ä¸å¥åºäºJavaçæºè½ç®¡éçæºç³»ç»è§£å³æ¹æ¡ï¼ç¨äºå®ç°æ°´èµæºçæºè½å管çä¸çæºæ§å¶ãç³»ç»éæäºè¿ç¨ç»ç«¯æ§å¶ãGISå°çä¿¡æ¯ãæ°´èµæºçæµä¸åæã微信æ¥å ¥çå¤ç§åè½ï¼ä¸ºæºæ §åä¸åæ°´å©å·¥ç¨æä¾å ¨é¢çææ¯æ¯æã ## ç³»ç»æ¶æ ç³»ç»éç¨å¾®æå¡æ¶æï¼åºäºSpring Boot 3æå»ºï¼ä¸»è¦å æ¬ä»¥ä¸å ä¸ªæ ¸å¿é¨åï¼ - **å端åºç¨å±**ï¼æä¾Webçé¢ãç§»å¨åºç¨ãå¾®ä¿¡å ¬ä¼å·çå¤ç§äº¤äºæ¹å¼ - **ä¸å¡æå¡å±**ï¼å¤çæ ¸å¿ä¸å¡é»è¾ï¼å æ¬çæºç®¡çã项ç®ç®¡çãæ°æ®ç»è®¡ç - **ä¸é´ä»¶å±**ï¼æä¾RTU(è¿ç¨ç»ç«¯åå )éä¿¡ãç¬¬ä¸æ¹ç³»ç»éæçåè½ - **åºç¡è®¾æ½å±**ï¼æä¾æ°æ®åå¨ãç¼åãæ¶æ¯éåçåºç¡æå¡ ## 模å说æ ### ç¶æ¨¡å (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: ç¬¬ä¸æ¹RTUéæ - 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. å é代ç åº ```bash git clone <repository-url> ``` 2. å¯¼å ¥é¡¹ç®å°IDE 使ç¨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 ``` ## é¡¹ç®ææ¡£ 详ç»çé¡¹ç®ææ¡£ä½äº `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