doc/»·±£ÃŽû-Ѳ¼ìÊý¾Ý»Ø´«½Ó¿Ú˵Ã÷.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,159 @@ # ç¯ä¿é¨ç¦ç³»ç» â æ äººæº / æºå¨äºº / AI æå头 å·¡æ£æ°æ®åä¼ æ¥å£è¯´æ > ç¨äºè¯æ"æºè½å·¡æ£å¯æ¯ææ 人æºãæºå¨äººèå¨å·¡æ£æ°æ®åä¼ "ã > ä»»ä½å ·å¤ HTTP è°ç¨è½åçè®¾å¤æç¬¬ä¸æ¹å¹³å°ï¼æ äººæºæºåºãå·¡æ£æºå¨äººä¸æ§ãAI è§é¢åæçåï¼é½å¯ä»¥è°ç¨æ¬æ¥å£ä¸æ¥å·¡æ£æ°æ®ï¼ > 䏿¥åæ°æ®ç«å³è½åºï¼å¹¶å¯å¨ç³»ç»ãæºè½å·¡æ£ç®¡ç â åä¼ è¯¦æ ã䏿¥çã ## 1. æ¥å£åºæ¬ä¿¡æ¯ | 项 | å¼ | |---|---| | æ¥å£å°å | `http://10.136.58.73:7003/environmentAccess/inspection/callback` | | è¯·æ±æ¹æ³ | `POST` | | Content-Type | `application/json;charset=utf-8` | | é´æ | 请æ±ä½ä¸æºå¸¦ `secret`ï¼é»è®¤ `hbmjxt-callback-2026`ï¼å¯éè¿é 置项 `envaccess.callback.secret` ä¿®æ¹ï¼ | | ç»å½è¦æ± | æ ï¼è®¾å¤æ éç»å½ï¼èµ° secret æ ¡éªï¼ | ## 2. 请æ±åæ° | åæ° | ç±»å | å¿ å¡« | 说æ | |---|---|---|---| | `secret` | string | æ¯ | æ¥å£å¯é¥ | | `tenantId` | number | æ¯ | ç§æ· IDãè¯å¯¼ç¯ä¿ä¸º `222` | | `inspectionId` | number | å¦ | æå®å·¡æ£ä»»å¡ IDãä¸ä¼ åæ `area` å¹é æè¿ä¸æ¡æªåæ¶ä»»å¡ï¼ä»æ å¹é åèªå¨æ°å»ºä¸æ¡å·¡æ£è®°å½ | | `area` | string | 建议 | å·¡æ£åºåï¼å¦ `ä¸é¨åºå` | | `deviceType` | string | 建议 | æ°æ®æ¥æºï¼`UAV` æ äººæº / `ROBOT` å·¡æ£æºå¨äºº / `CAMERA` AI æå头 | | `deviceCode` | string | 建议 | 设å¤ç¼å·ï¼å¦ `UAV-M350-001` | | `collectedAt` | string | å¦ | 设å¤ééæ¶é´ï¼`yyyy-MM-dd HH:mm:ss` | | `aiSummary` | string | å¦ | AI åæç»è®ºæè¦ | | `aiObjects` | array | å¦ | AI è¯å«æ¡ç®ï¼æ¯é¡¹å« `object`(è¯å«å¯¹è±¡)ã`conclusion`(è¯å«ç»è®º)ã`confidence`(置信度 0~1)ã`frameTime`(æªå¸§æ¶é´) | | `longitude` | number | å¦ | ééç¹ç»åº¦ | | `latitude` | number | å¦ | ééç¹çº¬åº¦ | | `altitude` | number | å¦ | ä½ä¸é«åº¦ï¼ç±³ï¼ãå°é¢æºå¨äººå¯ä¼ 0 | | `battery` | number | å¦ | 设å¤çµéç¾åæ¯ | | `photos` | array | å¦ | ç°åºç §ç URL å表 | | `track` | array | å¦ | å·¡æ£è½¨è¿¹ç¹ï¼æ¯é¡¹å« `t`(æ¶é´)ã`lng`ã`lat`ã`alt` | ## 3. 请æ±ç¤ºä¾ ### 3.1 æ 人æºå·¡æ£ä¸æ¥ ```bash curl -X POST "http://10.136.58.73:7003/environmentAccess/inspection/callback" \ -H "Content-Type: application/json" \ -d '{ "secret": "hbmjxt-callback-2026", "tenantId": 222, "area": "ä¸é¨åºå", "deviceType": "UAV", "deviceCode": "UAV-M350-001", "collectedAt": "2026-10-24 09:12:10", "aiSummary": "æ¬æ¬¡å·¡æ£è¯å« 3 ç±»ç®æ ï¼åç° 1 å¤äººåæªä½©æ´å®å ¨å¸½", "aiObjects": [ {"object": "äººåæªä½©æ´å®å ¨å¸½", "conclusion": "æªæè¦æ±ä½©æ´ï¼å·²æ¨éæ´æ¹", "confidence": 0.93, "frameTime": "2026-10-24 09:12:35"}, {"object": "车çè¯å«éè¿", "conclusion": "èA8F372 æ£å¸¸æ¾è¡", "confidence": 0.99, "frameTime": "2026-10-24 09:13:02"} ], "longitude": 120.382145, "latitude": 31.298512, "altitude": 45.6, "battery": 78, "photos": [], "track": [ {"t": "09:12:10", "lng": 120.382145, "lat": 31.298512, "alt": 45.6}, {"t": "09:13:02", "lng": 120.382301, "lat": 31.298604, "alt": 52.1} ] }' ``` ### 3.2 å·¡æ£æºå¨äººä¸æ¥ï¼å°é¢è®¾å¤ï¼altitude ä¼ 0ï¼ ```bash curl -X POST "http://10.136.58.73:7003/environmentAccess/inspection/callback" \ -H "Content-Type: application/json" \ -d '{ "secret": "hbmjxt-callback-2026", "tenantId": 222, "area": "ä»å¨åºå", "deviceType": "ROBOT", "deviceCode": "ROBOT-XD-S2-01", "collectedAt": "2026-10-24 14:09:50", "aiSummary": "æ¬æ¬¡å·¡æ£è¯å« 4 ç±»ç®æ ï¼åç° 1 夿¶é²ééå ç¨", "aiObjects": [ {"object": "æ¶é²éé", "conclusion": "éé被æç临æ¶å ç¨ï¼å·²éç¥æ¸ ç", "confidence": 0.95, "frameTime": "2026-10-24 14:10:05"} ], "longitude": 120.381024, "latitude": 31.299348, "altitude": 0.9, "battery": 57 }' ``` ### 3.3 AI æå头䏿¥ï¼åºå®ç¹ä½ï¼ ```bash curl -X POST "http://10.136.58.73:7003/environmentAccess/inspection/callback" \ -H "Content-Type: application/json" \ -d '{ "secret": "hbmjxt-callback-2026", "tenantId": 222, "area": "ç产ä¸åº", "deviceType": "CAMERA", "deviceCode": "CAM-PROD1-05", "aiSummary": "æ¬æ¬¡è½®å·¡è¯å« 5 ç±»ç®æ ï¼åç° 1 å¤åºæ°æ¶é罩移ä½", "aiObjects": [ {"object": "åºæ°æ¶é罩", "conclusion": "ä½ç½®å移约 15cmï¼å½±åæ¶éæç", "confidence": 0.87, "frameTime": "2026-10-24 09:35:44"} ], "longitude": 120.384011, "latitude": 31.299772, "altitude": 7.2 }' ``` ## 4. ååºç¤ºä¾ æåï¼ ```json { "code": 200, "msg": "å·¡æ£æ°æ®åä¼ æå", "data": { "inspectionId": 3, "created": false, "deviceCode": "UAV-M350-001", "deviceType": "UAV", "area": "ä¸é¨åºå" } } ``` | åæ®µ | 说æ | |---|---| | `inspectionId` | æ°æ®åå ¥çå·¡æ£ä»»å¡ ID | | `created` | `true` 表示系ç»èªå¨æ°å»ºäºä¸æ¡å·¡æ£è®°å½ï¼ååºå没æå¹é ä»»å¡ï¼ | å¤±è´¥ï¼ | è¿å | åå | |---|---| | `secret æ ¡éªå¤±è´¥` | 请æ±ä½ `secret` ä¸é ç½®ä¸ä¸è´ | | `tenantId ä¸è½ä¸ºç©º` | æªä¼ ç§æ· ID | | `åä¼ æ°æ®ä¸è½ä¸ºç©º` | 请æ±ä½ä¸ºç©º | ## 5. 䏿¥åå¨åªéç ç»å½ç³»ç» â **ç¯ä¿é¨ç¦ â æºè½å·¡æ£ç®¡ç** â æ¾å°å¯¹åºåºåçå·¡æ£è®°å½ â ç¹æä½å **ãåä¼ è¯¦æ ã**ï¼ - **æ°æ®æ¥æº**ï¼æ¥æºç±»åï¼æ 人æº/å·¡æ£æºå¨äºº/AI æå头ï¼ã设å¤ç¼å·ãå·¡æ£åºåã设å¤çµéãééæ¶é´ãç³»ç»æ¥æ¶æ¶é´ãééåæ ãä½ä¸é«åº¦ - **AI è§é¢åæç»æ**ï¼åæç»è®ºæè¦ + ç»æåè¯å«æ¡ç®è¡¨æ ¼ï¼è¯å«å¯¹è±¡ãè¯å«ç»è®ºã置信度%ãæªå¸§æ¶é´ï¼ - **ç°åºééç §ç**ï¼è®¾å¤ä¸æ¥ç `photos` ä¼ä»¥ç¼©ç¥å¾å±ç¤ºï¼å¯ç¹å»æ¾å¤§ - **设å¤å·¡æ£è½¨è¿¹**ï¼`track` ä¼ä»¥è¡¨æ ¼å±ç¤ºæ¶é´/ç»çº¬åº¦/é«åº¦ ## 6. ç°åºæ¼ç¤ºæ¥éª¤ï¼å»ºè®®ï¼ 1. æµè§å¨æå¼ç³»ç» â ç¯ä¿é¨ç¦ â æºè½å·¡æ£ç®¡çï¼æ¾å°ãä¸é¨åºåãçè®°å½ï¼ç¹ãåä¼ è¯¦æ ãç»å®¢æ·çå½åæ°æ® 2. æå¼ Postmanï¼ç²è´´ç¬¬ 3.1 èç JSONï¼ç¹ Send 3. åå°æµè§å¨ï¼**å·æ°å表**ï¼åç¹ãåä¼ è¯¦æ ãââ ç³»ç»æ¥æ¶æ¶é´ãAI è¯å«æ¡ç®ä¼åæåå䏿¥çå 容 4. 妿æ¢ä¸ä¸ªä¸åå¨çåºåï¼å¦ `"area": "åååº"`ï¼ï¼ååºé `created` 伿¯ `true`ï¼å表ä¼**èªå¨å¤åºä¸æ¡**该åºåçå·¡æ£è®°å½ 第 3ã4 æ¥å°±æ¯"坿¯æè®¾å¤èå¨åä¼ "çç´æ¥è¯æ®ï¼**æ¥å£çå®åå¨ï¼æ°æ®çå®å ¥åºï¼é¡µé¢çå®å¯è§**ã src/main/java/com/ruoyi/envaccess/controller/EnvInspectionController.java
@@ -1,16 +1,24 @@ package com.ruoyi.envaccess.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.handler.CustomTenantLineHandler; import com.ruoyi.framework.aspectj.lang.annotation.Anonymous; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.envaccess.pojo.EnvInspection; import com.ruoyi.envaccess.service.IEnvInspectionService; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * ç¯ä¿é¨ç¦--æºè½å·¡æ£å°è´¦ï¼å«è·¯å¾è§å/AIè§é¢åæ/æ¥å/æ äººæºæºå¨äººï¼AI䏿 人æºå段é¢çï¼ @@ -67,4 +75,144 @@ public void export(HttpServletResponse response, EnvInspection req) { envInspectionService.export(response, req); } @Value("${envaccess.callback.secret:hbmjxt-callback-2026}") private String callbackSecret; private static final ObjectMapper CALLBACK_MAPPER = new ObjectMapper(); /** * æ äººæº / æºå¨äºº / AI æå头 å·¡æ£æ°æ®åä¼ ï¼å¯¹å¤å¼æ¾æ¥å£ï¼ä¾ç¬¬ä¸æ¹è®¾å¤è°ç¨ï¼ * * 请æ±ç¤ºä¾ï¼POST JSONï¼ï¼ * { * "secret": "hbmjxt-callback-2026", * "tenantId": 222, * "inspectionId": 3, // å¯éï¼ä¸ä¼ åæ area å¹é æè¿ä¸æ¡æªåæ¶ä»»å¡ï¼å没æå°±æ°å»º * "area": "ä¸é¨åºå", * "deviceType": "UAV", // UAV æ äººæº / ROBOT æºå¨äºº / CAMERA æå头 * "deviceCode": "UAV-M350-001", * "collectedAt": "2026-10-24 09:12:35", * "aiSummary": "å ±è¯å« 5 ç±»ç®æ ï¼åç° 1 夿ªä½©æ´å®å ¨å¸½", * "aiObjects": [{"object":"äººåæªä½©æ´å®å ¨å¸½","conclusion":"æªæè¦æ±ä½©æ´","confidence":0.93,"frameTime":"2026-10-24 09:12:35"}], * "longitude": 120.382145, "latitude": 31.298512, "altitude": 45.6, "battery": 78, * "photos": ["/profile/upload/uav_east_01.jpg"], * "track": [{"t":"09:12:10","lng":120.3821,"lat":31.2985}] * } */ @Anonymous @PostMapping("/callback") public AjaxResult callback(@RequestBody Map<String, Object> payload) { if (payload == null || payload.isEmpty()) { return AjaxResult.error("åä¼ æ°æ®ä¸è½ä¸ºç©º"); } if (!callbackSecret.equals(String.valueOf(payload.get("secret")))) { return AjaxResult.error("secret æ ¡éªå¤±è´¥ï¼è¯·å¨è¯·æ±ä½ä¸æºå¸¦æ£ç¡®ç secret"); } Long tenantId = toLong(payload.get("tenantId")); if (tenantId == null) { return AjaxResult.error("tenantId ä¸è½ä¸ºç©º"); } String area = payload.get("area") == null ? "æªæå®åºå" : String.valueOf(payload.get("area")); String deviceType = payload.get("deviceType") == null ? "UAV" : String.valueOf(payload.get("deviceType")); String deviceCode = payload.get("deviceCode") == null ? deviceType + "-UNKNOWN" : String.valueOf(payload.get("deviceCode")); Map<String, Object> ai = new LinkedHashMap<>(); ai.put("summary", payload.get("aiSummary") == null ? "æ¬æ¬¡åä¼ æªé带 AI è¯å«ç»è®º" : payload.get("aiSummary")); ai.put("objects", payload.get("aiObjects") == null ? new ArrayList<>() : payload.get("aiObjects")); Map<String, Object> uav = new LinkedHashMap<>(); uav.put("deviceType", deviceType); uav.put("deviceCode", deviceCode); uav.put("area", area); uav.put("collectedAt", payload.get("collectedAt") == null ? "" : payload.get("collectedAt")); uav.put("longitude", payload.get("longitude")); uav.put("latitude", payload.get("latitude")); uav.put("altitude", payload.get("altitude")); uav.put("battery", payload.get("battery")); uav.put("photos", payload.get("photos") == null ? new ArrayList<>() : payload.get("photos")); uav.put("track", payload.get("track") == null ? new ArrayList<>() : payload.get("track")); uav.put("receivedAt", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); String aiJson; String uavJson; try { aiJson = CALLBACK_MAPPER.writeValueAsString(ai); uavJson = CALLBACK_MAPPER.writeValueAsString(uav); } catch (Exception e) { return AjaxResult.error("åä¼ æ°æ®åºåå失败ï¼" + e.getMessage()); } EnvInspection target = null; Long inspectionId = toLong(payload.get("inspectionId")); if (inspectionId != null) { target = envInspectionService.getById(inspectionId); } if (target == null) { com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<EnvInspection> w = new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>(); w.eq(EnvInspection::getArea, area).ne(EnvInspection::getStatus, 3) .orderByDesc(EnvInspection::getId).last("limit 1"); target = envInspectionService.getOne(w, false); } boolean created = false; if (target == null) { target = new EnvInspection(); target.setInspectionName(area + " æºè½å·¡æ£ï¼è®¾å¤åä¼ ï¼"); target.setInspectionType(2); target.setArea(area); target.setStatus(2); target.setPlanStartTime(new Date()); target.setPlanEndTime(new Date()); target.setActualStartTime(new Date()); target.setActualEndTime(new Date()); target.setInspector(deviceCode); target.setRoutePlan("ç± " + deviceType + " èªå¨è§åå¹¶æ§è¡"); target.setInspectionResult("设å¤èªå¨å·¡æ£å·²å®æï¼è¯å«ç»æè¯¦è§åä¼ æ°æ®ã"); target.setTenantId(tenantId); created = true; } target.setAiAnalysis(aiJson); target.setUavData(uavJson); if (target.getStatus() != null && target.getStatus() == 0) { target.setStatus(2); } if (target.getTenantId() == null) { target.setTenantId(tenantId); } // 设å¤åè°æ²¡æç»å½ä¸ä¸æï¼ä¸´æ¶è·³è¿ç§æ·æä»¶ï¼tenant_id å·²å¨ä¸é¢æ¾å¼åå ¥ CustomTenantLineHandler.TEMP_IGNORE.set(Boolean.TRUE); try { if (created) { envInspectionService.save(target); } else { envInspectionService.updateById(target); } } catch (Exception e) { return AjaxResult.error("åä¼ æ°æ®è½åºå¤±è´¥ï¼" + e.getMessage()); } finally { CustomTenantLineHandler.TEMP_IGNORE.remove(); } Map<String, Object> result = new LinkedHashMap<>(); result.put("inspectionId", target.getId()); result.put("created", created); result.put("deviceCode", deviceCode); result.put("deviceType", deviceType); result.put("area", area); return AjaxResult.success("å·¡æ£æ°æ®åä¼ æå", result); } private Long toLong(Object v) { if (v == null) { return null; } try { return Long.valueOf(String.valueOf(v).trim()); } catch (NumberFormatException e) { return null; } } } src/main/java/com/ruoyi/envaccess/controller/EnvWeighbridgeController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package com.ruoyi.envaccess.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.envaccess.pojo.EnvWeighbridgeSystem; import com.ruoyi.envaccess.service.IEnvWeighbridgeSystemService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Map; /** * ç¯ä¿é¨ç¦--æ 人å¼å®å°ç£ 管ç / æ¥è¡¨ä¸å¿ */ @RestController @RequestMapping("/environmentAccess") public class EnvWeighbridgeController { @Resource private IEnvWeighbridgeSystemService envWeighbridgeSystemService; @GetMapping("/weighbridgeSystemPage") public AjaxResult page(Page page, EnvWeighbridgeSystem req) { return AjaxResult.success(envWeighbridgeSystemService.listPage(page, req)); } @GetMapping("/weighbridgeSystemInfo") public AjaxResult info(@RequestParam Long id) { return AjaxResult.success(envWeighbridgeSystemService.getById(id)); } @PostMapping("/weighbridgeSystemAdd") @Log(title = "æ 人å¼å®å°ç£ -æ°å¢", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody EnvWeighbridgeSystem req) { req.setId(null); fillNetWeight(req); LocalDateTime now = LocalDateTime.now(); req.setCreateTime(now); req.setUpdateTime(now); return envWeighbridgeSystemService.save(req) ? AjaxResult.success() : AjaxResult.error("æ°å¢å¤±è´¥"); } @PutMapping("/weighbridgeSystemUpdate") @Log(title = "æ 人å¼å®å°ç£ -ä¿®æ¹", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody EnvWeighbridgeSystem req) { fillNetWeight(req); req.setUpdateTime(LocalDateTime.now()); return envWeighbridgeSystemService.updateById(req) ? AjaxResult.success() : AjaxResult.error("ä¿®æ¹å¤±è´¥"); } @DeleteMapping("/weighbridgeSystemDelete") @Log(title = "æ 人å¼å®å°ç£ -å é¤", businessType = BusinessType.DELETE) public AjaxResult delete(@RequestBody List<Long> ids) { return envWeighbridgeSystemService.removeByIds(ids) ? AjaxResult.success() : AjaxResult.error("å é¤å¤±è´¥"); } /** * æ¯æ¥è¿ç£ ç»è®¡æ¥è¡¨ï¼è½¦æ¬¡ / è´§éå¨ / åå·®çï¼ */ @GetMapping("/weighbridgeDailyReport") public AjaxResult dailyReport(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { List<Map<String, Object>> list = envWeighbridgeSystemService.dailyReport(startDate, endDate); return AjaxResult.success(list); } /** * åé = æ¯é - ç®é */ private void fillNetWeight(EnvWeighbridgeSystem req) { if (req.getNetWeight() == null && req.getGrossWeight() != null && req.getTareWeight() != null) { req.setNetWeight(req.getGrossWeight().subtract(req.getTareWeight()).setScale(2, BigDecimal.ROUND_HALF_UP)); } } } src/main/java/com/ruoyi/envaccess/mapper/EnvWeighbridgeSystemMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.envaccess.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.envaccess.pojo.EnvWeighbridgeSystem; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @Mapper public interface EnvWeighbridgeSystemMapper extends BaseMapper<EnvWeighbridgeSystem> { IPage<EnvWeighbridgeSystem> listPage(Page page, @Param("req") EnvWeighbridgeSystem req); /** * ææ¥èåï¼è½¦æ¬¡ãè´§é(å¨)ãåå·®ç(%) */ List<Map<String, Object>> dailyReport(@Param("startDate") String startDate, @Param("endDate") String endDate); } src/main/java/com/ruoyi/envaccess/pojo/EnvWeighbridgeSystem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ package com.ruoyi.envaccess.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** * ç¯ä¿é¨ç¦--æ 人å¼å®å°ç£ ç§°éè®°å½ * env_weighbridge_system */ @TableName("env_weighbridge_system") @Data public class EnvWeighbridgeSystem implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "车çå·") private String plateNumber; @ApiModelProperty(value = "ç§°éæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime weightTime; @ApiModelProperty(value = "ç®é(kg)") private BigDecimal tareWeight; @ApiModelProperty(value = "æ¯é(kg)") private BigDecimal grossWeight; @ApiModelProperty(value = "åé(kg)") private BigDecimal netWeight; @ApiModelProperty(value = "å离度(1-100)") private Integer positionOffset; @ApiModelProperty(value = "叿ºå§å") private String driverName; @ApiModelProperty(value = "èç³»çµè¯") private String contactPhone; @ApiModelProperty(value = "è´§ç©åç§°") private String cargoName; @ApiModelProperty(value = "å°ç£ ç¼å·") private String weighbridgeNumber; @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å建æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty(value = "å建人") private Long createUser; @ApiModelProperty(value = "æ´æ°æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @ApiModelProperty(value = "æ´æ°äºº") private Long updateUser; @ApiModelProperty(value = "ç§æ·ID") private Long tenantId; } src/main/java/com/ruoyi/envaccess/service/IEnvWeighbridgeSystemService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.envaccess.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.envaccess.pojo.EnvWeighbridgeSystem; import java.util.List; import java.util.Map; public interface IEnvWeighbridgeSystemService extends IService<EnvWeighbridgeSystem> { IPage<EnvWeighbridgeSystem> listPage(Page page, EnvWeighbridgeSystem req); List<Map<String, Object>> dailyReport(String startDate, String endDate); } src/main/java/com/ruoyi/envaccess/service/impl/EnvWeighbridgeSystemServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ruoyi.envaccess.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.envaccess.mapper.EnvWeighbridgeSystemMapper; import com.ruoyi.envaccess.pojo.EnvWeighbridgeSystem; import com.ruoyi.envaccess.service.IEnvWeighbridgeSystemService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class EnvWeighbridgeSystemServiceImpl extends ServiceImpl<EnvWeighbridgeSystemMapper, EnvWeighbridgeSystem> implements IEnvWeighbridgeSystemService { private EnvWeighbridgeSystemMapper envWeighbridgeSystemMapper; @Override public IPage<EnvWeighbridgeSystem> listPage(Page page, EnvWeighbridgeSystem req) { return envWeighbridgeSystemMapper.listPage(page, req); } @Override public List<Map<String, Object>> dailyReport(String startDate, String endDate) { return envWeighbridgeSystemMapper.dailyReport(startDate, endDate); } } src/main/java/com/ruoyi/vehicleInformationCollectionReview/controller/VehicleInformationCollectionController.java
@@ -32,7 +32,7 @@ } // ä¿®æ¹è½¦è¾ä¿¡æ¯ @PutMapping("/vehicleInfoUpdate") public AjaxResult updateRecord(VehicleInformationCollectionReview vehicleInformationCollectionReview){ public AjaxResult updateRecord(@RequestBody VehicleInformationCollectionReview vehicleInformationCollectionReview){ return AjaxResult.success(vehicleInformationCollectionReviewService.updateById(vehicleInformationCollectionReview)); } // å é¤è½¦è¾ä¿¡æ¯ï¼æ¯ææ¹éï¼ src/main/java/com/ruoyi/vehicleInformationCollectionReview/pojo/VehicleInformationCollectionReview.java
@@ -80,6 +80,21 @@ private String fuelType; /** * 车çç §ç */ private String platePhoto; /** * è¡é©¶è¯ç §ç */ private String licensePhoto; /** * 车è¾å ¨æ¯ç §ç */ private String scenePhoto; /** * å®¡æ ¸ç¶æ */ private String reviewStatus; src/main/resources/mapper/envaccess/EnvWeighbridgeSystemMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.ruoyi.envaccess.mapper.EnvWeighbridgeSystemMapper"> <select id="listPage" resultType="com.ruoyi.envaccess.pojo.EnvWeighbridgeSystem"> SELECT * FROM env_weighbridge_system <where> <if test="req.plateNumber != null and req.plateNumber != ''"> AND plate_number LIKE CONCAT('%',#{req.plateNumber},'%') </if> <if test="req.cargoName != null and req.cargoName != ''"> AND cargo_name LIKE CONCAT('%',#{req.cargoName},'%') </if> <if test="req.driverName != null and req.driverName != ''"> AND driver_name LIKE CONCAT('%',#{req.driverName},'%') </if> <if test="req.weighbridgeNumber != null and req.weighbridgeNumber != ''"> AND weighbridge_number = #{req.weighbridgeNumber} </if> </where> ORDER BY weight_time DESC, id DESC </select> <select id="dailyReport" resultType="java.util.Map"> SELECT DATE_FORMAT(weight_time, '%Y-%m-%d') AS date, COUNT(*) AS tripCount, ROUND(SUM(IFNULL(net_weight, IFNULL(gross_weight, 0) - IFNULL(tare_weight, 0))) / 1000, 2) AS cargoVolume, ROUND(AVG(IFNULL(position_offset, 0)), 2) AS deviationRate FROM env_weighbridge_system <where> <if test="startDate != null and startDate != ''"> AND weight_time >= #{startDate} </if> <if test="endDate != null and endDate != ''"> AND weight_time <= #{endDate} </if> </where> GROUP BY DATE_FORMAT(weight_time, '%Y-%m-%d') ORDER BY date </select> </mapper>