Procházet zdrojové kódy

Merge branch 'master' of https://e.coding.net/chuanghaikeji/smarCampus/backend_dormitory

夏文涛 před 1 rokem
rodič
revize
0d7489e45f

+ 8 - 6
src/main/java/com/template/api/WelcomeStudentDormitoryControllerAPI.java

@@ -3,17 +3,19 @@ package com.template.api;
 import com.template.model.pojo.WelcomeStudentDormitory;
 import com.template.model.result.CommonResult;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-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.*;
 
 @RequestMapping("/api/welcome-student-dormitory")
 public interface WelcomeStudentDormitoryControllerAPI {
 
-    @PostMapping(value = "/saveStudent")
+    @PostMapping(value = "/saveStudentDormitory")
     @ApiOperation(value = "添加床位", notes = "添加床位", httpMethod = "POST")
-    CommonResult saveStudent(@RequestBody WelcomeStudentDormitory welcomeStudentDormitory);
+    CommonResult saveStudentDormitory(@RequestBody WelcomeStudentDormitory welcomeStudentDormitory);
+
+
+    @GetMapping(value = "/deleteStudentDormitory")
+    @ApiOperation(value = "删除床位", notes = "删除床位", httpMethod = "GET")
+    CommonResult deleteStudentDormitory(@RequestParam Integer studentDormitoryId);
 
 
     @PostMapping(value = "/submit")

+ 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;
+}

+ 15 - 2
src/main/java/com/template/controller/WelcomeStudentDormitoryController.java

@@ -47,8 +47,21 @@ public class WelcomeStudentDormitoryController implements WelcomeStudentDormitor
     WelcomeDormitoryService welcomeDormitoryService;
 
     @Override
-    public CommonResult saveStudent(WelcomeStudentDormitory welcomeStudentDormitory) {
-        return null;
+    public CommonResult saveStudentDormitory(WelcomeStudentDormitory welcomeStudentDormitory) {
+        LambdaQueryWrapper<WelcomeStudentDormitory> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(WelcomeStudentDormitory::getStudentCard,welcomeStudentDormitory.getStudentCard());
+        WelcomeStudentDormitory one = welcomeStudentDormitoryService.getOne(wrapper);
+        if (ObjectUtils.isNotEmpty(one)) {
+            return CommonResult.fail("该学生已有床位");
+        }
+        welcomeStudentDormitoryService.save(welcomeStudentDormitory);
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult deleteStudentDormitory(Integer studentDormitoryId) {
+        welcomeStudentDormitoryService.removeById(studentDormitoryId);
+        return CommonResult.ok();
     }
 
     @Override

+ 0 - 1
src/main/java/com/template/controller/WelcomeVisitorController.java

@@ -13,7 +13,6 @@ import com.template.services.WelcomeVisitorService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Arrays;
 import java.util.List;
 
 /**

+ 3 - 0
src/main/java/com/template/model/pojo/WelcomeStudentDormitory.java

@@ -37,6 +37,9 @@ public class WelcomeStudentDormitory implements Serializable {
     @ApiModelProperty(value = "学生身份证号")
     private String studentCard;
 
+    @ApiModelProperty(value = "录取号")
+    private String admissNum;
+
     @ApiModelProperty(value = "楼栋")
     private String building;
 

+ 2 - 0
src/main/java/com/template/model/request/WelcomeVisitorRequest.java

@@ -40,6 +40,7 @@ public class WelcomeVisitorRequest implements Serializable {
 
     @ApiModelProperty(value = "校区名称")
     @NotBlank(message = "校区名称不能为空")
+    @Pattern(regexp = "^(墨轩湖校区|黄家湖校区)$", message = "校区名称只能为墨轩湖校区或黄家湖校区")
     private String school;
 
     @ApiModelProperty(value = "到访开始时间")
@@ -65,3 +66,4 @@ public class WelcomeVisitorRequest implements Serializable {
     @NotBlank(message = "访问事由不能为空")
     private String visitorReason;
 }
+

+ 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 黄家湖校区
+        }
+    }
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 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);
+    }
+}