wlzboy
2025-09-20 b62bc392f3c1658381107be1d5f737a3389e7f5f
ruoyi-common/src/main/java/com/ruoyi/common/utils/civilAviation/ServiceOrderUtil.java
@@ -4,12 +4,16 @@
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.domain.entity.ServiceOrderAppVo;
import com.ruoyi.common.core.domain.entity.ServiceOrderAppResultVo;
import com.ruoyi.common.core.domain.entity.ServiceOrderDelResultVo;
import com.ruoyi.common.core.domain.entity.ServiceOrderDelVo;
import com.ruoyi.common.utils.http.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.net.URLEncoder;
@@ -19,9 +23,19 @@
/**
 * 民航医疗接口处理
 */
@Component
public class ServiceOrderUtil {
    private static final Logger log = LoggerFactory.getLogger(ServiceOrderUtil.class);
    public static String AddServiceOrederAPI = "http://localhost:8011/v1/";
    private static String addServiceOrederAPI;
    @Value("${min.apiUrl}")
    public void setAddServiceOrederAPI(String apiUrl) {
        ServiceOrderUtil.addServiceOrederAPI = apiUrl;
    }
    public static String getAddServiceOrederAPI() {
        return addServiceOrederAPI;
    }
    /**
     * 创建服务单
@@ -29,14 +43,16 @@
     * @param model 服务单应用值对象
     * @return 服务单接口调用结果
     */
    public static ServiceOrderAppResultVo CreateServiceOrder(ServiceOrderAppVo model) {
        if (AddServiceOrederAPI.isEmpty()) {
            log.info("AddServiceOrederAPI 未设置,请先设置接口地址。");
    public static ServiceOrderAppResultVo CreateServiceOrder(ServiceOrderAppVo model,String appSecret) {
        if (addServiceOrederAPI.isEmpty()) {
            // log.info("AddServiceOrederAPI 未设置,请先设置接口地址。");
            return null;
        }
        log.info("接口地址:"+addServiceOrederAPI);
        //计算时间戳和签名
        long unixTime = System.currentTimeMillis() / 1000; // 获取当前时间戳(秒)
        long unixTime = System.currentTimeMillis() / 1000; // 获取当前时间戳(秒)  Long.valueOf("1746444543") ;//
        model.setUnixTime(unixTime); // 设置时间戳到模型中
        // 将 model 转换为 Map<String, String>
@@ -47,15 +63,28 @@
            try {
                Object value = field.get(model);
                if (value != null) {
                    params.put(field.getName(), value.toString());
                    // 将字段名首字母大写
                    String fieldName = field.getName();
                    String capitalizedFieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                    if(fieldName.contains("method"))
                    {
                        capitalizedFieldName = fieldName;
                    }
                    params.put(capitalizedFieldName,URLEncoder.encode(value.toString(), StandardCharsets.UTF_8.toString()));
                }
            } catch (IllegalAccessException e) {
                log.error("获取对象属性值时出错", e);
                // log.error("获取对象属性值时出错", e);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
        model.setSign(ServiceOrderSign.generateSign(params)); // 生成签名并设置到模型中
        model.setSign(ServiceOrderSign.generateSign(params,appSecret)); // 生成签名并设置到模型中
        log.info("Sign值="+model.getSign());
        // 替换为
        StringBuilder formData = new StringBuilder();
@@ -70,29 +99,38 @@
                    }
                    // 将字段名首字母大写
                    String fieldName = field.getName();
                    String capitalizedFieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                    if(fieldName.contains("method"))
                    {
                        capitalizedFieldName = fieldName;
                    }
                    formData.append(capitalizedFieldName)
                           .append("=")
                           .append(value.toString());
                            .append("=")
                            .append(URLEncoder.encode(value.toString(), StandardCharsets.UTF_8.toString()));
                }
            } catch (Exception e) {
                log.error("拼接表单数据时出错", e);
                // log.error("拼接表单数据时出错", e);
            }
        }
        String responseData = HttpUtils.sendPost(AddServiceOrederAPI, formData.toString(), "application/x-www-form-urlencoded");
        log.info("请求参数="+formData.toString());
        String responseData = HttpUtils.sendPost(addServiceOrederAPI, formData.toString(), "application/x-www-form-urlencoded");
        if (responseData != null && !responseData.isEmpty()) {
            log.info("接口响应: " + responseData);
            // log.info("接口响应: " + responseData);
            try {
                // 使用 FastJSON 将响应数据转换为 ServiceOrderAppResultVo 对象
                return JSON.parseObject(responseData, ServiceOrderAppResultVo.class);
            } catch (Exception e) {
                log.info("解析接口响应数据失败: " + e.getMessage());
                // log.info("解析接口响应数据失败: " + e.getMessage());
            }
        } else {
            log.info("接口调用失败,未获取到有效响应数据");
            // log.info("接口调用失败,未获取到有效响应数据");
        }
        return null;
@@ -105,9 +143,9 @@
     * @param model 服务订单删除请求值对象
     * @return 服务订单删除接口调用结果
     */
    public static ServiceOrderAppResultVo CancelServiceOrder(ServiceOrderDelVo model) {
        if (AddServiceOrederAPI.isEmpty()) {
            log.info("AddServiceOrederAPI 未设置,请先设置接口地址。");
    public static ServiceOrderDelResultVo CancelServiceOrder(ServiceOrderDelVo model,String appSecret) {
        if (addServiceOrederAPI.isEmpty()) {
            // log.info("AddServiceOrederAPI 未设置,请先设置接口地址。");
            return null;
        }
@@ -123,14 +161,23 @@
            try {
                Object value = field.get(model);
                if (value != null) {
                    params.put(field.getName(), value.toString());
                    // 将字段名首字母大写
                    String fieldName = field.getName();
                    String capitalizedFieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                    if(fieldName.contains("method"))
                    {
                        capitalizedFieldName = fieldName;
                    }
                    params.put(capitalizedFieldName,URLEncoder.encode(value.toString(), StandardCharsets.UTF_8.toString()));
                }
            } catch (IllegalAccessException e) {
                log.error("获取对象属性值时出错", e);
                // log.error("获取对象属性值时出错", e);
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }
        }
        model.setSign(ServiceOrderSign.generateSign(params));
        model.setSign(ServiceOrderSign.generateSign(params,appSecret));
        // 构建表单数据
        StringBuilder formData = new StringBuilder();
@@ -145,26 +192,31 @@
                    }
                    // 将字段名首字母大写
                    String fieldName = field.getName();
                    formData.append(fieldName)
                           .append("=")
                           .append(value.toString());
                    String capitalizedFieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                    if(fieldName.contains("method"))
                    {
                        capitalizedFieldName = fieldName;
                    }
                    formData.append(capitalizedFieldName)
                            .append("=")
                            .append(URLEncoder.encode(value.toString(), StandardCharsets.UTF_8.toString()));
                }
            } catch (Exception e) {
                log.error("拼接表单数据时出错", e);
                // log.error("拼接表单数据时出错", e);
            }
        }
        String responseData = HttpUtils.sendPost(AddServiceOrederAPI, formData.toString(), "application/x-www-form-urlencoded");
        String responseData = HttpUtils.sendPost(addServiceOrederAPI, formData.toString(), "application/x-www-form-urlencoded");
        if (responseData != null && !responseData.isEmpty()) {
            log.info("接口响应: " + responseData);
            // log.info("接口响应: " + responseData);
            try {
                return JSON.parseObject(responseData, ServiceOrderAppResultVo.class);
                return JSON.parseObject(responseData, ServiceOrderDelResultVo.class);
            } catch (Exception e) {
                log.info("解析接口响应数据失败: " + e.getMessage());
                // log.info("解析接口响应数据失败: " + e.getMessage());
            }
        } else {
            log.info("接口调用失败,未获取到有效响应数据");
            // log.info("接口调用失败,未获取到有效响应数据");
        }
        return null;
