zhangxin 2 天之前
父节点
当前提交
0ba618ef85
共有 23 个文件被更改,包括 828 次插入29 次删除
  1. 68 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiDuError.java
  2. 187 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiduMapApiHelper.java
  3. 72 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiduSnUtil.java
  4. 42 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoAddressComponent.java
  5. 74 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoCode.java
  6. 20 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoCoordType.java
  7. 12 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoUtil.java
  8. 91 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/JsonUtil.java
  9. 22 0
      national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/RegionSearchModel.java
  10. 0 23
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java
  11. 20 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java
  12. 0 4
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/CourseInfoVO.java
  13. 3 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/OrderVO.java
  14. 9 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppInsureController.java
  15. 90 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/BaiDuApi.java
  16. 3 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/EvaluateController.java
  17. 40 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/BaiduAddress.java
  18. 19 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/BaiduAddressMapper.java
  19. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/BaiduAddressMapper.xml
  20. 1 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/EvaluateMapper.xml
  21. 15 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IBaiduAddressService.java
  22. 28 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/BaiduAddressServiceImpl.java
  23. 7 1
      national-motion-module-system/national-motion-system-start/src/main/resources/application-dev.yml

+ 68 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiDuError.java

@@ -0,0 +1,68 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+
+@Slf4j
+public enum BaiDuError {
+
+
+
+
+    // 成功状态
+    SUCCESS(0,"请求处理成功"),
+
+    // 错误状态(根据表格内容实现)
+    INTERNAL_ERROR(1,"服务器内部错误"),
+
+    INVALID_PARAM(2,"请求参数非法"),
+
+    AUTH_FAILURE(3,"权限校验失败"),
+
+    QUOTA_EXCEEDED(4,"配额校验失败"),
+
+    INVALID_AK(5,"AK不存在或者非法"),
+
+    MISSING_AK(101,"AK参数不存在"),
+
+    IP_BLOCKED(102,"不通过白名单或者安全码不对"),
+
+    SERVICE_DISABLED(240,"APP服务被禁用");
+
+
+    private int code;
+    private String value;
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    BaiDuError(int code, String value) {
+        this.code = code;
+        this.value = value;
+    }
+
+    public static BaiDuError getByType(int code) {
+        if (ObjectUtils.isEmpty(code)) {
+            return null;
+        }
+        for (BaiDuError val : values()) {
+            if (val.getCode() == code) {
+                return val;
+            }
+        }
+        return null;
+    }
+}

+ 187 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiduMapApiHelper.java

