fanzherong_v 3 місяців тому
батько
коміт
e3f53dcab9
18 змінених файлів з 234 додано та 24 видалено
  1. 4 0
      snowy-admin-web/src/api/biz/bizRecordApi.js
  2. 4 2
      snowy-admin-web/src/components/XnSignName/index.vue
  3. 17 0
      snowy-admin-web/src/views/biz/record/index.vue
  4. 9 0
      snowy-common/src/main/java/vip/xiaonuo/common/prop/CommonProperties.java
  5. 8 1
      snowy-plugin/snowy-plugin-biz/pom.xml
  6. 10 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizaccessrecord/service/impl/BizAccessRecordServiceImpl.java
  7. 3 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml
  8. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java
  9. 3 6
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/mapper/mapping/BizOrderMapper.xml
  10. 86 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/mq/MqttSubscribeClient.java
  11. 14 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/controller/BizRecordController.java
  12. 7 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/entity/BizRecord.java
  13. 2 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/mapper/mapping/BizRecordMapper.xml
  14. 3 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/param/BizRecordEditParam.java
  15. 2 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/BizRecordService.java
  16. 49 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/impl/BizRecordServiceImpl.java
  17. 2 1
      snowy-web-app/src/main/java/vip/xiaonuo/core/config/GlobalConfigure.java
  18. 9 2
      snowy-web-app/src/main/resources/application-local.properties

+ 4 - 0
snowy-admin-web/src/api/biz/bizRecordApi.js

@@ -92,5 +92,9 @@ export default {
 	//发货确认
 	confirmRecord(data){
 		return request('confirmRecord',data)
+	},
+	//二次过磅司机签名确认
+	updateDriverSign(data){
+		return request('updateDriverSign',data)
 	}
 }

+ 4 - 2
snowy-admin-web/src/components/XnSignName/index.vue

@@ -62,8 +62,10 @@
 	// eslint-disable-next-line vue/no-setup-props-destructure
 	resultImg.value = props.image
 	const emit = defineEmits({ successful: null })
-	const show = () => {
+	const recordId = ref()
+	const show = (id) => {
 		visible.value = true
+		recordId.value = id
 	}
 	const handleReset = () => {
 		esignRef.value.reset()
@@ -86,7 +88,7 @@
 		esignRef.value
 			.generate()
 			.then((res) => {
-				emit('successful', res)
+				emit('successful', {value:res,id:recordId.value})
 				handleClear()
 			})
 			.catch(() => {

+ 17 - 0
snowy-admin-web/src/views/biz/record/index.vue

@@ -169,6 +169,10 @@
 				<template v-if="column.dataIndex === 'action'">
 					<a-space>
 						<a @click="detailRef.onOpen(record)">详情</a>
+						<a-divider type="vertical" v-if="hasPerm('bizRecordDriverConfirm')" />
+						<a @click="XnSignNameRef.show(record.id)" v-if="hasPerm('bizRecordDriverConfirm') && record.status == '8'">司机确认</a>
+						<XnSignName ref="XnSignNameRef" :image="searchFormState.driverSign" @successful="signSuccess" />
+						<a-divider type="vertical" v-if="hasPerm(['bizGoodsEdit', 'bizGoodsDelete'], 'and')" />
 						<a-popconfirm title="确定要删除吗?" @confirm="cancellationBizRecord(record)">
 							<a-button type="link" danger size="small" v-if="hasPerm('bizRecordCancel')">删除</a-button>
 						</a-popconfirm>
@@ -193,6 +197,7 @@
 	const tableRef = ref()
 	const formRef = ref()
 	const detailRef = ref()
+	const XnSignNameRef = ref()
 	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
 	// 查询区域显示更多控制
 	const advanced = ref(false)
@@ -326,6 +331,18 @@
 			}
 		})
 	}