@@ -173,9 +225,9 @@
    public static void main(String[] args) {
        // 创建服务单应用值对象并设置相关模拟属性
//        test();
        test();
        testCancelServiceOrder();
//        testCancelServiceOrder();
    }
    //测试取消服务单
@@ -188,8 +240,8 @@
        model.setDELRemarks("测试");
        // 调用 CancelServiceOrder 方法取消服务单
        ServiceOrderAppResultVo result = CancelServiceOrder(model);
        System.out.println("1");
//        ServiceOrderAppResultVo result = CancelServiceOrder(model);
//        System.out.println("1");
    }
    public static  void test()
@@ -211,8 +263,8 @@
         model.setPtAge((int) (Math.random() * 100) + "岁"); // 随机生成患者年龄
         model.setPtSex(Math.random() > 0.5 ? "男" : "女"); // 随机生成患者性别
         model.setPtNat("中国"); // 随机设置患者国籍
         model.setOutHosp("随机转出医院" + (int) (Math.random() * 10)); // 随机设置转出医院
         model.setInHosp("随机转入医院" + (int) (Math.random() * 10)); // 随机设置转入医院
         model.setOutHosp("广州天河"); // 随机设置转出医院
         model.setInHosp("广州海珠"); // 随机设置转入医院
         model.setPtServices("科室" + (int) (Math.random() * 10)); // 随机设置患者所在科室
         model.setPtDiagnosis("随机诊断信息"); // 随机设置诊断信息
         model.setCondition("随机备注信息"); // 随机设置备注信息
@@ -224,7 +276,7 @@
         model.setPayQRcodeURL("https://example.com/qrcode/" + (int) (Math.random() * 100)); // 随机生成外部支付二维码链接
         // 调用 CreateServiceOrder 方法创建服务单
         ServiceOrderAppResultVo result = CreateServiceOrder(model);
//         ServiceOrderAppResultVo result = CreateServiceOrder(model);
    }
    
}