@@ -0,0 +1,187 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import lombok.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StreamUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.util.UriUtils;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Slf4j
+@Component
+public class BaiduMapApiHelper {
+
+    final AtomicInteger accessCount = new AtomicInteger(0);
+
+    @Autowired
+    private BaiDuMapConf conf;
+
+
+    /**
+     * 地理编码
+     * https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-base
+     *
+     * @param address
+     * @return
+     */
+    @SneakyThrows
+    public GeoCode geocoding(String address) {
+        log.info("geocoding : {}", address);
+        final String uri = "/geocoding/v3?";
+        final BaiDuMapConf.Key key = nextKey();
+        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
+        params.put("address", address);
+        params.put("output", "json");
+        params.put("ak", key.getAk());
+        final String sn = BaiduSnUtil.sn(uri, params, key.getSk());
+        byte[] bin = requestGet(uri, params, sn);
+        String ret = new String(bin, "UTF-8");
+        GeoCode geoCode = JsonUtil.toObject(ret, GeoCode.class);
+        //默认填充地址
+        if (geoCode!=null){
+            if (geoCode.getResult()!=null){
+                if (!StringUtils.hasText(geoCode.getResult().getFormatted_address())) {
+                    geoCode.getResult().setFormatted_address(address);
+                }
+            }
+        }
+        return geoCode;
+    }
+
+
+    /**
+     * 逆地理编码
+     * https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-geocoding-abroad-base
+     *
+     * @param coordType
+     * @param lng
+     * @param lat
+     * @return
+     */
+    @SneakyThrows
+    public GeoCode reverse_geocoding(GeoCoordType coordType, Double lng, Double lat) {
+        log.info("reverse_geocoding : {},{}", lng, lat);
+        final String uri = "/reverse_geocoding/v3?";
+        final BaiDuMapConf.Key key = nextKey();
+        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
+        params.put("ak", key.getAk());
+        params.put("output", "json");
+        params.put("coordtype", coordType.name());
+        params.put("extensions_poi", "0");
+        params.put("location", lat + "," + lng);
+
+        final String sn = BaiduSnUtil.sn(uri, params, key.getSk());
+        byte[] bin = requestGet(uri, params, sn);
+        String ret = new String(bin, "UTF-8");
+        return JsonUtil.toObject(ret, GeoCode.class);
+    }
+
+
+    @SneakyThrows
+    public RegionSearchModel api_region_search(String keyword, String sub_admin, String extensions_code, String boundary, String boundarycode) {
+        log.info("api_region_search : {},{},{},{},{}", keyword, sub_admin, extensions_code, boundary, boundarycode);
+        final String uri = "/api_region_search/v1/?";
+        final BaiDuMapConf.Key key = nextKey();
+        LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();
+        params.put("ak", key.getAk());
+        params.put("keyword", keyword);
+
+        if (StringUtils.hasText(sub_admin)) {
+            params.put("sub_admin", sub_admin);
+        }
+        if (StringUtils.hasText(extensions_code)) {
+            params.put("extensions_code", extensions_code);
+        }
+        if (StringUtils.hasText(boundary)) {
+            params.put("boundary", boundary);
+        }
+        if (StringUtils.hasText(boundarycode)) {
+            params.put("boundarycode", boundarycode);
+        }
+
+
+        final String sn = BaiduSnUtil.sn(uri, params, key.getSk());
+        byte[] bin = requestGet(uri, params, sn);
+        String ret = new String(bin, "UTF-8");
+        return JsonUtil.toObject(ret, RegionSearchModel.class);
+    }
+
+
+
+    @SneakyThrows
+    private byte[] requestGet(String strUrl, Map<String, String> param, String sn) {
+        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
+            return null;
+        }
+
+        StringBuffer queryString = new StringBuffer();
+        queryString.append(strUrl);
+        for (Map.Entry<?, ?> pair : param.entrySet()) {
+            queryString.append(pair.getKey() + "=");
+            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
+        }
+
+        if (queryString.length() > 0) {
+            queryString.deleteCharAt(queryString.length() - 1);
+        }
+
+        URL url = new URL("https://api.map.baidu.com" + queryString.toString() + "&sn=" + sn);
+        URLConnection httpConnection = url.openConnection();
+        httpConnection.connect();
+
+        @Cleanup InputStream inputStream = httpConnection.getInputStream();
+        return StreamUtils.copyToByteArray(inputStream);
+    }
+
+
+    /**
+     * 后去key
+     *
+     * @return
+     */
+    private synchronized BaiDuMapConf.Key nextKey() {
+        final BaiDuMapConf.Key[] keys = conf.getKeys();
+        if (keys == null || keys.length == 0) {
+            return null;
+        }
+        return keys[accessCount.getAndIncrement() % keys.length];
+    }
+
+
+    @Data
+    @Component
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ConfigurationProperties("baidu.map")
+    public static class BaiDuMapConf {
+
+        // 密钥
+        private Key[] keys;
+
+
+        @Data
+        @Component
+        @NoArgsConstructor
+        @AllArgsConstructor
+        public static class Key {
+
+            // 应用
+            private String ak;
+
+            // 密钥
+            private String sk;
+        }
+
+    }
+
+
+}

+ 72 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/BaiduSnUtil.java

