Newspaper hai 1 ano
pai
achega
7659453b4b

+ 48 - 0
src/main/java/com/huimv/wine/entity/vo/ChangeQueryResult.java

@@ -0,0 +1,48 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+public class ChangeQueryResult {
+    private Integer id;
+    private DeviceWithIdAddrVo device;
+    private String code;
+    private String status;
+    private LocalDateTime publish;
+    private LocalDateTime finish;
+
+    private Integer w1id;
+    private String w1name;
+    private Integer w1remain;
+
+    private Integer w2id;
+    private String w2name;
+    private Integer w2remain;
+
+    private Integer w3id;
+    private String w3name;
+    private Integer w3remain;
+
+    private Integer w4id;
+    private String w4name;
+    private Integer w4remain;
+
+    private Integer w5id;
+    private String w5name;
+    private Integer w5remain;
+
+    private Integer w6id;
+    private String w6name;
+    private Integer w6remain;
+
+    private Integer w7id;
+    private String w7name;
+    private Integer w7remain;
+
+    private Integer w8id;
+    private String w8name;
+    private Integer w8remain;
+}

+ 18 - 0
src/main/java/com/huimv/wine/entity/vo/ChangeQueryResultVo.java

@@ -0,0 +1,18 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class ChangeQueryResultVo {
+    private Integer id;
+    private DeviceWithIdAddrVo device;
+    private String code;
+    private String status;
+    private LocalDateTime publish,finish;
+    private List<WineWithIdNameRemainVo> old;
+    private List<WineWithIdNameRemainVo> now;
+}

+ 14 - 0
src/main/java/com/huimv/wine/entity/vo/ChangeVo.java

@@ -0,0 +1,14 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ChangeVo {
+    private Integer id,wid,status;
+    private String device,manager,worker,code;
+    private List<WineWithIdRemainVo> old,now;
+
+
+}

+ 16 - 0
src/main/java/com/huimv/wine/entity/vo/DeviceVo.java

@@ -0,0 +1,16 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class DeviceVo {
+    private String id,addr;
+    private LocalDateTime first,last;
+    private List<WineWithIdRemainVppVo> wines;
+    private String manager,mark;
+    private Integer order,income;
+}

+ 16 - 0
src/main/java/com/huimv/wine/entity/vo/DeviceWine.java

@@ -0,0 +1,16 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class DeviceWine {
+    private Integer id;
+    private String name;
+    private Integer price;
+    private Integer degree;
+    private Integer density;
+    private String picture;
+    private String describe;
+    private Integer remain;
+    private Integer vpp;
+}

+ 9 - 0
src/main/java/com/huimv/wine/entity/vo/DeviceWithIdAddrVo.java

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class DeviceWithIdAddrVo {
+    private Integer id;
+    private String addr;
+}

+ 8 - 0
src/main/java/com/huimv/wine/entity/vo/WineWithIdNameRemainVo.java

@@ -0,0 +1,8 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class WineWithIdNameRemainVo extends WineWithIdRemainVo{
+    private String name;
+}

+ 9 - 0
src/main/java/com/huimv/wine/entity/vo/WineWithIdRemainVo.java

@@ -0,0 +1,9 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class WineWithIdRemainVo {
+    private Integer id;
+    private Integer remain;
+}

+ 8 - 0
src/main/java/com/huimv/wine/entity/vo/WineWithIdRemainVppVo.java

@@ -0,0 +1,8 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class WineWithIdRemainVppVo {
+    private Integer id,remain,vpp;
+}

+ 19 - 0
src/main/java/com/huimv/wine/entity/vo/WorkerFinishResult.java

@@ -0,0 +1,19 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class WorkerFinishResult {
+    private String id;
+    private String addr;
+    private LocalDateTime first,last;
+    private List<DeviceWine> wines;
+    private String manager;
+    private String mark;
+    private Integer order;
+    private Integer income;
+}

