Просмотр исходного кода

新增访客预约添加车牌信息到墨轩湖校区停车收费系统逻辑

codingliang 1 год назад
Родитель
Сommit
6036ee26da

+ 1 - 0
src/main/java/com/template/common/result/ResponseStatusEnum.java

@@ -39,6 +39,7 @@ public enum ResponseStatusEnum implements Code{
     SYSTEM_LOGIN_ERROR(401,false,"无效token"),
     PARAM_ERROR(560, false, "参数不能为空!"),
     GZH_ERROR(561, false, "设置失败,请先关联公众号!"),
+    THIRD_API_ERROR(997, false, "第三方api请求失败"),
     DATA_NOT_FOUND(998, false, "数据不存在"),
     EXISTS(999,false,"已存在");
 

+ 60 - 0
src/main/java/com/template/component/ParkingFeeSystemComponent.java

@@ -0,0 +1,60 @@
+package com.template.component;
+
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.template.common.exception.MyCustomException;
+import com.template.common.result.ResponseStatusEnum;
+import com.template.common.utils.CreateSign1;
+import com.template.component.bo.AddVisitorCarBO;
+import com.template.config.ParkingFeeSysOfMxhConfig;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 停车场收费系统组件
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class ParkingFeeSystemComponent {
+
+    private final ParkingFeeSysOfMxhConfig parkingFeeSysOfMxhConfig;
+
+    /**
+     * 墨轩湖小区新增访客车辆
+     * @param addCarRecordBo 新增访客车辆bo
+     */
+    public void addVisitorCarOfMxh(AddVisitorCarBO addCarRecordBo) {
+        String sign = CreateSign1.MD5(JSON.toJSONString(addCarRecordBo) + "key=" + parkingFeeSysOfMxhConfig.getKey()).toUpperCase();
+        Map<String, Object> param = MapUtil.<String, Object>builder()
+                .put("park_id", parkingFeeSysOfMxhConfig.getParkId())
+                .put("service_name", parkingFeeSysOfMxhConfig.getServiceName())
+                .put("sign", sign)
+                .put("data", addCarRecordBo)
+                .build();
+
+        String result;
+        try {
+            result = HttpRequest.post(parkingFeeSysOfMxhConfig.getUrl()).body(JSON.toJSONString(param)).execute().body();
+        } catch (Exception e) {
+            log.error("调用第三方接口异常", e);
+            throw new MyCustomException(ResponseStatusEnum.THIRD_API_ERROR);
+        }
+
+        JSONObject jsonObject = JSON.parseObject(result);
+        String state = jsonObject.getString("state");
+        // 1 表示新增成功
+        if (!StrUtil.equals(state, "1")) {
+            log.error("新增车牌失败,返回信息为:{}", result);
+            throw new MyCustomException(ResponseStatusEnum.THIRD_API_ERROR);
+        }
+    }
+}

+ 36 - 0
src/main/java/com/template/component/bo/AddVisitorCarBO.java

@@ -0,0 +1,36 @@
+package com.template.component.bo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+/**
+ * 新增访客车辆bo
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@Data
+public class AddVisitorCarBO {
+
+    /**
+     * 车牌号
+     */
+    @JSONField(name = "car_number")
+    private String carNumber;
+
+    /**
+     * 手机号
+     */
+    private String mobile;
+
+    /**
+     * 开始时间
+     */
+    @JSONField(name = "begin_time")
+    private String beginTime;
+
+    /**
+     *  结束时间
+     */
+    @JSONField(name = "end_time")
+    private String endTime;
+}

+ 36 - 0
src/main/java/com/template/config/ParkingFeeSysOfMxhConfig.java

@@ -0,0 +1,36 @@
+package com.template.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 墨轩湖校区停车收费系统配置
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "parking.mxh")
+public class ParkingFeeSysOfMxhConfig {
+
+    /**
+     * 密钥
+     */
+    private String key;
+
+    /**
+     * 停车场ID
+     */
+    private String parkId;
+
+    /**
+     * 调用系统名称
+     */
+    private String serviceName;
+
+    /**
+     * 服务地址
+     */
+    private String url;
+}

