rev:三线接口

This commit is contained in:
2023-09-14 09:58:54 +08:00
parent 3e9c5f210a
commit cf0c5a077e
11 changed files with 221 additions and 77 deletions

View File

@@ -74,6 +74,7 @@ public enum AcsTaskEnum {
REQUEST_WASH_EMP("10","清洗机器空框请求"),//清洗机下料位
REQUEST_WASH_FULL_ERROR("11","清洗机-满料异常请求"),//去半成品入库 异常位
REQUEST_WASH_PLOTTER_EMP("12","刻字上料空框回库"),
REQUEST_HRBCP_TASK("18","三线半成品任务申请"),
///api/dict/dictDetail/api/dict/dictDetail/api/dict/dictDetail
AGV_SYSTEM_NB("1","诺宝机器人任务"),

View File

@@ -16,6 +16,7 @@ import org.nl.wms.scheduler_manage.service.extendtask.packageWrap.WrapSendEmptyT
import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterSendMaterialTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashSendMaterialQZTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashSendMaterialTask;
import org.nl.wms.storage_manage.semimanagehr.service.extendtask.IosHrTask;
import org.springframework.context.SmartLifecycle;
import org.springframework.context.annotation.Configuration;
@@ -37,6 +38,7 @@ public class ConventConfig implements SmartLifecycle {
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, SpringContextHolder.getBean(WashCallEmptyTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_FULL_ERROR, SpringContextHolder.getBean(WashSendMaterialQZTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_PLOTTER_EMP, SpringContextHolder.getBean(EngraveSendEmpTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_HRBCP_TASK, SpringContextHolder.getBean(IosHrTask.class));
System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size());
}

View File

@@ -120,12 +120,12 @@ public class AcsToWmsController {
return new ResponseEntity<>( HttpStatus.OK);
}
@PostMapping("/deviceApply")
@Log("海柔半成品任务申请")
//("海柔半成品任务申请")
@PostMapping("/anomaly")
@Log("异常反馈接口")
//("异常反馈接口")
@SaIgnore
public ResponseEntity<Object> deviceApply(@RequestBody JSONObject string) {
return new ResponseEntity<>(acsToWmsService.deviceApply(string),HttpStatus.OK);
public ResponseEntity<Object> anomaly(@RequestBody JSONObject string) {
return new ResponseEntity<>(acsToWmsService.anomaly(string),HttpStatus.OK);
}

View File

@@ -86,13 +86,12 @@ public interface AcsToWmsService {
/**
*
* @param json {
* type: 类型
* device_code1: 设备1
* barcode1: 条码1
* device_code2: 设备2
* barcode2: 条码2
* task_id:"",
* status:"满入-4"
* }
* @return json {
* point_code2:"新分配货位"
* }
* @return /
*/
Map<String, Object> deviceApply(JSONObject json);
Map<String, Object> anomaly(JSONObject json);
}

View File

@@ -20,6 +20,7 @@ public interface WmsToAcsService {
Map<String, Object> issueTaskToAcs(JSONArray arr);
Map<String, Object> issueTaskToAcs2(JSONArray arr);
Map<String, Object> issueTaskToAcs3(JSONArray arr);
Map<String, Object> issueTaskToAcs4(JSONArray arr);
/**
* WMS客户端--->ACS服务端

View File

@@ -23,6 +23,10 @@ import org.nl.modules.common.exception.BadRequestException;
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.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.scheduler_manage.service.task.TaskService;
@@ -33,8 +37,12 @@ import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus;
@@ -65,9 +73,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
@Autowired
private ISchBaseTaskService itaskService;
@Autowired
private IStIvtSectattrService sectattrService; // 库区服务
@Autowired
private DivRuleCpService divRuleCpService; // 分配规则服务
@Autowired
private IStIvtIostorinvHrBcpInService iStIvtIostorinvHrBcpInService;
@Autowired
private IStIvtIostorinvEmpBcpService iStIvtIostorinvEmpBcpService;
private IStIvtStructattrService structattrService; // 仓位服务
@Override
public Map<String, Object> apply(JSONObject param) {
@@ -351,87 +363,73 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
}
@Override
public Map<String, Object> deviceApply(JSONObject json) {
public Map<String, Object> anomaly(JSONObject json) {
/*
* 1.申请入满箱任务
* 2.申请入空箱任务
* 3.申请出满箱任务
* 4.申请出空箱任务
* 满入-4重新分配个货位有货货位锁定
*/
String task_id = json.getString("task_id");
String status = json.getString("status"); // 4-满入
HashMap<String, Object> result = new HashMap<>();
String type = json.getString("type");
try {
String device_code1 = json.getString("device_code1");
String barcode1 = json.getString("barcode1");
if (ObjectUtil.isEmpty(device_code1)) throw new BadRequestException("设备不能为空!");
SchBaseTask taskDao = itaskService.getById(task_id);
if (ObjectUtil.isEmpty(taskDao)) throw new BadRequestException("任务不存在!");
if (StrUtil.equals(type, "1")) {
/* 1.申请入满箱任务 */
// 调用入库分配规则
StIvtSectattr sect = sectattrService.getOne(
new QueryWrapper<StIvtSectattr>().lambda()
.eq(StIvtSectattr::getSect_name, "海柔半成品库区")
);
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
if (ObjectUtil.isEmpty(stIvtStructattr)) throw new BadRequestException("仓位不足!");
if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!");
// 更新单据入库仓位
StIvtIostorinvHrBcp invDao = iStIvtIostorinvHrBcpInService.getOne(
new QueryWrapper<StIvtIostorinvHrBcp>().lambda()
.eq(StIvtIostorinvHrBcp::getTask_id, task_id)
, false
);
if (ObjectUtil.isEmpty(invDao)) throw new BadRequestException("未找到对应入库单据!");
JSONObject param = new JSONObject();
param.put("device_code",device_code1);
param.put("barcode",barcode1);
// 锁定原仓位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, invDao.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
);
// 1.调用入库服务
iStIvtIostorinvHrBcpInService.fullIn(param);
invDao.setStruct_id(stIvtStructattr.getStruct_id());
invDao.setStruct_code(stIvtStructattr.getStruct_code());
invDao.setStruct_name(stIvtStructattr.getStruct_name());
iStIvtIostorinvHrBcpInService.updateById(invDao);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) {
// 更新任务入库仓位
taskDao.setPoint_code3(stIvtStructattr.getStruct_code());
itaskService.updateById(taskDao);
param.put("device_code",json.getString("device_code2"));
param.put("barcode",json.getString("barcode2"));
iStIvtIostorinvHrBcpInService.fullIn(param);
}
} else if (StrUtil.equals(type, "2")) {
/* 2.申请入空箱任务 */
// 锁定新货位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_id, stIvtStructattr.getStruct_id())
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("入库锁"))
);
if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!");
JSONObject param = new JSONObject();
param.put("device_code",device_code1);
param.put("barcode",barcode1);
// 1.调用空托盘入库服务
iStIvtIostorinvEmpBcpService.InEmp(param);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) {
param.put("device_code",json.getString("device_code2"));
param.put("barcode",json.getString("barcode2"));
iStIvtIostorinvEmpBcpService.InEmp(param);
}
} else if (StrUtil.equals(type, "3")) {
/* 3.申请出满箱任务 */
} else if (StrUtil.equals(type, "4")) {
/* 4.申请出空箱任务 */
JSONObject param = new JSONObject();
param.put("device_code",device_code1);
param.put("barcode",barcode1);
// 1.调用空托盘出库库服务
iStIvtIostorinvEmpBcpService.OutEmp(param);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2"))) {
param.put("device_code",json.getString("device_code2"));
iStIvtIostorinvEmpBcpService.OutEmp(param);
}
}
result.put("point_code2", stIvtStructattr.getStruct_code());
} catch (Exception e) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", e.getMessage());
return result;
}
result.put("status", HttpStatus.OK.value());
result.put("message", "下发成功");
result.put("message", "操作成功");
return result;
}
}

