fix:取消任务时更新库存;opt:日志优化

This commit is contained in:
zhangzq
2023-12-27 11:16:54 +08:00
parent 523c3837e2
commit 8db97aa7f3
5 changed files with 165 additions and 114 deletions

View File

@@ -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表示andMUST_NOT表示notSHOULD表示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<LogRepositoryDTO> 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<LogRepositoryDTO> 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();
}

View File

@@ -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<String, Object> 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<String, Object> issueTaskToAcs2(JSONArray arr) {
JSONArray form = new JSONArray();

View File

@@ -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<SchBaseTaskMapper, SchBa
@Autowired
private ISchBasePointService pointService;
@Autowired
@Lazy
private AcsToWmsService acsToWmsService;
@Override
public List<Map> queryAll(Map query) {
@@ -65,87 +62,130 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Override
public void operation(Map<String, Object> 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<SchBaseTask>().eq("task_id", task_id));
switch (method_name) { // forceFinish, cancel
SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().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())<Integer.valueOf(TaskStatusEnum.EXECUTING.getCode())){
try {
if (taskObj.getHandle_class()!=null){
AbstractAcsTask taskHandler = (AbstractAcsTask) SpringContextHolder.getBean(Class.forName(taskObj.getHandle_class()));
taskHandler.pointConfirm((JSONObject) JSONObject.toJSON(taskObj));
}
SchBaseTask task = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
JSONArray array = new JSONArray();
array.add(JSON.toJSON(task));
Map<String, Object> 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<SchBaseTask>()
.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<SchBasePoint>()
.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<SchBaseTask>()
.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<SchBaseTask>().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<SchBaseTask>()
.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<SchBaseTask>()
.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<SchBaseTask>()
.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<SchBaseTask>()
.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<SchBaseTask>()
.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())<Integer.valueOf(TaskStatusEnum.EXECUTING.getCode())){
try {
if (task.getHandle_class()!=null){
AbstractAcsTask taskHandler = (AbstractAcsTask) SpringContextHolder.getBean(Class.forName(task.getHandle_class()));
taskHandler.pointConfirm((JSONObject) JSONObject.toJSON(task));
}
JSONArray array = new JSONArray();
array.add(JSON.toJSON(task));
Map<String, Object> 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<SchBaseTask>()
.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<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
.in("point_code", task.getPoint_code1(), task.getPoint_code2()));
}
this.updateById(task);
}
}
}
@Override

View File

@@ -872,10 +872,11 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
// 取消任务
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(new QueryWrapper<StIvtIostorinvdisCp>().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);
}
}
}

View File

@@ -116,7 +116,7 @@
</logger>
</springProfile>
<springProfile name="prod">
<root level="debug">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="asyncLuceneAppender"/>
</root>