Browse Source

优化内容:修改密码接口,手动AGV接口调用,主轴利用率设置0兜底,自定义订单自动删除功能完善

BSWYZ 4 days ago
parent
commit
3387ea09f0

+ 1 - 1
imcs-admin-boot/imcs-authority-controller/src/main/java/com/github/zuihou/authority/controller/auth/UserController.java

@@ -276,7 +276,7 @@ public class UserController extends SuperCacheController<UserService, Long, User
      * @return
      */
     @ApiOperation(value = "重置密码", notes = "重置密码")
-    @GetMapping("/reset")
+    @PostMapping("/reset")
     @SysLog("'重置密码:' + #data.id")
     public R<Boolean> reset(@RequestBody @Validated(SuperEntity.Update.class) UserUpdatePasswordDTO data) {
         baseService.reset(data);

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/mq/TaskWorkNode.java

@@ -394,7 +394,7 @@ public class TaskWorkNode {
                             taskNodeService.remove(new LbqWrapper<TaskNode>().eq(TaskNode::getCompleteBatchNo, taskNode.getCompleteBatchNo()));
                             taskMapper.deleteById(tTask.getId());
                             workpieceService.removeById(currWorkpiece.getId());
-                            planMapper.deleteById(plan.getId());
+                            planMapper.delete(new LbqWrapper<Plan>().eq(Plan::getOrderId, order.getId()));
                             orderMapper.deleteById(order.getId());
                             if(StringUtils.isNotEmpty(orderTask.getConfBatchNo())){
                                 //删除自动生成零件库位信息

+ 177 - 142
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/statisticalAnalysis/impl/ProductLinePerformanceServiceImpl.java

@@ -76,8 +76,8 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     public IPage<TaskNode> pageList(IPage page, LbqWrapper<TaskNode> wrapper) {
         IPage<TaskNode> taskNodeIPage = baseMapper.pageList(page, wrapper, new DataScope());
         List<TaskNode> records = taskNodeIPage.getRecords();
-        records.forEach(item->{
-            if (item.getEndTime() != null && item.getStartTime() != null){
+        records.forEach(item -> {
+            if (item.getEndTime() != null && item.getStartTime() != null) {
                 String datePoor = DateUtil.getDatePoor(item.getEndTime(), item.getStartTime());
                 item.setStatisticalHours(datePoor);
             }
@@ -87,10 +87,10 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     }
 
     @Override
-    public List<TaskNode> queryOperatorDetailPerformance(TaskNode taskNode){
+    public List<TaskNode> queryOperatorDetailPerformance(TaskNode taskNode) {
         List<TaskNode> taskNodes = baseMapper.queryOperatorDetailPerformance(taskNode);
-        taskNodes.forEach(item->{
-            if (item.getEndTime() != null && item.getStartTime() != null){
+        taskNodes.forEach(item -> {
+            if (item.getEndTime() != null && item.getStartTime() != null) {
                 String datePoor = DateUtil.getDatePoor(item.getEndTime(), item.getStartTime());
                 item.setStatisticalHours(datePoor);
             }
@@ -105,14 +105,14 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     @Override
     public List<TaskNode> queryProductionLineOee(TaskNode params) {
-        if(null == params.getStatisticalDate()){
+        if (null == params.getStatisticalDate()) {
             Calendar calCalendar = Calendar.getInstance();
             int monthHour = calCalendar.getActualMaximum(Calendar.DATE) * 24;
             params.setMonthHour(monthHour);
-        }else{
+        } else {
             Calendar calCalendar = Calendar.getInstance();
-            if(StringUtils.isNotEmpty(params.getStatisticalDate())){
-                Date searchDate = com.github.zuihou.common.util.DateUtil.stringToDate0(params.getStatisticalDate(),"yyyy-MM");
+            if (StringUtils.isNotEmpty(params.getStatisticalDate())) {
+                Date searchDate = com.github.zuihou.common.util.DateUtil.stringToDate0(params.getStatisticalDate(), "yyyy-MM");
                 calCalendar.setTime(searchDate);
             }
             int monthHour = calCalendar.getActualMaximum(Calendar.DATE) * 24;
@@ -123,11 +123,11 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
 
     @Override
-    public IPage<ProductDto> getProductStatistics(Long page, Long limit, ProductVo vo){
+    public IPage<ProductDto> getProductStatistics(Long page, Long limit, ProductVo vo) {
         List<ProductDto> statistics = workpieceMapper.getProductStatistics(vo);
         if (!CollectionUtil.isEmpty(statistics)) {
-            statistics.stream().forEach(item->{
-                if (item.getEndTime() != null && item.getStartTime() != null){
+            statistics.stream().forEach(item -> {
+                if (item.getEndTime() != null && item.getStartTime() != null) {
                     String datePoor = DateUtil.getDatePoor(item.getEndTime(), item.getStartTime());
                     item.setHour(datePoor);
                 }
@@ -140,6 +140,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     /**
      * 产品流转详情
+     *
      * @return
      */
     @Override
@@ -176,7 +177,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         response.setHeader("content-Type", "application/vnd.ms-excel");
         // 设计导出文件的名称,尽量不要中文
         String fileName = new String("产品流转详汇总.xls".getBytes(), "ISO-8859-1");
-        response.setHeader("Content-Disposition","attachment;filename="+ fileName);
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
         //输出流。
         ServletOutputStream out = response.getOutputStream();
         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("产品流转详汇总", "产品流转详汇总"), ProductDto.class, productStatistics);
@@ -187,23 +188,23 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     public void expectProductInfo(HttpServletResponse response) throws IOException {
         ProductVo vo = new ProductVo();
         List<ProductInfoDto> productInfoDtos = workpieceMapper.selectProductInfo(vo);
-        List<ProductInfoDto> productInfos = productInfoDtos.stream().map(item->{
+        List<ProductInfoDto> productInfos = productInfoDtos.stream().map(item -> {
             ProductInfoDto productInfoDto = BeanUtil.toBean(item, ProductInfoDto.class);
             if (item.getEndTime() != null && item.getStartTime() != null) {
                 String hour = DateUtil.getDatePoor(item.getEndTime(), item.getStartTime());
                 productInfoDto.setHour(hour);
-            }else {
+            } else {
                 productInfoDto.setHour("0");
             }
             return productInfoDto;
         }).collect(Collectors.toList());
-        List<ProductInfoExcelDto> excels =productInfos.stream().map(item->{
-            ProductInfoExcelDto excelDto = BeanUtil.toBean(item,ProductInfoExcelDto.class);
+        List<ProductInfoExcelDto> excels = productInfos.stream().map(item -> {
+            ProductInfoExcelDto excelDto = BeanUtil.toBean(item, ProductInfoExcelDto.class);
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            excelDto.setPlanStartTime(item.getPlanStartTime()!=null ? simpleDateFormat.format(item.getPlanStartTime()):"");
-            excelDto.setPlanEndTime(item.getPlanEndTime()!=null ? simpleDateFormat.format(item.getPlanEndTime()):"");
-            excelDto.setStartTime(item.getStartTime()!=null ? simpleDateFormat.format(item.getStartTime()):"");
-            excelDto.setEndTime(item.getEndTime()!=null ? simpleDateFormat.format(item.getEndTime()):"");
+            excelDto.setPlanStartTime(item.getPlanStartTime() != null ? simpleDateFormat.format(item.getPlanStartTime()) : "");
+            excelDto.setPlanEndTime(item.getPlanEndTime() != null ? simpleDateFormat.format(item.getPlanEndTime()) : "");
+            excelDto.setStartTime(item.getStartTime() != null ? simpleDateFormat.format(item.getStartTime()) : "");
+            excelDto.setEndTime(item.getEndTime() != null ? simpleDateFormat.format(item.getEndTime()) : "");
             return excelDto;
         }).collect(Collectors.toList());
         // 设置响应输出的头类型
@@ -211,7 +212,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         response.setHeader("content-Type", "application/vnd.ms-excel");
         // 设计导出文件的名称,尽量不要中文
         String fileName = new String("产品流转详情.xls".getBytes(), "ISO-8859-1");
-        response.setHeader("Content-Disposition","attachment;filename="+ fileName);
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
         //输出流。
         ServletOutputStream out = response.getOutputStream();
         //将数据导出到Excel
@@ -222,9 +223,9 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     }
 
 
-
     /**
      * 设备工时统计
+     *
      * @param page
      * @param limit
      * @param vo
@@ -233,9 +234,9 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     @Override
     public IPage<ProductionStatisticalDto> queryProcedure(Long page, Long limit, ProductVo vo) {
         List<ProductionStatisticalDto> list = baseMapper.queryProcedure(vo);
-        if (!CollectionUtil.isEmpty(list)){
-            list.stream().forEach(item->{
-                if (item.getEndTime() != null && item.getStartTime() != null){
+        if (!CollectionUtil.isEmpty(list)) {
+            list.stream().forEach(item -> {
+                if (item.getEndTime() != null && item.getStartTime() != null) {
                     String datePoor = DateUtil.getDatePoor(item.getEndTime(), item.getStartTime());
                     item.setHour(datePoor);
                 }
@@ -248,6 +249,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     /**
      * 设备工时导出
+     *
      * @param request
      * @param response
      */
@@ -260,7 +262,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         response.setHeader("content-Type", "application/vnd.ms-excel");
         // 设计导出文件的名称,尽量不要中文
         String fileName = new String("设备工时管理.xls".getBytes(), "ISO-8859-1");
-        response.setHeader("Content-Disposition","attachment;filename="+ fileName);
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
         //输出流。
         ServletOutputStream out = response.getOutputStream();
         // 创建参数对象(用来设定excel得sheet的内容等信息)
@@ -271,17 +273,19 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     /**
      * 产品加工汇总
+     *
      * @return 结果
      */
     @Override
     public IPage<ProcedureSumDto> procedureSum(Long page, Long limit, ProductVo vo) {
-        Page<ProcedureSumDto> pageParam = new Page<>(page,limit);
-        IPage<ProcedureSumDto> list = baseMapper.procedureSum(pageParam,vo);
+        Page<ProcedureSumDto> pageParam = new Page<>(page, limit);
+        IPage<ProcedureSumDto> list = baseMapper.procedureSum(pageParam, vo);
         return list;
     }
 
     /**
      * 产品加工详情
+     *
      * @param params
      * @return 结果
      */
@@ -301,7 +305,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
                 procedures.put("scrapNum", item.getScrapNum());
                 return procedures;
             }).collect(Collectors.toList());
-            procedureInfo.put("procedureInfos",procedureInfos);
+            procedureInfo.put("procedureInfos", procedureInfos);
             return procedureInfo;
         }
         return null;
@@ -309,6 +313,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     /**
      * 产品加工汇总导出
+     *
      * @param request
      * @param response
      */
@@ -320,7 +325,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         response.setHeader("content-Type", "application/vnd.ms-excel");
         // 设计导出文件的名称,尽量不要中文
         String fileName = new String("产品加工汇总.xls".getBytes(), "ISO-8859-1");
-        response.setHeader("Content-Disposition","attachment;filename="+ fileName);
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
         //输出流。
         ServletOutputStream out = response.getOutputStream();
         // 创建参数对象(用来设定excel得sheet的内容等信息)
@@ -330,53 +335,52 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     }
 
     @Override
-    public IPage<DeviceResourceSumVo> deviceResourceSum(IPage page,Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+    public IPage<DeviceResourceSumVo> deviceResourceSum(IPage page, Map<String, Object> params) {
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
-        }
-        else if(params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())){
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
+        } else if (params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())) {
             Date date = DateUtil.stringToDate0(params.get("month").toString(), "yyyy-MM");
             params.put("daySpan", DateUtil.getDaysOfMonth(date));
-        }else if(params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())){
+        } else if (params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())) {
             Date date = DateUtil.stringToDate0(params.get("years").toString(), "yyyy");
             params.put("daySpan", DateUtil.getDaysOfYear(date));
-        }else if(params.containsKey("startDate") && params.containsKey("endDate")){
+        } else if (params.containsKey("startDate") && params.containsKey("endDate")) {
             List<String> datas = DateUtils.getBetweenDay(params.get("startDate").toString(), params.get("endDate").toString());
-            params.put("daySpan", datas.size()-1);
+            params.put("daySpan", datas.size() - 1);
         }
-        return baseMapper.deviceResourceSum(page,params);
+        return baseMapper.deviceResourceSum(page, params);
     }
 
     @Override
     public IPage<DeviceResourceDetailVo> deviceResourceDetail(IPage page, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
-        return baseMapper.deviceResourceDetail(page,params);
+        return baseMapper.deviceResourceDetail(page, params);
     }
 
     @Override
-    public Map<String,List<String>> resourceRate(Map<String, Object> params) {
+    public Map<String, List<String>> resourceRate(Map<String, Object> params) {
         String date = null;
-        if(Objects.isNull(params.get("date")) || StringUtils.isEmpty(params.get("date").toString())){
+        if (Objects.isNull(params.get("date")) || StringUtils.isEmpty(params.get("date").toString())) {
             //默认当天
             date = DateUtil.dateToString0(new Date(), "yyyy-MM-dd");
-        }else{
+        } else {
             date = params.get("date").toString();
         }
-        Date queryDate = cn.hutool.core.date.DateUtil.parse(date,"yyyy-MM-dd");
-        Date queryStartTime = cn.hutool.core.date.DateUtil.offsetHour(queryDate,-1);
-        Date queryEndTime = cn.hutool.core.date.DateUtil.offsetHour(queryDate,26);
-        params.put("startTime",DateUtil.dateToString0(queryStartTime, "yyyy-MM-dd HH:mm:ss"));
-        params.put("endTime",DateUtil.dateToString0(queryEndTime, "yyyy-MM-dd HH:mm:ss"));
+        Date queryDate = cn.hutool.core.date.DateUtil.parse(date, "yyyy-MM-dd");
+        Date queryStartTime = cn.hutool.core.date.DateUtil.offsetHour(queryDate, -1);
+        Date queryEndTime = cn.hutool.core.date.DateUtil.offsetHour(queryDate, 26);
+        params.put("startTime", DateUtil.dateToString0(queryStartTime, "yyyy-MM-dd HH:mm:ss"));
+        params.put("endTime", DateUtil.dateToString0(queryEndTime, "yyyy-MM-dd HH:mm:ss"));
 
         List<DeviceResourceDetailVo> deviceResourceDetailVos = baseMapper.resourceRate(params);
 
-        Map<String,List<String>> map = new HashMap<>();
+        Map<String, List<String>> map = new HashMap<>();
         List<String> hours = new ArrayList<>();
         List<String> rateList = new ArrayList<>();
 
@@ -384,28 +388,28 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         //判断所选日期是否是当前日期
         int n = 0;
         Date nowDate = new Date();
-        if(Objects.isNull(params.get("date")) || StringUtils.isEmpty(params.get("date").toString()) || DateUtil.dateToString0(nowDate, "yyyy-MM-dd").equals( params.get("date").toString())){
+        if (Objects.isNull(params.get("date")) || StringUtils.isEmpty(params.get("date").toString()) || DateUtil.dateToString0(nowDate, "yyyy-MM-dd").equals(params.get("date").toString())) {
             String x = DateUtil.dateToString0(nowDate, "HH");
             //if(x.indexOf("0") == 0){
             //    x = x.substring(x.indexOf("0"));
             //}
             n = Integer.parseInt(x);
-        }else{
+        } else {
             n = 24;
         }
 
-        hours = IntStream.rangeClosed(0,n).boxed().map(item->{
-            return item<10 ? "0"+item.toString() : item.toString() ;
+        hours = IntStream.rangeClosed(0, n).boxed().map(item -> {
+            return item < 10 ? "0" + item.toString() : item.toString();
         }).collect(Collectors.toList());
 
-        if(CollectionUtil.isEmpty(deviceResourceDetailVos)){
+        if (CollectionUtil.isEmpty(deviceResourceDetailVos)) {
             String[] arrs = new String[n];
             Arrays.fill(arrs, "0");
             rateList = Arrays.asList(arrs);
-        }else{
-             Date startDate = DateUtil.stringToDate0(date+" 00:00:00","yyyy-MM-dd HH:mm:ss");
+        } else {
+            Date startDate = DateUtil.stringToDate0(date + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
 
-            for(int i=1;i<=n;i++) {
+            for (int i = 1; i <= n; i++) {
                 String nowTime = date + " " + hours.get(i) + ":00:00";
                 Date endDate = DateUtil.stringToDate0(nowTime, "yyyy-MM-dd HH:mm:ss");
 
@@ -417,43 +421,74 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
                     Date startTime = deviceResourceDetailVo.getStartTime();
                     Date endTime = Objects.isNull(deviceResourceDetailVo.getEndTime()) ? new Date() : deviceResourceDetailVo.getEndTime();
 
-                    if ((startDate.after(startTime) && startDate.after(endTime)) || (endDate.before(startTime) && endDate.before(endTime))) {
-                        continue;
+//                    if ((startDate.after(startTime) && startDate.after(endTime)) || (endDate.before(startTime) && endDate.before(endTime))) {
+//                        continue;
+//                    } else {
+//                        if (startDate.after(startTime) && startDate.before(endTime) && endDate.after(endTime)) {
+//                            jgTime += endTime.getTime() - startDate.getTime();
+//                        } else if (startDate.after(startTime) && endDate.before(endTime)) {
+//                            jgTime += endDate.getTime() - startDate.getTime();
+//                        } else if (endDate.after(startTime) && endDate.before(endTime)) {
+//                            jgTime += endDate.getTime() - startTime.getTime();
+//                        } else if (endDate.after(startTime) && endDate.after(endTime) && startDate.before(startTime)) {
+//                            jgTime += endTime.getTime() - startTime.getTime();
+//                        } else if (endDate.after(startTime) && endDate.before(endTime)) {
+//                            jgTime += endDate.getTime() - startTime.getTime();
+//                        }
+//                    }
+                    // 定义两个时间区间:[事件区间] startDate~endDate;[参考区间] startTime~endTime
+                    // 先判断是否无重叠:事件区间完全在参考区间之前,或完全在参考区间之后
+                    if (endDate.before(startTime) || startDate.after(endTime)) {
+                        continue; // 无重叠,跳过
                     } else {
-                        if (startDate.after(startTime) && startDate.before(endTime) && endDate.after(endTime)) {
-                            jgTime += endTime.getTime() -  startDate.getTime();
-                        } else if (startDate.after(startTime) && endDate.before(endTime)) {
-                            jgTime += endDate.getTime() - startDate.getTime();
-                        } else if (endDate.after(startTime) && endDate.before(endTime)) {
-                            jgTime += endDate.getTime() - startTime.getTime();
-                        } else if (endDate.after(startTime) && endDate.after(endTime) && startDate.before(startTime)) {
-                            jgTime += endTime.getTime() - startTime.getTime();
-                        } else if (endDate.after(startTime) && endDate.before(endTime)) {
-                            jgTime += endDate.getTime() - startTime.getTime();
-                        }
+                        // 有重叠,计算重叠时长
+                        // 重叠区间的开始 = 两个区间的"较晚开始时间"
+                        long overlapStart = Math.max(startDate.getTime(), startTime.getTime());
+                        // 重叠区间的结束 = 两个区间的"较早结束时间"
+                        long overlapEnd = Math.min(endDate.getTime(), endTime.getTime());
+                        // 累加重叠时长(确保结束时间 >= 开始时间,避免负数)
+                        jgTime += Math.max(0, overlapEnd - overlapStart);
                     }
-                    expectTime += (int)Float.parseFloat(deviceResourceDetailVo.getExpectTime());
-                    realTime += (int)Float.parseFloat(deviceResourceDetailVo.getRealTime());
-                    delayTime += (realTime > 1.5*expectTime)? realTime-1.5*expectTime : 0;
+                    expectTime += (int) Float.parseFloat(deviceResourceDetailVo.getExpectTime());
+                    realTime += (int) Float.parseFloat(deviceResourceDetailVo.getRealTime());
+                    delayTime += (realTime > 1.5 * expectTime) ? realTime - 1.5 * expectTime : 0;
                 }
 
                 BigDecimal jgBig = new BigDecimal(jgTime);
                 BigDecimal sumBig = new BigDecimal((endDate.getTime() - startDate.getTime()));
                 BigDecimal minutes = jgBig.divide(new BigDecimal(60000), 2, BigDecimal.ROUND_HALF_UP);
-
-                if(delayTime>0){
+                System.out.println("jgBig = " + jgBig + "sumBig = " + sumBig + "minutes = " + minutes);
+                if (delayTime > 0) {
+//                    minutes 表示实际使用的分钟数
                     minutes = minutes.subtract(new BigDecimal(delayTime));
                 }
 
+//                BigDecimal sumMinutes = sumBig.divide(new BigDecimal(60000), 2, BigDecimal.ROUND_HALF_UP);
+//                BigDecimal actualTimeRate = minutes.divide(sumMinutes, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
+//                sumMinutes 表示总时间分钟数
                 BigDecimal sumMinutes = sumBig.divide(new BigDecimal(60000), 2, BigDecimal.ROUND_HALF_UP);
-                BigDecimal actualTimeRate = minutes.divide(sumMinutes, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
+                BigDecimal actualTimeRate;
+
+                // 检查sumMinutes是否为0,避免除以0的异常
+                if (sumMinutes.compareTo(BigDecimal.ZERO) == 0) {
+                    // 当总和为0时,可根据业务需求设置默认值,这里设为0
+                    actualTimeRate = BigDecimal.ZERO;
+                } else {
+                    // 正常计算百分比
+                    actualTimeRate = minutes.divide(sumMinutes, 2, BigDecimal.ROUND_HALF_UP)
+                            .multiply(new BigDecimal("100"));
+                }
+                // 若结果为负数,则设为0
+                if (actualTimeRate.compareTo(BigDecimal.ZERO) < 0) {
+                    actualTimeRate = BigDecimal.ZERO;
+                }
                 rateList.add(actualTimeRate.toString());
 
             }
         }
 
-        map.put("hour",hours);
-        map.put("rate",rateList);
+        map.put("hour", hours);
+        map.put("rate", rateList);
 
         return map;
     }
@@ -462,12 +497,12 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     public IPage<DeviceResourceDetailVo> workHourReport(IPage page, Map<String, Object> params) {
         IPage<DeviceResourceDetailVo> deviceResourceDetailVoIPage = baseMapper.workHourReport(page, params);
 
-        if(deviceResourceDetailVoIPage !=null && !CollectionUtil.isEmpty(deviceResourceDetailVoIPage.getRecords())){
-            for(DeviceResourceDetailVo deviceResourceDetailVo:deviceResourceDetailVoIPage.getRecords()){
+        if (deviceResourceDetailVoIPage != null && !CollectionUtil.isEmpty(deviceResourceDetailVoIPage.getRecords())) {
+            for (DeviceResourceDetailVo deviceResourceDetailVo : deviceResourceDetailVoIPage.getRecords()) {
                 float actualWorkHour = 0;
-                if(deviceResourceDetailVo.getStartTime() == null || deviceResourceDetailVo.getEndTime() == null){
+                if (deviceResourceDetailVo.getStartTime() == null || deviceResourceDetailVo.getEndTime() == null) {
                     actualWorkHour = 30;
-                }else {
+                } else {
                     long between = cn.hutool.core.date.DateUtil.between(deviceResourceDetailVo.getStartTime(), deviceResourceDetailVo.getEndTime(), DateUnit.MINUTE);
                     actualWorkHour = between;
                 }
@@ -484,20 +519,20 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     @Override
     public IPage<DeviceResourceDetailVo> otherHourReport(IPage page, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
 
         IPage<DeviceResourceDetailVo> deviceResourceDetailVoIPage = baseMapper.otherHourReport(page, params);
 
-        if(deviceResourceDetailVoIPage !=null && !CollectionUtil.isEmpty(deviceResourceDetailVoIPage.getRecords())){
-            for(DeviceResourceDetailVo deviceResourceDetailVo:deviceResourceDetailVoIPage.getRecords()){
+        if (deviceResourceDetailVoIPage != null && !CollectionUtil.isEmpty(deviceResourceDetailVoIPage.getRecords())) {
+            for (DeviceResourceDetailVo deviceResourceDetailVo : deviceResourceDetailVoIPage.getRecords()) {
                 float actualWorkHour = 0;
-                if(deviceResourceDetailVo.getStartTime() == null || deviceResourceDetailVo.getEndTime() == null){
+                if (deviceResourceDetailVo.getStartTime() == null || deviceResourceDetailVo.getEndTime() == null) {
                     actualWorkHour = 5;
-                }else {
+                } else {
                     long between = cn.hutool.core.date.DateUtil.between(deviceResourceDetailVo.getStartTime(), deviceResourceDetailVo.getEndTime(), DateUnit.MINUTE);
                     actualWorkHour = between;
                 }
@@ -509,20 +544,20 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     @Override
     public List<Map<String, Object>> taskResourceSum(Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
         params.put("taskName", "料");
         return baseMapper.taskResourceSum(params, new DataScope());
     }
 
     @Override
-    public IPage<TTask> taskResourceDetail(IPage pageInfo, Map<String,Object> params) {
+    public IPage<TTask> taskResourceDetail(IPage pageInfo, Map<String, Object> params) {
         LbqWrapper<TTask> lbqWrapper = new LbqWrapper<TTask>();
         lbqWrapper.like(TTask::getProcedureName, "料");
-        String taskType = params.containsKey("taskType") && StringUtils.isNotEmpty(params.get("taskType").toString())? params.get("taskType").toString() : null ;
+        String taskType = params.containsKey("taskType") && StringUtils.isNotEmpty(params.get("taskType").toString()) ? params.get("taskType").toString() : null;
         /*
         if(params.containsKey("taskType") && StringUtils.isNotEmpty(params.get("taskType").toString())){
             String taskType = params.get("taskType").toString();
@@ -536,26 +571,26 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
             //lbqWrapper.apply("s.procedure_no like {0} ", "OP%"+taskType);
         } */
         lbqWrapper.eq(TTask::getStatus, "3");
-        if(params.containsKey("resourceId")){
-            if(taskType==null) {
+        if (params.containsKey("resourceId")) {
+            if (taskType == null) {
                 lbqWrapper.eq(TTask::getResourceId, params.get("resourceId").toString());
-            }else{
+            } else {
                 lbqWrapper.eq(TTask::getUpdateUser, params.get("resourceId").toString());
             }
         }
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            lbqWrapper.apply("DATE_FORMAT(s.end_time, '%Y-%m-%d') = {0}", DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
-        }else if(params.containsKey("month")){
+            lbqWrapper.apply("DATE_FORMAT(s.end_time, '%Y-%m-%d') = {0}", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
+        } else if (params.containsKey("month")) {
             lbqWrapper.apply("DATE_FORMAT(s.end_time, '%Y-%m') = {0}", params.get("month").toString());
-        }else if(params.containsKey("years")){
+        } else if (params.containsKey("years")) {
             lbqWrapper.apply("DATE_FORMAT(s.end_time, '%Y') = {0}", params.get("years").toString());
-        }else if(params.containsKey("startDate") || params.containsKey("endDate")){
-            if(params.containsKey("startDate")){
+        } else if (params.containsKey("startDate") || params.containsKey("endDate")) {
+            if (params.containsKey("startDate")) {
                 lbqWrapper.geHeader(TTask::getStartTime, DateUtils.getStartTime(params.get("startDate").toString()));
             }
-            if(params.containsKey("endDate")){
+            if (params.containsKey("endDate")) {
                 lbqWrapper.leFooter(TTask::getEndTime, DateUtils.getEndTime(params.get("endDate").toString()));
             }
         }
@@ -564,9 +599,9 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
     }
 
     @Override
-    public void exportTaskResource(Map<String, Object> params, HttpServletResponse response) throws IOException{
-        int page = params.containsKey("page")? Integer.parseInt(params.get("page").toString()):1;
-        int limit = params.containsKey("limit")? Integer.parseInt(params.get("limit").toString()):50;
+    public void exportTaskResource(Map<String, Object> params, HttpServletResponse response) throws IOException {
+        int page = params.containsKey("page") ? Integer.parseInt(params.get("page").toString()) : 1;
+        int limit = params.containsKey("limit") ? Integer.parseInt(params.get("limit").toString()) : 50;
         Page pageInfo = new Page<DeviceResourceSumVo>(page, limit);
         IPage<DeviceResourceSumVo> dataList = this.deviceResourceSum(pageInfo, params);
         List<DeviceResourceSumVo> list = dataList.getRecords();
@@ -576,7 +611,7 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
         response.setHeader("content-Type", "application/vnd.ms-excel");
         // 设计导出文件的名称,尽量不要中文
         String fileName = new String("任务资源汇总导出.xls".getBytes(), "ISO-8859-1");
-        response.setHeader("Content-Disposition","attachment;filename="+ fileName);
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
         //输出流。
         ServletOutputStream out = response.getOutputStream();
         // 创建参数对象(用来设定excel得sheet的内容等信息)
@@ -587,78 +622,78 @@ public class ProductLinePerformanceServiceImpl extends SuperCacheServiceImpl<Pro
 
     @Override
     public IPage<DeviceResourceSumVo> robotTaskSum(Page pageInfo, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
-        }else if(params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())){
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
+        } else if (params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())) {
             Date date = DateUtil.stringToDate0(params.get("month").toString(), "yyyy-MM");
             params.put("daySpan", DateUtil.getDaysOfMonth(date));
-        }else if(params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())){
+        } else if (params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())) {
             Date date = DateUtil.stringToDate0(params.get("years").toString(), "yyyy");
             params.put("daySpan", DateUtil.getDaysOfYear(date));
-        }else if(params.containsKey("startDate") && params.containsKey("endDate")){
+        } else if (params.containsKey("startDate") && params.containsKey("endDate")) {
             List<String> datas = DateUtils.getBetweenDay(params.get("startDate").toString(), params.get("endDate").toString());
-            params.put("daySpan", datas.size()-1);
+            params.put("daySpan", datas.size() - 1);
         }
-        return baseMapper.robotTaskSum(pageInfo,params);
+        return baseMapper.robotTaskSum(pageInfo, params);
     }
 
     @Override
     public IPage<DeviceResourceSumVo> overTimeTaskSum(Page pageInfo, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
-        }else if(params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())){
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
+        } else if (params.containsKey("month") && StringUtils.isNotEmpty(params.get("month").toString())) {
             Date date = DateUtil.stringToDate0(params.get("month").toString(), "yyyy-MM");
             params.put("daySpan", DateUtil.getDaysOfMonth(date));
-        }else if(params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())){
+        } else if (params.containsKey("years") && StringUtils.isNotEmpty(params.get("years").toString())) {
             Date date = DateUtil.stringToDate0(params.get("years").toString(), "yyyy");
             params.put("daySpan", DateUtil.getDaysOfYear(date));
-        }else if(params.containsKey("startDate") && params.containsKey("endDate")){
+        } else if (params.containsKey("startDate") && params.containsKey("endDate")) {
             List<String> datas = DateUtils.getBetweenDay(params.get("startDate").toString(), params.get("endDate").toString());
-            params.put("daySpan", datas.size()-1);
+            params.put("daySpan", datas.size() - 1);
         }
-        return baseMapper.overTimeTaskSum(pageInfo,params);
+        return baseMapper.overTimeTaskSum(pageInfo, params);
     }
 
     @Override
     public Map<String, List<String>> taskStatusSum(Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
         return baseMapper.taskStatusSum(params);
     }
 
     @Override
     public Map<String, List<String>> taskAGVSum(Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
         return baseMapper.taskAGVSum(params);
     }
 
     @Override
     public IPage<TTaskPageDTO> unFinishedTask(Page page, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
         return baseMapper.unFinishedTask(page, params);
     }
 
     @Override
     public IPage<AgvHikOrderInfoPageDTO> unFinishedAGV(Page page, Map<String, Object> params) {
-        if((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
-                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))){
+        if ((Objects.isNull(params.get("startDate")) || Objects.isNull(params.get("endDate")))
+                && Objects.isNull(params.get("month")) && Objects.isNull(params.get("years"))) {
             //默认当天
-            params.put("today",DateUtil.dateToString0(new Date(),"yyyy-MM-dd"));
+            params.put("today", DateUtil.dateToString0(new Date(), "yyyy-MM-dd"));
         }
         return baseMapper.unFinishedAGV(page, params);
     }

+ 76 - 65
imcs-admin-boot/imcs-business-controller/src/main/java/com/github/zuihou/business/controller/operationManagementCenter/ToolbarController.java

@@ -291,9 +291,9 @@ public class ToolbarController {
         String[] goalNameCondition = goal.split("_");
         if (startNameCondition.length != 2 || goalNameCondition.length != 2) return fail("数据格式传输有误");
 
-        Storge startStorge = storgeService.getOne(new LbqWrapper<Storge>().eq(Storge::getLockStatus, "0").likeRight(Storge::getName, startNameCondition[0]).likeLeft(Storge::getName, startNameCondition[1]).eq(Storge::getPointId, startNameCondition[1]));
+        Storge startStorge = storgeService.getOne(new LbqWrapper<Storge>().eq(Storge::getLockStatus, "1").likeRight(Storge::getName, startNameCondition[0]).likeLeft(Storge::getName, startNameCondition[1]).eq(Storge::getPointId, startNameCondition[1]));
         if (null == startStorge) return fail("起始接驳位不可用");
-        Storge goalStorge = storgeService.getOne(new LbqWrapper<Storge>().eq(Storge::getLockStatus, "0").likeRight(Storge::getName, goalNameCondition[0]).likeLeft(Storge::getName, goalNameCondition[1]).eq(Storge::getPointId, goalNameCondition[1]));
+        Storge goalStorge = storgeService.getOne(new LbqWrapper<Storge>().eq(Storge::getLockStatus, "1").likeRight(Storge::getName, goalNameCondition[0]).likeLeft(Storge::getName, goalNameCondition[1]).eq(Storge::getPointId, goalNameCondition[1]));
         if (null == goalStorge) return fail("目的接驳位不可用");
 
         //判断是否已被节点目标设备预先锁定
@@ -911,98 +911,109 @@ public class ToolbarController {
     public R agvTaskNotice(@RequestBody Map data) {
         BaseContextHandler.setTenant("0000");
         String taskCode = data.containsKey("taskCode") ? data.get("taskCode").toString() : null;
-        String currentPositionCode = data.containsKey("currentPositionCode") ? data.get("currentPositionCode").toString() : null;
-        if (StringUtils.isEmpty(taskCode) && StringUtils.isEmpty(currentPositionCode)) return fail("数据传参为空");
+        String method = data.containsKey("method") ? data.get("method").toString() : null;
+        if (StringUtils.isEmpty(taskCode) && StringUtils.isEmpty(method)) return fail("数据传参为空");
 
-        AgvHikOrderDetailInfo agvHikOrderDetailInfo = agvHikOrderDetailInfoService.getOne(new LbqWrapper<AgvHikOrderDetailInfo>().eq(AgvHikOrderDetailInfo::getTaskCode, taskCode).last("limit 1"));
-        if (null == agvHikOrderDetailInfo) return fail("任务编码传参有误");
-        String reqCode = agvHikOrderDetailInfo.getReqCode();
+//        AgvHikOrderDetailInfo agvHikOrderDetailInfo = agvHikOrderDetailInfoService.getOne(new LbqWrapper<AgvHikOrderDetailInfo>().eq(AgvHikOrderDetailInfo::getTaskCode, taskCode).last("limit 1"));
+//        if (null == agvHikOrderDetailInfo) return fail("任务编码传参有误");
+//        String reqCode = agvHikOrderDetailInfo.getReqCode();
 
-        AgvHikOrderInfo agvHikOrderInfo = agvHikOrderInfoService.getOne(new LbqWrapper<AgvHikOrderInfo>().eq(AgvHikOrderInfo::getTaskCode, taskCode).last("limit 1"));
-        String startBin = agvHikOrderInfo.getStart().substring(0, 2).toUpperCase();
-        String target = agvHikOrderInfo.getGoal().substring(0, 2).toUpperCase();
-        System.out.println("起始位:" + startBin + " 目标位:" + target);
+//        AgvHikOrderInfo agvHikOrderInfo = agvHikOrderInfoService.getOne(new LbqWrapper<AgvHikOrderInfo>().eq(AgvHikOrderInfo::getTaskCode, taskCode).last("limit 1"));
+//        String startBin = agvHikOrderInfo.getStart().substring(0, 2).toUpperCase();
+//        String target = agvHikOrderInfo.getGoal().substring(0, 2).toUpperCase();
+//        System.out.println("起始位:" + startBin + " 目标位:" + target);
 
         ZZone zZone = new ZZone();
         JSONObject jsonParam = new JSONObject();
-        switch (currentPositionCode) {
+        switch (method) {
             case "start":
 //                System.out.println(currentPositionCode + " : 起点进入");
+                System.out.println(": 起点进入");
                 // 判断使用那条线的plc
-                if ("BZ".equals(startBin)) {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin.toLowerCase()).last("limit 1"));
-                } else {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin).last("limit 1"));
-                }
-                Map<String, String> startPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
-                jsonParam.put("url", startPlcInfo.get("url"));
-                jsonParam.put("port", startPlcInfo.get("port"));
-                jsonParam.put("start", "1");
+//                if ("BZ".equals(startBin)) {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin.toLowerCase()).last("limit 1"));
+//                } else {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin).last("limit 1"));
+//                }
+//                Map<String, String> startPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
+//                jsonParam.put("url", startPlcInfo.get("url"));
+//                jsonParam.put("port", startPlcInfo.get("port"));
+//                jsonParam.put("start", "1");
                 break;
             case "outbin":
 //                System.out.println(currentPositionCode + " : 起点出");
+                System.out.println(": 起点出");
                 // 判断使用那条线的plc
-                if ("BZ".equals(startBin)) {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin.toLowerCase()).last("limit 1"));
-                } else {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin).last("limit 1"));
-                }
-                Map<String, String> outbinPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
-                jsonParam.put("url", outbinPlcInfo.get("url"));
-                jsonParam.put("port", outbinPlcInfo.get("port"));
-                jsonParam.put("start", "0");
+//                if ("BZ".equals(startBin)) {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin.toLowerCase()).last("limit 1"));
+//                } else {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, startBin).last("limit 1"));
+//                }
+//                Map<String, String> outbinPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
+//                jsonParam.put("url", outbinPlcInfo.get("url"));
+//                jsonParam.put("port", outbinPlcInfo.get("port"));
+//                jsonParam.put("start", "0");
                 break;
             case "arrive":
 //                System.out.println(currentPositionCode + " : 终点入");
+                System.out.println(": 终点入");
                 // 判断使用那条线的plc
-                if ("BZ".equals(target)) {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target.toLowerCase()).last("limit 1"));
-                } else {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target).last("limit 1"));
-                }
-                Map<String, String> arrivePlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
-                jsonParam.put("url", arrivePlcInfo.get("url"));
-                jsonParam.put("port", arrivePlcInfo.get("port"));
-                jsonParam.put("start", "1");
+//                if ("BZ".equals(target)) {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target.toLowerCase()).last("limit 1"));
+//                } else {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target).last("limit 1"));
+//                }
+//                Map<String, String> arrivePlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
+//                jsonParam.put("url", arrivePlcInfo.get("url"));
+//                jsonParam.put("port", arrivePlcInfo.get("port"));
+//                jsonParam.put("start", "1");
                 break;
             case "end":
 //                System.out.println(currentPositionCode + " : 终点出");
+                System.out.println(": 终点出");
                 // 判断使用那条线的plc
-                if ("BZ".equals(target)) {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target.toLowerCase()).last("limit 1"));
-                } else {
-                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target).last("limit 1"));
-                }
-                Map<String, String> endPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
-                jsonParam.put("url", endPlcInfo.get("url"));
-                jsonParam.put("port", endPlcInfo.get("port"));
-                jsonParam.put("start", "0");
+//                if ("BZ".equals(target)) {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target.toLowerCase()).last("limit 1"));
+//                } else {
+//                    zZone = zoneService.getOne(new LbqWrapper<ZZone>().eq(ZZone::getAka, target).last("limit 1"));
+//                }
+//                Map<String, String> endPlcInfo = DictionaryKey.PLC_CATEGORY.get(zZone.getNo());
+//                jsonParam.put("url", endPlcInfo.get("url"));
+//                jsonParam.put("port", endPlcInfo.get("port"));
+//                jsonParam.put("start", "0");
                 break;
             default:
                 return fail("起始信号为空");
         }
-        String hostSystemUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS) ? "" : ((Map<String, String>) msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.HOSTSYSTEMURL).toString());
-        if (StringUtils.isEmpty(hostSystemUrl)) return fail("Redis缓存数据不存在");
-        String instructionUrl = "/api/setLightCurtain";
-        String callbackTaskList = msgUtil.httpForPost(hostSystemUrl + instructionUrl, jsonParam.toJSONString());
-        JSONObject jsonObject = JSONObject.parseObject(callbackTaskList);
-        //判断是否允许继续执行任务 默认位true
-        boolean bool = Boolean.parseBoolean(jsonObject.getString("result"));
-        if (null == callbackTaskList) {
-            return fail("CCS数据调用失败");
-        } else if (!bool) {
-            return fail("CCS开关光幕失败");
-        }
-
+//        String hostSystemUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS) ? "" : ((Map<String, String>) msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.HOSTSYSTEMURL).toString());
+//        if (StringUtils.isEmpty(hostSystemUrl)) return fail("Redis缓存数据不存在");
+//        String instructionUrl = "/api/setLightCurtain";
+//        String callbackTaskList = msgUtil.httpForPost(hostSystemUrl + instructionUrl, jsonParam.toJSONString());
+//        JSONObject jsonObject = JSONObject.parseObject(callbackTaskList);
+//        //判断是否允许继续执行任务 默认位true
+//        boolean bool = Boolean.parseBoolean(jsonObject.getString("result"));
+//        if (null == callbackTaskList) {
+//            return fail("CCS数据调用失败");
+//        } else if (!bool) {
+//            return fail("CCS开关光幕失败");
+//        }
+        boolean bool = true;
+        JSONObject jsonObject1 = new JSONObject();
         if (bool) {
             String agvContinueTaskUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS) ? "" : ((Map<String, String>) msgUtil.redis_get(ParameterKey.PARAMETERS)).get(ParameterKey.CONTINUETASK).toString());
             if (StringUtils.isEmpty(agvContinueTaskUrl)) return fail("继续执行任务接口地址为空");
             JSONObject params = new JSONObject();
-            params.put("reqCode", reqCode);
+//            params.put("reqCode", reqCode);
+            params.put("reqCode", UUID.randomUUID().toString());
             params.put("taskCode", taskCode);
             msgUtil.httpForPost(agvContinueTaskUrl, params.toString());
+
+            jsonObject1.put("reqCode",taskCode);
+            jsonObject1.put("code",0);
+            jsonObject1.put("message",0);
+            jsonObject1.put("date",data);
         }
-        return success();
+        return success(jsonObject1);
     }
 
 
@@ -1056,9 +1067,9 @@ public class ToolbarController {
                 if (stockInfo == null || stockInfo.getTrayNo() == null) return fail("工装信息有误");
                 String trayNo = stockInfo.getTrayNo();
                 if (trayNo.startsWith("KT_QY_A")) {
-                    trayNo = StringUtils.substring(trayNo, 0, trayNo.length() - 1) + "2";
+                    trayNo = StringUtils.substring(trayNo, 0, trayNo.length() - 2) + "02";
                 } else {
-                    trayNo = StringUtils.substring(trayNo, 0, trayNo.length() - 1) + "1";
+                    trayNo = StringUtils.substring(trayNo, 0, trayNo.length() - 2) + "01";
                 }
                 Tray tray = trayService.getOne(new LbqWrapper<Tray>().eq(Tray::getNo, trayNo).last("LIMIT 1"));
                 //查询该工装绑定的零件OP10工艺