From 8db97aa7f3f23ec2129b094ed02197ba9b43599d Mon Sep 17 00:00:00 2001 From: zhangzq Date: Wed, 27 Dec 2023 11:16:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=8F=96=E6=B6=88=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=97=B6=E6=9B=B4=E6=96=B0=E5=BA=93=E5=AD=98;opt:=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LuceneLogServiceImpl.java | 42 ++-- .../acs/service/impl/WmsToAcsServiceImpl.java | 34 +++- .../task/impl/SchBaseTaskServiceImpl.java | 192 +++++++++++------- .../impl/StIvtIostorinvCpServiceImpl.java | 9 +- .../src/main/resources/logback-spring.xml | 2 +- 5 files changed, 165 insertions(+), 114 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java index 98626d01..9a42bbd2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/modules/logging/service/impl/LuceneLogServiceImpl.java @@ -70,33 +70,23 @@ public class LuceneLogServiceImpl implements LuceneLogService { FSDirectory directory = FSDirectory.open(Paths.get(indexUrl)); DirectoryReader open = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(open); - //标准分词器,会自动去掉空格啊,is a the等单词 - Analyzer analyzer = new IKAnalyzer(true); - - // 实际上Lucene本身不支持分页。因此我们需要自己进行逻辑分页。我们要准备分页参数: - // 每页条数 - int pageSize = logQuery.getSize(); - int pageNum = logQuery.getPage()-1; - // 当前页的起始条数 // 创建排序对象,需要排序字段SortField,参数:字段的名称、字段的类型、是否反转如果是false,升序。true降序 - Sort sort = new Sort(new SortField("time", SortField.Type.LONG,true)); - - TopDocs docs = null; BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); //时间范围查询 Date startDate = logQuery.getStartTime(); Date endDate = logQuery.getEndTime(); - Calendar calendar=Calendar.getInstance(); - calendar.set(1970, 0, 1); - if (startDate == null){ startDate = calendar.getTime(); } + if (startDate == null){ + Calendar calendar=Calendar.getInstance(); + calendar.set(1970, 0, 1); + startDate = calendar.getTime(); } if (endDate == null){ endDate = new DateTime(); } - TermRangeQuery termRangeQuery = new TermRangeQuery( "requestTime", new BytesRef(DateUtil.format(startDate, "yyyy-MM-dd HH:mm:ss.SSS")), new BytesRef(DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss.SSS")), true, true); booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST); + // 字段之间的与或非关系,MUST表示and,MUST_NOT表示not,SHOULD表示or,有几个fields就必须有几个clauses if (ObjectUtil.isNotEmpty(logQuery.getTraceId())){ TermQuery termQuery = new TermQuery(new Term("traceId", logQuery.getTraceId())); @@ -114,7 +104,6 @@ public class LuceneLogServiceImpl implements LuceneLogService { TermQuery termQuery = new TermQuery(new Term("requestMethod", logQuery.getRequestMethod())); booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST); } - if (Boolean.TRUE.equals(logQuery.getIsRequest())) { Term traceid = new Term("traceId"); TermQuery termQuery = new TermQuery(traceid); @@ -122,23 +111,18 @@ public class LuceneLogServiceImpl implements LuceneLogService { } if (ObjectUtil.isNotEmpty(logQuery.getMessage())){ //查询解析器 - QueryParser queryParser = new QueryParser("message", analyzer); + QueryParser queryParser = new QueryParser("message", new IKAnalyzer(true)); Query query = queryParser.parse(logQuery.getMessage()); booleanQueryBuilder.add(query, BooleanClause.Occur.MUST); } - List list = new ArrayList<>(); - - TopFieldCollector collector = TopFieldCollector.create(sort, 100000, 0); - BooleanQuery build = booleanQueryBuilder.build(); - searcher.search(build, collector); - TopDocs topDocs = collector.topDocs(pageNum*pageSize, pageSize); - long total = open.numDocs(); - if (build.clauses().size()>2){ - docs = searcher.search(build,1); - total = docs.totalHits.value; - } + TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("time", SortField.Type.LONG,true)), 20000, 0); + searcher.search(booleanQueryBuilder.build(), collector); + TopDocs topDocs = collector.topDocs((logQuery.getPage()-1)*logQuery.getSize(), logQuery.getSize()); + int totalSize = collector.getTotalHits(); ScoreDoc[] scoreDocs = topDocs.scoreDocs; + + List list = new ArrayList<>(); for (ScoreDoc scoreDoc : scoreDocs) { Document doc = open.document(scoreDoc.doc); LogRepositoryDTO dto = new LogRepositoryDTO(); @@ -157,7 +141,7 @@ public class LuceneLogServiceImpl implements LuceneLogService { directory.close(); page.addAll(list); page.setTotal(scoreDocs.length); - res.put("total",total); + res.put("total", totalSize); }catch (Exception ex){ ex.printStackTrace(); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java index 29520028..610eddcb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/WmsToAcsServiceImpl.java @@ -1,14 +1,11 @@ package org.nl.wms.ext_manage.acs.service.impl; import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -//import org.apache.http.HttpResponse; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.AcsUtil; import org.nl.common.utils.IdUtil; @@ -19,7 +16,6 @@ import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl; import org.springframework.stereotype.Service; import java.util.Map; -import java.util.concurrent.Future; @Service @@ -57,6 +53,36 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{ return AcsUtil.notifyAcs(api, form); } + public static Map staticIssueTaskToAcs(JSONArray arr) { + JSONArray form = new JSONArray(); + for (Object o : arr) { + JSONObject task = (JSONObject) o; + if (task.get("is_send")==null){ + task.put("is_send",true); + } + JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id") + , "task_type", task.getString("acs_task_type")//垃圾 + , "task_code", task.getString("task_code") + , "start_point_code", task.getString("point_code1")//起点 + , "put_point_code", task.getString("point_code2")//到料 + , "next_point_code", task.getString("point_code3")//空盘返回点 + , "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id") + , "priority", task.getString("priority") + , "is_send", task.getBoolean("is_send")?"1":"0" + , "vehicle_code", task.getString("vehicle_code") + , "quantity", task.getString("material_qty") + , "barcodeArr", task.getString("barcodeArr") + , "qtyArr", task.getString("qtyArr") + , "priority_floor", "0" + , "in_pcsn", task.getString("task_code") + , "agv_system_type", task.getString("agv_system_type") + )); + form.add(param); + } + String api = "api/wms/task"; + return AcsUtil.notifyAcs(api, form); + } + @Override public Map issueTaskToAcs2(JSONArray arr) { JSONArray form = new JSONArray(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java index 7a24dfe2..ed228917 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/task/impl/SchBaseTaskServiceImpl.java @@ -2,6 +2,7 @@ package org.nl.wms.scheduler_manage.service.task.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -10,15 +11,15 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.common.publish.event.TaskEvent; import org.nl.common.utils.IdUtil; import org.nl.common.utils.MapOf; import org.nl.common.utils.RedissonUtils; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; -import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; -import org.nl.wms.ext_manage.acs.service.AcsToWmsService; import org.nl.wms.ext_manage.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask; import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum; @@ -29,7 +30,6 @@ import org.nl.wms.scheduler_manage.service.task.dao.mapper.SchBaseTaskMapper; import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Date; @@ -50,9 +50,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl queryAll(Map query) { @@ -65,87 +62,130 @@ public class SchBaseTaskServiceImpl extends ServiceImpl map) { - WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl(); - String task_id = MapUtil.getStr(map, "task_id"); RedissonUtils.lock(()->{ - String method_name = MapUtil.getStr(map, "method_name"); - SchBaseTask taskObj = this.getOne(new QueryWrapper().eq("task_id", task_id)); - switch (method_name) { // forceFinish, cancel + SchBaseTask task = this.getOne(new QueryWrapper().eq("task_id", MapUtil.getStr(map, "task_id"))); + String acs_task_status = null; + switch (MapUtil.getStr(map, "method_name")) { case "immediateNotifyAcs": - if (Integer.valueOf(taskObj.getTask_status())().eq("task_id", task_id)); - JSONArray array = new JSONArray(); - array.add(JSON.toJSON(task)); - Map result = wms.issueTaskToAcs(array); - String status = String.valueOf(result.get("status")); - if (!status.equals("200")) { - throw new BadRequestException(result.get("message") != null ? String.valueOf(result.get("message")) : "acs反馈异常"); - } - this.update(new UpdateWrapper() - .set("task_status",StatusEnum.TASK_PUBLISH.getCode()) - .eq("task_id",task_id)); - }catch (Exception ex){ - taskObj.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); - taskObj.setRemark(ex.getMessage()); - taskObj.setUpdate_time(new Date()); - if (StringUtils.isNotEmpty(taskObj.getPoint_code1())|| StringUtils.isNotEmpty(taskObj.getPoint_code2())){ - pointService.update(new UpdateWrapper() - .set("lock_type",StatusEnum.LOCK_OFF.getCode()) - .in("point_code",taskObj.getPoint_code1(),taskObj.getPoint_code2())); - } - this.updateById(taskObj); - } - } + sendTask(task); break; case "forceFinish": - JSONArray finish = new JSONArray(); - JSONObject res = new JSONObject(); - res.put("task_id", task_id); - res.put("status", AcsTaskEnum.STATUS_FINISH.getCode()); - res.put("finished_type", AcsTaskEnum.MANUAL_TASK_FINISHED_TYPE.getCode()); // 手动完成 - finish.add(res); - this.update(new UpdateWrapper() - .set("task_status",StatusEnum.TASK_FINISH.getCode()) - .eq("task_id", task_id)); - acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish)); + acs_task_status = finish(task); break; case "cancel": - if (taskObj.getTask_status().equals(StatusEnum.TASK_RUNNING.getCode())||taskObj.getTask_status().equals(StatusEnum.TASK_CANNEL.getCode())){ - JSONArray cancel = new JSONArray(); - JSONObject res2 = new JSONObject(); - res2.put("task_id", task_id); - res2.put("status", AcsTaskEnum.STATUS_CANNEL.getCode()); - cancel.add(res2); - acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel)); - }else { - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_CANNEL.getCode()),"task_id = '"+task_id+"'"); - } + acs_task_status = cancel(task); break; case "delete": - SchBaseTask one = getOne(new QueryWrapper().eq("task_id", task_id)); - int status = Integer.valueOf(one.getTask_status()); - //判断如果在3个状态之内,更新操作 - int tag = 1 << StatusEnum.TASK_CANNEL.getBit() - | 1 << StatusEnum.TASK_CREATE.getBit() - | 1 << StatusEnum.TASK_START_ERROR.getBit() - | 1 << StatusEnum.TASK_START_END_P.getBit(); - if ((tag &~ 1 << status) != tag){ - this.update(new UpdateWrapper() - .set("is_delete",true) - .eq("task_id", task_id)); - }else { - throw new BadRequestException("任务已经下发不允许直接删除"); - } + delete(task); break; default: break; } - },task_id,null); + if (acs_task_status!=null){ + TaskEvent event = TaskEvent.builder() + .task_id(task.getTask_id()) + .task_type(task.getTask_type()) + .status(acs_task_status) + .extParam(null) + .build(); + BussEventMulticaster.Publish(event); + } + },MapUtil.getStr(map, "task_id"),null); + } + + private void delete(SchBaseTask task) { + int status = Integer.valueOf(task.getTask_status()); + //判断如果在3个状态之内,更新操作 + int tag = 1 << StatusEnum.TASK_CANNEL.getBit() + | 1 << StatusEnum.TASK_CREATE.getBit() + | 1 << StatusEnum.TASK_START_ERROR.getBit() + | 1 << StatusEnum.TASK_START_END_P.getBit(); + if ((tag &~ 1 << status) != tag){ + this.update(new UpdateWrapper() + .set("is_delete",true) + .eq("task_id", task.getTask_id())); + }else { + throw new BadRequestException("任务已经下发不允许直接删除"); + } + } + + private String cancel(SchBaseTask task) { + if (task.getTask_status().equals(StatusEnum.TASK_RUNNING.getCode())){ + try { + if (ObjectUtil.isNotEmpty(task.getHandle_class())) { + AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getHandle_class())); + if (taskHandler!=null){ + taskHandler.updateTaskStatus(new JSONObject(MapOf.of("task_id",task.getTask_id(),"status",AcsTaskEnum.STATUS_CANNEL.getCode())),AcsTaskEnum.STATUS_CANNEL.getCode()); + } + } + this.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .eq("task_id", task.getTask_id())); + return AcsTaskEnum.STATUS_CANNEL.getCode(); + } catch (Exception ex) { + task.setRemark(ex.getMessage()); + task.setUpdate_time(new Date()); + this.updateById(task); + return null; + } + }else { + this.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_CANNEL.getCode()) + .eq("task_id", task.getTask_id())); + } + return AcsTaskEnum.STATUS_CANNEL.getCode(); + } + + private String finish(SchBaseTask task) { + if (!task.getTask_status().equals(StatusEnum.TASK_FINISH.getCode())){ + try { + if (ObjectUtil.isNotEmpty(task.getHandle_class())) { + AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getHandle_class())); + if (taskHandler!=null){ + taskHandler.updateTaskStatus(new JSONObject(MapOf.of("task_id",task.getTask_id(),"status",AcsTaskEnum.STATUS_FINISH.getCode())),AcsTaskEnum.STATUS_FINISH.getCode()); + } + } + this.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_PUBLISH.getCode()) + .eq("task_id", task.getTask_id())); + return AcsTaskEnum.STATUS_FINISH.getCode(); + } catch (Exception ex) { + task.setRemark(ex.getMessage()); + task.setUpdate_time(new Date()); + this.updateById(task); + } + } + return null; + } + + private void sendTask(SchBaseTask task) { + if (Integer.valueOf(task.getTask_status()) result = WmsToAcsServiceImpl.staticIssueTaskToAcs(array); + String status = String.valueOf(result.get("status")); + if (!status.equals("200")) { + throw new BadRequestException(result.get("message") != null ? String.valueOf(result.get("message")) : "acs反馈异常"); + } + this.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_PUBLISH.getCode()) + .eq("task_id", task.getTask_id())); + }catch (Exception ex){ + task.setTask_status(StatusEnum.TASK_START_ERROR.getCode()); + task.setRemark(ex.getMessage()); + task.setUpdate_time(new Date()); + if (StringUtils.isNotEmpty(task.getPoint_code1())|| StringUtils.isNotEmpty(task.getPoint_code2())){ + pointService.update(new UpdateWrapper() + .set("lock_type",StatusEnum.LOCK_OFF.getCode()) + .in("point_code", task.getPoint_code1(), task.getPoint_code2())); + } + this.updateById(task); + } + } } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index ef46ebd3..dc96f6e9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -872,10 +872,11 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtIostorinvdisCp::getTask_id, task_id),false); - - JSONObject param = new JSONObject(); - param.put("iostorinvdis_id",disDao.getIostorinvdis_id()); - delTask(param); + if (disDao!=null){ + JSONObject param = new JSONObject(); + param.put("iostorinvdis_id",disDao.getIostorinvdis_id()); + delTask(param); + } } } diff --git a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml index 36106149..a3e4db52 100644 --- a/mes/hd/nladmin-system/src/main/resources/logback-spring.xml +++ b/mes/hd/nladmin-system/src/main/resources/logback-spring.xml @@ -116,7 +116,7 @@ - +