5 changed files with 230 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||||
|
package org.nl.wms.ext.controller; |
||||
|
|
||||
|
import cn.dev33.satoken.annotation.SaIgnore; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.common.logging.annotation.Log; |
||||
|
import org.nl.wms.ext.service.AcsToWmsService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* ACS调用WMS 控制层 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-06-09 |
||||
|
*/ |
||||
|
@RestController |
||||
|
@RequestMapping("/api/wms") |
||||
|
@Slf4j |
||||
|
public class AcsToWmsController { |
||||
|
@Autowired |
||||
|
private AcsToWmsService acsToWmsService; |
||||
|
|
||||
|
@PostMapping("/status") |
||||
|
@Log(value = "ACS给WMS反馈任务状态") |
||||
|
@SaIgnore |
||||
|
public ResponseEntity<Object> receiveTaskStatusAcs(@RequestBody String string) { |
||||
|
return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,55 @@ |
|||||
|
package org.nl.wms.ext.enums; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* acs任务反馈枚举 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-06-09 |
||||
|
*/ |
||||
|
public enum ResultAcsStatus { |
||||
|
/** |
||||
|
* 执行中 |
||||
|
*/ |
||||
|
EXECUTING("1", "执行中", "执行中"), |
||||
|
/** |
||||
|
* 完成 |
||||
|
*/ |
||||
|
FINISHED("2", "完成", "完成"); |
||||
|
|
||||
|
|
||||
|
ResultAcsStatus(String code, String name, String desc) { |
||||
|
this.code = code; |
||||
|
this.name = name; |
||||
|
this.desc = desc; |
||||
|
} |
||||
|
|
||||
|
private String code; |
||||
|
private String name; |
||||
|
private String desc; |
||||
|
|
||||
|
public String getCode() { |
||||
|
return code; |
||||
|
} |
||||
|
|
||||
|
public void setCode(String code) { |
||||
|
this.code = code; |
||||
|
} |
||||
|
|
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
|
||||
|
public String getDesc() { |
||||
|
return desc; |
||||
|
} |
||||
|
|
||||
|
public void setDesc(String desc) { |
||||
|
this.desc = desc; |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
package org.nl.wms.ext.service; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* ACS调用WMS 服务类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-06-09 |
||||
|
*/ |
||||
|
public interface AcsToWmsService { |
||||
|
|
||||
|
/** |
||||
|
* ACS客户端--->WMS服务端 |
||||
|
* ACS向WMS反馈任务状态 |
||||
|
* |
||||
|
* @param string ACS反馈的任务数组 |
||||
|
* @return Map<String, Object> |
||||
|
*/ |
||||
|
Map<String, Object> receiveTaskStatusAcs(String string); |
||||
|
} |
@ -0,0 +1,106 @@ |
|||||
|
package org.nl.wms.ext.service.impl; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSONArray; |
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import lombok.SneakyThrows; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.common.exception.BadRequestException; |
||||
|
import org.nl.wms.ext.enums.ResultAcsStatus; |
||||
|
import org.nl.wms.ext.service.AcsToWmsService; |
||||
|
import org.nl.wms.sch_manage.enums.TaskStatus; |
||||
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService; |
||||
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask; |
||||
|
import org.nl.wms.sch_manage.service.util.AbstractTask; |
||||
|
import org.nl.wms.sch_manage.service.util.TaskFactory; |
||||
|
import org.redisson.api.RLock; |
||||
|
import org.redisson.api.RedissonClient; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.HttpStatus; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* ACS调用WMS 实现类 |
||||
|
* </p> |
||||
|
* |
||||
|
* @author Liuxy |
||||
|
* @since 2025-06-09 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Service |
||||
|
public class AcsToWmsServiceImpl implements AcsToWmsService { |
||||
|
|
||||
|
/* |
||||
|
* redisson连接服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private RedissonClient redissonClient; |
||||
|
|
||||
|
/* |
||||
|
* 任务服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private ISchBaseTaskService iSchBaseTaskService; |
||||
|
|
||||
|
/** |
||||
|
* 任务工厂服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private TaskFactory taskFactory; |
||||
|
|
||||
|
@Override |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
@SneakyThrows |
||||
|
public Map<String, Object> receiveTaskStatusAcs(String string) { |
||||
|
log.info("acs向lms反馈任务状态,请求参数:--------------------------------------" + string); |
||||
|
JSONArray array = JSONArray.parseArray(string); |
||||
|
//返回处理失败的任务
|
||||
|
JSONArray errArr = new JSONArray(); |
||||
|
for (int i = 0; i < array.size(); i++) { |
||||
|
JSONObject row = array.getJSONObject(i); |
||||
|
String task_id = row.getString("task_id"); |
||||
|
RLock lock = redissonClient.getLock(task_id); |
||||
|
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); |
||||
|
try { |
||||
|
if (tryLock) { |
||||
|
SchBaseTask taskObj = iSchBaseTaskService.getById(task_id); |
||||
|
// acs反馈的任务类型
|
||||
|
String acs_task_status = row.getString("task_status"); |
||||
|
TaskStatus status; |
||||
|
if (ResultAcsStatus.EXECUTING.getCode().equals(acs_task_status)) { |
||||
|
// 执行中
|
||||
|
status = TaskStatus.EXECUTING; |
||||
|
} else if (ResultAcsStatus.FINISHED.getCode().equals(acs_task_status)) { |
||||
|
// 完成
|
||||
|
status = TaskStatus.FINISHED; |
||||
|
iSchBaseTaskService.updateById(taskObj); |
||||
|
} else { |
||||
|
// 取消
|
||||
|
status = TaskStatus.CANCELED; |
||||
|
} |
||||
|
// 根据配置编码执行相关配置内的方法
|
||||
|
AbstractTask task = taskFactory.getTask(taskObj.getConfig_code()); |
||||
|
task.updateTaskStatus(taskObj.getTask_code(),status); |
||||
|
|
||||
|
} else { |
||||
|
throw new BadRequestException("任务标识为:" + task_id + "的任务正在操作中!"); |
||||
|
} |
||||
|
} finally { |
||||
|
if (tryLock) { |
||||
|
lock.unlock(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
JSONObject result = new JSONObject(); |
||||
|
result.put("status", HttpStatus.OK.value()); |
||||
|
result.put("message", "任务状态反馈成功!"); |
||||
|
result.put("data", new JSONObject()); |
||||
|
result.put("errArr", errArr); |
||||
|
log.info("acs向lms反馈任务状态,返回参数:--------------------------------------" + result.toString()); |
||||
|
return result; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue