fix:取消任务时更新库存;opt:日志优化
This commit is contained in:
@@ -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<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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
</logger>
|
||||
</springProfile>
|
||||
<springProfile name="prod">
|
||||
<root level="debug">
|
||||
<root level="info">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="asyncLuceneAppender"/>
|
||||
</root>
|
||||
|
||||
Reference in New Issue
Block a user