rev:无人车对接
This commit is contained in:
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -48,4 +49,14 @@ public interface MdMeMaterialbaseMapper extends BaseMapper<MdMeMaterialbase> {
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> pdaQueryMaterialInfo(@Param("param") JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 手持 - 仓库送料 - 查询列表信息(二级页面)
|
||||
* @param whereJson {
|
||||
* class_code: 物料类别
|
||||
* material_code: 关键字
|
||||
* }
|
||||
* @return List<JSONObject>
|
||||
*/
|
||||
List<JSONObject> pdaMaterialInfo(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -73,4 +73,35 @@
|
||||
ORDER BY mater.update_time Desc
|
||||
</select>
|
||||
|
||||
<select id="pdaMaterialInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
mater.*,
|
||||
class.class_name,
|
||||
class.class_code,
|
||||
supp.supp_name,
|
||||
unit.unit_code,
|
||||
unit.unit_name
|
||||
FROM
|
||||
md_me_materialbase mater
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = mater.material_type_id
|
||||
LEFT JOIN md_cs_supplierbase supp ON supp.supp_code = mater.supp_code
|
||||
LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mater.base_unit_id
|
||||
<where>
|
||||
mater.is_used = '1'
|
||||
AND mater.is_delete = '0'
|
||||
AND class.class_code IN ('YL001','FL001','WBC001','NBC001','OTHER01')
|
||||
<if test="param.class_code != null and param.class_code != ''">
|
||||
AND
|
||||
(class.class_code = #{param.class_code}
|
||||
</if>
|
||||
|
||||
<if test="param.material_code != null and param.material_code != ''">
|
||||
AND
|
||||
(mater.material_code LIKE #{param.material_code} or
|
||||
mater.material_name LIKE #{param.material_code})
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY mater.update_time Desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -29,13 +29,6 @@ public class NotCarToWmsController {
|
||||
@Autowired
|
||||
private NotCarToWmsService notCarToWmsService;
|
||||
|
||||
@PostMapping("/sendTask")
|
||||
@Log(value = "无人车给下发WMS搬运任务")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> sendTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarToWmsService.sendTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/arrive")
|
||||
@Log(value = "无人车到达")
|
||||
@SaIgnore
|
||||
|
||||
@@ -29,11 +29,11 @@ public class WmsToNotCarController {
|
||||
@Autowired
|
||||
private WmsToNotCarService wmsToNotCarService;
|
||||
|
||||
@PostMapping("/resultUnloadTask")
|
||||
@Log(value = "卸货任务完成反馈")
|
||||
@PostMapping("/isGoBack")
|
||||
@Log(value = "是否有成品配送")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> resultUnloadTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(wmsToNotCarService.resultUnloadTask(whereJson), HttpStatus.OK);
|
||||
public ResponseEntity<Object> isGoBack(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(wmsToNotCarService.isGoBack(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/callNotCat")
|
||||
|
||||
@@ -13,21 +13,6 @@ import org.nl.wms.ext.util.NoCarResponse;
|
||||
*/
|
||||
public interface NotCarToWmsService {
|
||||
|
||||
/**
|
||||
* 无人车给下发WMS搬运任务
|
||||
*
|
||||
* @param whereJson {
|
||||
* "id": “111” 唯一标识id
|
||||
* "item": [
|
||||
* {
|
||||
* "point_code": "WRCCB01" 卸货点位
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
* @return NoCarResponse
|
||||
*/
|
||||
NoCarResponse sendTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车到达
|
||||
*
|
||||
|
||||
@@ -14,20 +14,20 @@ import org.nl.wms.ext.util.NoCarResponse;
|
||||
public interface WmsToNotCarService {
|
||||
|
||||
/**
|
||||
* 卸货任务完成反馈
|
||||
* 是否有成品配送
|
||||
*
|
||||
* @param whereJson {
|
||||
* "requestType": "WCS_118",
|
||||
* "accessId": "1",
|
||||
* "requestId": "唯一标识",
|
||||
* "data": {
|
||||
* "id":”111“
|
||||
* "to_command":"1"
|
||||
* "taskNo":”111“
|
||||
* "isGoback":"1" 0-有 1-没有
|
||||
* }
|
||||
* }
|
||||
* @return BaseResponse
|
||||
*/
|
||||
NoCarResponse resultUnloadTask(JSONObject whereJson);
|
||||
NoCarResponse isGoBack(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 呼叫无人车
|
||||
@@ -40,7 +40,7 @@ public interface WmsToNotCarService {
|
||||
* "detail": [
|
||||
* {
|
||||
* "taskNo": "TASK00000001", 唯一标识
|
||||
* "taskType": "MV", 任务类型(固定)
|
||||
* "taskType": "MMV", 任务类型(固定)
|
||||
* "taskDate": "2023-03-13 12:00:00", 任务时间
|
||||
* "taskState": "00", 任务状态 00:创建
|
||||
* "priority": "1", 优先级 - 1-最高,2-普通+,3-普通,4-普通-,5-最低
|
||||
|
||||
@@ -1,24 +1,27 @@
|
||||
package org.nl.wms.ext.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.ext.service.NotCarToWmsService;
|
||||
import org.nl.wms.ext.util.NoCarResponse;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.pda.general_management.service.PdaNotCarService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.NoCarUnloadTask;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.NoCarBackCpTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
@@ -43,16 +46,22 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService {
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
* 点位mapper
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
private SchBasePointMapper schBasePointMapper;
|
||||
|
||||
/**
|
||||
* 无人车卸货任务类
|
||||
* 无人车手持服务类
|
||||
*/
|
||||
@Resource
|
||||
private NoCarUnloadTask noCarUnloadTask;
|
||||
private PdaNotCarService pdaNotCarService;
|
||||
|
||||
/**
|
||||
* 无人车装货任务类
|
||||
*/
|
||||
@Resource
|
||||
private NoCarBackCpTask noCarBackCpTask;
|
||||
|
||||
/**
|
||||
* 系统参数服务
|
||||
@@ -61,67 +70,7 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService {
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public NoCarResponse sendTask(JSONObject whereJson) {
|
||||
log.info("无人车下发搬运任务输入参数:{}", whereJson);
|
||||
RLock lock = redissonClient.getLock("lock:sendTask");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
String id = whereJson.getString("id");
|
||||
List<JSONObject> itemList = whereJson.getJSONArray("item").toJavaList(JSONObject.class);
|
||||
// 数据校验
|
||||
if (ObjectUtil.isEmpty(id)) {
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.requestError("唯一标识不能为空!").toString());
|
||||
return NoCarResponse.requestError("唯一标识不能为空!");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(itemList)) {
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.requestError("卸货点位不能为空!").toString());
|
||||
return NoCarResponse.requestError("卸货点位不能为空!");
|
||||
}
|
||||
// 查询【无人车卸货缓存区】是否有空位
|
||||
List<SchBasePoint> pointList = iSchBasePointService.list(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, IOSEnum.SECT_CODE.code("无人车卸货缓存1区"))
|
||||
.eq(SchBasePoint::getPoint_status, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.and(row -> row.isNull(SchBasePoint::getIng_task_code)
|
||||
.or().eq(SchBasePoint::getIng_task_code, "")
|
||||
)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(pointList)) {
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.requestError("当前卸货缓存点位没有空位!").toString());
|
||||
return NoCarResponse.requestError("当前卸货缓存点位没有空位!");
|
||||
}
|
||||
if (itemList.size() > pointList.size()) {
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.requestError("当前卸货缓存点位空位不够用!当前可用点位为【" + pointList.size() + "】").toString());
|
||||
return NoCarResponse.requestError("当前卸货缓存点位空位不够用!当前可用点位为【" + pointList.size() + "】");
|
||||
}
|
||||
|
||||
for (int i = 0; i < itemList.size(); i++) {
|
||||
JSONObject json = itemList.get(i);
|
||||
SchBasePoint schBasePoint = pointList.get(i);
|
||||
// 准备任务参数
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", json.getString("point_code"));
|
||||
jsonTask.put("point_code2", schBasePoint.getPoint_code());
|
||||
jsonTask.put("contact_task", id);
|
||||
noCarUnloadTask.create(jsonTask);
|
||||
}
|
||||
} else {
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.requestError("当前任务正在执行中,请稍后在试...").toString());
|
||||
return NoCarResponse.requestError("当前任务正在执行中,请稍后在试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
log.info("无人车下发搬运任务输出参数:{}", NoCarResponse.responseOk().toString());
|
||||
return NoCarResponse.responseOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@SneakyThrows
|
||||
public NoCarResponse arrive(JSONObject whereJson) {
|
||||
log.info("无人车到达输入参数:{}", whereJson);
|
||||
@@ -138,11 +87,18 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService {
|
||||
if (!taskNo.equals(sysParamService.getValue())) {
|
||||
return NoCarResponse.requestError("任务号与呼叫时不一致!");
|
||||
}
|
||||
// 更新值为1
|
||||
sysParamService.setRemark(IOSConstant.ONE);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
// 判断到达点位系统参数类型
|
||||
Param sysParam = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
String value = sysParam.getValue();
|
||||
if (value.equals(IOSConstant.ONE)) {
|
||||
// 1.下发车间卸货任务
|
||||
unLoadSend();
|
||||
} else if (value.equals(IOSConstant.TWO)) {
|
||||
// 2.下发车间装货任务
|
||||
loading();
|
||||
}
|
||||
|
||||
}
|
||||
// 前往点位
|
||||
} else {
|
||||
log.info("无人车到达输出参数:{}", NoCarResponse.requestError("当前任务正在执行中,请稍后在试...").toString());
|
||||
return NoCarResponse.requestError("当前任务正在执行中,请稍后在试...");
|
||||
@@ -155,4 +111,57 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService {
|
||||
log.info("无人车到达输出参数:{}", NoCarResponse.responseOk().toString());
|
||||
return NoCarResponse.responseOk();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建卸货任务
|
||||
*/
|
||||
private void unLoadSend() {
|
||||
// 查询 无人车有货点位
|
||||
List<JSONObject> rows = schBasePointMapper.queryNotCarPoint();
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("rows", rows);
|
||||
// 调用手持卸货
|
||||
pdaNotCarService.unload(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建装货任务
|
||||
*/
|
||||
private void loading() {
|
||||
// 查询成品库存
|
||||
List<SchBasePoint> pointIvtList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, "CPQ01")
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
.orderByDesc(SchBasePoint::getOut_order_seq)
|
||||
.last("LIMIT 3")
|
||||
);
|
||||
// 查询无人车点位
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, IOSConstant.WRC01)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
|
||||
if (pointList.size() < pointIvtList.size()) {
|
||||
throw new BadRequestException("无人车空位异常!当前需求空位【" + pointIvtList.size() + "】");
|
||||
}
|
||||
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
for (int i = 0; i < pointIvtList.size(); i++) {
|
||||
SchBasePoint jsonIvt = pointIvtList.get(i);
|
||||
SchBasePoint pointDao = pointList.get(i);
|
||||
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", jsonIvt.getPoint_code());
|
||||
jsonTask.put("point_code2", pointDao.getPoint_code());
|
||||
jsonTask.put("task_group_id", task_group_id);
|
||||
jsonTask.put("material_id", jsonIvt.getMaterial_id());
|
||||
jsonTask.put("material_qty", jsonIvt.getMaterial_qty());
|
||||
noCarBackCpTask.create(jsonTask);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ import org.springframework.stereotype.Service;
|
||||
public class WmsToNotCarServiceImpl implements WmsToNotCarService {
|
||||
|
||||
@Override
|
||||
public NoCarResponse resultUnloadTask(JSONObject param) {
|
||||
log.info("下发无人车接口resultUnloadTask的输入参数为:-------------------" + param.toString());
|
||||
public NoCarResponse isGoBack(JSONObject param) {
|
||||
log.info("下发无人车接口isGoBack的输入参数为:-------------------" + param.toString());
|
||||
// 返回参数
|
||||
NoCarResponse resultCar;
|
||||
|
||||
@@ -48,7 +48,7 @@ public class WmsToNotCarServiceImpl implements WmsToNotCarService {
|
||||
return NoCarResponse.requestError("系统参数表中:" + SysParamConstant.CAR_URL + "不存在");
|
||||
}
|
||||
|
||||
String url = acsUrlParam.getValue() + "openapi/callback/externalTaskCallback";
|
||||
String url = acsUrlParam.getValue() + "openapi/callback/isGoBack";
|
||||
try {
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(param))
|
||||
@@ -56,7 +56,7 @@ public class WmsToNotCarServiceImpl implements WmsToNotCarService {
|
||||
// 格式转换
|
||||
JSONObject result = JSONObject.parseObject(resultMsg);
|
||||
resultCar = JSONObject.toJavaObject(result, NoCarResponse.class);
|
||||
log.info("下发无人车接口resultUnloadTask的输出参数为:-------------------" + resultMsg);
|
||||
log.info("下发无人车接口isGoBack的输出参数为:-------------------" + resultMsg);
|
||||
} catch (Exception e) {
|
||||
//网络不通
|
||||
String msg = e.getMessage();
|
||||
|
||||
@@ -32,25 +32,11 @@ public class PdaNotCarController {
|
||||
@Autowired
|
||||
private PdaNotCarService notCarService;
|
||||
|
||||
@PostMapping("/queryXhRegion")
|
||||
@Log("无人车卸货 - 查询卸货区下拉框")
|
||||
@PostMapping("/queryNotCarPoint")
|
||||
@Log("无人车卸货 - 查询无人车点位信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryXhRegion() {
|
||||
return new ResponseEntity<>(notCarService.queryXhRegion(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryEndRegion")
|
||||
@Log("无人车卸货 - 查询目的区域下拉框")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryEndRegion() {
|
||||
return new ResponseEntity<>(notCarService.queryEndRegion(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryRegionPoint")
|
||||
@Log("无人车卸货 - 查询区域点位信息")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryRegionPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.queryRegionPoint(whereJson), HttpStatus.OK);
|
||||
public ResponseEntity<Object> queryNotCarPoint() {
|
||||
return new ResponseEntity<>(notCarService.queryNotCarPoint(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/unload")
|
||||
@@ -60,13 +46,6 @@ public class PdaNotCarController {
|
||||
return new ResponseEntity<>(notCarService.unload(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/waiting")
|
||||
@Log("无人车卸货 - 等待")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> waiting(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.waiting(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/back")
|
||||
@Log("无人车卸货 - 回库")
|
||||
@SaIgnore
|
||||
@@ -74,15 +53,8 @@ public class PdaNotCarController {
|
||||
return new ResponseEntity<>(notCarService.back(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryZhRegion")
|
||||
@Log("无人车装货 - 查询装货区下拉框")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryZhRegion() {
|
||||
return new ResponseEntity<>(notCarService.queryZhRegion(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryZhPoint")
|
||||
@Log("无人车装货 - 查询装货区下的点位")
|
||||
@Log("无人车装货 - 二级页面查询(物料维护)")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryZhPoint(JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.queryZhPoint(whereJson), HttpStatus.OK);
|
||||
@@ -109,5 +81,40 @@ public class PdaNotCarController {
|
||||
return new ResponseEntity<>(notCarService.installConfirm(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryCarPoint")
|
||||
@Log("仓库送料 - 查询无人车点位下拉框(二级页面)")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryCarPoint() {
|
||||
return new ResponseEntity<>(notCarService.queryCarPoint(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryClassType")
|
||||
@Log("仓库送料 - 查询物料类别下拉框(二级页面)")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryClassType() {
|
||||
return new ResponseEntity<>(notCarService.queryClassType(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryMaterialInfo")
|
||||
@Log("仓库送料 - 查询列表信息(二级页面)")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryMaterialInfo(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.queryMaterialInfo(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/callCarIos")
|
||||
@Log("仓库送料 - 呼叫无人车")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> callCarIos(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.callCarIos(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/sendTask")
|
||||
@Log("仓库送料 - 确认送料")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> sendTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(notCarService.sendTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -14,28 +14,11 @@ import org.nl.wms.pda.util.PdaResponse;
|
||||
public interface PdaNotCarService {
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询卸货区下拉框
|
||||
* 无人车卸货 - 查询无人车点位信息
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryXhRegion();
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询目的区域下拉框
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryEndRegion();
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询区域点位信息
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryRegionPoint(JSONObject whereJson);
|
||||
PdaResponse queryNotCarPoint();
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 卸货
|
||||
@@ -48,16 +31,6 @@ public interface PdaNotCarService {
|
||||
*/
|
||||
PdaResponse unload(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 等待
|
||||
*
|
||||
* @param whereJson {
|
||||
* <p>
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse waiting(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 回库
|
||||
*
|
||||
@@ -68,16 +41,11 @@ public interface PdaNotCarService {
|
||||
*/
|
||||
PdaResponse back(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 无人车装货 - 查询装货区下拉框
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryZhRegion();
|
||||
|
||||
/**
|
||||
* 无人车装货 - 查询装货区下的点位
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* point_code: 货位编码
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
@@ -85,8 +53,8 @@ public interface PdaNotCarService {
|
||||
|
||||
/**
|
||||
* 无人车装货 - 呼叫无人车
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* rows: [明细]
|
||||
* }
|
||||
* @return PdaResponse
|
||||
@@ -95,6 +63,7 @@ public interface PdaNotCarService {
|
||||
|
||||
/**
|
||||
* 无人车装货 - 装货
|
||||
*
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* rows: [明细]
|
||||
@@ -105,7 +74,77 @@ public interface PdaNotCarService {
|
||||
|
||||
/**
|
||||
* 无人车装货 - 装货完成
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse installConfirm();
|
||||
|
||||
/**
|
||||
* 查询无人车点位下拉框(二级页面)
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryCarPoint();
|
||||
|
||||
/**
|
||||
* 查询物料类别下拉框(二级页面)
|
||||
*
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryClassType();
|
||||
|
||||
/**
|
||||
* 查询列表信息(二级页面)
|
||||
*
|
||||
* @param whereJson {
|
||||
* class_code: 物料类别
|
||||
* material_code: 关键字
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryMaterialInfo(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 仓库送料 - 呼叫无人车
|
||||
*
|
||||
* @param whereJson {
|
||||
* <p>
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse callCarIos(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 仓库送料 - 确认送料
|
||||
*
|
||||
* @param whereJson {
|
||||
* rows: 列表明细
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse sendTask(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 公共 - 呼叫无人车
|
||||
*
|
||||
* @param whereJson {
|
||||
* point_code: 无人车对接点
|
||||
* }
|
||||
*/
|
||||
void publicCallCar(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 公共 - 是否有成品配送
|
||||
*
|
||||
* @param whereJson {
|
||||
* isGoback: 0-有成品 1-无成品
|
||||
* }
|
||||
*/
|
||||
void publicIsGoBack(JSONObject whereJson);
|
||||
|
||||
/**
|
||||
* 公共 - 装货任务完成
|
||||
*/
|
||||
void publicLoadingConfirm();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.enums.SysParamConstant;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.basedata_manage.service.dao.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.ext.service.WmsToNotCarService;
|
||||
import org.nl.wms.pda.general_management.service.PdaNotCarService;
|
||||
import org.nl.wms.pda.util.PDAEnum;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseRegionService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseRegion;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.NoCarInstallTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.PdaNotCarUnloadTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.NoCarBackCpTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.NoCarUnloadTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -26,7 +26,10 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -40,10 +43,10 @@ import java.util.List;
|
||||
public class PdaNotCarServiceImpl implements PdaNotCarService {
|
||||
|
||||
/**
|
||||
* 区域服务
|
||||
* 无人车装货任务类
|
||||
*/
|
||||
@Resource
|
||||
private ISchBaseRegionService iSchBaseRegionService;
|
||||
private NoCarBackCpTask noCarBackCpTask;
|
||||
|
||||
/**
|
||||
* 点位mapper
|
||||
@@ -55,7 +58,7 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
|
||||
* 无人车卸货任务类
|
||||
*/
|
||||
@Resource
|
||||
private PdaNotCarUnloadTask pdaNotCarUnloadTask;
|
||||
private NoCarUnloadTask noCarUnloadTask;
|
||||
|
||||
/**
|
||||
* wms调用无人车系统服务
|
||||
@@ -70,87 +73,245 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
/**
|
||||
* 无人车装货任务服务
|
||||
* 物料信息mapper
|
||||
*/
|
||||
@Resource
|
||||
private NoCarInstallTask noCarInstallTask;
|
||||
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
|
||||
|
||||
@Override
|
||||
public PdaResponse queryXhRegion() {
|
||||
List<SchBaseRegion> list = iSchBaseRegionService.list(
|
||||
new QueryWrapper<SchBaseRegion>().lambda()
|
||||
.in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车对接区(拆包)"),
|
||||
IOSEnum.REGION_CODE.code("无人车对接区(成品)")
|
||||
)
|
||||
);
|
||||
|
||||
return PdaResponse.requestParamOk(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryEndRegion() {
|
||||
List<SchBaseRegion> list = iSchBaseRegionService.list(
|
||||
new QueryWrapper<SchBaseRegion>().lambda()
|
||||
.in(SchBaseRegion::getRegion_code, IOSEnum.REGION_CODE.code("无人车卸货缓存区"))
|
||||
);
|
||||
|
||||
return PdaResponse.requestParamOk(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryRegionPoint(JSONObject whereJson) {
|
||||
return PdaResponse.requestParamOk(schBasePointMapper.queryRegionPoint(whereJson));
|
||||
public PdaResponse queryNotCarPoint() {
|
||||
return PdaResponse.requestParamOk(schBasePointMapper.queryNotCarPoint());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse unload(JSONObject whereJson) {
|
||||
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
// 查询可用点位
|
||||
List<SchBasePoint> pointList = divPoint(rows.size(), whereJson.getString("region_code"));
|
||||
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject json = rows.get(i);
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", json.getString("point_code"));
|
||||
jsonTask.put("point_code2", pointList.get(i).getPoint_code());
|
||||
jsonTask.put("material_id", json.getString("class_code"));
|
||||
pdaNotCarUnloadTask.create(jsonTask);
|
||||
// 根据物料类型查询目的点位
|
||||
List<SchBasePoint> pointList = new ArrayList<>();
|
||||
if (json.getString("class_code").equals(IOSConstant.WBC001)) {
|
||||
// 查询存放外包材区域
|
||||
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE);
|
||||
} else {
|
||||
// 查询无人车卸货缓存区域
|
||||
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
if (ObjectUtil.isEmpty(pointList)) {
|
||||
throw new BadRequestException("卸货点位无空位可用!");
|
||||
}
|
||||
// 按照入库顺序进行排序
|
||||
pointList = pointList.stream()
|
||||
.sorted(Comparator.comparing(SchBasePoint::getIn_order_seq))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse waiting(JSONObject whereJson) {
|
||||
jsonTask.put("point_code2", pointList.get(0).getPoint_code());
|
||||
jsonTask.put("material_id", json.getString("material_id"));
|
||||
jsonTask.put("material_qty", json.getString("material_qty"));
|
||||
jsonTask.put("task_group_id", task_group_id);
|
||||
noCarUnloadTask.create(jsonTask);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse back(JSONObject whereJson) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("isGoback", IOSConstant.ONE);
|
||||
this.publicIsGoBack(param);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryZhRegion() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryZhPoint(JSONObject whereJson) {
|
||||
// 查询此区域下的空位
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, whereJson.getString("region_code"))
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
List<SchBasePoint> pointList = schBasePointMapper.getNoTaskPointByRegionAndType("CPQ01", IOSConstant.ONE, IOSConstant.TWO);
|
||||
if (ObjectUtil.isNotEmpty(whereJson.getString("point_code"))) {
|
||||
pointList = pointList.stream()
|
||||
.filter(row -> row.getPoint_code().equals(whereJson.getString("point_code")))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
pointList = pointList.stream()
|
||||
.sorted(Comparator.comparing(SchBasePoint::getOut_order_seq))
|
||||
.collect(Collectors.toList());
|
||||
return PdaResponse.requestParamOk(pointList);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse callCar(JSONObject whereJson) {
|
||||
whereJson.put("point_code", IOSConstant.WRC_POINT02);
|
||||
this.publicCallCar(whereJson);
|
||||
// 更新到达点位系统参数
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
sysParamService.setValue(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse install(JSONObject whereJson) {
|
||||
// 查询成品库存
|
||||
List<JSONObject> pointIvtList = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
if (pointIvtList.size() > 3) {
|
||||
throw new BadRequestException("不能超过3条任务!");
|
||||
}
|
||||
// 查询无人车点位
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, IOSConstant.WRC01)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
|
||||
if (pointList.size() < pointIvtList.size()) {
|
||||
throw new BadRequestException("无人车空位异常!当前需求空位【" + pointIvtList.size() + "】");
|
||||
}
|
||||
|
||||
// 任务组id
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
for (int i = 0; i < pointIvtList.size(); i++) {
|
||||
JSONObject jsonIvt = pointIvtList.get(i);
|
||||
SchBasePoint pointDao = pointList.get(i);
|
||||
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", jsonIvt.getString("point_code"));
|
||||
jsonTask.put("point_code2", pointDao.getPoint_code());
|
||||
jsonTask.put("task_group_id", task_group_id);
|
||||
jsonTask.put("material_id", jsonIvt.getString("material_id"));
|
||||
jsonTask.put("material_qty", jsonIvt.getString("material_qty"));
|
||||
noCarBackCpTask.create(jsonTask);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse installConfirm() {
|
||||
this.publicLoadingConfirm();
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryCarPoint() {
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, IOSConstant.WRC01)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
);
|
||||
List<JSONObject> resultList = new ArrayList<>();
|
||||
pointList.forEach(item -> {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("text", item.getPoint_code());
|
||||
json.put("value", item.getPoint_code());
|
||||
resultList.add(json);
|
||||
});
|
||||
return PdaResponse.requestParamOk(resultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryClassType() {
|
||||
return PdaResponse.requestParamOk(PDAEnum.CLASS_TYPE.getDict());
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryMaterialInfo(JSONObject whereJson) {
|
||||
return PdaResponse.requestParamOk(mdMeMaterialbaseMapper.pdaMaterialInfo(whereJson));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse callCarIos(JSONObject whereJson) {
|
||||
whereJson.put("point_code", IOSConstant.WRC_POINT01);
|
||||
this.publicCallCar(whereJson);
|
||||
// 更新到达点位系统参数
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
sysParamService.setValue(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse sendTask(JSONObject whereJson) {
|
||||
List<JSONObject> pointList = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
// ---------------校验组盘---------------
|
||||
// 根据点位分组
|
||||
Map<String, List<JSONObject>> pointMapList = pointList.stream()
|
||||
.collect(Collectors.groupingBy(obj -> obj.getString("point_code")));
|
||||
// 外包位
|
||||
int wbClass = 0;
|
||||
// 无人车卸货缓存
|
||||
int materialClass = 0;
|
||||
|
||||
// 只有其他类型的物料可以有多条数据
|
||||
String flag = "YL001,FL001,WBC001,NBC001";
|
||||
for (String point : pointMapList.keySet()) {
|
||||
List<JSONObject> list = pointMapList.get(point);
|
||||
// 查询点位信息
|
||||
SchBasePoint schBasePoint = schBasePointMapper.selectById(point);
|
||||
schBasePoint.setPoint_status(IOSEnum.POINT_STATUS.code("有箱有料"));
|
||||
schBasePoint.setMaterial_id(list.get(0).getString("material_id"));
|
||||
|
||||
boolean is_class = list.stream()
|
||||
.anyMatch(row -> flag.contains(row.getString("class_code")));
|
||||
if (is_class) {
|
||||
// 不是其他类型物料类型:判断是否是一种相同物料
|
||||
boolean is_like = list.stream()
|
||||
.allMatch(row -> row.getString("material_code").equals(list.get(0).getString("material_code")));
|
||||
if (!is_like) {
|
||||
// 不相同:报错
|
||||
throw new BadRequestException("当前点位【" + point + "】存在不相同物料,请处理!");
|
||||
}
|
||||
schBasePoint.setMaterial_qty(list.get(0).getString("qty"));
|
||||
// 更新需要用到的货位数量
|
||||
if (list.get(0).getString("class_code").equals(IOSConstant.WBC001)) {
|
||||
wbClass += 1;
|
||||
} else {
|
||||
materialClass += 1;
|
||||
}
|
||||
} else {
|
||||
// 其他类型物料 - 合计数量
|
||||
double qty = list.stream()
|
||||
.map(row -> row.getDoubleValue("qty"))
|
||||
.reduce(Double::sum).orElse(0.0);
|
||||
schBasePoint.setMaterial_qty(String.valueOf(qty));
|
||||
// 更新需要用到的货位数量
|
||||
materialClass = +1;
|
||||
}
|
||||
// 更新点位信息
|
||||
schBasePointMapper.updateById(schBasePoint);
|
||||
}
|
||||
// ---------------校验车间空位---------------
|
||||
if (wbClass > 0) {
|
||||
// 查询外包材空位
|
||||
List<SchBasePoint> wbPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WBC001, IOSConstant.ONE, IOSConstant.ONE);
|
||||
if (wbClass > wbPointList.size()) {
|
||||
throw new BadRequestException("存放外包材空位不足,当前需要空位【" + wbClass + "】当前已有空位【" + wbPointList.size() + "】");
|
||||
}
|
||||
}
|
||||
if (materialClass > 0) {
|
||||
List<SchBasePoint> xhPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE);
|
||||
if (materialClass > xhPointList.size()) {
|
||||
throw new BadRequestException("卸货缓存区空位不足,当前需要空位【" + materialClass + "】当前已有空位【" + xhPointList.size() + "】");
|
||||
}
|
||||
}
|
||||
// ---------------下发无人车装货完成反馈---------------
|
||||
this.publicLoadingConfirm();
|
||||
// 更新已到达点位系统参数:1-下发车间卸货任务
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
sysParamService.setValue(IOSConstant.ONE);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publicCallCar(JSONObject whereJson) {
|
||||
// 根据区域找对应的无人车对接点
|
||||
String taskNo = IdUtil.getStringId();
|
||||
// 将任务号存在系统中
|
||||
@@ -167,83 +328,48 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
|
||||
List<JSONObject> detail = new ArrayList<>();
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("taskNo", taskNo);
|
||||
json.put("taskType", "MV");
|
||||
json.put("taskType", "MMV");
|
||||
json.put("taskDate", DateUtil.now());
|
||||
json.put("taskState", "00");
|
||||
json.put("priority", IOSConstant.ONE);
|
||||
json.put("wareCode", "W02");
|
||||
json.put("wareCode", "W01");
|
||||
// 目标点位
|
||||
json.put("toLoc", "");
|
||||
// 地图
|
||||
json.put("udf02", "");
|
||||
json.put("toLoc", whereJson.getString("point_code"));
|
||||
|
||||
detail.add(json);
|
||||
data.put("detail", detail);
|
||||
param.put("data", data);
|
||||
// 呼叫无人车
|
||||
wmsToNotCarService.callNotCat(param);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse install(JSONObject whereJson) {
|
||||
// 判断无人车是否到位
|
||||
public void publicIsGoBack(JSONObject whereJson) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("requestType", "WCS_118");
|
||||
param.put("accessId", IOSConstant.ONE);
|
||||
param.put("requestId", IdUtil.getStringId());
|
||||
|
||||
JSONObject data = new JSONObject();
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK");
|
||||
if (!sysParamService.getRemark().equals(IOSConstant.ONE)) {
|
||||
throw new BadRequestException("无人车未到位!");
|
||||
}
|
||||
// 查询无人车上的点位
|
||||
// 创建装货任务
|
||||
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
|
||||
if (rows.size() > 2) {
|
||||
throw new BadRequestException("选择物料不能大于2条!");
|
||||
}
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject json = rows.get(i);
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("point_code1", json.getString("point_code"));
|
||||
task.put("point_code2", "");
|
||||
task.put("contact_task", sysParamService.getValue());
|
||||
noCarInstallTask.create(task);
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
data.put("taskNo", sysParamService.getValue());
|
||||
data.put("isGoback", whereJson.getString("isGoback"));
|
||||
param.put("data", data);
|
||||
// 是否有成品配送
|
||||
wmsToNotCarService.isGoBack(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse installConfirm() {
|
||||
// 判断无人车是否到位
|
||||
public void publicLoadingConfirm() {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("requestType", "WCS_110");
|
||||
param.put("accessId", IOSConstant.ONE);
|
||||
param.put("requestId", IdUtil.getStringId());
|
||||
|
||||
JSONObject data = new JSONObject();
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK");
|
||||
sysParamService.setRemark(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
|
||||
// 调用无人装货任务类
|
||||
noCarInstallTask.backParam(sysParamService.getValue());
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据数量找到对应可用点位
|
||||
*
|
||||
* @param size 数量
|
||||
* @param region_code 区域编码
|
||||
* @return List<SchBasePoint>
|
||||
*/
|
||||
private List<SchBasePoint> divPoint(int size, String region_code) {
|
||||
List<SchBasePoint> pointList = schBasePointMapper.selectList(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getRegion_code, region_code)
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.and(row -> row.isNull(SchBasePoint::getIng_task_code)
|
||||
.or().eq(SchBasePoint::getIng_task_code, "")
|
||||
)
|
||||
.orderByAsc(SchBasePoint::getPoint_code)
|
||||
);
|
||||
|
||||
if (pointList.size() < size) {
|
||||
throw new BadRequestException("当前区域空位不够,当前区域剩余空位【" + pointList.size() + "】");
|
||||
}
|
||||
return pointList;
|
||||
data.put("taskNo", sysParamService.getValue());
|
||||
param.put("data", data);
|
||||
wmsToNotCarService.continueTask(param);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,9 @@ public enum PDAEnum {
|
||||
// 运送类型
|
||||
TASK_TYPE(MapOf.of("小料箱", "1", "大料箱或其他", "2")),
|
||||
|
||||
// 物料类别
|
||||
CLASS_TYPE(MapOf.of("原料", "YL001", "辅料", "FL001", "内包材", "NBC001", "外包材", "WBC001", "其他", "OTHER01")),
|
||||
|
||||
;
|
||||
|
||||
private Map<String, String> code;
|
||||
|
||||
@@ -131,6 +131,8 @@ public class SchBasePoint implements Serializable {
|
||||
// 入库库区
|
||||
private String in_sect;
|
||||
|
||||
private String material_id;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<String> can_vehicle_types;
|
||||
|
||||
|
||||
@@ -60,13 +60,10 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
List<SchBasePoint> getCanUsePointByRegion(String regionCode);
|
||||
|
||||
/**
|
||||
* 无人车卸货 - 查询区域点位信息
|
||||
* @param whereJson {
|
||||
* region_code: 区域编码
|
||||
* }
|
||||
* 无人车卸货 - 查询无人车点位信息
|
||||
* @return PdaResponse
|
||||
*/
|
||||
List<JSONObject> queryRegionPoint(@Param("param") JSONObject whereJson);
|
||||
List<JSONObject> queryNotCarPoint();
|
||||
|
||||
/**
|
||||
* 手持功能
|
||||
|
||||
@@ -124,21 +124,21 @@
|
||||
OR t.point_code2 = p.point_code ))
|
||||
</select>
|
||||
|
||||
<select id="queryRegionPoint" resultType="com.alibaba.fastjson.JSONObject">
|
||||
<select id="queryNotCarPoint" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
point.*,
|
||||
mater.material_code,
|
||||
mater.material_name,
|
||||
class.class_code,
|
||||
class.class_name
|
||||
FROM
|
||||
sch_base_point point
|
||||
LEFT JOIN md_pb_classstandard class ON point.can_material_type = class.class_code
|
||||
LEFT JOIN md_me_materialbase mater ON point.material_id = mater.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON mater.material_type_id = class.class_id
|
||||
<where>
|
||||
IFNULL(point.can_material_type, '') != ''
|
||||
<if test="param.region_code != null and param.region_code != ''">
|
||||
AND
|
||||
point.region_code = #{param.region_code}
|
||||
</if>
|
||||
|
||||
IFNULL(point.material_id, '') != ''
|
||||
AND point.point_status != '1'
|
||||
AND point.region_code = 'WRC01'
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
||||
@@ -9,6 +9,11 @@ import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.pda.general_management.service.PdaNotCarService;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
@@ -20,9 +25,6 @@ import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
|
||||
import org.nl.wms.warehouse_management.service.IStIvtMoveinvdtlService;
|
||||
import org.nl.wms.warehouse_management.service.dao.StIvtMoveinvdtl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -55,10 +57,16 @@ public class NoCarBackCpTask extends AbstractTask {
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 无人车卸货任务类
|
||||
* 无人车对接服务
|
||||
*/
|
||||
@Resource
|
||||
private NoCarUnloadTask noCarUnloadTask;
|
||||
private PdaNotCarService pdaNotCarService;
|
||||
|
||||
/**
|
||||
* 系统参数服务
|
||||
*/
|
||||
@Resource
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
@@ -69,10 +77,11 @@ public class NoCarBackCpTask extends AbstractTask {
|
||||
task.setConfig_code(NoCarBackCpTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setContact_task(json.getString("contact_task"));
|
||||
task.setTask_group_id(json.getString("task_group_id"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
@@ -156,9 +165,9 @@ public class NoCarBackCpTask extends AbstractTask {
|
||||
// 更新起点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
|
||||
@@ -170,13 +179,17 @@ public class NoCarBackCpTask extends AbstractTask {
|
||||
// 判断任务是否全部完成
|
||||
List<SchBaseTask> list = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getContact_task, taskObj.getContact_task())
|
||||
.eq(SchBaseTask::getTask_group_id, taskObj.getTask_group_id())
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.ZERO)
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
// 通知卸货完成回库
|
||||
noCarUnloadTask.resultNoCar(taskObj.getContact_task());
|
||||
// 通知装货完成回库
|
||||
pdaNotCarService.publicLoadingConfirm();
|
||||
// 获取系统参数:无人车到达点位处理
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
sysParamService.setValue(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,218 +0,0 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.ext.service.WmsToNotCarService;
|
||||
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.util.ACSTaskTypeEnum;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车装货任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-02-06
|
||||
*/
|
||||
@Component(value = "NoCarInstallTask")
|
||||
@TaskType("NoCarInstallTask")
|
||||
public class NoCarInstallTask extends AbstractTask {
|
||||
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 系统参数服务
|
||||
*/
|
||||
@Resource
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
/**
|
||||
* wms调用无人车服务
|
||||
*/
|
||||
@Resource
|
||||
private WmsToNotCarService wmsToNotCarService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(NoCarInstallTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setContact_task(json.getString("contact_task"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
|
||||
// 下发任务
|
||||
this.sendTaskOne(task.getTask_id());
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
acsTaskDto.setExt_task_id(taskDao.getTask_id());
|
||||
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.TWO);
|
||||
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskConfirm(String task_code) {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 更新起点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
|
||||
// 更新任务状态
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
|
||||
// 判断任务是否全部完成
|
||||
List<SchBaseTask> list = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getContact_task, taskObj.getContact_task())
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.ZERO)
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
// 更新系统参数为0
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("NO_CAR_TASK");
|
||||
sysParamService.setRemark(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
// 通知装货完成回库
|
||||
this.backParam(taskObj.getContact_task());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 更新任务状态
|
||||
taskObj.setRemark("已取消");
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 装货完成
|
||||
*/
|
||||
public void backParam(String taskNo) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("requestType", "WCS_110");
|
||||
param.put("accessId", IOSConstant.ONE);
|
||||
param.put("requestId", IdUtil.getStringId());
|
||||
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("taskNo", taskNo);
|
||||
param.put("data", data);
|
||||
// 调用服务
|
||||
wmsToNotCarService.continueTask(param);
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,11 @@ import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.ext.service.WmsToNotCarService;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.pda.general_management.service.PdaNotCarService;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
@@ -53,16 +57,16 @@ public class NoCarUnloadTask extends AbstractTask {
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* wms调用无人车服务
|
||||
* 手持无人车服务
|
||||
*/
|
||||
@Resource
|
||||
private WmsToNotCarService wmsToNotCarService;
|
||||
private PdaNotCarService pdaNotCarService;
|
||||
|
||||
/**
|
||||
* 无人车卸货回库带成品任务类
|
||||
* 系统参数服务
|
||||
*/
|
||||
@Resource
|
||||
private NoCarBackCpTask noCarBackCpTask;
|
||||
private ISysParamService iSysParamService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
@@ -75,21 +79,16 @@ public class NoCarUnloadTask extends AbstractTask {
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setTask_group_id(json.getString("task_group_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setContact_task(json.getString("contact_task"));
|
||||
task.setRemark(json.getString("remark"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
|
||||
// 更新终点任务号
|
||||
SchBasePoint pointDao = iSchBasePointService.getById(task.getPoint_code2());
|
||||
pointDao.setIng_task_code(task.getTask_id());
|
||||
iSchBasePointService.updateById(pointDao);
|
||||
|
||||
// 下发任务
|
||||
this.sendTaskOne(task.getTask_id());
|
||||
return task.getTask_id();
|
||||
@@ -178,14 +177,15 @@ public class NoCarUnloadTask extends AbstractTask {
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
.set(SchBasePoint::getMaterial_id, "")
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
.set(SchBasePoint::getMaterial_id, taskObj.getMaterial_id())
|
||||
.set(SchBasePoint::getMaterial_qty, taskObj.getMaterial_qty())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
// 更新任务
|
||||
@@ -196,33 +196,45 @@ public class NoCarUnloadTask extends AbstractTask {
|
||||
// 判断卸货任务是否全部完成
|
||||
List<SchBaseTask> list = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getContact_task, taskObj.getContact_task())
|
||||
.eq(SchBaseTask::getTask_group_id, taskObj.getTask_group_id())
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.ZERO)
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
// 判断成品区是否有货,有就生成任务
|
||||
// 判断成品区是否有货
|
||||
List<SchBasePoint> pointList = iSchBasePointService.list(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, "CPQ01")
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
.eq(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
.last("LIMIT 2")
|
||||
.orderByDesc(SchBasePoint::getOut_order_seq)
|
||||
.last("LIMIT 3")
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(pointList)) {
|
||||
// 创建装货任务
|
||||
for (SchBasePoint dao : pointList) {
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("point_code1", dao.getPoint_code());
|
||||
taskParam.put("point_code2", "成品对接点");
|
||||
taskParam.put("contact_task", taskObj.getContact_task());
|
||||
noCarBackCpTask.create(taskParam);
|
||||
}
|
||||
} else {
|
||||
// 调用无人车卸货完成
|
||||
this.resultNoCar(taskObj.getContact_task());
|
||||
}
|
||||
|
||||
// 获取系统参数:无人车到达点位处理
|
||||
Param sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_ARRIVE");
|
||||
|
||||
JSONObject isGoBackParam = new JSONObject();
|
||||
if (ObjectUtil.isNotEmpty(pointList)) {
|
||||
// 更新系统参数到达参数
|
||||
sysParamService.setValue(IOSConstant.TWO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
// 返回有成品配送
|
||||
isGoBackParam.put("isGoback", IOSConstant.ZERO);
|
||||
pdaNotCarService.publicIsGoBack(isGoBackParam);
|
||||
// 呼叫无人车
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code", IOSConstant.WRC_POINT02);
|
||||
pdaNotCarService.publicCallCar(param);
|
||||
|
||||
} else {
|
||||
// 返回没有成品配送
|
||||
isGoBackParam.put("isGoback", IOSConstant.ONE);
|
||||
pdaNotCarService.publicIsGoBack(isGoBackParam);
|
||||
// 更新系统参数到达参数
|
||||
sysParamService.setValue(IOSConstant.ZERO);
|
||||
iSysParamService.updateById(sysParamService);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,36 +244,16 @@ public class NoCarUnloadTask extends AbstractTask {
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已取消");
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸货任务完成反馈
|
||||
*
|
||||
* @param id 无人车下发任务标识
|
||||
*/
|
||||
public void resultNoCar(String id) {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("requestType", "WCS_118");
|
||||
param.put("accessId", IOSConstant.ONE);
|
||||
param.put("requestId", IdUtil.getStringId());
|
||||
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("id", id);
|
||||
data.put("to_command", IOSConstant.TWO);
|
||||
param.put("data", data);
|
||||
wmsToNotCarService.resultUnloadTask(param);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
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.util.ACSTaskTypeEnum;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 无人车卸货任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2026-01-06
|
||||
*/
|
||||
@Component(value = "PdaNotCarUnloadTask")
|
||||
@TaskType("PdaNotCarUnloadTask")
|
||||
public class PdaNotCarUnloadTask extends AbstractTask {
|
||||
|
||||
/**
|
||||
* 任务服务类
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(PdaNotCarUnloadTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setRemark(json.getString("remark"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
taskService.save(task);
|
||||
|
||||
// 下发任务
|
||||
this.sendTaskOne(task.getTask_id());
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
acsTaskDto.setExt_task_id(taskDao.getTask_id());
|
||||
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
|
||||
|
||||
acsTaskDto.setVehicle_type(IOSConstant.ONE);
|
||||
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
|
||||
|
||||
acsTaskDto.setPriority(IOSConstant.ONE);
|
||||
acsTaskDto.setAgv_system_type(IOSConstant.TWO);
|
||||
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
// 更新明细状态
|
||||
this.executingTask(taskObj);
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (Integer.parseInt(taskObj.getTask_status()) > Integer.parseInt(TaskStatus.CREATE.getCode())) {
|
||||
throw new BadRequestException("只能取消生成中的任务!");
|
||||
}
|
||||
this.cancelTask(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskConfirm(String task_code) {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void finishTask(SchBaseTask taskObj) {
|
||||
// 更新起点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
.set(SchBasePoint::getVehicle_code, "")
|
||||
.set(SchBasePoint::getCan_material_type, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
|
||||
);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getCan_material_type, taskObj.getMaterial_id())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已完成");
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
// 更新终点
|
||||
iSchBasePointService.update(
|
||||
new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getIng_task_code, "")
|
||||
);
|
||||
// 更新任务
|
||||
taskObj.setRemark("已取消");
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -122,4 +122,34 @@ public class IOSConstant {
|
||||
*/
|
||||
public final static String CL001 = "CL001";
|
||||
|
||||
/**
|
||||
* 分类编码:外包材
|
||||
*/
|
||||
public final static String WBC001 = "WBC001";
|
||||
|
||||
/**
|
||||
* 点位区域:外包材储存区
|
||||
*/
|
||||
public final static String AGVDJ01 = "AGVDJ01";
|
||||
|
||||
/**
|
||||
* 点位区域:无人车卸货缓存区
|
||||
*/
|
||||
public final static String WXHHC01 = "WXHHC01";
|
||||
|
||||
/**
|
||||
* 点位区域:无人车运货区
|
||||
*/
|
||||
public final static String WRC01 = "WRC01";
|
||||
|
||||
/**
|
||||
* 无人车对接点:仓库
|
||||
*/
|
||||
public final static String WRC_POINT01 = "WRC01";
|
||||
|
||||
/**
|
||||
* 无人车对接点:车间
|
||||
*/
|
||||
public final static String WRC_POINT02 = "WRC02";
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user