+ 1 - 4
src/main/java/com/huimv/wine/entity/vo/WorkerQueryResult.java

@@ -7,10 +7,7 @@ import java.util.Date;
 @Data
 public class WorkerQueryResult {
     private int id;
-    private class device{
-        private String id;
-        private String addr;
-    }
+    private DeviceWithIdAddrVo device;
     private int status;
     private Date publish,finish;
 }

+ 2 - 0
src/main/java/com/huimv/wine/mapper/ChangeMapper.java

@@ -2,6 +2,7 @@ package com.huimv.wine.mapper;
 
 import com.huimv.wine.entity.Change;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.ChangeQueryResult;
 
 /**
  * <p>
@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ChangeMapper extends BaseMapper<Change> {
 
+    ChangeQueryResult changeDetail(Integer id);
 }

+ 3 - 4
src/main/java/com/huimv/wine/mapper/DeviceMapper.java

@@ -2,11 +2,8 @@ package com.huimv.wine.mapper;
 
 import com.huimv.wine.entity.Device;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.DeviceWithIdAddrVo;
 import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
-
-import java.util.Date;
 
 /**
  * <p>
@@ -23,4 +20,6 @@ public interface DeviceMapper extends BaseMapper<Device> {
         //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);
+
+    DeviceWithIdAddrVo getDeviceByDeviceId(@Param(value = "deviceId") String deviceId);
 }

+ 173 - 21
src/main/java/com/huimv/wine/ws/WorkerController.java

@@ -1,5 +1,6 @@
 package com.huimv.wine.ws;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -7,15 +8,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.huimv.wine.common.EventWsErrUtil;
 import com.huimv.wine.entity.Change;
+import com.huimv.wine.entity.Device;
+import com.huimv.wine.entity.Operation;
 import com.huimv.wine.entity.Worker;
-import com.huimv.wine.entity.vo.WorkerQueryParam;
-import com.huimv.wine.entity.vo.WorkerQueryResult;
-import com.huimv.wine.entity.vo.WsEvent;
+import com.huimv.wine.entity.vo.*;
 import com.huimv.wine.mapper.ChangeMapper;
+import com.huimv.wine.mapper.DeviceMapper;
+import com.huimv.wine.mapper.OperationMapper;
 import com.huimv.wine.mapper.WorkerMapper;
 import com.huimv.wine.utils.*;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.socket.WebSocketMessage;
 import org.springframework.web.socket.handler.TextWebSocketHandler;
 import sun.nio.cs.ext.MacArabic;
@@ -25,8 +29,8 @@ import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
 import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * websocket接口处理类
@@ -88,23 +92,26 @@ public class WorkerController extends TextWebSocketHandler {
         }else if ("pin".equals(event)){
             keepAlive(session);
         }else {
-            if (!redisTemplate.hasKey(token)) {
+            if (!redisTemplate.hasKey("WorkerToken_"+token)) {
                 WebsocketWorkerUtil.sendMessage(session,new WsEvent("tokenExpired",null));
                 return;
             }
-            String worker = (String)redisTemplate.opsForValue().get(token);
+            String wId = (String)redisTemplate.opsForValue().get(token);
+            Worker worker = workerMapper.selectById(wId);
+            worker.setLast(LocalDateTime.now());
+            workerMapper.updateById(worker);
             switch (event){
                 case "query":
-                    query(workerMapper,session,worker, data);
+                    query(workerMapper,session,wId, data);
                     break;
                 case "detail":
-                    detail(workerMapper,session,data);
+                    detail(changeMapper,session,jsonObject.getInteger("data"));
                     break;
                 case "ready":
-                    ready(changeMapper,session, jsonObject.getInteger("data"));
+                    ready(changeMapper,session,redisTemplate,wId,jsonObject.getInteger("data"));
                     break;
                 case "finish":
-                    finish(changeMapper,session,jsonObject.getInteger("data"));
+                    finish(changeMapper,workerMapper,session,worker,jsonObject.getInteger("data"));
                     break;
                 default:
                     WebsocketWorkerUtil.sendMessage(session, EventWsErrUtil.getWsErr("unrecognized event"));
@@ -113,29 +120,178 @@ public class WorkerController extends TextWebSocketHandler {
         }
     }
 
-    private void finish(ChangeMapper changeMapper, Session session, Integer id) {
+    @Transactional
+    public void finish(ChangeMapper changeMapper, WorkerMapper workerMapper, Session session, Worker worker, Integer id) {
+        DeviceMapper deviceMapper = SpringContextUtil.getBean(DeviceMapper.class);
+        OperationMapper operationMapper = SpringContextUtil.getBean(OperationMapper.class);
         Change change = changeMapper.selectById(id);
         if (ObjectUtil.isEmpty(change)){
             WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单不存在")));
+            return;
         }
         if (change.getStatus() != 1){
             WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("请先完成上酒动作")));
+            return;
         }
+        ChangeVo changeVo = new ChangeVo();
+        BeanUtil.copyProperties(change,changeVo);
+        List<WineWithIdRemainVo> old = new ArrayList<>();
+        List<WineWithIdRemainVo> now = new ArrayList<>();
+
+        old.add(createWineWithIdRemain(change.getWine1o(),change.getRemain1o()));
+        old.add(createWineWithIdRemain(change.getWine2o(),change.getRemain2o()));
+        old.add(createWineWithIdRemain(change.getWine3o(),change.getRemain3o()));
+        old.add(createWineWithIdRemain(change.getWine4o(),change.getRemain4o()));
+
+        now.add(createWineWithIdRemain(change.getWine1n(),change.getRemain1n()));
+        now.add(createWineWithIdRemain(change.getWine2n(),change.getRemain2n()));
+        now.add(createWineWithIdRemain(change.getWine3n(),change.getRemain3n()));
+        now.add(createWineWithIdRemain(change.getWine4n(),change.getRemain4n()));
+
+        changeVo.setOld(old);
+        changeVo.setNow(now);
+
+        Device device = deviceMapper.selectById(change.getId());
+        DeviceVo deviceVo = new DeviceVo();
+        BeanUtil.copyProperties(device,deviceVo);
+        List<WineWithIdRemainVppVo> wines = new ArrayList<>();
+        wines.add(createWineWithIdRemainVpp(changeVo.getNow().get(0).getId(),changeVo.getNow().get(0).getRemain(),device.getVpp1()));
+        wines.add(createWineWithIdRemainVpp(changeVo.getNow().get(1).getId(),changeVo.getNow().get(1).getRemain(),device.getVpp2()));
+        wines.add(createWineWithIdRemainVpp(changeVo.getNow().get(2).getId(),changeVo.getNow().get(2).getRemain(),device.getVpp3()));
+        wines.add(createWineWithIdRemainVpp(changeVo.getNow().get(3).getId(),changeVo.getNow().get(3).getRemain(),device.getVpp4()));
+        deviceVo.setWines(wines);
+
+        device.setLast(new Date());
+        device.setWine1(deviceVo.getWines().get(0).getId());
+        device.setRemain1(deviceVo.getWines().get(0).getRemain());
+        device.setVpp1(deviceVo.getWines().get(0).getVpp());
+
+        device.setWine2(deviceVo.getWines().get(1).getId());
+        device.setRemain2(deviceVo.getWines().get(1).getRemain());
+        device.setVpp2(deviceVo.getWines().get(1).getVpp());
+
+        device.setWine3(deviceVo.getWines().get(2).getId());
+        device.setRemain3(deviceVo.getWines().get(2).getRemain());
+        device.setVpp3(deviceVo.getWines().get(2).getVpp());
+
+        device.setWine4(deviceVo.getWines().get(3).getId());
+        device.setRemain4(deviceVo.getWines().get(3).getRemain());
+        device.setVpp4(deviceVo.getWines().get(3).getVpp());
+
+        deviceMapper.updateById(device);
+        LocalDateTime oldFinish = change.getFinish();
+        LocalDateTime nowFinish = LocalDateTime.now();
+        change.setStatus(2);
+        change.setFinish(nowFinish);
+        changeMapper.updateById(change);
+
+        Duration between = Duration.between(oldFinish, nowFinish);
+        long seconds = between.getSeconds();
+
+        int sum = (int)(worker.getAvgCost() * (worker.getCount()) + seconds);
+        worker.setCount(worker.getCount()+1);
+        worker.setCount(worker.getTodo()-1);
+        if (seconds > worker.getMaxCost()){
+            worker.setMaxCost((int) seconds);
+        }
+        worker.setAvgCost(sum/worker.getCount());
+        workerMapper.updateById(worker);
+
+        Operation operation = new Operation();
+        operation.setUserType(1);
+        operation.setUserId(worker.getId());
+        operation.setLevel(0);
+        operation.setDescribe("完成上酒订单");
+        operationMapper.insert(operation);
+
+
+
+
+        WorkerFinishResult workerFinishResult = new WorkerFinishResult();
+        BeanUtil.copyProperties(workerFinishResult,device);
+
+
 
     }
 
-    private void ready(ChangeMapper changeMapper, Session session, Integer id) {
+    private void ready(ChangeMapper changeMapper, Session session, RedisTemplate redisTemplate, String worker, Integer id) {
         Change change = changeMapper.selectById(id);
         if (ObjectUtil.isEmpty(change)){
-            WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单不存在")));
+            WebsocketWorkerUtil.sendMessage(session,new WsEvent("readyResult",Result.fail("订单不存在")));
+            return;
         }
         if (change.getStatus() != 0){
-            WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单状态异常")));
+            WebsocketWorkerUtil.sendMessage(session,new WsEvent("readyResult",Result.fail("订单状态异常")));
+            return;
         }
+        Map<String, Session> sessionMap = WebsocketSellerUtil.getSession();
+        if (sessionMap.containsKey(change.getDevice())){
+            try {
+                redisTemplate.opsForValue().set("Change_"+change.getDevice()+"_"+worker,id,Duration.ofSeconds(300));
+            } catch (Exception e) {
+                WsEvent wsEvent = new WsEvent("readyResult",Result.fail("授权码存储失败"));
+                WebsocketWorkerUtil.sendMessage(session,wsEvent);
+                e.printStackTrace();
+                return;
+            }
+            Map map = new HashMap();
+            map.put("type","Changing");
+            map.put("user_type","worker");
+            map.put("user_id",worker);
+            WsEvent wsEvent = new WsEvent("readyResult",Result.success(map));
+            WebsocketWorkerUtil.sendMessage(session,wsEvent);
+            return;
+        }
+        WsEvent wsEvent = new WsEvent("readyResult",Result.fail("设备离线"));
+        WebsocketWorkerUtil.sendMessage(session,wsEvent);
+
     }
 
-    private void detail(WorkerMapper WorkerMapper, Session session, JSONObject data) {
+    private void detail(ChangeMapper changeMapper, Session session, Integer id) {
+        ChangeQueryResult changeQueryResult = changeMapper.changeDetail(id);
+        ChangeQueryResultVo changeQueryResultVo = new ChangeQueryResultVo();
+        BeanUtil.copyProperties(changeQueryResultVo,changeQueryResult);
+        List<WineWithIdNameRemainVo> old = new ArrayList<>();
+        List<WineWithIdNameRemainVo> now = new ArrayList<>();
+
+        old.add(createWineWithIdNameRemain(changeQueryResult.getW1id(),changeQueryResult.getW1name(),changeQueryResult.getW1remain()));
+        old.add(createWineWithIdNameRemain(changeQueryResult.getW2id(),changeQueryResult.getW2name(),changeQueryResult.getW2remain()));
+        old.add(createWineWithIdNameRemain(changeQueryResult.getW3id(),changeQueryResult.getW3name(),changeQueryResult.getW3remain()));
+        old.add(createWineWithIdNameRemain(changeQueryResult.getW4id(),changeQueryResult.getW4name(),changeQueryResult.getW4remain()));
+
+        now.add(createWineWithIdNameRemain(changeQueryResult.getW5id(),changeQueryResult.getW5name(),changeQueryResult.getW5remain()));
+        now.add(createWineWithIdNameRemain(changeQueryResult.getW6id(),changeQueryResult.getW6name(),changeQueryResult.getW6remain()));
+        now.add(createWineWithIdNameRemain(changeQueryResult.getW7id(),changeQueryResult.getW7name(),changeQueryResult.getW7remain()));
+        now.add(createWineWithIdNameRemain(changeQueryResult.getW8id(),changeQueryResult.getW8name(),changeQueryResult.getW8remain()));
 
+        changeQueryResultVo.setOld(old);
+        changeQueryResultVo.setNow(now);
+
+        WsEvent wsEvent = new WsEvent("detailResult",Result.success(changeQueryResultVo));
+        WebsocketWorkerUtil.sendMessage(session,wsEvent);
+    }
+
+    private static WineWithIdRemainVppVo createWineWithIdRemainVpp(int id, int remain,int vpp) {
+        WineWithIdRemainVppVo wine = new WineWithIdRemainVppVo();
+        wine.setId(id);
+        wine.setVpp(vpp);
+        wine.setRemain(remain);
+        return wine;
+    }
+
+    private static WineWithIdNameRemainVo createWineWithIdNameRemain(int id, String name, int remain) {
+        WineWithIdNameRemainVo wine = new WineWithIdNameRemainVo();
+        wine.setId(id);
+        wine.setName(name);
+        wine.setRemain(remain);
+        return wine;
+    }
+
+    private static WineWithIdRemainVo createWineWithIdRemain(int id, int remain) {
+        WineWithIdRemainVo wine = new WineWithIdRemainVo();
+        wine.setId(id);
+        wine.setRemain(remain);
+        return wine;
     }
 
     private void query(WorkerMapper WorkerMapper, Session session,String worker, JSONObject data) {
@@ -159,7 +315,7 @@ public class WorkerController extends TextWebSocketHandler {
             WsEvent wsEvent = new WsEvent("loginResult",Result.fail("用户名或密码错误"));
             WebsocketWorkerUtil.sendMessage(session,wsEvent);
         }else {
-            redisTemplate.opsForValue().set(token,worker.getId(), Duration.ofDays(7));
+            redisTemplate.opsForValue().set("WorkerToken_"+token,worker.getId(), Duration.ofDays(7));
             WsEvent wsEvent = new WsEvent("loginResult",Result.success(token));
             WebsocketWorkerUtil.sendMessage(session,wsEvent);
         }
@@ -170,10 +326,6 @@ public class WorkerController extends TextWebSocketHandler {
         WebsocketSellerUtil.sendMessage(session,new WsEvent("pon",null));
     }
 
-    private void loginSocket(String message, Session session) {
-
-    }
-
     /**
      * 处理用户活连接异常
      *

+ 13 - 0
src/main/resources/com/huimv/wine/mapper/ChangeMapper.xml

@@ -30,5 +30,18 @@
         <result column="wine4n" property="wine4n" />
         <result column="remain4n" property="remain4n" />
     </resultMap>
+    <select id="changeDetail" resultType="com.huimv.wine.entity.vo.ChangeQueryResult">
+        SELECT c.`id`,d.`id`,d.`addr`,c.`code`,c.`status`,c.`publish`,c.`finish`,w1.`id`,
+        w1.`name`,c.`remain1o`,w2.`id`,w2.`name`,c.`remain2o`,
+        w3.`id`,w3.`name`,c.`remain3o`,w4.`id`,w4.`name`,c.`remain4o`,
+        w5.`id`,w5.`name`,c.`remain1n`,w6.`id`,w6.`name`,c.`remain2n`,
+        w7.`id`,w7.`name`,c.`remain3n`,w8.`id`,w8.`name`,c.`remain4n`
+        FROM `change` AS c LEFT JOIN `device` AS d ON c.`device`=d.`id`
+        INNER JOIN `wine` AS w1 ON w1.`id`=c.`wine1o` INNER JOIN `wine` AS w2 ON w2.`id`=c.`wine2o`
+        INNER JOIN `wine` AS w3 ON w3.`id`=c.`wine3o` INNER JOIN `wine` AS w4 ON w4.`id`=c.`wine4o`
+        INNER JOIN `wine` AS w5 ON w5.`id`=c.`wine1n` INNER JOIN `wine` AS w6 ON w6.`id`=c.`wine2n`
+        INNER JOIN `wine` AS w7 ON w7.`id`=c.`wine3n` INNER JOIN `wine` AS w8 ON w8.`id`=c.`wine4n`
+        WHERE c.`id`= #{Id}
+    </select>
 
 </mapper>

+ 3 - 0
src/main/resources/com/huimv/wine/mapper/DeviceMapper.xml

@@ -31,6 +31,9 @@
 		`wine3`,`remain3`,`vpp3`,`wine4`,`remain4`,`vpp4`,`manager`,`mark`,`order`,`income`
 		FROM `device` WHERE `id`= #{seq};
     </select>
+    <select id="getDeviceByDeviceId" resultType="com.huimv.wine.entity.vo.DeviceWithIdAddrVo">
+        SELECT `id`,`addr` FROM `device` WHERE `id`= #{deviceId};
+    </select>
 
     <update id="updateDeviceById" parameterType="com.huimv.wine.entity.Device" >
 

+ 7 - 13
src/main/resources/com/huimv/wine/mapper/WorkerMapper.xml

@@ -3,24 +3,18 @@
 <mapper namespace="com.huimv.wine.mapper.WorkerMapper">
 
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.huimv.wine.entity.Worker">
+    <resultMap id="WorkerQueryResultMap" type="com.huimv.wine.entity.vo.WorkerQueryResult">
         <id column="id" property="id" />
-        <result column="first" property="first" />
-        <result column="last" property="last" />
-        <result column="name" property="name" />
-        <result column="phone" property="phone" />
-        <result column="password" property="password" />
-        <result column="manager" property="manager" />
-        <result column="count" property="count" />
-        <result column="todo" property="todo" />
-        <result column="avg_cost" property="avgCost" />
-        <result column="max_cost" property="maxCost" />
+        <result column="status" property="status" />
+        <result column="publish" property="publish" />
+        <result column="finish" property="finish" />
+        <association property="device" javaType="com.huimv.wine.entity.vo.DeviceWithIdAddrVo" select="com.huimv.wine.mapper.DeviceMapper.getDeviceByDeviceId" column="device_id"/>
     </resultMap>
     <select id="login" resultType="com.huimv.wine.entity.Worker">
         select *  FROM `worker` WHERE phone=#{account} AND password = #{password}
     </select>
-    <select id="ChangesQueryForWorker" resultType="com.huimv.wine.entity.vo.WorkerQueryResult">
-        SELECT c.`id` as 'id',d.`id` as 'device.id',d.`addr` as 'device.addr',c.`status` as 'status',c.`publish` as 'publish',c.`finish` as 'finish'
+    <select id="ChangesQueryForWorker" resultMap="WorkerQueryResultMap">
+        SELECT c.`id` as 'id',d.`id` as 'device_id',c.`status` as 'status',c.`publish` as 'publish',c.`finish` as 'finish'
                 FROM `change` AS c LEFT JOIN `device` AS d ON c.`device`=d.`id`
 				WHERE c.`status`=#{status} AND c.`worker`=#{worker} AND (d.`id` LIKE #{like} OR d.`addr` LIKE #{like})
     </select>