فهرست منبع

洗车机主板配置

skyline 1 سال پیش
والد
کامیت
4788d9bc53

+ 57 - 1
car-wash-admin/src/main/java/com/kym/admin/controller/DeviceConfigController.java

@@ -1,5 +1,15 @@
 package com.kym.admin.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.kym.common.R;
+import com.kym.common.annotation.SysLog;
+import com.kym.common.controller.IController;
+import com.kym.entity.DeviceConfig;
+import com.kym.entity.queryParams.DeviceConfigParams;
+import com.kym.service.DeviceConfigService;
+import jakarta.validation.Valid;
+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.RestController;
 
@@ -13,6 +23,52 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/device-config")
-public class DeviceConfigController {
+public class DeviceConfigController extends IController {
+
+    private final DeviceConfigService deviceConfigService;
+
+    public DeviceConfigController(DeviceConfigService deviceConfigService) {
+        this.deviceConfigService = deviceConfigService;
+    }
+
+    /**
+     * 新增设备配置
+     *
+     * @param deviceConfig
+     * @return Res
+     */
+    @SaCheckPermission(value = "deviceConfig.add")
+    @PostMapping("add")
+    @SysLog(value = "新增设备配置")
+    public R<?> add(@Valid @RequestBody DeviceConfig deviceConfig) {
+        return resp((t) -> deviceConfigService.add(deviceConfig));
+    }
+
+    /**
+     * 更新设备配置
+     *
+     * @param deviceConfig
+     * @return Res
+     */
+    @SaCheckPermission(value = "deviceConfig.modify")
+    @PostMapping("modify")
+    @SysLog(value = "更新设备配置")
+    public R<?> modify(@Valid @RequestBody DeviceConfig deviceConfig) {
+        return resp((t) -> deviceConfigService.modify(deviceConfig));
+    }
+
+    /**
+     * 批量更新设备的配置
+     *
+     * @param params
+     * @return Res
+     */
+//    @SaCheckPermission(value = "deviceConfig.modify")
+    @PostMapping("batchModify")
+    @SysLog(value = "批量更新设备配置")
+    public R<?> batchModify(@Valid @RequestBody DeviceConfigParams params) {
+        return resp((t) -> deviceConfigService.batchModify(params));
+    }
+
 
 }

+ 2 - 2
car-wash-admin/src/main/java/com/kym/admin/controller/WashDeviceController.java

@@ -59,8 +59,8 @@ public class WashDeviceController {
     @SaCheckPermission("washDevice.modify")
     @SysLog("修改")
     @PostMapping("modify")
-    R<?> modify(@RequestBody WashDevice station) {
-        washDeviceService.modify(station);
+    R<?> modify(@RequestBody WashDevice washDevice) {
+        washDeviceService.modify(washDevice);
         return R.success();
     }
 

+ 9 - 0
car-wash-admin/src/main/resources/application.yml

@@ -104,3 +104,12 @@ password:
  privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM1zhmu+TcTSZSQ7w0541g45o8ji4ugEC4O31GnS6tfvLTCru+9DPK2/DNdd4z1enz2PuDhktHuoEsEKPdA08fRJSMTXLL0pUEp2OQ+t7tZP6mVLvizasnP+HKAqIndXFr5nXm/okQfL/f/6L2Bben9sItoxC28Z6Y28NfAJPAg1AgMBAAECgYAKOdvQ9RHt4AMEwKzB9SXCY4AReamNntXr4nSCJ+tkgBUhvQqHqDMW+tFqztOGtHT8nXCv7eNF3GHClf3ppRj91utk8zAwZPVAVlRoNcWs60nyKRUO2uhwAV8AE+9UKDoVui7L7UaMcIkssKqQbFGIRXUjjSoPJu0yoHCdp5/3QQJBAOZTbfgmFXVgRSH4IMXJ3aZOqz+Wy3EmvNatYz8NYLBFgLJTWWXtR7URw82R7jL6F9ettfCityhAmXEZnZsEsokCQQDkWkYwFZlUYJ2ctdNEmipXw8tjpCrzQRaZnydXbjviwbSpOvOo5nrxSG5BtL9QDwiy9DL7YLBVJPykAkJm3m1NAkBn2SQTJ7CzLIXfLA4yv7LFYmEKGcZ+rRWlwaWm7zQyJhRB0xzSvSqAtJLRJEP/Dg4j+7m11te4OXA1s3QBShvpAkEAq50gpKCG5D/cE9seVK9b5SuTnmXRlZE0D+3pXi7NOOSFBq30UtosSUs6+YyCPwOdcQhPjFYlD0hFymicSL0e/QJBAOMQaABh/6BcVimWP284x/WxBQ83zzVhcl7fUyqcFvfAw1JeMmRxvm2CWYKQ9MIhQ/9ptFotRCSwMAdJTZceWys=
  publicKey: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNc4Zrvk3E0mUkO8NOeNYOOaPI4uLoBAuDt9Rp0urX7y0wq7vvQzytvwzXXeM9Xp89j7g4ZLR7qBLBCj3QNPH0SUjE1yy9KVBKdjkPre7WT+plS74s2rJz/hygKiJ3Vxa+Z15v6JEHy/3/+i9gW3p/bCLaMQtvGemNvDXwCTwINQIDAQAB
 
+aliyun:
+  lot:
+    accessKey: LTAI5tNhD2KFuLUN1hMEukmS
+    accessSecret: dtVF6na8Hp9W8DmAoWI9k24VXwjNyM
+    consumerGroupId: DEFAULT_GROUP
+    iotInstanceId: iot-06z00hb4ys0z7ri
+    clientId: car-wash-01
+    ampq-host: iot-06z00hb4ys0z7ri.amqp.iothub.aliyuncs.com
+    mns-host: http://1757940634296846.mns.cn-shanghai.aliyuncs.com

+ 34 - 3
car-wash-entity/src/main/java/com/kym/entity/DeviceConfig.java

@@ -1,11 +1,13 @@
 package com.kym.entity;
 
+import com.alibaba.fastjson2.annotation.JSONField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.kym.entity.BaseEntity;
-import java.io.Serializable;
+import com.google.gson.annotations.Expose;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 洗车设备参数配置表
@@ -17,18 +19,43 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_device_config")
-public class DeviceConfig extends BaseEntity {
+public class DeviceConfig {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 公司(租户)ID
+     */
+    private Long companyId;
+
+    /**
+     * 创建时间
+     */
+    @Expose
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @Expose
+    private LocalDateTime updateTime;
+
+
     /**
      * 屏幕左下方文本
      */
+    @JSONField(name = "user_message1")
     private String userMessage1;
 
     /**
      * 屏幕右下方文本
      */
+    @JSONField(name = "user_message2")
     private String userMessage2;
 
     /**
@@ -124,11 +151,13 @@ public class DeviceConfig extends BaseEntity {
     /**
      * 时间段1:"08:00 - 12:00" 上午8点到中午12点营业
      */
+    @JSONField(name = "work_time_period1")
     private String workTimePeriod1;
 
     /**
      * 时间段2:"14:00 - 21:00" 下午2点到晚上9点营业
      */
+    @JSONField(name = "work_time_period2")
     private String workTimePeriod2;
 
     /**
@@ -139,11 +168,13 @@ public class DeviceConfig extends BaseEntity {
     /**
      * 时间段1:"18:00 - 22:00" 下午6点到晚上10点打开照明
      */
+    @JSONField(name = "light_time_period1")
     private String lightTimePeriod1;
 
     /**
      * 时间段2:"18:00 - 08:00" 下午6点到早上8点打开照明
      */
+    @JSONField(name = "light_time_period2")
     private String lightTimePeriod2;
 
     /**

+ 0 - 192
car-wash-entity/src/main/java/com/kym/entity/awoara/Config.java

@@ -1,192 +0,0 @@
-package com.kym.entity.awoara;
-
-import com.alibaba.fastjson2.annotation.JSONField;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-/**
- * 参数配置项
- */
-@Data
-@Accessors(chain = true)
-public class Config {
-    /**
-     * 维护模式
-     * 0 未设置
-     * 1 已设置(屏幕显⽰设备维护界⾯)
-     */
-    private Integer maintenance_mode;
-    /**
-     * ⽤户⾃定义信息,屏幕左下⾓文本,可以显⽰公司名称、维护电话、客服电话等
-     */
-    @JSONField(name = "user_message.1")
-    private String user_message_1;
-    @JSONField(name = "user_message.2")
-    private String user_message_2;
-    /**
-     * 是否安装了⽔流量传感器
-     */
-    private String sensor_water;
-    /**
-     * ⻋位或场地单价(单位:分/分钟)。
-     */
-    private int price_space;
-    /**
-     * 清⽔单价(单位:分/分钟)。
-     */
-    private int price_water;
-    /**
-     * 泡沫单价(单位:分/分钟)。
-     */
-    private int price_foam;
-    /**
-     * ⽔龙头单价(单位:分/分钟)。
-     */
-    private int price_tap;
-    /**
-     * 吸尘器单价(单位:分/分钟)
-     */
-    private int price_cleaner;
-    /**
-     * ⽤户扩展功能单价(消毒、吹⼲等,单位:分/分钟)。
-     */
-    private int price_user_ext;
-    /**
-     * 镀膜的单价(单位:分/分钟)。
-     */
-    private int price_coat;
-    /**
-     * 吹⽓的单价(单位:分/分钟)。
-     */
-    private int price_blow;
-    /**
-     * 空闲超时,多久不操作设备(⽤户开关功能重新开始倒计时),那么就认为⽤户已离开,直接关闭设备(单位:秒)
-     */
-    private int idle_timeout;
-    /**
-     * 操作超时,订单开始之后多久强制关闭,也就是⽤户必须要再多⻓时间内洗完⻋(单位:秒)
-     */
-    private int operation_timeout;
-    /**
-     * 快速开机⾦额,按机箱内部的维护按键直接开机(设置为0可以关闭这个功能)
-     */
-    private int quick_open_money;
-    /**
-     * 营业时间段控制模块的⼯作模式
-     * 0 全天24⼩时暂停营业
-     * 1 全天24⼩时营业
-     * 2 由时间段控制营业时间,不在营业时间段⽆法开机,屏幕显⽰营业时间信息
-     * 例如: 上午营业 "work_time_period.1" = "08:00 - 12:00"和下午营业"work_time_period.2 = "13:30 - 20:00"
-     */
-    private Integer work_mode;
-    /**
-     * 营业时间段1,24⼩时制,程序会处理跨凌晨的情况
-     */
-    @JSONField(name = "work_time_period.1")
-    private String work_time_period_1;
-    @JSONField(name = "work_time_period.2")
-    private String work_time_period_2;
-    /**
-     * 照明时间段控制模块的⼯作模式
-     * 0 全天24⼩时关闭照明
-     * 1 全天24⼩时开启照明
-     * 2 由时间段控制开灯时间
-     */
-    private Integer light_mode;
-    /**
-     * 照明时间段1,参考营业时间段配置
-     */
-    @JSONField(name = "ight_time_period.1")
-    private String light_time_period_1;
-    @JSONField(name = "ight_time_period.2")
-    private String light_time_period_2;
-    /**
-     * 声音音量(0~100)
-     */
-    private int sound_volume;
-    /**
-     * 屏幕类型(0:不⽀持视频播放的屏幕,1:⽀持视频播放的屏幕,两种屏型号不同,填写错误会导致没有语⾳。)
-     */
-    private int screen_type;
-    /**
-     * 视频源(0:内置视频,1:TF卡内的视频,2:U盘内的视频)
-     */
-    private Integer video_source;
-    /**
-     * 视频播放延时(单位秒)。设备空闲多久开始循环播放⼴告视频。
-     */
-    private int video_play_delay;
-    /**
-     * 订单结束时延时过久关闭⼯作指⽰灯(单位秒)。
-     */
-    private int work_light_delay;
-    /**
-     * 洗⻋结束后,费⽤明细⻚⾯显⽰多久(单位秒)。
-     */
-    private int bill_delay;
-    /**
-     * 如果有参数出现错误,这⾥给出提⽰信息。
-     */
-    private String errors;
-    /**
-     * 空闲关机倒计时剩余时间⼩于这个数字,发出提⽰⾳(正在倒计时关机,请按任意功能键阻⽌关机)
-     */
-    private int notice_throshold_idle;
-    /**
-     * 操作时间倒计时剩余时间⼩于这个数字,发出提⽰⾳(您的洗⻋时间剩余不多了,请合理使⽤)
-     */
-    private int notice_throshold_operation;
-    /**
-     * 0:流量不能启动电机();1:有⽔流量的时候启动⾃动启动电机(兼容老客户,新客户请忽略该参数,请不要发送这个参数给板⼦。)。
-     */
-//    private Integer motor_mode;
-    /**
-     * 电机启动最少要⼯作多⻓时间(单位毫秒,请勿随意修改)
-     */
-    private int motor_on_delay;
-    /**
-     * 电机关闭后要强制保持关闭状态多⻓时间(单位毫秒,请勿随意修改)
-     */
-    private int motor_off_delay;
-    /**
-     * 电机关机灵敏度(有流量计有效,单位毫秒,请勿随意修改)
-     */
-    private int motor_on_interval;
-    /**
-     * 电机是否根据流量启动(有流量⾃动开启电机,请勿随意修改)
-     */
-    private int motor_flow_on;
-    /**
-     * 电机是否根据流量关闭(⽆流量⾃动关闭电机,请勿随意修改)
-     */
-    private int motor_flow_off;
-    /**
-     * ⽔龙头开启延时(单位秒,⽔龙头开启多少秒后⾃动关闭,0表⽰不⾃动关闭。)
-     */
-    private int tap_on_delay;
-    /**
-     * 投币信号的币值,也就是⼀个币是多少钱单位分(如⼈⺠币1元设置为100,港币5元,设置为500)。
-     */
-    private int coin_money;
-    /**
-     * 投币的数量,对于同时接收超过⼀种币值的投币器,投币数量是⽆效的,这个数值等于投币器发出的脉冲数量。
-     */
-    private int coin_num;
-    /**
-     * 卡密码,只有相同密码的卡可以通⽤(注意:这个密码要和使⽤卡管理⼯具初始化卡的时候写入的密码⼀致,写入后不能再次修改,
-     * 否则由于和机器上密码不⼀致就不能使⽤了 ,机器总是提⽰卡读取错误!)
-     */
-    private String card_key;
-    /**
-     * 每次开机的最⼤消费限额(单位分,建议和创建订单的参数prepay_money保持⼀致)
-     */
-    private int prepay_money;
-    /**
-     * 为0表⽰关闭,为1表⽰使⽤镀膜功能(注意:这个功能和投币器功能不能同时使⽤。)
-     */
-    private int coat_mode;
-    /**
-     * 为0表⽰关闭,为1表⽰使⽤吹⽓功能(注意:这个功能和闸机控制功能不能同时使⽤。)
-     */
-    private int blow_mode;
-}

+ 22 - 0
car-wash-entity/src/main/java/com/kym/entity/queryParams/DeviceConfigParams.java

@@ -0,0 +1,22 @@
+package com.kym.entity.queryParams;
+
+import com.kym.entity.BaseEntity;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeviceConfigParams extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 需要更新的设备id
+     */
+    private List<Long> deviceIds;
+
+    /**
+     * 设备配置信息
+     */
+    private Long deviceConfigId;
+}

+ 5 - 0
car-wash-service/src/main/java/com/kym/service/DeviceConfigService.java

@@ -1,6 +1,7 @@
 package com.kym.service;
 
 import com.kym.entity.DeviceConfig;
+import com.kym.entity.queryParams.DeviceConfigParams;
 import com.kym.service.mybatisplus.MyBaseService;
 
 /**
@@ -13,4 +14,8 @@ import com.kym.service.mybatisplus.MyBaseService;
  */
 public interface DeviceConfigService extends MyBaseService<DeviceConfig> {
 
+    void add(DeviceConfig deviceConfig);
+    void modify(DeviceConfig deviceConfig);
+
+    void batchModify(DeviceConfigParams params);
 }

+ 3 - 3
car-wash-service/src/main/java/com/kym/service/awoara/AwoaraService.java

@@ -1,7 +1,7 @@
 package com.kym.service.awoara;
 
+import com.kym.entity.DeviceConfig;
 import com.kym.entity.awoara.ApiList;
-import com.kym.entity.awoara.Config;
 import com.kym.entity.awoara.MethodHelp;
 import com.kym.entity.awoara.OrderInfo;
 import com.kym.entity.awoara.response.CreateOrder;
@@ -137,7 +137,7 @@ public interface AwoaraService {
      * @param deviceName
      * @return
      */
-    Config readConfig(String productKey, String deviceName);
+    DeviceConfig readConfig(String productKey, String deviceName);
 
     /**
      * 修改配置
@@ -147,5 +147,5 @@ public interface AwoaraService {
      * @param config
      * @return
      */
-    void writeConfig(String productKey, String deviceName, Config config);
+    void writeConfig(String productKey, String deviceName, DeviceConfig config);
 }

+ 23 - 7
car-wash-service/src/main/java/com/kym/service/awoara/AwoaraServiceImpl.java

@@ -2,10 +2,13 @@ package com.kym.service.awoara;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.TypeReference;
+import com.google.gson.FieldNamingPolicy;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.CommUtil;
+import com.kym.entity.DeviceConfig;
 import com.kym.entity.awoara.ApiList;
-import com.kym.entity.awoara.Config;
 import com.kym.entity.awoara.MethodHelp;
 import com.kym.entity.awoara.OrderInfo;
 import com.kym.entity.awoara.response.AwoaraResponse;
@@ -17,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 import java.util.Base64;
 
 import static cn.hutool.http.HttpStatus.HTTP_OK;
@@ -31,6 +35,10 @@ import static cn.hutool.http.HttpStatus.HTTP_OK;
 public class AwoaraServiceImpl implements AwoaraService {
 
 
+    static final Gson gson = new GsonBuilder()
+            .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())
+            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
+            .create();
     /**
      * BASE64解码器
      */
@@ -191,6 +199,7 @@ public class AwoaraServiceImpl implements AwoaraService {
                 """.formatted(orderId);
         doRequest(productKey, deviceName, params, null);
     }
+
     @Override
     public void forceCloseOrder(String productKey, String deviceName) {
         var params = """
@@ -221,7 +230,7 @@ public class AwoaraServiceImpl implements AwoaraService {
     }
 
     @Override
-    public Config readConfig(String productKey, String deviceName) {
+    public DeviceConfig readConfig(String productKey, String deviceName) {
         var params = """
                 {
                     "version": "2.0",
@@ -229,12 +238,12 @@ public class AwoaraServiceImpl implements AwoaraService {
                     "params": []
                 }
                 """;
-        return doRequest(productKey, deviceName, params, new TypeReference<AwoaraResponse<Config>>() {
+        return doRequest(productKey, deviceName, params, new TypeReference<AwoaraResponse<DeviceConfig>>() {
         });
     }
 
     @Override
-    public void writeConfig(String productKey, String deviceName, Config config) {
+    public void writeConfig(String productKey, String deviceName, DeviceConfig deviceConfig) {
         var params = """
                 {
                     "version": "2.0",
@@ -242,10 +251,10 @@ public class AwoaraServiceImpl implements AwoaraService {
                     "params": {
                         "version":2,
                         "maintenance_mode": 0,
-                        "user_message.1": "超级进化车生活",
+                        "user_message.1": "超级进化车生活2",
                         "user_message.2": "客服电话:13018061579",
                         "sensor_water": 0,
-                        "price_space": 10,
+                        "price_space": 0,
                         "price_water": 150,
                         "price_foam": 250,
                         "price_tap": 100,
@@ -272,6 +281,13 @@ public class AwoaraServiceImpl implements AwoaraService {
                      }
                 }
                 """;
-        doRequest(productKey, deviceName, params, null);
+
+        var json = new JSONObject();
+        json.put("version", "2.0");
+        json.put("method", "write_config");
+        json.put("params", deviceConfig);
+
+//        doRequest(productKey, deviceName, params, null);
+        doRequest(productKey, deviceName, gson.toJson(json).replaceAll("1\"", ".1\"").replaceAll("2\"", ".2\""), null);
     }
 }

+ 21 - 0
car-wash-service/src/main/java/com/kym/service/awoara/LocalDateTimeAdapter.java

@@ -0,0 +1,21 @@
+package com.kym.service.awoara;
+
+import com.google.gson.*;
+
+import java.lang.reflect.Type;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class LocalDateTimeAdapter implements JsonSerializer<LocalDateTime>, JsonDeserializer<LocalDateTime> {
+    private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+
+    @Override
+    public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
+        return new JsonPrimitive(src.format(formatter));
+    }
+
+    @Override
+    public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
+        return LocalDateTime.parse(json.getAsJsonPrimitive().getAsString(), formatter);
+    }
+}

+ 34 - 0
car-wash-service/src/main/java/com/kym/service/impl/DeviceConfigServiceImpl.java

@@ -1,8 +1,13 @@
 package com.kym.service.impl;
 
+import com.kym.common.utils.CommUtil;
 import com.kym.entity.DeviceConfig;
+import com.kym.entity.WashDevice;
+import com.kym.entity.queryParams.DeviceConfigParams;
 import com.kym.mapper.DeviceConfigMapper;
 import com.kym.service.DeviceConfigService;
+import com.kym.service.WashDeviceService;
+import com.kym.service.awoara.AwoaraService;
 import com.kym.service.mybatisplus.MyBaseServiceImpl;
 import org.springframework.stereotype.Service;
 
@@ -17,4 +22,33 @@ import org.springframework.stereotype.Service;
 @Service
 public class DeviceConfigServiceImpl extends MyBaseServiceImpl<DeviceConfigMapper, DeviceConfig> implements DeviceConfigService {
 
+    private final AwoaraService awoaraService;
+
+    private final WashDeviceService washDeviceService;
+
+    public DeviceConfigServiceImpl(AwoaraService awoaraService, WashDeviceService washDeviceService) {
+        this.awoaraService = awoaraService;
+        this.washDeviceService = washDeviceService;
+    }
+
+    @Override
+    public void add(DeviceConfig deviceConfig) {
+        save(deviceConfig);
+    }
+
+    @Override
+    public void modify(DeviceConfig deviceConfig) {
+        updateById(deviceConfig);
+    }
+
+    @Override
+    public void batchModify(DeviceConfigParams params) {
+        var deviceList = washDeviceService.lambdaQuery()
+                .in(CommUtil.isNotEmptyAndNull(params.getDeviceIds()), WashDevice::getId, params.getDeviceIds())
+                .list();
+        CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceList), "设备不存在");
+        var deviceConfig = getById(params.getDeviceConfigId());
+        CommUtil.asserts(CommUtil.isNotEmptyAndNull(deviceConfig), "设备参数不存在");
+        deviceList.forEach(device -> awoaraService.writeConfig(device.getProductKey(), device.getDeviceName(), deviceConfig));
+    }
 }

+ 3 - 1
car-wash-service/src/main/java/com/kym/service/impl/WashDeviceServiceImpl.java

@@ -112,7 +112,9 @@ public class WashDeviceServiceImpl extends MyBaseServiceImpl<WashDeviceMapper, W
         CommUtil.assertsNonNulls(List.of(device.getDeviceName(), device.getStationId(), device.getProductKey(), device.getId()), "参数异常");
         List<WashDevice> list = lambdaQuery()
                 .eq(WashDevice::getStationId, device.getStationId())
-                .eq(WashDevice::getProductKey, device.getProductKey()).list();
+                .eq(WashDevice::getDeviceName, device.getDeviceName())
+                .eq(WashDevice::getProductKey, device.getProductKey())
+                .list();
         CommUtil.asserts(list.size() <= 1, "设备信息异常");
         if (list.size() == 1) {
             CommUtil.asserts(list.get(0).getDeviceName().equalsIgnoreCase(device.getDeviceName()), "站点已存在");