+
+
+	// 签名板组件回调
+	const signSuccess = (value) => {
+		const param = {
+			id:value.id,
+			driverSign: value.value
+		}
+		bizRecordApi.updateDriverSign(param).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
 </script>
 
 <style lang="less" scoped>

+ 9 - 0
snowy-common/src/main/java/vip/xiaonuo/common/prop/CommonProperties.java

@@ -34,4 +34,13 @@ public class CommonProperties {
 
     /** 后端地址 */
     private String backendUrl;
+
+    /**mqtt*/
+    private String mqttUrl;
+
+    private String mqttName;
+
+    private String mqttPassword;
+
+
 }

+ 8 - 1
snowy-plugin/snowy-plugin-biz/pom.xml

@@ -38,5 +38,12 @@
             <groupId>vip.xiaonuo</groupId>
             <artifactId>snowy-plugin-dev-api</artifactId>
         </dependency>
+
+        <!-- mqtt 相关依赖-->
+        <dependency>
+            <groupId>org.eclipse.paho</groupId>
+            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+            <version>1.2.0</version>
+        </dependency>
     </dependencies>
-</project>
+</project>

+ 10 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizaccessrecord/service/impl/BizAccessRecordServiceImpl.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.biz.modular.bizappointmentrecord.entity.BizAppointmentRecord;
@@ -70,12 +71,18 @@ public class BizAccessRecordServiceImpl extends ServiceImpl<BizAccessRecordMappe
         BizAccessRecord bizAccessRecord = BeanUtil.toBean(bizAccessRecordAddParam, BizAccessRecord.class);
         this.save(bizAccessRecord);
 
-        //修改预约记录状态,待入场->已入场
+        //修改预约记录状态
         BizAppointmentRecord appointmentRecord = bizAppointmentRecordService.getById(bizAccessRecord.getAppointmentRegisterId());
         if(ObjectUtil.isNotNull(appointmentRecord)){
-            appointmentRecord.setStatus("5");
-            bizAppointmentRecordService.updateById(appointmentRecord);
+            if(StringUtils.equals(bizAccessRecord.getInOutFactory(),"1")){
+                //进场 待入场->已入场
+                appointmentRecord.setStatus("5");
+            }else{
+                //出场 待出场->已出场
+                appointmentRecord.setStatus("10");
+            }
         }
+        bizAppointmentRecordService.updateById(appointmentRecord);
     }
 
     @Transactional(rollbackFor = Exception.class)

+ 3 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml

@@ -9,9 +9,9 @@
             bar.license_number,
             bo.order_number,
             bo.order_name,
-            bc.customer_name,
-            bg.NAME goodsName,
-            bg.MODEL goodsModel,
+            bc.name customerName,
+            bg.GOODS_NAME goodsName,
+            bg.GOODS_MODEL goodsModel,
             bar.time_id,
             bat.begin_time,
             bat.end_time,

+ 2 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java

@@ -344,6 +344,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         return bizAppointmentRecord;
     }
 
+    @Transactional
     @Override
     public void cancelAppointmentRecord(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
@@ -359,6 +360,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         }
     }
 
+    @Transactional
     @Override
     public void adjustOrder(BizAppointmentRecordEditParam bizAppointmentRecordEditParam) {
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordEditParam.getId());

+ 3 - 6
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizorder/mapper/mapping/BizOrderMapper.xml

@@ -8,13 +8,10 @@
             bo.order_number,
             bo.order_name,
             bo.customer_id,
-            bc.customer_name,
-            bc.customer_contact_name,
-            bc.customer_phone,
-            bc.customer_address,
+            bc.name customerName,
             bo.good_id,
-            bg.`NAME` goodsName,
-            bg.MODEL goodsModel,
+            bg.`GOODS_NAME` goodsName,
+            bg.GOODS_MODEL goodsModel,
             bo.order_type,
             bo.order_source,
             bo.order_status,

+ 86 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/mq/MqttSubscribeClient.java

@@ -0,0 +1,86 @@
+package vip.xiaonuo.biz.modular.mq;
+
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.common.prop.CommonProperties;
+
+import java.io.UnsupportedEncodingException;
+
+@Slf4j
+@Component
+public class MqttSubscribeClient implements CommandLineRunner {
+
+    MqttClient client = null;
+
+    MqttConnectOptions connOpts = null;
+
+    @Resource
+    private CommonProperties commonProperties;
+
+
+    @Override
+    public void run(String... args){
+        log.info("[MqttMsgSubscribe]公共生产者启动开始.");
+        try{
+            client = new MqttClient(commonProperties.getMqttUrl(), "1234567890");
+            connOpts = new MqttConnectOptions();
+            connOpts.setCleanSession(true);
+            connOpts.setUserName(commonProperties.getMqttName());
+            connOpts.setAutomaticReconnect(true);
+            connOpts.setPassword(commonProperties.getMqttPassword().toCharArray());
+            log.info("Connecting to broker: " + commonProperties.getMqttUrl());
+            client.connect(connOpts);
+            log.info("Connected");
+            // client.subscribe(ConstantContextHolder.getMqttTopic() + ConstantContextHolder.getSysItemCode(), 2);
+            client.setCallback(new MqttCallback() {
+                @Override
+                public void connectionLost(Throwable cause) {
+                    System.out.println("连接丢失: " + cause.getMessage());
+                }
+
+                @Override
+                public void messageArrived(String topic, MqttMessage message) throws Exception {
+                    System.out.println("接收到消息: " + new String(message.getPayload()));
+                }
+
+                @Override
+                public void deliveryComplete(IMqttDeliveryToken token) {
+                    System.out.println("消息发送完成: " + token.isComplete());
+                }
+            });
+        }catch (MqttSecurityException e) {
+            e.printStackTrace();
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+
+
+    }
+
+
+    //推送消息
+    public boolean publishMessage(String topic, String message)  {
+        try {
+            MqttMessage mqttMessage = new MqttMessage(message.getBytes("UTF-8"));
+            MqttTopic mqttTopic = client.getTopic(topic);
+            MqttDeliveryToken token;
+            //将指定消息发布到主题,但不等待消息传递完成,返回的token可用于跟踪消息的传递状态
+            //一旦此方法干净地返回,消息就已被客户端接受发布,当连接可用,将在后台完成消息传递。
+            token = mqttTopic.publish(mqttMessage);
+            token.waitForCompletion();
+            return true;
+        } catch (MqttException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        return false;
+    }
+
+
+
+}

+ 14 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/controller/BizRecordController.java

@@ -104,7 +104,6 @@ public class BizRecordController {
      */
     @Operation(summary = "编辑过磅记录")
     @CommonLog("编辑过磅记录")
-    @SaCheckPermission("/biz/record/edit")
     @PostMapping("/biz/record/edit")
     public CommonResult<String> edit(@RequestBody @Valid BizRecordEditParam bizRecordEditParam) {
         bizRecordService.edit(bizRecordEditParam);
@@ -303,4 +302,18 @@ public class BizRecordController {
         return CommonResult.ok();
     }
 
+    /**
+     * 二次过磅司机签名确认
+     *
+     * @author
+     * @date 2025/01/02 16:34
+     */
+    @Operation(summary = "二次过磅司机签名确认")
+    @CommonLog("二次过磅司机签名确认")
+    @PostMapping("/biz/record/updateDriverSign")
+    public CommonResult<String> updateDriverSign(@RequestBody @Valid BizRecordEditParam bizRecordEditParam) {
+        bizRecordService.updateDriverSign(bizRecordEditParam);
+        return CommonResult.ok();
+    }
+
 }

+ 7 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/entity/BizRecord.java

@@ -198,9 +198,16 @@ public class BizRecord extends CommonEntity {
     @TableField(exist = false)
     private String customerName;
 
+    /**预约状态*/
+    @TableField(exist = false)
+    private String status;
+
     /**确认用户*/
     private String confirmUser;
 
     /**预约创建人*/
     private String appointmentUser;
+
+    /**二次过磅司机签名确认*/
+    private String driverSign;
 }

+ 2 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/mapper/mapping/BizRecordMapper.xml

@@ -270,7 +270,8 @@
             br.*,
             bo.order_name,
             bo.order_number,
-            bc.customer_name
+            bc.name customerName,
+            bar.status
         from biz_record br
          left join biz_appointment_record bar on bar.id = br.appointment_id
          left join biz_order bo on bo.id = br.order_id

+ 3 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/param/BizRecordEditParam.java

@@ -42,7 +42,6 @@ public class BizRecordEditParam {
 
     /** 车牌号码 */
     @Schema(description = "车牌号码", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotBlank(message = "licensePlate不能为空")
     private String licensePlate;
 
     /** 车牌颜色 */
@@ -186,4 +185,7 @@ public class BizRecordEditParam {
     /**订单id*/
     private String orderId;
 
+    /**司机签名*/
+    private String driverSign;
+
 }

+ 2 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/BizRecordService.java

@@ -190,4 +190,6 @@ public interface BizRecordService extends IService<BizRecord> {
     /**发货确认*/
     void confirmRecord(BizRecordIdParam bizRecordIdParam);
 
+    void updateDriverSign(BizRecordEditParam bizRecordEditParam);
+
 }

+ 49 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/impl/BizRecordServiceImpl.java

@@ -16,6 +16,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -28,7 +29,9 @@ import com.alibaba.excel.write.metadata.style.WriteFont;
 import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.excel.write.style.row.AbstractRowHeightStyleStrategy;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
@@ -42,6 +45,7 @@ import vip.xiaonuo.biz.modular.bizappointmentrecord.entity.BizAppointmentRecord;
 import vip.xiaonuo.biz.modular.bizappointmentrecord.service.BizAppointmentRecordService;
 import vip.xiaonuo.biz.modular.bizorder.entity.BizOrder;
 import vip.xiaonuo.biz.modular.bizorder.service.BizOrderService;
+import vip.xiaonuo.biz.modular.mq.MqttSubscribeClient;
 import vip.xiaonuo.biz.modular.record.param.*;
 import vip.xiaonuo.biz.modular.record.result.BizRecordExportResult;
 import vip.xiaonuo.biz.modular.record.result.CarResult;
@@ -79,6 +83,9 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
     @Resource
     private BizOrderService bizOrderService;
 
+    @Resource
+    private MqttSubscribeClient mqttSubscribeClient;
+
     @Override
     public Page<BizRecord> page(BizRecordPageParam bizRecordPageParam) {
         QueryWrapper<BizRecord> queryWrapper = getQueryWrapper(bizRecordPageParam);
@@ -141,6 +148,7 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
         this.save(bizRecord);
     }
 
+    @Transactional
     @Override
     public void push(BizRecordEditParam bizRecordEditParam) {
         if(StringUtils.equals(bizRecordEditParam.getWeighingType(),"1")){
@@ -159,8 +167,12 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
             }
         }else{
             //二次过磅
-            BizRecord bizRecord = this.queryEntity(bizRecordEditParam.getId());
-            bizRecordEditParam.setId(null);
+            BizRecord bizRecord = this.getOne(new QueryWrapper<BizRecord>().lambda().eq(BizRecord::getRelationId,bizRecordEditParam.getId()));
+            if(ObjectUtil.isNull(bizRecord)){
+                throw new CommonException("未查询到过磅记录!");
+            }
+            bizRecordEditParam.setRelationId(bizRecordEditParam.getId());
+            bizRecordEditParam.setId(bizRecord.getId());
             BeanUtil.copyProperties(bizRecordEditParam, bizRecord);
             this.updateById(bizRecord);
 
@@ -183,7 +195,10 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void edit(BizRecordEditParam bizRecordEditParam) {
-        BizRecord bizRecord = this.queryEntity(bizRecordEditParam.getId());
+        BizRecord bizRecord = this.getOne(new QueryWrapper<BizRecord>().lambda().eq(BizRecord::getRelationId,bizRecordEditParam.getId()));
+        if(ObjectUtil.isNull(bizRecord)){
+            throw new CommonException("未查询到过磅记录!");
+        }
         BeanUtil.copyProperties(bizRecordEditParam, bizRecord);
         this.updateById(bizRecord);
     }
@@ -497,6 +512,7 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
         }
     }
 
+    @Transactional
     @Override
     public void confirmRecord(BizRecordIdParam bizRecordIdParam) {
         //设置确认人
@@ -511,4 +527,34 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
             bizAppointmentRecordService.updateById(appointmentRecord);
         }
     }
+
+    @Transactional
+    @Override
+    public void updateDriverSign(BizRecordEditParam bizRecordEditParam) {
+        BizRecord bizRecord = this.queryEntity(bizRecordEditParam.getId());
+        if(ObjectUtil.isEmpty(bizRecordEditParam.getDriverSign())){
+            throw new CommonException("司机签名不能为空!");
+        }
+        String driverSign = bizRecordEditParam.getDriverSign();
+        if(bizRecordEditParam.getDriverSign().contains(StrUtil.COMMA)) {
+            driverSign = StrUtil.split(driverSign, StrUtil.COMMA).get(1);
+        }
+        String base64 = ImgUtil.toBase64DataUri(ImgUtil.scale(ImgUtil.toImage(driverSign),
+                100, 50, null), ImgUtil.IMAGE_TYPE_PNG);
+
+        bizRecord.setDriverSign(base64);
+        this.updateById(bizRecord);
+
+        //修改预约记录状态
+        BizAppointmentRecord appointmentRecord = bizAppointmentRecordService.getById(bizRecord.getAppointmentId());
+        if(ObjectUtil.isNotNull(appointmentRecord)){
+            //司机签名后修改为可入场状态
+            appointmentRecord.setStatus("9");
+            bizAppointmentRecordService.updateById(appointmentRecord);
+        }
+
+        //mqtt发送过磅记录id给地磅端,告诉地磅端可打印磅单,抬道闸
+        mqttSubscribeClient.publishMessage("hnzydb", bizRecord.getRelationId());
+
+    }
 }

+ 2 - 1
snowy-web-app/src/main/java/vip/xiaonuo/core/config/GlobalConfigure.java

@@ -154,7 +154,8 @@ public class GlobalConfigure implements WebMvcConfigurer {
             /*地磅端预约记录校验*/
             "/biz/bizappointmentrecord/checkAppointmentRecord",
             "/biz/bizaccessrecord/add",
-            "/biz/record/push"
+            "/biz/record/push",
+            "/biz/record/edit"
     };
 
     /**

+ 9 - 2
snowy-web-app/src/main/resources/application-local.properties

@@ -20,9 +20,9 @@ spring.servlet.multipart.max-file-size=100MB
 
 # mysql
 spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/snowy_hnzy?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true&rewriteBatchedStatements=true
+spring.datasource.dynamic.datasource.master.url=jdbc:mysql://121.40.149.118:13306/snowy_hnzy?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useInformationSchema=true&rewriteBatchedStatements=true
 spring.datasource.dynamic.datasource.master.username=root
-spring.datasource.dynamic.datasource.master.password=root
+spring.datasource.dynamic.datasource.master.password=4008809192
 spring.datasource.dynamic.strict=true
 
 # postgres
@@ -194,3 +194,10 @@ springdoc.group-configs[6].packages-to-scan=vip.xiaonuo.sys
 # common configuration
 snowy.config.common.front-url=http://localhost:81
 snowy.config.common.backend-url=http://localhost:82
+
+
+#mqtt
+snowy.config.common.mqtt-url=tcp://127.0.0.1:1883
+snowy.config.common.mqtt-name=admin
+snowy.config.common.mqtt-password=public
+snowy.config.common.mqtt-clientId=my-mqtt-client-id