opt:修复NDC断联消息通知;

This commit is contained in:
2026-06-25 17:18:43 +08:00
parent e8fcd659d9
commit 5364667e63
21 changed files with 313 additions and 140 deletions

View File

@@ -19,10 +19,12 @@ import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.task.enums.NoticeTypeEnum;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.lucene.LuceneExecuteLogService;
import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -69,6 +71,8 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
LuceneExecuteLogService luceneExecuteLogService;
@Autowired
ISysDictService dictService;
@Autowired
ISysNoticeService iSysNoticeService;
public OneNDCSocketConnectionAutoRun() {
this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut);
@@ -94,8 +98,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
ip = paramService.findByCode(AcsConfig.AGVURL).getValue();
port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue());
int instCode = 0;
try {
byte[] b = new byte[1024];
s = new Socket(ip, port);
@@ -152,6 +155,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno));
}
if (ikey != 0) {
instCode =ikey;
inst = instructionService.findByCodeFromCache(String.valueOf(ikey));
if (ObjectUtil.isEmpty(inst)) {
inst = instructionService.findByCode(String.valueOf(ikey));
@@ -354,12 +358,12 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} catch (Exception e) {
System.out.println("Agv链接异常");
log.info("Agv链接异常");
iSysNoticeService.createNotice("指令号"+instCode+",异常信息:"+e.getMessage(), "警告NDC断联", NoticeTypeEnum.EXCEPTION.getCode());
log.error("agv连接出现异常:{}", e);
if (ObjectUtil.isNotEmpty(s)) {
s.close();
}
System.out.println(e.getMessage());
//System.out.println(e.getMessage());
e.printStackTrace();
} finally {

View File

@@ -185,6 +185,11 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
} else if (phase == 0x03) {
inst.setExecute_status("1");
instructionService.update(inst);
//添加车号
if (StringUtils.isBlank(task.getCar_no())) {
task.setCar_no(String.valueOf(carno));
}
taskserver.update(task);
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
flag = true;
} else if (phase == 0x04) {

View File

@@ -707,7 +707,7 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
@Override
@Transactional(rollbackFor = Exception.class)
public void finish(String id) {
public synchronized void finish(String id) {
InstructionDto entity = this.findById(id);
// if (entity == null) throw new BadRequestException(LangProcess.msg("error_sysAuth"));
String currentUsername = SecurityUtils.getCurrentUsername();
@@ -731,12 +731,12 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
Device device = appService.findDeviceByCode(instnextdevice);
if (device == null) {
device = appService.findDeviceByCode(entity.getNext_point_code());
if (device == null) {
log.error("地址对应设备未找到");
throw new BadRequestException(LangProcess.msg("error_isNull", instnextdevice));
} else {
// if (device == null) {
// log.error("地址对应设备未找到");
// throw new BadRequestException(LangProcess.msg("error_isNull", instnextdevice));
// } else {
instnextdevice = entity.getNext_point_code();
}
// }
}
DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class);
@@ -745,13 +745,12 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
String start_device_code = entity.getStart_device_code();
Device deviceByCode = deviceAppService.findDeviceByCode(start_device_code);
if (deviceByCode == null) {
log.debug("地址对应设备未找到");
throw new BadRequestException(LangProcess.msg("error_isNull", start_device_code));
}
// Device deviceByCode = deviceAppService.findDeviceByCode(start_device_code);
// if (deviceByCode == null) {
// log.debug("地址对应设备未找到");
// throw new BadRequestException(LangProcess.msg("error_isNull", start_device_code));
//
// }
jo1.put("hasGoodStatus", CommonFinalParam.ONE);
jo1.put("material_type", startdevice.getMaterial_type());
@@ -775,12 +774,8 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
jo.put("batch", "");
jo.put("islock", "0");
deviceService.changeDeviceStatus(jo);
InstructionMybatis ins = ConvertUtil.convert(entity, InstructionMybatis.class);
instructionMapper.updateById(ins);
Task task = new LambdaQueryChainWrapper<>(taskMapper)
.eq(Task::getTask_id, insttaskid)
.one();
@@ -790,7 +785,8 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
taskService.finish(task.getTask_id());
} else {
//多路由任务
finishAndCreateNextInst((Instruction) entity);
Instruction instruction = ConvertUtil.convert(entity, Instruction.class);
finishAndCreateNextInst(instruction);
}
}
updateTaskPriority(task);

View File

@@ -0,0 +1,16 @@
package org.nl.acs.task.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum NoticeTypeEnum {
EXCEPTION("1", "异常"),
WARN("2", "警告"),
NOTIFICATION("3", "通知");
private final String code;
private final String name;
}

View File

@@ -18,6 +18,7 @@ public enum TaskStatusEnum {
FINISHED("2", "FINISHED", "完成"),
FINISHEDMOVE("4", "FINISHEDMOVE", "取货完成"),
CANCEL("3", "CANCEL", "取消"),
REQUEST("10", "REQUEST", "二次分配请求"),
ERROR("99", "ERROR", "异常");
/**

View File

@@ -104,7 +104,7 @@ public class TaskController {
/** 完成任务 */
@PostMapping(value = "/finish/{id}")
public ResponseEntity<Object> finish(@RequestBody String id) {
taskService.finish(id);
taskService.finishByHand(id);
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -301,6 +301,9 @@ public interface TaskService extends CommonService<Task> {
*/
void finish(String ids);
void finishByHand(String id);
/**
* 取货完成
*

View File

@@ -7,7 +7,6 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
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;
@@ -33,7 +32,6 @@ import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.dto.DeviceAssignedDto;
import org.nl.acs.device.service.impl.DeviceServiceImpl;
import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.history.ErrorUtil;
import org.nl.acs.instruction.domain.Instruction;
import org.nl.acs.instruction.domain.InstructionMybatis;
import org.nl.acs.instruction.enums.InstructionStatusEnum;
@@ -63,7 +61,6 @@ import org.nl.config.SpringContextHolder;
import org.nl.config.language.LangProcess;
import org.nl.system.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@@ -75,7 +72,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -856,19 +852,29 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishByHand(String id) {
id =id+"-";
this.finish(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finish(String id) {
boolean isByhand = false;
if (id.contains("-")) {
id = id.substring(0, id.indexOf("-"));
isByhand = true;
}
TaskDto entity = this.findById(id);
if (entity == null) {
throw new BadRequestException(LangProcess.msg("error_sysAuth"));
}
InstructionDto instdto = instructionService.findByTaskid(id, "instruction_status <2 ");
if (instdto != null) {
throw new BadRequestException(LangProcess.msg("task_insHas"));
}
String currentUsername = SecurityUtils.getCurrentUsername();
String now = DateUtil.now();
entity.setUpdate_time(now);
@@ -876,6 +882,9 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
entity.setTask_status(TaskStatusEnum.FINISHED.getIndex());
//车辆执行任务完成计时字段
entity.setTo_y(now);
if (isByhand) {
entity.setRemark("该任务由人工手动强制完成");
}
Task task = ConvertUtil.convert(entity, Task.class);
if (StringUtils.isNotBlank(entity.getTo_x())) {
DateTime toXTime = DateUtil.parse(entity.getTo_x());

View File

@@ -57,9 +57,13 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
LambdaQueryWrapper<SysLog> lam = new LambdaQueryWrapper<>();
lam.eq(ObjectUtil.isNotEmpty(log_type), SysLog::getLog_type, log_type)
.eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username)
.like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry)
.le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time)
.ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time)
.and(ObjectUtil.isNotEmpty(blurry), wrapper ->
wrapper.like(SysLog::getDescription, blurry)
.or()
.like(SysLog::getParams, blurry)
)
.orderByDesc(SysLog::getCreate_time);
IPage<SysLog> page = new Page<>(pageable.getPage()+1, pageable.getSize());
logMapper.selectPage(page, lam);

View File

@@ -161,32 +161,20 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
@Override
public void createNotice(String msg, String title, String type) {
// 获取标题相同的信息
List<SysNotice> sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper<SysNotice>()
.eq(SysNotice::getNotice_title, title)
.eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue()));
String dealStatus = NoticeEnum.DEAL_STATUS_NO.getValue();
String haveRead = NoticeEnum.HAVE_READ_OFF.getValue();
SysNotice noticeDto = SysNotice.builder()
.notice_id(IdUtil.getSnowflake(1, 1).nextIdStr())
.notice_type(type)
.notice_title(title)
.notice_content(msg)
.deal_status(NoticeEnum.DEAL_STATUS_NO.getValue())
.have_read(NoticeEnum.HAVE_READ_OFF.getValue())
.deal_status(dealStatus)
.have_read(haveRead)
.create_time(DateUtil.now())
.build();
if (ObjectUtil.isNotEmpty(sysNotices)) {
noticeDto.setNotice_id(sysNotices.get(0).getNotice_id());
}
// 插入/修改
this.saveOrUpdate(noticeDto);
JSONObject res = new JSONObject();
res.put("data", "notice_message_update");
SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO);
try {
webSocketServer.sendInfo(messageInfo, "messageInfo");
} catch (IOException e) {
throw new BadRequestException(LangProcess.msg("error_Send"));
}
sysNoticeMapper.insert(noticeDto);
}
}

View File

@@ -1,5 +1,6 @@
package org.nl.system.service.quartz.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.yomahub.tlog.task.quartz.TLogQuartzJobBean;
@@ -96,6 +97,7 @@ public class ExecutionJob extends TLogQuartzJobBean {
// 任务状态 0成功 1失败
logDto.setIs_success(false);
logDto.setException_detail(ThrowableUtil.getStackTrace(e));
logDto.setCreate_time(DateUtil.now());
// 任务如果失败了则暂停
if (quartzJob.getPause_after_failure() != null && quartzJob.getPause_after_failure()) {
quartzJob.setIs_pause(false);
@@ -103,8 +105,8 @@ public class ExecutionJob extends TLogQuartzJobBean {
quartzJobService.updateIsPause(quartzJob);
}
//异常时候打印日志
log.info(logDto.toString());
quartzLogMapper.insert(logDto);
log.error(logDto.toString());
//quartzLogMapper.insert(logDto);
} finally {
}

View File

@@ -6,7 +6,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: dev
active: prod
# active: dev
# active: prod
jackson:

View File

@@ -12,29 +12,29 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.warehouse_manage.inAndOut.service.impl.OutBillServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Liuxy
@@ -45,6 +45,9 @@ import java.util.stream.Stream;
@Service
public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBaseTask> implements ISchBaseTaskService {
@Autowired
private OutBillServiceImpl outBillServiceImpl;
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
@@ -70,6 +73,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
}
@Override
@Transactional
public void update(SchBaseTask entity) {

View File

@@ -110,6 +110,7 @@ public class StInTask extends AbstractTask {
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
taskObj.setUpdate_time(DateUtil.now());
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
@@ -133,7 +134,8 @@ public class StInTask extends AbstractTask {
}
rawAssistIStorService.taskFinish(taskObj);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskObj.setUpdate_time(DateUtil.now());
taskObj.setRemark("该任务由人工操作手动完成");
taskService.updateById(taskObj);
}

View File

@@ -6,8 +6,8 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
@@ -25,6 +25,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
;
/**
* @Author: Liuxy
* @Description: 入库任务类
@@ -94,6 +96,7 @@ public class StOutTask extends AbstractTask {
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
throw new BadRequestException("该任务已取消!");
}
taskObj.setUpdate_time(DateUtil.now());
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) {
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
@@ -114,6 +117,8 @@ public class StOutTask extends AbstractTask {
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
taskObj.setUpdate_time(DateUtil.now());
taskObj.setRemark("该任务由人工操作手动完成");
this.finishTask(taskObj);
}

View File

@@ -59,11 +59,11 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
.eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username)
.le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time)
.ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time)
.and(wrapper -> {
wrapper.like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry)
.and(ObjectUtil.isNotEmpty(blurry), wrapper ->
wrapper.like(SysLog::getDescription, blurry)
.or()
.like(ObjectUtil.isNotEmpty(blurry), SysLog::getParams, blurry);
})
.like(SysLog::getParams, blurry)
)
.orderByDesc(SysLog::getCreate_time);
IPage<SysLog> page = new Page<>(pageable.getPage() + 1, pageable.getSize());
logMapper.selectPage(page, lam);

View File

@@ -8,6 +8,7 @@ import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.TOWMSMSG;
import org.nl.wms.warehouse_manage.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDtlDto;
@@ -69,4 +70,5 @@ public interface IInBillService extends IService<IOStorInv> {
IOStorInv getByCode(String bill_code);
}

View File

@@ -53,6 +53,7 @@ import org.nl.wms.warehouse_manage.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_manage.service.impl.MdPbGroupplateServiceImpl;
import org.nl.wms.wbwms.service.IWmsToWmsService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
@@ -1065,7 +1066,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
List<JSONObject> tableData = new ArrayList<>();
tableData.add(jo);
towmsmsg.setTableData(tableData);
iWmsToWmsService.FinishOutTask(towmsmsg);
//iWmsToWmsService.FinishOutTask(towmsmsg);
notifyWmsAsync(towmsmsg);
}
@Override
@Transactional(rollbackFor = Exception.class)
@@ -1111,7 +1113,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
List<JSONObject> tableData=new ArrayList<>();
tableData.add(jo);
towmsmsg.setTableData(tableData);
iWmsToWmsService.FinishOutTask(towmsmsg);
notifyWmsAsync(towmsmsg);
// iWmsToWmsService.FinishOutTask(towmsmsg);
}
@Override
@@ -1167,4 +1170,12 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
);
return one;
}
/**
* 异步回传WMS
*/
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void notifyWmsAsync(TOWMSMSG task) {
// 调用WMS接口
iWmsToWmsService.FinishOutTask(task);
}
}

View File

@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
@@ -38,6 +37,8 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
import org.nl.wms.system_manage.service.logging.dao.SysLog;
import org.nl.wms.system_manage.service.logging.dao.mapper.SysLogMapper;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
@@ -50,11 +51,15 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDtlDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.TOWMSMSG;
import org.nl.wms.warehouse_manage.record.service.dao.StIvtStructivtflow;
import org.nl.wms.warehouse_manage.record.service.dao.mapper.StIvtStructivtflowMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.wbwms.service.IWmsToWmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -72,10 +77,12 @@ import java.util.stream.Collectors;
@Service
@Slf4j
public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> implements IOutBillService {
@Autowired
private SysLogMapper logMapper;
@Resource
private IOStorInvMapper ioStorInvMapper;
@Autowired
private StIvtStructivtflowMapper stIvtStructivtflowMapper;
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
@@ -1347,6 +1354,60 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
}
@Transactional(rollbackFor = Exception.class)
public void taskFinish1(SchBaseTask task) {
List<IOStorInvDis> disList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getTask_id, task.getTask_id())
);
if (ObjectUtil.isEmpty(disList)) {
return;
}
IOStorInvDis item = disList.get(0);
//获取出入库单标识
String iostorinv_id = item.getIostorinv_id();
IOStorInv ioStorInv = ioStorInvMapper.selectOne(new LambdaQueryWrapper<IOStorInv>().eq(IOStorInv::getIostorinv_id, iostorinv_id));
if (ObjectUtil.isEmpty(ioStorInv)) {
return;
}
String source_name = ioStorInv.getSource_name();
//回传给wms
TOWMSMSG towmsmsg = new TOWMSMSG();
towmsmsg.setType("1");
towmsmsg.setBill_code(source_name);
towmsmsg.setStatus("200");
JSONObject jo = new JSONObject();
jo.put("storagevehicle_code", task.getVehicle_code());
jo.put("struct_name", task.getPoint_code2());
jo.put("struct_code", task.getPoint_code2());
List<StIvtStructivtflow> list = stIvtStructivtflowMapper.selectList(
new LambdaQueryWrapper<StIvtStructivtflow>()
.eq(StIvtStructivtflow::getVehicle_code, task.getVehicle_code())
.eq(StIvtStructivtflow::getGrowth, false)
.orderByDesc(StIvtStructivtflow::getUpdate_time)
);
if (ObjectUtil.isNotEmpty(list)) {
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, list.get(0).getMaterial_id()));
if (ObjectUtil.isNotEmpty(mdMeMaterialbase)) {
jo.put("material_name", mdMeMaterialbase.getMaterial_name());
jo.put("material_code", mdMeMaterialbase.getMaterial_code());
jo.put("qty", list.get(0).getQty());
} else {
jo.put("material_name", "");
jo.put("material_code", "");
jo.put("qty", "");
}
} else {
jo.put("material_name", "");
jo.put("material_code", "");
jo.put("qty", "");
}
List<JSONObject> tableData = new ArrayList<>();
tableData.add(jo);
towmsmsg.setTableData(tableData);
// iWmsToWmsService.FinishOutTask(towmsmsg);
notifyWmsAsync(towmsmsg);
}
/**
* 任务完成,减库存
* 1.解锁库位
@@ -1407,6 +1468,19 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
point_code2.setLock_up(false);
iSchBasePointService.update(point_code2);
log.info("任务号:{}完成,解锁库位:{}", task.getTask_code(), point_code2);
//日志记录
SysLog logDto = new SysLog();
logDto.setRequest_ip("localhost");
logDto.setAddress("localhost");
logDto.setMethod("taskFinish");
logDto.setUsername("");
logDto.setDescription("操作成功!");
logDto.setBrowser("browser");
logDto.setLog_id(cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextIdStr());
logDto.setCreate_time(DateUtil.now());
logDto.setLog_type("INFO");
logDto.setParams("任务完成:" + task.getTask_code() + ",解锁库位成功:-------------------" + point_code2);
logMapper.insert(logDto);
//库存变动:根据冻结数更新物料库存
StructattrChangeDto changeDto = StructattrChangeDto.builder()
.inv(item.getIostorinv_id())
@@ -1454,17 +1528,18 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
jo.put("storagevehicle_code", task.getVehicle_code());
jo.put("struct_name", task.getPoint_code2());
jo.put("struct_code", task.getPoint_code2());
// GroupPlate groupPlate=mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<GroupPlate>()
// .eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
// .eq(GroupPlate::getStoragevehicle_code,task.getVehicle_code()));
// MdMeMaterialbase mdMeMaterialbase=mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id,groupPlate.getMaterial_id()));
// jo.put("material_name",mdMeMaterialbase.getMaterial_name());
// jo.put("material_code",mdMeMaterialbase.getMaterial_code());
// jo.put("qty",groupPlate.getQty());
// List<JSONObject> tableData=new ArrayList<>();
// tableData.add(jo);
// towmsmsg.setTableData(tableData);
GroupPlate groupPlate = mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getStoragevehicle_code, task.getVehicle_code()));
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_id, groupPlate.getMaterial_id()));
jo.put("material_name", mdMeMaterialbase.getMaterial_name());
jo.put("material_code", mdMeMaterialbase.getMaterial_code());
jo.put("qty", groupPlate.getQty());
List<JSONObject> tableData = new ArrayList<>();
tableData.add(jo);
towmsmsg.setTableData(tableData);
// iWmsToWmsService.FinishOutTask(towmsmsg);
notifyWmsAsync(towmsmsg);
}
@Override
@@ -1511,8 +1586,20 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
List<JSONObject> tableData = new ArrayList<>();
tableData.add(jo);
towmsmsg.setTableData(tableData);
iWmsToWmsService.FinishOutTask(towmsmsg);
// iWmsToWmsService.FinishOutTask(towmsmsg);
notifyWmsAsync(towmsmsg);
}
/**
* 异步回传WMS
*/
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void notifyWmsAsync(TOWMSMSG task) {
// 调用WMS接口
iWmsToWmsService.FinishOutTask(task);
}
@Override
public IOStorInv getByCode(String bill_code) {
IOStorInv one = this.getOne(

View File

@@ -1,5 +1,7 @@
package org.nl.wms.wbwms.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONArray;
@@ -10,6 +12,8 @@ import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper;
import org.nl.wms.system_manage.enums.SysParamConstant;
import org.nl.wms.system_manage.service.logging.dao.SysLog;
import org.nl.wms.system_manage.service.logging.dao.mapper.SysLogMapper;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.nl.wms.system_manage.service.param.impl.SysParamServiceImpl;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
@@ -29,6 +33,9 @@ import java.time.LocalDateTime;
public class IWmsToWmsServiceImpl implements IWmsToWmsService {
@Autowired
MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
@Autowired
private SysLogMapper logMapper;
@Override
public JSONObject ObtainMateria() {
@@ -80,7 +87,7 @@ public class IWmsToWmsServiceImpl implements IWmsToWmsService {
return null;
}
}
JSONObject result;
JSONObject result = new JSONObject();
// 系统参数类
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(towmsmsg), JSONObject.class);
log.info("FinishOutTask请求参数是-------------------" + jsonObject.toString());
@@ -93,8 +100,33 @@ public class IWmsToWmsServiceImpl implements IWmsToWmsService {
result = JSONObject.parseObject(resultMsg);
log.info("FinishOutTask接口输出参数为-------------------" + result.toString());
} catch (Exception e) {
throw new BadRequestException("WMS inishOutTask接口提示错误" + e.getMessage());
SysLog logDto = new SysLog();
logDto.setRequest_ip(wmsUrl);
logDto.setAddress(wmsUrl);
logDto.setMethod("FinishOutTask");
logDto.setUsername("MES");
logDto.setDescription("回传异常!");
logDto.setBrowser("browser");
logDto.setLog_id(IdUtil.getSnowflake(1, 1).nextIdStr());
logDto.setCreate_time(DateUtil.now());
logDto.setLog_type("ERROR");
logDto.setParams("WMS inishOutTask接口提示错误请求参数" + jsonObject + ",错误信息:" + e.getMessage());
logMapper.insert(logDto);
log.error("WMS inishOutTask接口提示错误" + e.getMessage());
// throw new BadRequestException("WMS inishOutTask接口提示错误" + e.getMessage());
}
SysLog logDto = new SysLog();
logDto.setRequest_ip(wmsUrl);
logDto.setAddress(wmsUrl);
logDto.setMethod("FinishOutTask");
logDto.setUsername("MES");
logDto.setDescription("回传成功!");
logDto.setBrowser("browser");
logDto.setLog_id(IdUtil.getSnowflake(1, 1).nextIdStr());
logDto.setCreate_time(DateUtil.now());
logDto.setLog_type("INFO");
logDto.setParams("反馈mes系统成功参数为-------------------" + jsonObject.toString());
logMapper.insert(logDto);
return result;
}

View File

@@ -394,6 +394,8 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService {
@Transactional
public WmstoIWmsResponse outBillTask(JSONObject parm) {
log.info("WMS 出库请求参数参数为:-------------------" + parm.toString());
WmstoIWmsResponse result = new WmstoIWmsResponse();
RedissonUtils.lock(() -> {
if ("1002".equals(parm.getString("bill_type"))) {
int count = iSchBaseTaskService.count(new LambdaQueryWrapper<SchBaseTask>()
.and(w -> w.like(SchBaseTask::getPoint_code2, "BCPRK6")
@@ -422,8 +424,6 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService {
iSchBasePointService.update(schBasePoint);
parm.put("point_code2", finishCode);
}
WmstoIWmsResponse result = new WmstoIWmsResponse();
RedissonUtils.lock(() -> {
JSONArray tableData = parm.getJSONArray("tableData");
if (CollectionUtils.isEmpty(tableData)) {
throw new BadRequestException("tableData 不能为空");
@@ -451,7 +451,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService {
if (!storage_code.equals(structattr.getStoragevehicle_code())) {
throw new BadRequestException("该仓位存放托盘与所传托盘的编码不对" + "传入的托盘号:" + storage_code + ",现在存放的托盘号:" + structattr.getStoragevehicle_code());
}
if (!"0".equals(structattr.getLock_type())) {
if (!"0".equals(structattr.getLock_type())&&StringUtils.isBlank(structattr.getStor_type())) {
throw new BadRequestException("传入点位有任务:" + turnout_struct_code);
}
if (structattr.getLayer_num() > 3 && "1002".equals(parm.getString("bill_type"))) {