@@ -0,0 +1,72 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import lombok.SneakyThrows;
+
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.LinkedHashMap;
+import java.util.Map.Entry;
+
+public class BaiduSnUtil {
+//    public static void main(String[] args) throws UnsupportedEncodingException,
+//            NoSuchAlgorithmException {
+//        BaiduSnUtil snCal = new BaiduSnUtil();
+//
+//// 计算sn跟参数对出现顺序有关,get请求请使用LinkedHashMap保存<key,value>,该方法根据key的插入顺序排序;post请使用TreeMap保存<key,value>,该方法会自动将key按照字母a-z顺序排序。所以get请求可自定义参数顺序(sn参数必须在最后)发送请求,但是post请求必须按照字母a-z顺序填充body(sn参数必须在最后)。以get请求为例:http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak,paramsMap中先放入address,再放output,然后放ak,放入顺序必须跟get请求中对应参数的出现顺序保持一致。
+//
+//        LinkedHashMap paramsMap = new LinkedHashMap<String, String>();
+//        paramsMap.put("address", "百度大厦");
+//        paramsMap.put("output", "json");
+//        paramsMap.put("ak", "yourak");
+//
+//        // 调用下面的toQueryString方法,对LinkedHashMap内所有value作utf8编码,拼接返回结果address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourak
+//        String paramsStr = snCal.toQueryString(paramsMap);
+//
+//        // 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk得到/geocoder/v2/?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourakyoursk
+//        String wholeStr = new String("/geocoder/v2/?" + paramsStr + "yoursk");
+//
+//        // 对上面wholeStr再作utf8编码
+//        String tempStr = URLEncoder.encode(wholeStr, "UTF-8");
+//
+//        // 调用下面的MD5方法得到最后的sn签名7de5a22212ffaa9e326444c75a58f9a0
+//        System.out.println(snCal.md5(tempStr));
+//        System.out.println(sn(paramsMap, "yoursk"));
+//    }
+
+    // 对Map内所有value作utf8编码,拼接返回结果
+    @SneakyThrows
+    private static String toQueryString(LinkedHashMap<?, ?> data) {
+        StringBuffer queryString = new StringBuffer();
+        for (Entry<?, ?> pair : data.entrySet()) {
+            queryString.append(pair.getKey() + "=");
+            queryString.append(URLEncoder.encode((String) pair.getValue(), StandardCharsets.UTF_8) + "&");
+        }
+        if (queryString.length() > 0) {
+            queryString.deleteCharAt(queryString.length() - 1);
+        }
+        return queryString.toString();
+    }
+
+    // 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制
+    @SneakyThrows
+    private static String md5(String md5) {
+        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
+        byte[] array = md.digest(md5.getBytes());
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < array.length; ++i) {
+            sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
+        }
+        return sb.toString();
+    }
+
+
+    @SneakyThrows
+    public static String sn(String uri, LinkedHashMap<?, ?> paramsMap, String sk) {
+        String paramsStr = toQueryString(paramsMap);
+        String wholeStr = uri + paramsStr + sk;
+        String tempStr = URLEncoder.encode(wholeStr, StandardCharsets.UTF_8);
+        return md5(tempStr);
+    }
+
+
+}

+ 42 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoAddressComponent.java

@@ -0,0 +1,42 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class GeoAddressComponent {
+    private String country;
+
+    private Integer country_code;
+
+    private String country_code_iso;
+
+    private String country_code_iso2;
+
+    private String province;
+
+    private String city;
+
+    private Integer city_level;
+
+    private String district;
+
+    private String town;
+
+    // 城镇的编码
+    private String town_code;
+
+    private String distance;
+
+    private String direction;
+
+    // 当前地址的行政编码
+    private String adcode;
+
+    private String street;
+
+    private String street_number;
+}

+ 74 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoCode.java

@@ -0,0 +1,74 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import com.fasterxml.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.IOException;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class GeoCode {
+    private Integer status;
+
+    private GeoCode.Result result;
+
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class Result {
+        private Integer precise;
+        private Integer confidence;
+        private Integer comprehension;
+        private String level;
+        //经纬度
+        private GeoCode.Result.Location location;
+        //格式化地址
+        private String formatted_address;
+        // 地址组件
+        private GeoAddressComponent addressComponent;
+
+        @Data
+        @AllArgsConstructor
+        @NoArgsConstructor
+        @JsonDeserialize(using = GeoCode.Result.GeoLocationDeserializer.class)
+        public static class Location {
+            private Double lng;
+            private Double lat;
+        }
+
+
+        // 经纬度的精度
+        public static class GeoLocationDeserializer extends StdDeserializer<GeoCode.Result.Location> {
+
+
+            public GeoLocationDeserializer() {
+                this(null);
+            }
+
+            @Override
+            public GeoCode.Result.Location deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
+                JsonNode node = p.getCodec().readTree(p);
+                Double lng = GeoUtil.format(node.get("lng").doubleValue());
+                Double lat = GeoUtil.format(node.get("lat").doubleValue());
+                return new GeoCode.Result.Location(lng.doubleValue(), lat.doubleValue());
+            }
+
+            protected GeoLocationDeserializer(Class<?> vc) {
+                super(vc);
+            }
+
+
+        }
+
+    }
+}