View File

@@ -110,6 +110,33 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
return AcsUtil.notifyAcs(api, form);
}
@Override
public Map<String, Object> issueTaskToAcs4(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_code", task.getString("task_code")
, "task_group_id", task.getString("task_group_id")
, "start_point_code", task.getString("point_code1")
, "next_point_code", task.getString("point_code3")
, "task_type", "18"
, "storage_task_type", task.getString("acs_task_type")
, "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")
, "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> cancelToAcs(JSONArray arr) {
String api = "api/wms/cancelTask";

View File

@@ -0,0 +1,116 @@
package org.nl.wms.storage_manage.semimanagehr.service.extendtask;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService;
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/*
* @author Liuxy
* @Date 2023/9/13 20:23
*/
@Service
@Slf4j
public class IosHrTask extends AbstractAcsTask {
@Autowired
private IStIvtIostorinvHrBcpInService iStIvtIostorinvHrBcpInService;
@Autowired
private IStIvtIostorinvEmpBcpService iStIvtIostorinvEmpBcpService;
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
}
@Override
public String createTask(JSONObject json) {
/*
* 13.申请入满箱任务
* 17.申请入空箱任务
* 14.申请出满箱任务
* 16.申请出空箱任务
*/
String type = json.getString("item_type");
String device_code1 = json.getString("device_code1");
String barcode1 = json.getString("barcode1");
if (ObjectUtil.isEmpty(device_code1)) throw new BadRequestException("设备不能为空!");
if (StrUtil.equals(type, "13")) {
/* 1.申请入满箱任务 */
if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!");
JSONObject param = new JSONObject();
param.put("device_code", device_code1);
param.put("barcode", barcode1);
// 1.调用入库服务
iStIvtIostorinvHrBcpInService.fullIn(param);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) {
param.put("device_code", json.getString("device_code2"));
param.put("barcode", json.getString("barcode2"));
iStIvtIostorinvHrBcpInService.fullIn(param);
}
} else if (StrUtil.equals(type, "17")) {
/* 2.申请入空箱任务 */
if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!");
JSONObject param = new JSONObject();
param.put("device_code", device_code1);
param.put("barcode", barcode1);
// 1.调用空托盘入库服务
iStIvtIostorinvEmpBcpService.InEmp(param);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) {
param.put("device_code", json.getString("device_code2"));
param.put("barcode", json.getString("barcode2"));
iStIvtIostorinvEmpBcpService.InEmp(param);
}
} else if (StrUtil.equals(type, "14")) {
/* 3.申请出满箱任务 */
} else if (StrUtil.equals(type, "16")) {
/* 4.申请出空箱任务 */
JSONObject param = new JSONObject();
param.put("device_code", device_code1);
param.put("barcode", barcode1);
// 1.调用空托盘出库库服务
iStIvtIostorinvEmpBcpService.OutEmp(param);
// 2.判断device_code2、barcode2 是否为空
if (ObjectUtil.isNotEmpty(json.getString("device_code2"))) {
param.put("device_code", json.getString("device_code2"));
iStIvtIostorinvEmpBcpService.OutEmp(param);
}
}
return null;
}
@Override
public void cancel(String task_id) {
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -270,7 +270,7 @@ public class StIvtIostorinvEmpBcpServiceImpl implements IStIvtIostorinvEmpBcpSe
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
Map<String, Object> result = bean.issueTaskToAcs4(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {

View File

@@ -535,7 +535,7 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinv
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
Map<String, Object> result = bean.issueTaskToAcs4(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {

View File

@@ -494,7 +494,7 @@ public class StIvtIostorinvHrBcpOutServiceImpl extends ServiceImpl<StIvtIostorin
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
Map<String, Object> result = bean.issueTaskToAcs3(param);
Map<String, Object> result = bean.issueTaskToAcs4(param);
// 反馈失败报错
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {