523096025 преди 1 година
родител
ревизия
3502338211
променени са 32 файла, в които са добавени 383 реда и са изтрити 45 реда
  1. 1 0
      pom.xml
  2. 4 0
      src/main/java/com/huimv/wine/WineServerApplication.java
  3. 2 0
      src/main/java/com/huimv/wine/controller/DeviceController.java
  4. 2 2
      src/main/java/com/huimv/wine/controller/ManagerController.java
  5. 2 2
      src/main/java/com/huimv/wine/controller/WorkerController.java
  6. 1 1
      src/main/java/com/huimv/wine/entity/Device.java
  7. 6 2
      src/main/java/com/huimv/wine/entity/Manager.java
  8. 10 0
      src/main/java/com/huimv/wine/entity/vo/WsEvent.java
  9. 10 0
      src/main/java/com/huimv/wine/mapper/DeviceMapper.java
  10. 4 1
      src/main/java/com/huimv/wine/service/impl/DeviceServiceImpl.java
  11. 24 0
      src/main/java/com/huimv/wine/utils/SpringContextUtil.java
  12. 7 7
      src/main/java/com/huimv/wine/utils/WebsocketUtil.java
  13. 57 0
      src/main/java/com/huimv/wine/utils/WebsocketSellerUtil.java
  14. 57 0
      src/main/java/com/huimv/wine/utils/WebsocketWorkerUtil.java
  15. 79 0
      src/main/java/com/huimv/wine/ws/ManagerController.java
  16. 36 30
      src/main/java/com/huimv/wine/ws/SellerController.java
  17. 65 0
      src/main/java/com/huimv/wine/ws/WorkerController.java
  18. 4 0
      src/main/resources/application-dev.yml
  19. BIN
      src/main/resources/certs/apiclient_cert.p12
  20. 0 0
      src/main/resources/com/huimv/wine/mapper/AdvertiseMapper.xml
  21. 0 0
      src/main/resources/com/huimv/wine/mapper/ChangeMapper.xml
  22. 12 0
      src/main/resources/mapper/DeviceMapper.xml
  23. 0 0
      src/main/resources/com/huimv/wine/mapper/ManagerMapper.xml
  24. 0 0
      src/main/resources/com/huimv/wine/mapper/OperationMapper.xml
  25. 0 0
      src/main/resources/com/huimv/wine/mapper/ParamsMapper.xml
  26. 0 0
      src/main/resources/com/huimv/wine/mapper/RefundMapper.xml
  27. 0 0
      src/main/resources/com/huimv/wine/mapper/TradeMapper.xml
  28. 0 0
      src/main/resources/com/huimv/wine/mapper/UserMapper.xml
  29. 0 0
      src/main/resources/com/huimv/wine/mapper/VersionMapper.xml
  30. 0 0
      src/main/resources/com/huimv/wine/mapper/WarnMapper.xml
  31. 0 0
      src/main/resources/com/huimv/wine/mapper/WineMapper.xml
  32. 0 0
      src/main/resources/com/huimv/wine/mapper/WorkerMapper.xml

+ 1 - 0
pom.xml

@@ -22,6 +22,7 @@
             <version>2.3.1.RELEASE</version>
         </dependency>
 
+
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>

+ 4 - 0
src/main/java/com/huimv/wine/WineServerApplication.java

@@ -1,11 +1,15 @@
 package com.huimv.wine;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @SpringBootApplication
+@MapperScan("com.huimv.wine.mapper")
+//@ComponentScan("com.huimv.wine.ws")
 public class WineServerApplication {
 
     public static void main(String[] args) {

+ 2 - 0
src/main/java/com/huimv/wine/controller/DeviceController.java

@@ -5,6 +5,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * 设备 前端控制器

+ 2 - 2
src/main/java/com/huimv/wine/controller/ManagerController.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2024-04-18
  */
 @RestController
-@RequestMapping("/manager")
-public class ManagerController {
+@RequestMapping("/manager-test")
+public class ManagerTestController {
 
 }

+ 2 - 2
src/main/java/com/huimv/wine/controller/WorkerController.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2024-04-18
  */
 @RestController
-@RequestMapping("/worker")
-public class WorkerController {
+@RequestMapping("/worker-test")
+public class WorkerTestController {
 
 }

+ 1 - 1
src/main/java/com/huimv/wine/entity/Device.java

@@ -27,7 +27,7 @@ public class Device implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id")
     private String id;
 
     /**

+ 6 - 2
src/main/java/com/huimv/wine/entity/Manager.java

@@ -1,7 +1,10 @@
 package com.huimv.wine.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.sql.Date;
 import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
@@ -31,12 +34,13 @@ public class Manager implements Serializable {
     /**
      * 超级管理员 0
      */
-    private Boolean super;
+    @TableField(value =  "super")
+    private Boolean isSuper;
 
     /**
      * 注册时间
      */
-    private LocalDateTime first;
+    private Date first;
 
     /**
      * 最近活跃

+ 10 - 0
src/main/java/com/huimv/wine/entity/vo/WsEvent.java

@@ -0,0 +1,10 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Data
+public class WsEvent {
+    private  String event;
+    private  Object message;
+ }

+ 10 - 0
src/main/java/com/huimv/wine/mapper/DeviceMapper.java

@@ -2,6 +2,11 @@ package com.huimv.wine.mapper;
 
 import com.huimv.wine.entity.Device;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.Date;
 
 /**
  * <p>
@@ -13,4 +18,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DeviceMapper extends BaseMapper<Device> {
 
+    Device getByDeviceId(@Param(value = "seq") String seq);
+
+        //addr=?, first=?, last=?, wine1=?, remain1=?, vpp1=?, wine2=?, remain2=?, vpp2=?, wine3=?, remain3=?, vpp3=?, wine4=?, remain4=?, vpp4=?, manager=?, mark=?, order=?, income=?
+//    @Update("UPDATE device  SET  `last` =#{last} WHERE id=#{id}")
+    void updateDeviceById(Device device);
 }

+ 4 - 1
src/main/java/com/huimv/wine/service/impl/DeviceServiceImpl.java

@@ -4,6 +4,7 @@ import com.huimv.wine.entity.Device;
 import com.huimv.wine.mapper.DeviceMapper;
 import com.huimv.wine.service.IDeviceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,8 +18,10 @@ import org.springframework.stereotype.Service;
 @Service
 public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements IDeviceService {
 
+    @Autowired
+    private DeviceMapper deviceMapper;
     @Override
     public Device getByDeviceId(String seq) {
-        return  this.getById(seq);
+        return  deviceMapper.getByDeviceId(seq);
     }
 }

+ 24 - 0
src/main/java/com/huimv/wine/utils/SpringContextUtil.java

@@ -0,0 +1,24 @@
+package com.huimv.wine.utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringContextUtil implements ApplicationContextAware {
+    private static ApplicationContext context;
+
+    @Override
+    public void setApplicationContext(ApplicationContext context) throws BeansException {
+        SpringContextUtil.context = context;
+    }
+
+    public static ApplicationContext getApplicationContext() {
+        return context;
+    }
+
+    public static <T> T getBean(Class<T> requiredType) {
+        return context.getBean(requiredType);
+    }
+}

+ 7 - 7
src/main/java/com/huimv/wine/utils/WebsocketUtil.java

@@ -5,13 +5,12 @@ import javax.websocket.Session;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-public class WebsocketUtil {
+public class WebsocketManagerUtil {
   /**
    * 记录当前在线的Session
    */
-  private static final Map<String, Session> SELLERS = new ConcurrentHashMap<>();
-  private static final Map<String, Session> MANAGERS = new ConcurrentHashMap<>();
-  private static final Map<String, Session> WORKER = new ConcurrentHashMap<>();
+  private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>();
+ 
 
 
   /**
@@ -19,9 +18,10 @@ public class WebsocketUtil {
    * @param userId
    * @param session
    */
+  
   public static void addSession(String userId, Session session){
     // 此处只允许一个用户的session链接。一个用户的多个连接,我们视为无效。
-    SELLERS.putIfAbsent ( userId, session );
+    SESSIONS.putIfAbsent ( userId, session );
   }
 
   /**
@@ -29,7 +29,7 @@ public class WebsocketUtil {
    * @param userId
    */
   public static void removeSession(String userId){
-    SELLERS.remove ( userId );
+    SESSIONS.remove ( userId );
   }
 
   /**
@@ -52,6 +52,6 @@ public class WebsocketUtil {
    */
   public static void sendMessageForAll(String message) {
     //jdk8 新方法
-    SELLERS.forEach((sessionId, session) -> sendMessage(session, message));
+    SESSIONS.forEach((sessionId, session) -> sendMessage(session, message));
   }
 }

+ 57 - 0
src/main/java/com/huimv/wine/utils/WebsocketSellerUtil.java

@@ -0,0 +1,57 @@
+package com.huimv.wine.utils;
+
+import javax.websocket.RemoteEndpoint;
+import javax.websocket.Session;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class WebsocketSellerUtil {
+  /**
+   * 记录当前在线的Session
+   */
+  private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>();
+
+
+
+  /**
+   * 添加session
+   * @param userId
+   * @param session
+   */
+
+  public static void addSession(String userId, Session session){
+    // 此处只允许一个用户的session链接。一个用户的多个连接,我们视为无效。
+    SESSIONS.putIfAbsent ( userId, session );
+  }
+
+  /**
+   * 关闭session
+   * @param userId
+   */
+  public static void removeSession(String userId){
+    SESSIONS.remove ( userId );
+  }
+
+  /**
+   * 给单个用户推送消息
+   * @param session
+   * @param message
+   */
+  public static void sendMessage(Session session, String message){
+    if(session == null){
+      return;
+    }
+    // 同步
+    RemoteEndpoint.Async async = session.getAsyncRemote ();
+    async.sendText ( message );
+  }
+
+  /**
+   * 向所有在线人发送消息
+   * @param message
+   */
+  public static void sendMessageForAll(String message) {
+    //jdk8 新方法
+    SESSIONS.forEach((sessionId, session) -> sendMessage(session, message));
+  }
+}

+ 57 - 0
src/main/java/com/huimv/wine/utils/WebsocketWorkerUtil.java

@@ -0,0 +1,57 @@
+package com.huimv.wine.utils;
+
+import javax.websocket.RemoteEndpoint;
+import javax.websocket.Session;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class WebsocketWorkerUtil {
+  /**
+   * 记录当前在线的Session
+   */
+  private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>();
+
+
+
+  /**
+   * 添加session
+   * @param userId
+   * @param session
+   */
+
+  public static void addSession(String userId, Session session){
+    // 此处只允许一个用户的session链接。一个用户的多个连接,我们视为无效。
+    SESSIONS.putIfAbsent ( userId, session );
+  }
+
+  /**
+   * 关闭session
+   * @param userId
+   */
+  public static void removeSession(String userId){
+    SESSIONS.remove ( userId );
+  }
+
+  /**
+   * 给单个用户推送消息
+   * @param session
+   * @param message
+   */
+  public static void sendMessage(Session session, String message){
+    if(session == null){
+      return;
+    }
+    // 同步
+    RemoteEndpoint.Async async = session.getAsyncRemote ();
+    async.sendText ( message );
+  }
+
+  /**
+   * 向所有在线人发送消息
+   * @param message
+   */
+  public static void sendMessageForAll(String message) {
+    //jdk8 新方法
+    SESSIONS.forEach((sessionId, session) -> sendMessage(session, message));
+  }
+}

+ 79 - 0
src/main/java/com/huimv/wine/ws/ManagerController.java

@@ -0,0 +1,79 @@
+package com.huimv.wine.ws;
+
+import com.huimv.wine.utils.WebsocketManagerUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+
+/**
+ * websocket接口处理类
+ */
+@Component
+@ServerEndpoint(value = "/manager/{seq}")
+public class ManagerController extends TextWebSocketHandler {
+
+
+    /**
+     * 连接事件,加入注解
+     * @param session
+     */
+    @OnOpen
+    public void onOpen(@PathParam(value = "seq") String seq, Session session) {
+        String message = "[" + seq + "]加入聊天室!!";
+        System.out.println(message);
+
+        // 添加到session的映射关系中
+        WebsocketManagerUtil.addSession(seq, session);
+    }
+
+    /**
+     * 连接事件,加入注解
+     * 用户断开链接
+     *
+     * @param seq
+     * @param session
+     */
+    @OnClose
+    public void onClose(@PathParam(value = "seq") String seq, Session session) {
+
+        // 删除映射关系
+        WebsocketManagerUtil.removeSession(seq);
+
+//        WebsocketManagerUtil.sendMessageForAll(message);
+    }
+
+    /**
+     * 当接收到用户上传的消息
+     *
+     * @param seq
+     * @param session
+     */
+    @OnMessage
+    public void onMessage(@PathParam(value = "seq") String seq, Session session, String message) {
+        String msg = "[" + seq + "]:" + message;
+        System.out.println("接收到信息:" + msg);
+        // 直接广播
+//        WebsocketManagerUtil.sendMessageForAll(msg);
+    }
+
+    /**
+     * 处理用户活连接异常
+     *
+     * @param session
+     * @param throwable
+     */
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        try {
+            session.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        throwable.printStackTrace();
+    }
+}

+ 36 - 30
src/main/java/com/huimv/wine/ws/SellerController.java

@@ -1,11 +1,14 @@
 package com.huimv.wine.ws;
 
+import com.fasterxml.jackson.databind.util.BeanUtil;
 import com.huimv.wine.entity.Device;
-import com.huimv.wine.service.IDeviceService;
-import com.huimv.wine.utils.WebsocketUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.mapper.DeviceMapper;
+import com.huimv.wine.utils.SpringContextUtil;
+import com.huimv.wine.utils.WebsocketSellerUtil;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
 
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
@@ -18,61 +21,58 @@ import java.util.Date;
  */
 @Component
 @ServerEndpoint(value = "/seller/{seq}")
-public class SellerController {
-
-    @Autowired
-    private IDeviceService iDeviceService;
+public class SellerController extends TextWebSocketHandler {
     /**
      * 连接事件,加入注解
-     * @param session
      */
     @OnOpen
     public void onOpen(@PathParam(value = "seq") String seq, Session session) {
         String message = "[" + seq + "]加入聊天室!!";
+        System.out.println(message);
 
-        Device device =  iDeviceService.getByDeviceId(seq);
+        //需要用这种方式注入
+        DeviceMapper deviceMapper = SpringContextUtil.getBean(DeviceMapper.class);
+        Device device =  deviceMapper.getByDeviceId(seq);
         if (ObjectUtils.isEmpty(device)){
+            device = new Device();
             device.setId(seq);
-            iDeviceService.save(device);
+            deviceMapper.insert(device);
         }else {
-
             device.setLast(new Date());
-            iDeviceService.updateById(device);
+            deviceMapper.updateDeviceById(device);
         }
-        // 添加到session的映射关系中
-        WebsocketUtil.addSession(seq, session);
 
+        // 添加到session的映射关系中
+        WebsocketSellerUtil.addSession(seq, session);
 
+        infoOfDevice(session,deviceMapper);
     }
 
     /**
      * 连接事件,加入注解
      * 用户断开链接
-     *
-     * @param seq
-     * @param session
      */
     @OnClose
     public void onClose(@PathParam(value = "seq") String seq, Session session) {
-        String message = "[" + seq + "]退出了聊天室...";
+
         // 删除映射关系
-        WebsocketUtil.removeSession(seq);
+        WebsocketSellerUtil.removeSession(seq);
 
-//        WebsocketUtil.sendMessageForAll(message);
+//        WebsocketSellerUtil.sendMessageForAll(message);
     }
 
-    /**
-     * 当接收到用户上传的消息
-     *
-     * @param seq
-     * @param session
-     */
+
     @OnMessage
-    public void onMessage(@PathParam(value = "seq") String seq, Session session, String message) {
-        String msg = "[" + seq + "]:" + message;
-        System.out.println("接收到信息:" + msg);
+    public void onMessage( Session session, String message) {
+//        RemoteEndpoint.Async asyncRemote = session.getAsyncRemote();
+
+        System.out.println(message);
+        //下发数据
+//        asyncRemote.sendText(message);
+
+        WebsocketSellerUtil.sendMessage(session,message);
         // 直接广播
-//        WebsocketUtil.sendMessageForAll(msg);
+
     }
 
     /**
@@ -90,4 +90,10 @@ public class SellerController {
         }
         throwable.printStackTrace();
     }
+
+    public void   infoOfDevice(Session session, DeviceMapper deviceMapper) {
+
+
+    }
+
 }

+ 65 - 0
src/main/java/com/huimv/wine/ws/WorkerController.java

@@ -0,0 +1,65 @@
+package com.huimv.wine.ws;
+
+import com.huimv.wine.utils.WebsocketWorkerUtil;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+
+/**
+ * websocket接口处理类
+ */
+@Component
+@ServerEndpoint(value = "/worker/{seq}")
+public class WorkerController extends TextWebSocketHandler {
+
+    /**
+     * 连接事件,加入注解
+     */
+    @OnOpen
+    public void onOpen(@PathParam(value = "seq") String seq, Session session) {
+        String message = "[" + seq + "]加入聊天室!!";
+        System.out.println(message);
+
+        // 添加到session的映射关系中
+        WebsocketWorkerUtil.addSession(seq, session);
+    }
+
+    /**
+     * 连接事件,加入注解
+     * 用户断开链接
+     */
+    @OnClose
+    public void onClose(@PathParam(value = "seq") String seq, Session session) {
+        // 删除映射关系
+        WebsocketWorkerUtil.removeSession(seq);
+    }
+
+    /**
+     * 当接收到用户上传的消息
+     */
+    @OnMessage
+    public void onMessage(@PathParam(value = "seq") String seq, Session session, String message) {
+        String msg = "[" + seq + "]:" + message;
+        System.out.println("接收到信息:" + msg);
+    }
+
+    /**
+     * 处理用户活连接异常
+     *
+     * @param session
+     * @param throwable
+     */
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        try {
+            session.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        throwable.printStackTrace();
+    }
+}

+ 4 - 0
src/main/resources/application-dev.yml

@@ -14,6 +14,10 @@ spring:
     port: 6379
     password: hm123456
     database: 10
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    # log-impl:   org.apache.ibatis.logging.nologging.NoLoggingImpl
 config:
   prefix: "http://192.168.1.10:3080"
   server_private: "./certs/server-private.pem"

BIN
src/main/resources/certs/apiclient_cert.p12


src/main/resources/mapper/AdvertiseMapper.xml → src/main/resources/com/huimv/wine/mapper/AdvertiseMapper.xml


src/main/resources/mapper/ChangeMapper.xml → src/main/resources/com/huimv/wine/mapper/ChangeMapper.xml


+ 12 - 0
src/main/resources/mapper/DeviceMapper.xml

@@ -25,5 +25,17 @@
         <result column="order" property="order" />
         <result column="income" property="income" />
     </resultMap>
+    <select id="getByDeviceId" resultType="com.huimv.wine.entity.Device">
 
+      SELECT `id`,`addr`,`first`,`last`,`wine1`,`remain1`,`vpp1`,`wine2`,`remain2`,`vpp2`,
+		`wine3`,`remain3`,`vpp3`,`wine4`,`remain4`,`vpp4`,`manager`,`mark`,`order`,`income`
+		FROM `device` WHERE `id`= #{seq};
+    </select>
+
+    <update id="updateDeviceById" parameterType="com.huimv.wine.entity.Device" >
+
+         UPDATE `device` SET `addr`=#{addr},`last`=#{last},`wine1`=#{wine1},`remain1`=#{remain1},`vpp1`=#{vpp1},`wine2`=#{wine2},`remain2`=#{remain2},`vpp2`=#{vpp2},
+         `wine3`=#{wine3},`remain3`=#{remain3},`vpp3`=#{vpp3},`wine4`=#{wine4},`remain4`=#{remain4},`vpp4`=#{vpp4},`manager`=#{manager},`mark`=#{mark},`order`=#{order},
+		`income`=#{income} WHERE `id`=#{id};
+    </update>
 </mapper>

src/main/resources/mapper/ManagerMapper.xml → src/main/resources/com/huimv/wine/mapper/ManagerMapper.xml


src/main/resources/mapper/OperationMapper.xml → src/main/resources/com/huimv/wine/mapper/OperationMapper.xml


src/main/resources/mapper/ParamsMapper.xml → src/main/resources/com/huimv/wine/mapper/ParamsMapper.xml


src/main/resources/mapper/RefundMapper.xml → src/main/resources/com/huimv/wine/mapper/RefundMapper.xml


src/main/resources/mapper/TradeMapper.xml → src/main/resources/com/huimv/wine/mapper/TradeMapper.xml


src/main/resources/mapper/UserMapper.xml → src/main/resources/com/huimv/wine/mapper/UserMapper.xml


src/main/resources/mapper/VersionMapper.xml → src/main/resources/com/huimv/wine/mapper/VersionMapper.xml


src/main/resources/mapper/WarnMapper.xml → src/main/resources/com/huimv/wine/mapper/WarnMapper.xml


src/main/resources/mapper/WineMapper.xml → src/main/resources/com/huimv/wine/mapper/WineMapper.xml


src/main/resources/mapper/WorkerMapper.xml → src/main/resources/com/huimv/wine/mapper/WorkerMapper.xml