|  |  | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.core.annotations.ManagerAuth; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.zy.asrs.domain.vo.PlcErrorTableVo; | 
 |  |  | import com.zy.asrs.domain.vo.SiteTableVo; | 
 |  |  | import com.zy.asrs.entity.BasDevp; | 
 |  |  | import com.zy.asrs.entity.BasSte; | 
 |  |  | import com.zy.asrs.entity.WrkCharge; | 
 |  |  | import com.zy.asrs.service.BasDevpService; | 
 |  |  | import com.zy.asrs.service.BasSteService; | 
 |  |  | import com.zy.asrs.service.WrkChargeService; | 
 |  |  | import com.zy.common.model.enums.WrkChargeType; | 
 |  |  | import com.zy.common.service.CommonService; | 
 |  |  | import com.zy.core.DevpThread; | 
 |  |  | import com.zy.core.News; | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | import com.zy.core.cache.OutputQueue; | 
 |  |  | import com.zy.core.cache.SlaveConnection; | 
 |  |  | import com.zy.core.enums.SlaveType; | 
 |  |  | import com.zy.core.enums.SteChargeType; | 
 |  |  | import com.zy.core.enums.SteStatusType; | 
 |  |  | import com.zy.core.model.DevpSlave; | 
 |  |  | import com.zy.core.model.Task; | 
 |  |  | import com.zy.core.model.protocol.StaProtocol; | 
 |  |  | import com.zy.core.model.protocol.SteProtocol; | 
 |  |  | import com.zy.core.properties.SlaveProperties; | 
 |  |  | import com.zy.core.thread.DevpThread; | 
 |  |  | import com.zy.core.thread.SiemensDevpThread; | 
 |  |  | import com.zy.core.thread.SteThread; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  |  | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 输送设备接口 | 
 |  |  |  * Created by vincent on 2020-06-01 | 
 |  |  |  */ | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | @RequestMapping("/site") | 
 |  |  | public class SiteController { | 
 |  |  | 
 |  |  |     private SlaveProperties slaveProperties; | 
 |  |  |     @Autowired | 
 |  |  |     private BasDevpService basDevpService; | 
 |  |  |     @Autowired | 
 |  |  |     private WrkChargeService wrkChargeService; | 
 |  |  |     @Autowired | 
 |  |  |     private BasSteService basSteService; | 
 |  |  |     @Autowired | 
 |  |  |     private CommonService commonService; | 
 |  |  |  | 
 |  |  |     @GetMapping("/io/mode/info/site") | 
 |  |  |     @ManagerAuth(memo = "充电模式") | 
 |  |  |     public R ioMode(){ | 
 |  |  |         List<Map<String, Object>> res = new ArrayList<>(); | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |             Map<String, Object> map1 = new HashMap<>(); | 
 |  |  |             map1.put("floor", 1); | 
 |  |  |             map1.put("modeVal", !devpThread.charge0); | 
 |  |  |             map1.put("modeDesc", !devpThread.charge0?"充电中":"关闭"); | 
 |  |  |             res.add(map1); | 
 |  |  |             Map<String, Object> map2 = new HashMap<>(); | 
 |  |  |             map2.put("floor", 2); | 
 |  |  |             map2.put("modeVal", devpThread.charge1); | 
 |  |  |             map2.put("modeDesc", devpThread.charge1?"充电中":"关闭"); | 
 |  |  |             res.add(map2); | 
 |  |  |             Map<String, Object> map3 = new HashMap<>(); | 
 |  |  |             map3.put("floor", 3); | 
 |  |  |             map3.put("modeVal", devpThread.charge2); | 
 |  |  |             map3.put("modeDesc", devpThread.charge2?"充电中":"关闭"); | 
 |  |  |             res.add(map3); | 
 |  |  |         } | 
 |  |  |         return R.ok().add(res); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/io/mode/action/site") | 
 |  |  |     @ManagerAuth(memo = "充电控制") | 
 |  |  |     public R ioModeAction(@RequestParam("floor") Integer floor, @RequestParam("charge") Boolean charge){ | 
 |  |  |         if (null != wrkChargeService.selectWorking(null, WrkChargeType.charge)) { | 
 |  |  |             return R.error("目前存在小车充电任务,请稍后再试"); | 
 |  |  |         } | 
 |  |  |         if (null != wrkChargeService.selectWorking(null, WrkChargeType.reset)) { | 
 |  |  |             return R.error("目前存在小车复位任务,请稍后再试"); | 
 |  |  |         } | 
 |  |  |         if (charge) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         SteChargeType steCharge = SteChargeType.get(floor); | 
 |  |  |         assert steCharge != null; | 
 |  |  |         Integer steNo = basSteService.hasCarOfLocNo(steCharge.locNo); | 
 |  |  |         if (Cools.isEmpty(steNo)) { | 
 |  |  |             return R.error(steNo + "号小车不在" + floor + "号充电桩,请检查小车定位"); | 
 |  |  |         } | 
 |  |  |         SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo); | 
 |  |  |         SteProtocol steProtocol = steThread.getSteProtocol(); | 
 |  |  |         BasSte basSte = basSteService.selectById(steNo); | 
 |  |  |         if (steProtocol.getMode() == 0) { | 
 |  |  |             return R.error(steNo + "号小车离线,无法操作"); | 
 |  |  |         } | 
 |  |  |         if (!steProtocol.getStatusType().equals(SteStatusType.IDLE)) { | 
 |  |  |             return R.error(steNo + "号小车不是空闲,无法操作"); | 
 |  |  |         } | 
 |  |  |         WrkCharge wrkCharge = wrkChargeService.selectWorking(steNo, WrkChargeType.reset); | 
 |  |  |         if (wrkCharge == null) { | 
 |  |  |             // 开始穿梭车复位任务 | 
 |  |  |             wrkCharge = new WrkCharge(); | 
 |  |  |             wrkCharge.setSteNo(steNo); | 
 |  |  |             wrkCharge.setWrkNo(commonService.getChargeWorkNo(6)); | 
 |  |  |             wrkCharge.setWrkSts(41L);   // 41.小车准备复位 | 
 |  |  |             wrkCharge.setCrnNo(2);  // 固定2号堆垛机 | 
 |  |  |             wrkCharge.setIoPri((double) 10); | 
 |  |  |             wrkCharge.setSourceLocNo(steCharge.locNo); | 
 |  |  |             wrkCharge.setLocNo(basSte.getIdleLoc()); | 
 |  |  |             wrkCharge.setMemo("reset"); | 
 |  |  |             wrkCharge.setAppeTime(new Date()); | 
 |  |  |             if (!wrkChargeService.insert(wrkCharge)) { | 
 |  |  |                 News.error("保存{}号穿梭车复位任务失败!!!", steNo); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return R.ok(steNo + "号小车准备离开" + floor + "号充电桩"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/table/site") | 
 |  |  |     @ManagerAuth(memo = "站点信息表") | 
 |  |  | 
 |  |  |     @ManagerAuth(memo = "修改站点数据") | 
 |  |  |     public R siteDetlUpdate(@RequestParam Integer siteId, | 
 |  |  |                             @RequestParam Short workNo, | 
 |  |  |                             @RequestParam Short staNo){ | 
 |  |  |                             @RequestParam Short staNo, | 
 |  |  |                             @RequestParam String pakMk){ | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |             Map<Integer, StaProtocol> station = devpThread.getStation(); | 
 |  |  |             for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) { | 
 |  |  |                 if (siteId.equals(entry.getKey())) { | 
 |  |  |                     StaProtocol staProtocol = entry.getValue(); | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                     if (workNo != null) { | 
 |  |  |                         staProtocol.setWorkNo(workNo); | 
 |  |  |                     } | 
 |  |  |                     if (staNo != null) { | 
 |  |  |                         staProtocol.setStaNo(staNo); | 
 |  |  |                     } | 
 |  |  |                     if (pakMk != null) { | 
 |  |  |                         staProtocol.setPakMk(pakMk.equals("Y")); | 
 |  |  |                     } | 
 |  |  |                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                     if (result) { | 
 |  |  |                         return R.ok(); |