+ 20 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoCoordType.java

@@ -0,0 +1,20 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import lombok.Getter;
+
+public enum GeoCoordType {
+    bd09ll("百度经纬度坐标"),
+    bd09mc("百度米制坐标"),
+    gcj02ll("国测局经纬度坐标,仅限中国"),
+    wgs84ll("GPS经纬度"),
+
+    ;
+
+    @Getter
+    private String remark;
+
+
+    GeoCoordType(String remark) {
+        this.remark = remark;
+    }
+}

+ 12 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/GeoUtil.java

@@ -0,0 +1,12 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+public class GeoUtil {
+
+    public static Double format(Double value) {
+        return new BigDecimal(value).setScale(6, RoundingMode.HALF_UP).doubleValue();
+    }
+
+}

+ 91 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/JsonUtil.java

@@ -0,0 +1,91 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.springframework.util.StreamUtils;
+
+import java.io.InputStream;
+
+/**
+ * json工具
+ *
+ * @作者 练书锋
+ * @联系 oneday@vip.qq.com
+ * @时间 2014年5月17日
+ */
+public class JsonUtil {
+
+    private static ObjectMapper objectMapper = new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+
+    static {
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    }
+
+    /**
+     * 转换到json字符串
+     *
+     * @param object
+     * @return
+     * @throws Exception
+     */
+    public static String toJson(Object object, boolean format) {
+        try {
+            ObjectWriter objectWriter;
+            if (format) {
+                return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
+            } else {
+                return objectMapper.writeValueAsString(object);
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 转换到json字符串
+     *
+     * @param object
+     * @return
+     */
+    public static String toJson(Object object) {
+        return toJson(object, false);
+    }
+
+
+    /**
+     * 转换为对象
+     *
+     * @param json
+     * @param cls
+     * @return
+     * @throws Exception
+     */
+    public static <T> T toObject(String json, Class<T> cls) throws Exception {
+        return objectMapper.readValue(json, cls);
+    }
+
+    /**
+     * 载入文件到对象
+     *
+     * @param configName
+     * @param cls
+     * @return
+     * @throws Exception
+     */
+    public static <T> T loadToObject(String configName, Class<T> cls) throws Exception {
+        T t = null;
+        InputStream inputStream = JsonUtil.class.getClassLoader().getResourceAsStream(configName);
+        byte[] bin = StreamUtils.copyToByteArray(inputStream);
+        String json = new String(bin, "UTF-8");
+        t = toObject(json, cls);
+        inputStream.close();
+        return t;
+    }
+
+
+}

+ 22 - 0
national-motion-base-core/src/main/java/org/jeecg/common/aspect/baiduAddress/RegionSearchModel.java

@@ -0,0 +1,22 @@
+package org.jeecg.common.aspect.baiduAddress;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RegionSearchModel {
+
+
+    @Schema(description ="地址")
+    private String addressName;
+
+    @Schema(description ="经度")
+    private Double longitude;
+    @Schema(description ="纬度")
+    private Double latitude;
+
+}

+ 0 - 23
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java

@@ -1,18 +1,14 @@
 package org.jeecg.modules.app.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.log4j.Log4j2;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.DictAnnotationUtil;
 import org.jeecg.modules.app.service.IDetailService;
 import org.jeecg.modules.app.vo.CourseInfoVO;
 import org.jeecg.modules.app.vo.PlaceInfoVO;
@@ -151,25 +147,6 @@ public class DetailServiceImpl implements IDetailService {
             BeanUtils.copyProperties(appCourses,courseDetailVO);
             courseDetailVOList.add(courseDetailVO);
         });
-        if (StringUtils.isNotEmpty(courseInfoVO.getInsureIds())){
-            List<String> aptitudesList = new ArrayList<>();
-            if (courseInfoVO.getInsureIds().indexOf(",")>0){
-                aptitudesList =  Arrays.asList(courseInfoVO.getInsureIds().split(","));
-            }else {
-                aptitudesList.add(courseInfoVO.getInsureIds());
-            }
-            LambdaQueryWrapper<AppInsure> wrapper = new LambdaQueryWrapper<>();
-            wrapper.in(AppInsure::getId, aptitudesList)
-                    .eq(AppInsure::getStatus,0)
-                    .eq(AppInsure::getDelFlag,0);  // 方法引用 + 集合
-            List<AppInsure> appInsureList = appInsureMapper.selectList(wrapper);
-            DictAnnotationUtil.translateDictList(appInsureList);
-            for (AppInsure appInsure : appInsureList) {
-                List<InsurePrice> insurePrices = insurePriceMapper.selectList(new QueryWrapper<InsurePrice>().lambda().eq(InsurePrice::getInsureId, appInsure.getId()).eq(InsurePrice::getDelFlag, 0));
-                appInsure.setPriceDataList(insurePrices);
-            }
-            courseInfoVO.setInsureIdList(appInsureList);
-        }
 
         courseInfoVO.setCourseDetail(courseDetailVOList);
         return courseInfoVO;

+ 20 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -178,6 +178,26 @@ public class OrderServiceImpl implements IOrderService {
             previousOrderCourse.setSubtotal(appCourses.getSellingPrice());
             previousOrderCourse.setTotalPrice(appCourses.getSellingPrice());
         }
+
+        if (StringUtils.isNotEmpty(appCourses.getInsureIds())){
+            List<String> aptitudesList = new ArrayList<>();
+            if (appCourses.getInsureIds().indexOf(",")>0){
+                aptitudesList =  Arrays.asList(appCourses.getInsureIds().split(","));
+            }else {
+                aptitudesList.add(appCourses.getInsureIds());
+            }
+            LambdaQueryWrapper<AppInsure> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(AppInsure::getId, aptitudesList)
+                    .eq(AppInsure::getStatus,0)
+                    .eq(AppInsure::getDelFlag,0);  // 方法引用 + 集合
+            List<AppInsure> appInsureList = appInsureMapper.selectList(wrapper);
+            DictAnnotationUtil.translateDictList(appInsureList);
+            for (AppInsure appInsure : appInsureList) {
+                List<InsurePrice> insurePrices = insurePriceMapper.selectList(new QueryWrapper<InsurePrice>().lambda().eq(InsurePrice::getInsureId, appInsure.getId()).eq(InsurePrice::getDelFlag, 0));
+                appInsure.setPriceDataList(insurePrices);
+            }
+            previousOrderCourse.setInsureIdList(appInsureList);
+        }
         return previousOrderCourse;
     }
 

+ 0 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/CourseInfoVO.java

@@ -64,10 +64,6 @@ public class CourseInfoVO {
     @Schema(description ="纬度")
     private BigDecimal latitude;
 
-    @Schema(description = "保险")
-    private String  insureIds;
-    @Schema(description = "保险列表")
-    private List<AppInsure>  insureIdList;
 
     @Data
     @Accessors(chain = true)

+ 3 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/OrderVO.java

@@ -77,6 +77,9 @@ public class OrderVO {
         private BigDecimal totalPrice;
         @Schema(description = "提示")
         private String reminder;
+
+        @Schema(description = "保险列表")
+        private List<AppInsure>  insureIdList;
     }
 
     @Data

+ 9 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/AppInsureController.java

@@ -210,4 +210,13 @@ public class AppInsureController extends JeecgController<AppInsure, IAppInsureSe
 		 return Result.OK(list);
 	 }
 
+	@Operation(summary="保险表-列表查询")
+	@GetMapping(value = "/findList")
+	public Result<List<AppInsure>> findList() {
+		LambdaQueryWrapper<AppInsure> query = new LambdaQueryWrapper<>();
+		List<AppInsure> list = appInsureService.list( query
+				.eq(AppInsure::getStatus, 0));
+		DictAnnotationUtil.translateDictList(list);
+		return Result.OK(list);
+	}
 }