+ 32 - 0
src/main/java/com/template/services/impl/WelcomeVisitorServiceImpl.java

@@ -9,6 +9,8 @@ import com.template.common.exception.MyCustomException;
 import com.template.common.result.ResponseStatusEnum;
 import com.template.common.utils.BeanUtil;
 import com.template.common.utils.IPageUtil;
+import com.template.component.ParkingFeeSystemComponent;
+import com.template.component.bo.AddVisitorCarBO;
 import com.template.mapper.WelcomeVisitorMapper;
 import com.template.model.pojo.WelcomeVisitor;
 import com.template.model.query.WelcomeVisitorQuery;
@@ -16,15 +18,21 @@ import com.template.model.request.WelcomeVisitorRequest;
 import com.template.model.result.PageUtils;
 import com.template.model.vo.WelcomeVisitorVO;
 import com.template.services.WelcomeVisitorService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 @Service
+@RequiredArgsConstructor
 public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper, WelcomeVisitor> implements WelcomeVisitorService {
 
+    private final ParkingFeeSystemComponent parkingFeeSystemComponent;
+
     @Override
+    @Transactional
     public void addVisitor(WelcomeVisitorRequest visitorRequest) {
         // TODO 获取studyCard
         String studyCard = "";
@@ -44,6 +52,9 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
         visitor.setStudentCard(studyCard);
 
         save(visitor);
+
+        // 新增车辆信息
+        addVisitorCar(visitor);
     }
 
     @Override
@@ -106,6 +117,9 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
         BeanUtils.copyProperties(visitorRequest, visitor);
 
         save(visitor);
+
+        // 新增车辆信息
+        addVisitorCar(visitor);
     }
 
     @Override
@@ -119,4 +133,22 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
         List<WelcomeVisitorVO> welcomeVisitorVOS = BeanUtil.copyListProperties(page.getRecords(), WelcomeVisitorVO::new);
         return new PageUtils<>(welcomeVisitorVOS, (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent());
     }
+
+    /**
+     * 新增车辆信息
+     * @param visitor  访客信息
+     */
+    private void addVisitorCar(WelcomeVisitor visitor) {
+        // 新增车辆信息
+        AddVisitorCarBO addVisitorCarBO = new AddVisitorCarBO();
+        addVisitorCarBO.setCarNumber(visitor.getCarNumber());
+        addVisitorCarBO.setBeginTime(visitor.getStartTime());
+        addVisitorCarBO.setMobile(visitor.getPhone());
+        addVisitorCarBO.setEndTime(visitor.getEndTime());
+        if (StrUtil.equals(visitor.getSchool(), "墨轩湖校区")) {
+            parkingFeeSystemComponent.addVisitorCarOfMxh(addVisitorCarBO);
+        } else {
+            // TODO 黄家湖校区
+        }
+    }
 }

Разница между файлами не показана из-за своего большого размера
+ 8 - 0
src/main/resources/application.yml


+ 30 - 0
src/test/java/com/template/component/ParkingFeeSystemComponentTest.java

@@ -0,0 +1,30 @@
+package com.template.component;
+
+import com.template.component.bo.AddVisitorCarBO;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+/**
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@SpringBootTest
+class ParkingFeeSystemComponentTest {
+
+    @Resource
+    private ParkingFeeSystemComponent parkingFeeSystemComponent;
+
+    @Test
+    void testAddVisitorCarOfMxh() {
+        // 模拟数据
+        AddVisitorCarBO addVisitorCarBO = new AddVisitorCarBO();
+        addVisitorCarBO.setCarNumber("赣A0AY39");
+        addVisitorCarBO.setBeginTime("2025-06-16 10:00:00");
+        addVisitorCarBO.setMobile("18279193722");
+        addVisitorCarBO.setEndTime("2025-06-16 18:00:00");
+
+        parkingFeeSystemComponent.addVisitorCarOfMxh(addVisitorCarBO);
+    }
+}