feat:绕过开合盖任务、AGV扫码失败的手动放行
This commit is contained in:
@@ -31,4 +31,6 @@ public interface WmsToAcsService {
|
||||
* @return
|
||||
*/
|
||||
AcsResponse getPointStatus(JSONArray whereJson);
|
||||
|
||||
AcsResponse agvReleased(JSONArray paramArr);
|
||||
}
|
||||
|
||||
@@ -33,4 +33,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
|
||||
public AcsResponse getPointStatus(JSONArray whereJson) {
|
||||
return AcsUtil.notifyAcs(EXTConstant.QUERY_DEVICE_INFO_API, whereJson);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsResponse agvReleased(JSONArray paramArr) {
|
||||
String api = "api/wms/agvReleased";
|
||||
return AcsUtil.notifyAcs(api, paramArr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,12 @@ public class PdaJBController {
|
||||
public ResponseEntity<Object> downMaterial(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaJBService.downMaterial(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/downMaterial2")
|
||||
@Log("解包下料2-不经过开盒盖")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> downMaterial2(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaJBService.downMaterial2(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/checkStruct")
|
||||
@Log("检测站点")
|
||||
@SaIgnore
|
||||
|
||||
@@ -59,5 +59,11 @@ public class PdaSchTaskController {
|
||||
public ResponseEntity<Object> forceConfirm(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaSchTaskService.forceConfirm(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/agvReleased")
|
||||
@Log("放行")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> agvReleased(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaSchTaskService.agvReleased(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,4 +66,6 @@ public interface PdaJBService {
|
||||
PdaResponse vehicleList(JSONObject param);
|
||||
|
||||
PdaResponse groupAndBind(JSONObject param);
|
||||
|
||||
PdaResponse downMaterial2(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -61,4 +61,6 @@ public interface PdaSchTaskService extends IService<SchBaseTask> {
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse forceConfirm(JSONObject whereJson);
|
||||
|
||||
PdaResponse agvReleased(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -376,7 +376,100 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
|
||||
Sectattr sect = sectattrService.findByCode(dict.getPara1());
|
||||
// 组装插入主表明细表的数据
|
||||
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
|
||||
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect, IOSEnum.BILL_TYPE.code("解包入库"));
|
||||
String invId = inBillService.insertDtl(insertInvObj);
|
||||
|
||||
// 组织数据,调用分配货位
|
||||
JSONObject divObj = buildDivStructData(sect, invId);
|
||||
inBillService.divStruct(divObj);
|
||||
|
||||
// 一键设置,创建任务
|
||||
// 组建参数
|
||||
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
|
||||
inBillService.divPoint(jsonMst);
|
||||
|
||||
// 工单完成
|
||||
workorder.setWorkorder_status("5");
|
||||
workorder.setRealproduceend_date(DateUtil.now());
|
||||
workorderService.updateById(workorder);
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public PdaResponse downMaterial2(JSONObject whereJson) {
|
||||
// 用任务组的方式下发任务(2条任务)
|
||||
MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.PDA_JB_DOWN_MATERIAL.getTag());
|
||||
log.info("解包直接下料,请求参数:{}", whereJson);
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
// workorder_id、area、point_code、weight、tp_code、lt_code
|
||||
String area = whereJson.getString("area");
|
||||
// 设备
|
||||
String pointCode = whereJson.getString("point_code");
|
||||
RLock lock = redissonClient.getLock(pointCode);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
BigDecimal weight = whereJson.getBigDecimal("weight");
|
||||
String tpCode = whereJson.getString("tp_code");
|
||||
String ltCode = whereJson.getString("lt_code");
|
||||
String workorderId = whereJson.getString("workorder_id");
|
||||
// todo: 存在任务就不继续
|
||||
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, false)
|
||||
.eq(SchBaseTask::getConfig_code, "JbDownAgvTask")
|
||||
.and(ll -> ll.like(SchBaseTask::getPoint_code1, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code2, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code3, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code4, pointCode).or()));
|
||||
if (list.size() > 0) {
|
||||
throw new BadRequestException(pointCode + " 该点位已存在任务!");
|
||||
}
|
||||
PdmBdWorkorder workorder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不存在!");
|
||||
}
|
||||
// 物料
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
JSONObject extData = JSONObject.parseObject(workorder.getExt_data());
|
||||
// 0、创建组盘
|
||||
GroupPlate groupPlate = new GroupPlate();
|
||||
groupPlate.setGroup_id(IdUtil.getStringId());
|
||||
groupPlate.setStoragevehicle_code(ltCode);
|
||||
// 料桶类型根据工单,工单是根据点位
|
||||
groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
|
||||
groupPlate.setMaterial_id(materialbase.getMaterial_id());
|
||||
groupPlate.setQty(weight);
|
||||
groupPlate.setQty_unit_id("11");
|
||||
groupPlate.setQty_unit_name("kg");
|
||||
groupPlate.setFrozen_qty(BigDecimal.ZERO);
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
|
||||
groupPlate.setCreate_id(currentUserId);
|
||||
groupPlate.setCreate_name(nickName);
|
||||
groupPlate.setCreate_time(now);
|
||||
groupPlate.setPcsn(extData.getString("pcsn"));
|
||||
groupPlate.setSupp_code(extData.getString("supp_code"));
|
||||
groupPlate.setSupp_name(extData.getString("supp_name"));
|
||||
groupplateService.save(groupPlate);
|
||||
|
||||
Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
|
||||
Sectattr sect = sectattrService.findByCode(dict.getPara1());
|
||||
// 组装插入主表明细表的数据
|
||||
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect, IOSEnum.BILL_TYPE.code("解包直接入库"));
|
||||
String invId = inBillService.insertDtl(insertInvObj);
|
||||
|
||||
// 组织数据,调用分配货位
|
||||
@@ -980,7 +1073,8 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
return divObj;
|
||||
}
|
||||
|
||||
public static Map<String, Object> buildInsertData(String ltCode, PdmBdWorkorder workorder, MdMeMaterialbase materialbase, GroupPlate groupPlate, Sectattr sect) {
|
||||
public static Map<String, Object> buildInsertData(String ltCode, PdmBdWorkorder workorder
|
||||
, MdMeMaterialbase materialbase, GroupPlate groupPlate, Sectattr sect, String billType) {
|
||||
Map<String, Object> insertInvObj = new HashMap();
|
||||
ArrayList<HashMap> tableData = new ArrayList<>();
|
||||
HashMap<String, Object> table = new HashMap<>();
|
||||
@@ -989,7 +1083,7 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
insertInvObj.put("bill_status", "10");
|
||||
insertInvObj.put("total_qty", workorder.getPlan_weight());
|
||||
insertInvObj.put("detail_count", 1);
|
||||
insertInvObj.put("bill_type", "0011");
|
||||
insertInvObj.put("bill_type", billType);
|
||||
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
insertInvObj.put("tableData", tableData);
|
||||
table.put("group_id", groupPlate.getGroup_id());
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.nl.wms.pda_manage.sch_manage.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@@ -11,11 +13,13 @@ import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.ext_manage.service.WmsToAcsService;
|
||||
import org.nl.wms.ext_manage.service.util.AcsResponse;
|
||||
import org.nl.wms.pda_manage.sch_manage.service.PdaSchTaskService;
|
||||
import org.nl.wms.pda_manage.util.PdaResponse;
|
||||
import org.nl.wms.sch_manage.enums.TaskEnum;
|
||||
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;
|
||||
@@ -76,6 +80,10 @@ public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
*/
|
||||
@Autowired
|
||||
private TaskFactory taskFactory;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@@ -150,6 +158,32 @@ public class PdaSchTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse agvReleased(JSONObject whereJson) {
|
||||
String taskId = whereJson.getString("task_id");
|
||||
if (ObjectUtil.isEmpty(taskId)) {
|
||||
throw new BadRequestException("任务id不能为空!");
|
||||
}
|
||||
SchBaseTask baseTask = taskService.getById(taskId);
|
||||
if (ObjectUtil.isEmpty(baseTask)) {
|
||||
throw new BadRequestException("找不到【" + taskId + "】对应的任务!");
|
||||
}
|
||||
// todo: 判断任务是否需要, 任务类型为定义,等需要的适合加上
|
||||
//下发ACS,执行取满放空的AGV动作
|
||||
JSONArray paramArr = new JSONArray();
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", baseTask.getCar_no());
|
||||
param.put("task_code", baseTask.getTask_code());
|
||||
param.put("agvReleased", true);
|
||||
paramArr.add(param);
|
||||
AcsResponse acsResponse = wmsToAcsService.agvReleased(paramArr);
|
||||
|
||||
if (!(acsResponse.getStatus() == 200)) {
|
||||
throw new BadRequestException("操作失败:" + acsResponse.getErrArr());
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验起点终点载具
|
||||
* @param whereJson {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
LEFT JOIN md_me_materialbase mm ON mm.material_id = o.material_id
|
||||
WHERE o.workorder_status = #{workorder_status}
|
||||
AND o.point_code = #{pointCode}
|
||||
ORDER BY o.update_time
|
||||
</select>
|
||||
<select id="getNoTaskEmptyBarrelStructs" resultType="org.nl.wms.basedata_manage.service.dao.Structattr">
|
||||
|
||||
|
||||
@@ -88,6 +88,8 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl<PdmBdWorkorderMapper,
|
||||
// 点位编码和点位名称为父点位
|
||||
entity.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
|
||||
entity.setPlanproducestart_date(DateUtil.now());
|
||||
entity.setPlanproduceend_date(DateUtil.now());
|
||||
entity.setCreate_id(currentUserId);
|
||||
entity.setCreate_name(nickName);
|
||||
entity.setCreate_time(now);
|
||||
|
||||
@@ -27,9 +27,21 @@ public enum StatusEnum {
|
||||
/**
|
||||
* 出入库单据类型退货出库
|
||||
*/
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10", "inStorageTask", "调拨入库", "11", "inStorageTask", "退货入库", "12", "inStorageTask", "拣选回库",
|
||||
"13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask","来料入库",
|
||||
"1013", "inStorageTask", "解包退回", "0012", "inStorageTask" , "解包入库", "0011", "inStorageTask", "余料入库", "0014", "inStorageTask", "空桶入库", "0015", "inStorageTask")),
|
||||
IOBILL_TYPE_IN(ForkMap.of(
|
||||
"生产入库", "10", "inStorageTask"
|
||||
, "调拨入库", "11", "inStorageTask"
|
||||
, "退货入库", "12", "inStorageTask"
|
||||
, "拣选回库", "13", "inStorageTask"
|
||||
, "盘点入库", "14", "inStorageTask"
|
||||
, "托盘入库", "30", "inStorageTask"
|
||||
, "二楼CTU入库", "80", "inStorageTask"
|
||||
, "来料入库", "1013", "inStorageTask"
|
||||
, "解包退回", "0012", "inStorageTask"
|
||||
, "解包入库", "0011", "inStorageTask"
|
||||
, "余料入库", "0014", "inStorageTask"
|
||||
, "空桶入库", "0015", "inStorageTask"
|
||||
, "解包直接入库", "0016", "inStorageTask"
|
||||
)),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20", "outStorageTask", "生产出库", "21", "outStorageTask", "调拨出库", "22", "outStorageTask",
|
||||
"拣选出库", "23", "conveyorOutStorageTask", "盘点出库", "24", "outStorageTask", "出库拣选", "25", "toPickPlatformTask",
|
||||
"退货出库", "26", "outStorageTask", "托盘出库", "40", "outStorageTask", "二楼CTU出库", "81", "inStorageTask", "二楼出库AGV搬运",
|
||||
|
||||
@@ -10,6 +10,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
|
||||
import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
|
||||
import org.nl.wms.sch_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
@@ -52,6 +54,8 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
private ISchBasePointService pointService;
|
||||
@Resource
|
||||
private ISchBaseTaskconfigService taskconfigService;
|
||||
@Resource
|
||||
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
|
||||
@Override
|
||||
public String create(JSONObject param) {
|
||||
// 改造:多条任务
|
||||
@@ -82,7 +86,7 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
}
|
||||
|
||||
taskService.saveBatch(batchTask);
|
||||
return batchTask.get(2).getTask_id();
|
||||
return batchTask.get(batchTask.size() - 1).getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,6 +174,10 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
SchBasePoint jbjPoint = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint mhcPoint = pointService.getById(taskObj.getPoint_code2());
|
||||
SchBasePoint khcPoint = pointService.getById(taskObj.getPoint_code3());
|
||||
MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code());
|
||||
if (ObjectUtil.isEmpty(storagevehicleinfo)) {
|
||||
throw new BadRequestException(taskObj.getVehicle_code() + "的托盘信息不存在!");
|
||||
}
|
||||
// 空缓存点清空
|
||||
khcPoint.setPoint_status("1");
|
||||
khcPoint.setVehicle_code(null);
|
||||
@@ -182,7 +190,7 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
mhcPoint.setUpdate_time(DateUtil.now());
|
||||
// 对接位设置空桶
|
||||
jbjPoint.setPoint_status("2");
|
||||
jbjPoint.setVehicle_type(taskObj.getVehicle_type());
|
||||
jbjPoint.setVehicle_type(storagevehicleinfo.getStoragevehicle_type());
|
||||
jbjPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
jbjPoint.setUpdate_time(DateUtil.now());
|
||||
pointService.updateBatchById(Arrays.asList(jbjPoint, khcPoint, mhcPoint));
|
||||
|
||||
@@ -0,0 +1,234 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks.jb;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
|
||||
import org.nl.wms.sch_manage.enums.TaskFinishedTypeEnum;
|
||||
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.ISchBaseTaskconfigService;
|
||||
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.SchBaseTaskconfig;
|
||||
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.TaskUtils;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 解包下料(绕过解包机)
|
||||
* @Author: lyd
|
||||
* @Date: 2025/7/24
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("JbDownAgvTwoTask")
|
||||
public class JbDownAgvTwoTask extends AbstractTask {
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Resource
|
||||
private IInBillService inBillService;
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
@Resource
|
||||
private ISchBasePointService pointService;
|
||||
@Resource
|
||||
private ISchBaseTaskconfigService taskconfigService;
|
||||
@Resource
|
||||
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
|
||||
@Override
|
||||
public String create(JSONObject param) {
|
||||
// 改造:多条任务
|
||||
JSONArray tasks = param.getJSONArray("tasks");
|
||||
List<SchBaseTask> batchTask = new ArrayList<>();
|
||||
for (int i = 0; i < tasks.size(); i++) {
|
||||
JSONObject json = tasks.getJSONObject(i);
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(json.getString("TaskCode"));
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setConfig_code(json.getString("task_type"));
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setPoint_code3(json.getString("point_code3"));
|
||||
task.setPoint_code4(json.getString("point_code4"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setVehicle_code2(json.getString("vehicle_code2"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setTask_group_id(json.getString("task_group_id"));
|
||||
task.setTask_group_seq(json.getBigDecimal("task_group_seq"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
batchTask.add(task);
|
||||
}
|
||||
|
||||
taskService.saveBatch(batchTask);
|
||||
return batchTask.get(2).getTask_id();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
|
||||
JSONObject object = JSONObject.parseObject(taskDao.getRequest_param());
|
||||
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
|
||||
acsTaskDto.setTask_code(taskDao.getTask_code());
|
||||
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
|
||||
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
|
||||
acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
|
||||
acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
|
||||
acsTaskDto.setTask_type(taskconfig.getTask_type());
|
||||
acsTaskDto.setTruss_type(object.getString("truss_type"));
|
||||
acsTaskDto.setInteraction_json(new JSONObject().fluentPut("have_lid", object.getString("have_lid")));
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
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("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 取消任务
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark("已取消");
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
//分配表清除任务
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getTask_id,null)
|
||||
.set(IOStorInvDis::getPoint_code,null)
|
||||
.set(IOStorInvDis::getIs_issued,0)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||
.eq(IOStorInvDis::getTask_id,taskObj.getTask_id())
|
||||
);
|
||||
}
|
||||
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 任务完成
|
||||
taskObj.setRemark("该任务已完成,等待最后一条任务完成!");
|
||||
MdPbStoragevehicleinfo storagevehicleinfo = storagevehicleinfoService.getByCode(taskObj.getVehicle_code());
|
||||
if (ObjectUtil.isEmpty(storagevehicleinfo)) {
|
||||
throw new BadRequestException(taskObj.getVehicle_code() + "的托盘信息不存在!");
|
||||
}
|
||||
if ("1".equals(taskObj.getTask_group_seq().toString())) {
|
||||
SchBasePoint khcPoint = pointService.getById(taskObj.getPoint_code2());
|
||||
SchBasePoint jbjPoint = pointService.getById(taskObj.getPoint_code3());
|
||||
SchBasePoint mhcPoint = pointService.getById(taskObj.getPoint_code4());
|
||||
// 空缓存点
|
||||
khcPoint.setPoint_status("2");
|
||||
khcPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
khcPoint.setVehicle_type(storagevehicleinfo.getStoragevehicle_type());
|
||||
khcPoint.setUpdate_time(DateUtil.now());
|
||||
// 满缓存点设置值
|
||||
mhcPoint.setPoint_status("3");
|
||||
mhcPoint.setVehicle_code(taskObj.getVehicle_code2());
|
||||
mhcPoint.setVehicle_type(storagevehicleinfo.getStoragevehicle_type());
|
||||
mhcPoint.setUpdate_time(DateUtil.now());
|
||||
// 对接位设置空桶
|
||||
jbjPoint.setPoint_status("1");
|
||||
jbjPoint.setVehicle_type(null);
|
||||
jbjPoint.setVehicle_code(null);
|
||||
jbjPoint.setUpdate_time(DateUtil.now());
|
||||
pointService.updateBatchById(Arrays.asList(jbjPoint, khcPoint, mhcPoint));
|
||||
}
|
||||
if ("2".equals(taskObj.getTask_group_seq().toString())) {
|
||||
SchBasePoint khcPoint = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint jbjPoint = pointService.getById(taskObj.getPoint_code2());
|
||||
SchBasePoint mhcPoint = pointService.getById(taskObj.getPoint_code3());
|
||||
// 空缓存点清空
|
||||
khcPoint.setPoint_status("1");
|
||||
khcPoint.setVehicle_code(null);
|
||||
khcPoint.setVehicle_type(null);
|
||||
khcPoint.setUpdate_time(DateUtil.now());
|
||||
// 满缓存点设置值
|
||||
mhcPoint.setPoint_status("1");
|
||||
mhcPoint.setVehicle_code(null);
|
||||
mhcPoint.setVehicle_type(null);
|
||||
mhcPoint.setUpdate_time(DateUtil.now());
|
||||
// 对接位设置空桶
|
||||
jbjPoint.setPoint_status("2");
|
||||
jbjPoint.setVehicle_type(storagevehicleinfo.getStoragevehicle_type());
|
||||
jbjPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
jbjPoint.setUpdate_time(DateUtil.now());
|
||||
pointService.updateBatchById(Arrays.asList(jbjPoint, khcPoint, mhcPoint));
|
||||
|
||||
|
||||
// 出库完成
|
||||
inBillService.taskFinish(taskObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void backMes(String task_code) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,7 @@ public enum IOSEnum {
|
||||
BILL_STATUS(MapOf.of("生成", "10", "分配中", "20", "分配完", "30", "完成", "99")),
|
||||
|
||||
// 入库业务类型
|
||||
BILL_TYPE(MapOf.of("生产入库", "0001", "手工入库", "0009", "手工出库", "1009", "解包出库", "1012")),
|
||||
BILL_TYPE(MapOf.of("生产入库", "0001", "手工入库", "0009", "解包入库", "0011", "解包直接入库", "0016", "手工出库", "1009", "解包出库", "1012")),
|
||||
|
||||
//入库分配明细状态
|
||||
INBILL_DIS_STATUS(MapOf.of("未生成", "00", "生成", "01", "执行中", "02", "完成", "99")),
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StInTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTwoTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
@@ -102,6 +103,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
|
||||
@Resource
|
||||
private BackInTask backInTask;
|
||||
@Resource
|
||||
private JbDownAgvTwoTask jbDownAgvTwoTask;
|
||||
|
||||
@Override
|
||||
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
|
||||
@@ -759,6 +762,74 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
JSONObject requestTaskParam = new JSONObject();
|
||||
requestTaskParam.put("tasks", jsonObjects);
|
||||
task_id = jbDownAgvTask.create(requestTaskParam);
|
||||
} else if (StatusEnum.IOBILL_TYPE_IN.code("解包直接入库").equals(invObj.getBill_type())) {
|
||||
// 创建任务
|
||||
String structCode = map.get("struct_code");
|
||||
if (ObjectUtil.isEmpty(structCode)) {
|
||||
throw new BadRequestException("仓位未分配!");
|
||||
}
|
||||
// 获取组盘信息
|
||||
GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
|
||||
Structattr inStruct = iStructattrService.findByCode(structCode);
|
||||
// 解包入库 (创建3条任务,并且为一组)
|
||||
SchBasePoint rkPoint = pointService.getById(point_code);
|
||||
// 父点位
|
||||
SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code());
|
||||
// 2、创建任务(4条任务、优先级需要获取所有的任务中的最小值并且-1,默认8)
|
||||
// 获取工单对应的区域的出入点
|
||||
SchBasePoint intoPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "2");
|
||||
SchBasePoint emptyPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "5");
|
||||
SchBasePoint fullPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "6");
|
||||
|
||||
// 创建任务1
|
||||
String taskGroupId = IdUtil.getStringId();
|
||||
JSONObject task1 = new JSONObject();
|
||||
task1.put("task_type", "JbDownAgvTask");
|
||||
task1.put("group_id", groupPlate.getGroup_id());
|
||||
task1.put("workorder_id", whereJson.get("workorder_id"));
|
||||
task1.put("task_group_id", taskGroupId);
|
||||
task1.put("task_group_seq", 1);
|
||||
task1.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task1.put("point_code1", structCode);
|
||||
task1.put("point_code2", emptyPoint.getPoint_code());
|
||||
task1.put("point_code3", intoPoint.getPoint_code());
|
||||
task1.put("point_code4", fullPoint.getPoint_code());
|
||||
task1.put("truss_type", "3");
|
||||
task1.put("have_lid", "1");
|
||||
task1.put("vehicle_type", inStruct.getStoragevehicle_type());
|
||||
task1.put("seq", 1);
|
||||
// 空托盘
|
||||
task1.put("vehicle_code", inStruct.getStoragevehicle_code());
|
||||
// 入库的满托盘
|
||||
task1.put("vehicle_code2", map.get("storagevehicle_code"));
|
||||
|
||||
// 创建任务2
|
||||
JSONObject task2 = new JSONObject();
|
||||
task2.put("task_type", "JbDownAgvTask");
|
||||
task2.put("group_id", groupPlate.getGroup_id());
|
||||
task2.put("task_group_id", taskGroupId);
|
||||
task2.put("task_group_seq", 2);
|
||||
task2.put("workorder_id", whereJson.get("workorder_id"));
|
||||
task2.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task2.put("point_code1", emptyPoint.getPoint_code());
|
||||
task2.put("point_code2", intoPoint.getPoint_code());
|
||||
task2.put("point_code3", fullPoint.getPoint_code());
|
||||
task2.put("point_code4", structCode);
|
||||
task2.put("truss_type", "3");
|
||||
task2.put("have_lid", "0");
|
||||
task2.put("seq", 2);
|
||||
// 空托盘
|
||||
task2.put("vehicle_code", inStruct.getStoragevehicle_code());
|
||||
task2.put("vehicle_type", inStruct.getStoragevehicle_type());
|
||||
// 入库的满托盘
|
||||
task2.put("vehicle_code2", map.get("storagevehicle_code"));
|
||||
List<JSONObject> jsonObjects = Arrays.asList(task1, task2);
|
||||
JSONObject requestTaskParam = new JSONObject();
|
||||
requestTaskParam.put("tasks", jsonObjects);
|
||||
task_id = jbDownAgvTwoTask.create(requestTaskParam);
|
||||
} else if (StatusEnum.IOBILL_TYPE_IN.code("解包退回").equals(invObj.getBill_type())) {
|
||||
// 解包退料入库
|
||||
String structCode = map.get("struct_code");
|
||||
|
||||
Reference in New Issue
Block a user