+ 90 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/BaiDuApi.java

@@ -0,0 +1,90 @@
+package org.jeecg.modules.system.app.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.utils.UuidUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.baiduAddress.BaiDuError;
+import org.jeecg.common.aspect.baiduAddress.BaiduMapApiHelper;
+import org.jeecg.common.aspect.baiduAddress.GeoCode;
+import org.jeecg.common.aspect.baiduAddress.RegionSearchModel;
+import org.jeecg.modules.system.app.entity.BaiduAddress;
+import org.jeecg.modules.system.app.service.IBaiduAddressService;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Tag(name="百度地图")
+@Slf4j
+@RestController
+@RequestMapping
+public class BaiDuApi {
+
+    @Autowired
+    BaiduMapApiHelper baiduMapApiHelper;
+
+    @Autowired
+    IBaiduAddressService iBaiduAddressService;
+
+
+    @Operation(summary="百度地图-通过地址查询")
+    @GetMapping(value = "/findByAddress")
+    public Result<RegionSearchModel> findByAddress(@RequestParam(name="address",required=true) String address) {
+        if (StringUtils.isEmpty(address)){
+            return Result.error("请求参数地址为空");
+        }
+        BaiduAddress baiduAddress =iBaiduAddressService.findByAddressName(address);
+        GeoCode geocoding =null;
+        if (baiduAddress!=null&&StringUtils.isNotEmpty(baiduAddress.getBaiduResponse())){
+            geocoding = JSONObject.toJavaObject(JSONObject.parseObject(baiduAddress.getBaiduResponse()), GeoCode.class);
+        }else {
+            geocoding = baiduMapApiHelper.geocoding(address);
+
+            if (geocoding==null){
+                return Result.error("经纬度获取失败,请联系管理员");
+            }else if (geocoding.getStatus()!=0){
+                BaiDuError byType = BaiDuError.getByType(geocoding.getStatus());
+                if (byType!=null){
+                    return Result.error(geocoding.getStatus(), byType.getValue());
+                }else {
+                    return Result.error(geocoding.getStatus(), "未知错误信息联系管理员");
+                }
+            }else {
+                String baiduResponse = JSONObject.toJSONString(geocoding);
+                BaiduAddress baiduAddressNew = new BaiduAddress();
+                baiduAddressNew.setId(UuidUtils.getUUID());
+                baiduAddressNew.setAddressName(address);
+                baiduAddressNew.setBaiduResponse(baiduResponse);
+                iBaiduAddressService.save(baiduAddressNew);
+            }
+        }
+
+        RegionSearchModel regionSearchModel = getRegionSearchModel(geocoding,address);
+        if (regionSearchModel==null||ObjectUtils.isEmpty(regionSearchModel.getLatitude())||ObjectUtils.isEmpty(regionSearchModel.getLongitude())){
+            return Result.error("经纬度获取失败");
+        }
+        return Result.OK(regionSearchModel);
+    }
+
+    public RegionSearchModel getRegionSearchModel(GeoCode geocoding,String addressName) {
+        RegionSearchModel regionSearchModel = new RegionSearchModel();
+        regionSearchModel.setAddressName(addressName);
+        if (geocoding.getResult()!=null&&geocoding.getResult().getLocation()!=null){
+            if (ObjectUtils.isNotEmpty(geocoding.getResult().getLocation().getLat())){
+                regionSearchModel.setLatitude(geocoding.getResult().getLocation().getLat());
+            }
+            if (ObjectUtils.isNotEmpty(geocoding.getResult().getLocation().getLng())){
+                regionSearchModel.setLongitude(geocoding.getResult().getLocation().getLng());
+            }
+        }
+        return regionSearchModel;
+    }
+}

+ 3 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/EvaluateController.java

@@ -95,6 +95,7 @@ public class EvaluateController extends JeecgController<Evaluate, IEvaluateServi
 	 */
 	@AutoLog(value = "评价管理-编辑")
 	@Operation(summary="评价管理-编辑")
+	@RequiresPermissions("evaluate:evaluate:edit")
 	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
 	public Result<String> edit(@RequestBody Evaluate evaluate) {
 		Subject subject = SecurityUtils.getSubject();
@@ -166,7 +167,9 @@ public class EvaluateController extends JeecgController<Evaluate, IEvaluateServi
 	 * @param auditRequestDTO
 	 * @return
 	 */
+	@AutoLog(value = "评价管理-审核")
 	@Operation(summary="评价管理-审核")
+	@RequiresPermissions("evaluate:evaluate:audit")
 	@PostMapping(value = "/audit")
 	public Result<String> audit(@RequestBody AuditRequestDTO auditRequestDTO) {
 		Subject subject = SecurityUtils.getSubject();

+ 40 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/BaiduAddress.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.system.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+/**
+ * @Description: nm_baidu_address
+ * @Author: jeecg-boot
+ * @Date:   2025-08-04
+ * @Version: V1.0
+ */
+@Data
+@TableName("nm_baidu_address")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="nm_baidu_address")
+public class BaiduAddress implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "id")
+    private String id;
+	/**地址名称*/
+	@Excel(name = "地址名称", width = 15)
+    @Schema(description = "地址名称")
+    private String addressName;
+	/**百度地图返回参数*/
+	@Excel(name = "百度地图返回参数", width = 15)
+    @Schema(description = "百度地图返回参数")
+    private String baiduResponse;
+}

+ 19 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/BaiduAddressMapper.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.system.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.system.app.entity.BaiduAddress;
+
+/**
+ * @Description: nm_baidu_address
+ * @Author: jeecg-boot
+ * @Date:   2025-08-04
+ * @Version: V1.0
+ */
+public interface BaiduAddressMapper extends BaseMapper<BaiduAddress> {
+
+
+    @Select("select * from nm_baidu_address where address_name =#{address}")
+    BaiduAddress findByAddressName(@Param("address") String address);
+}

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/BaiduAddressMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.system.app.mapper.BaiduAddressMapper">
+
+</mapper>

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/EvaluateMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="org.jeecg.modules.system.app.mapper.EvaluateMapper">
 
     <select id="findPage" resultType="org.jeecg.modules.system.app.dto.evaluate.FindEvaluateResponseDTO">
-        select
+        select ne.id,
             ne.score,ne.evaluate_content,su.avatar,ne.images,ne.check_status,ne.reply_status,ne.reply_content,ne.reply_time,ne.type,ne.create_time,sd.depart_name,ns.address,su.username,su.phone
         from nm_evaluate ne
         left join  sys_depart sd on  ne.dept_id = sd.id

+ 15 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IBaiduAddressService.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.system.app.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.entity.BaiduAddress;
+
+/**
+ * @Description: nm_baidu_address
+ * @Author: jeecg-boot
+ * @Date:   2025-08-04
+ * @Version: V1.0
+ */
+public interface IBaiduAddressService extends IService<BaiduAddress> {
+
+    BaiduAddress findByAddressName(String address);
+}

+ 28 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/BaiduAddressServiceImpl.java

@@ -0,0 +1,28 @@
+package org.jeecg.modules.system.app.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.system.app.entity.BaiduAddress;
+import org.jeecg.modules.system.app.mapper.BaiduAddressMapper;
+import org.jeecg.modules.system.app.service.IBaiduAddressService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: nm_baidu_address
+ * @Author: jeecg-boot
+ * @Date:   2025-08-04
+ * @Version: V1.0
+ */
+@Service
+public class BaiduAddressServiceImpl extends ServiceImpl<BaiduAddressMapper, BaiduAddress> implements IBaiduAddressService {
+
+
+    @Autowired
+    BaiduAddressMapper baiduAddressMapper;
+
+    @Override
+    public BaiduAddress findByAddressName(String address) {
+        return baiduAddressMapper.findByAddressName(address);
+    }
+}

+ 7 - 1
national-motion-module-system/national-motion-system-start/src/main/resources/application-dev.yml

@@ -339,4 +339,10 @@ wx:
         secret: 8df754e6d36a7f0ac26f108f1607beff
         token: #微信小程序消息服务器配置的token
         aesKey: #微信小程序消息服务器配置的EncodingAESKey
-        msgDataFormat: JSON
+        msgDataFormat: JSON
+
+baidu:
+  map:
+    keys:
+      - ak: muOeefnWVcMymKORaYmGVNEx9ZtCsOoS
+        sk: ZDoHSoYoTvynHB6Gw3SxVQ7KpgcoLNJs