add:新增手持接口
This commit is contained in:
@@ -37,7 +37,7 @@ public enum PackageInfoIvtEnum {
|
||||
//是否启用
|
||||
IS_USED(MapOf.of("启用", "1", "未启用", "0")),
|
||||
//agv二次分配类型
|
||||
AGV_ACTION_TYPE(MapOf.of("普通任务", "1", "取货二次分配", "2", "放货二次分配", "3", "E2取放货二次分配", "4","HXT取放货二次分配","5")),
|
||||
AGV_ACTION_TYPE(MapOf.of("普通任务", "1", "取货二次分配", "2", "放货二次分配", "3", "E2取放货二次分配", "4","取放货二次分配","5")),
|
||||
//二次分配请求类型
|
||||
TASK_ACTION_TYPE(MapOf.of("普通任务", "1", "取货二次分配", "2", "放货二次分配", "3", "取放货二次分配", "4")),
|
||||
//是否自动下发
|
||||
|
||||
@@ -4,6 +4,9 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MaterialDto;
|
||||
import org.nl.wms.pda.task.service.dao.dto.PdaRequestDto;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -17,7 +20,7 @@ import java.util.List;
|
||||
*/
|
||||
public interface MdMeMaterialbaseMapper extends BaseMapper<MdMeMaterialbase> {
|
||||
|
||||
List<JSONObject> selectAllMaters(@Param("param") JSONObject whereJson);
|
||||
List<PdaResponseVo.DataItem> selectAllMaters(@Param("param") PdaRequestDto whereJson);
|
||||
|
||||
List<JSONObject> getMaterialTypes();
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.basedata.material.service.dao.mapper.MdMeMaterialbaseMapper">
|
||||
<select id="selectAllMaters" resultType="com.alibaba.fastjson.JSONObject"
|
||||
parameterType="com.alibaba.fastjson.JSONObject">
|
||||
<select id="selectAllMaters" resultType="org.nl.wms.pda.task.service.dao.vo.PdaResponseVo$DataItem">
|
||||
SELECT
|
||||
material_code,
|
||||
material_name,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.ext.acs.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||
import org.nl.wms.sch.task_manage.AcsTaskDto;
|
||||
@@ -23,4 +24,12 @@ public interface WmsToAcsService {
|
||||
|
||||
JSONObject putAction(JSONObject param);
|
||||
|
||||
/**
|
||||
* 更新任务状态
|
||||
*
|
||||
* @param arr /
|
||||
* @return JSONObject
|
||||
*/
|
||||
JSONObject updateTask(JSONArray arr);
|
||||
|
||||
}
|
||||
|
||||
@@ -249,13 +249,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
private SchBasePoint getNewStartBasePoint(SchBaseTask baseTask) {
|
||||
String point_code1 = baseTask.getPoint_code1();
|
||||
SchBasePoint schBasePoint = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code1));
|
||||
List<SchBasePoint> list = pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getExt_point_code, baseTask.getPoint_code1()) //取货二次分配的等待点
|
||||
.eq(SchBasePoint::getRegion_code, schBasePoint.getRegion_code())
|
||||
.eq(SchBasePoint::getPoint_type, "1")
|
||||
.eq(SchBasePoint::getIs_used, "1")
|
||||
.eq(SchBasePoint::getPoint_status, "2")
|
||||
.orderByAsc(SchBasePoint::getIn_order_seq));
|
||||
String region_code = schBasePoint.getRegion_code();
|
||||
List<SchBasePoint> list = pointMapper.getNewStartBasePoints(point_code1, region_code);
|
||||
// List<SchBasePoint> list = pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
|
||||
// .eq(SchBasePoint::getExt_point_code, baseTask.getPoint_code1()) //取货二次分配的等待点
|
||||
// .eq(SchBasePoint::getRegion_code, schBasePoint.getRegion_code())
|
||||
// .eq(SchBasePoint::getPoint_type, "1")
|
||||
// .eq(SchBasePoint::getIs_used, "1")
|
||||
// .eq(SchBasePoint::getPoint_status, "2")
|
||||
// .orderByAsc(SchBasePoint::getIn_order_seq));
|
||||
if (ObjectUtils.isNotEmpty(list)) {
|
||||
return list.get(0);
|
||||
} else {
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.nl.wms.ext.acs.service.impl;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
@@ -88,4 +89,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject updateTask(JSONArray whereJson) {
|
||||
String api = "api/wms/updateTask";
|
||||
return AcsUtil.notifyAcs(api, whereJson);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.pda.task.service.PdaTaskService;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MaterialDto;
|
||||
import org.nl.wms.pda.task.service.dao.dto.PdaRequestDto;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.wms.pda.task.service.dao.vo.ResponseVo;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -44,14 +47,14 @@ public class PdaTaskController {
|
||||
|
||||
@PostMapping("/selectMaterials")
|
||||
@Log("查询物料信息")
|
||||
public ResponseEntity<Object> selectMaterials(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.selectMaterials(whereJson), HttpStatus.OK);
|
||||
public PdaResponseVo selectMaterials(@RequestBody PdaRequestDto whereJson) {
|
||||
return pdaTaskService.selectMaterials(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/getMaterialTypes")
|
||||
@Log("查询物料信息")
|
||||
public ResponseEntity<Object> getMaterialTypes() {
|
||||
return new ResponseEntity<>(pdaTaskService.getMaterialTypes(), HttpStatus.OK);
|
||||
@Log("查询所有物料类型")
|
||||
public ResponseVo getMaterialTypes() {
|
||||
return pdaTaskService.getMaterialTypes();
|
||||
}
|
||||
|
||||
@PostMapping("/getRegions")
|
||||
@@ -151,8 +154,8 @@ public class PdaTaskController {
|
||||
|
||||
@PostMapping("/materialBinding")
|
||||
@Log("人工放货-物料绑定")
|
||||
public ResponseEntity<Object> materialBinding(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.materialBinding(whereJson), HttpStatus.OK);
|
||||
public PdaResponseVo materialBinding(@RequestBody PdaRequestDto whereJson) {
|
||||
return pdaTaskService.materialBinding(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/vehicleBinding")
|
||||
@@ -243,4 +246,111 @@ public class PdaTaskController {
|
||||
return new ResponseEntity<>(pdaTaskService.selectFullMaterials(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getNextRegionsByPoint")
|
||||
@Log("根据点位查询终点区域")
|
||||
@SaIgnore
|
||||
public ResponseVo getNextRegionsByPoint(@RequestBody PdaRequestDto whereJson) {
|
||||
return pdaTaskService.getNextRegionsByPoint(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/productBlanking")
|
||||
@Log("产线管理")
|
||||
@SaIgnore
|
||||
public PdaResponseVo productBlanking(@RequestBody MaterialDto whereJson) {
|
||||
return pdaTaskService.productBlanking(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/selectPointInfo")
|
||||
@Log("站点管理")
|
||||
@SaIgnore
|
||||
public JSONObject selectPointInfo(@RequestBody MaterialDto whereJson) {
|
||||
return pdaTaskService.selectPointInfo(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/selectRegions")
|
||||
@Log("获取所有区域")
|
||||
public ResponseEntity<Object> selectRegions() {
|
||||
return new ResponseEntity<>(pdaTaskService.selectRegions(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getColsByPoint")
|
||||
@Log("获取所有区域")
|
||||
public ResponseEntity<Object> getColsByPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.getColsByPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/cleanPoint")
|
||||
@Log("清空点位")
|
||||
public ResponseEntity<Object> cleanPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.cleanPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/cleanCol")
|
||||
@Log("清空列")
|
||||
public ResponseEntity<Object> cleanCol(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.cleanCol(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/selectAgvInfo")
|
||||
@Log("车辆信息查询")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> selectAgvInfo(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.selectAgvInfo(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getAgvNos")
|
||||
@Log("车辆信息查询")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> getAgvNos() {
|
||||
return new ResponseEntity<>(pdaTaskService.getAgvNos(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/pause")
|
||||
@Log("锁定")
|
||||
public ResponseEntity<PdaResponseVo> pause(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.pause(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/resume")
|
||||
@Log("解锁")
|
||||
public ResponseEntity<PdaResponseVo> resume(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.resume(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/chargeArea")
|
||||
@Log("锁定")
|
||||
public ResponseEntity<PdaResponseVo> chargeArea(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.chargeArea(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/releaseArea")
|
||||
@Log("解锁")
|
||||
public ResponseEntity<PdaResponseVo> releaseArea(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.releaseArea(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/materialTransfer")
|
||||
@Log("人工移库")
|
||||
public PdaResponseVo materialTransfer(@RequestBody JSONObject whereJson) {
|
||||
return pdaTaskService.materialTransfer(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/startPointConfirm")
|
||||
@Log("起点确认")
|
||||
public PdaResponseVo startPointConfirm(@RequestBody JSONObject whereJson) {
|
||||
return pdaTaskService.startPointConfirm(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/endPointConfirm")
|
||||
@Log("终点确认")
|
||||
public PdaResponseVo endPointConfirm(@RequestBody JSONObject whereJson) {
|
||||
return pdaTaskService.endPointConfirm(whereJson);
|
||||
}
|
||||
|
||||
@PostMapping("/finishTask")
|
||||
@Log("终点确认")
|
||||
public PdaResponseVo finishTask(@RequestBody JSONObject whereJson) {
|
||||
return pdaTaskService.finishTask(whereJson);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,8 +3,11 @@ package org.nl.wms.pda.task.service;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MaterialDto;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MoveDto;
|
||||
import org.nl.wms.pda.task.service.dao.dto.PdaRequestDto;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.wms.pda.task.service.dao.vo.ResponseVo;
|
||||
import org.nl.wms.sch.region.service.dao.SchBaseRegion;
|
||||
|
||||
import java.util.List;
|
||||
@@ -25,7 +28,7 @@ public interface PdaTaskService {
|
||||
|
||||
JSONObject getPointnByRegion(JSONObject whereJson);
|
||||
|
||||
JSONObject selectMaterials(JSONObject whereJson);
|
||||
PdaResponseVo selectMaterials(PdaRequestDto whereJson);
|
||||
|
||||
JSONObject getMaterialInfoByPoint(JSONObject whereJson);
|
||||
|
||||
@@ -45,7 +48,7 @@ public interface PdaTaskService {
|
||||
|
||||
JSONObject vehicleBinding(JSONObject whereJson);
|
||||
|
||||
JSONObject materialBinding(JSONObject whereJson);
|
||||
PdaResponseVo materialBinding(PdaRequestDto whereJson);
|
||||
|
||||
JSONObject getPointInfo(JSONObject whereJson);
|
||||
|
||||
@@ -69,7 +72,41 @@ public interface PdaTaskService {
|
||||
|
||||
JSONObject getCallRegions();
|
||||
|
||||
JSONObject getMaterialTypes();
|
||||
ResponseVo getMaterialTypes();
|
||||
|
||||
JSONObject selectMaterialByPointCode(JSONObject whereJson);
|
||||
|
||||
ResponseVo getNextRegionsByPoint(PdaRequestDto whereJson);
|
||||
|
||||
PdaResponseVo productBlanking(MaterialDto whereJson);
|
||||
|
||||
JSONObject selectPointInfo(MaterialDto whereJson);
|
||||
|
||||
JSONObject selectRegions();
|
||||
|
||||
JSONObject getColsByPoint(JSONObject whereJson);
|
||||
|
||||
JSONObject cleanPoint(JSONObject whereJson);
|
||||
|
||||
JSONObject cleanCol(JSONObject whereJson);
|
||||
|
||||
JSONObject selectAgvInfo(JSONObject whereJson);
|
||||
|
||||
JSONObject getAgvNos();
|
||||
|
||||
PdaResponseVo pause(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo resume(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo chargeArea(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo releaseArea(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo materialTransfer(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo startPointConfirm(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo endPointConfirm(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo finishTask(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.nl.wms.pda.task.service.dao.dto;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MaterialDto {
|
||||
|
||||
private String point_code;
|
||||
private java.util.List<DataItem> data;
|
||||
private String region_code;
|
||||
private String type;
|
||||
|
||||
public static class DataItem {
|
||||
private String container_code;
|
||||
private String material_code;
|
||||
private String material_name;
|
||||
private String qty;
|
||||
private String measure_unit_id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package org.nl.wms.pda.task.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PdaRequestDto {
|
||||
|
||||
/**
|
||||
* 模糊查询关键字
|
||||
*/
|
||||
private String blurry;
|
||||
|
||||
/**
|
||||
* 点位编码
|
||||
*/
|
||||
private String point_code;
|
||||
|
||||
/**
|
||||
* 物料类型
|
||||
*/
|
||||
private String material_type;
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
*/
|
||||
private List<DataItem> data;
|
||||
|
||||
/**
|
||||
* 列数
|
||||
*/
|
||||
private Integer col;
|
||||
|
||||
/**
|
||||
* 区域编码
|
||||
*/
|
||||
private String region_code;
|
||||
|
||||
/**
|
||||
* 点位编码1
|
||||
*/
|
||||
private String point_code1;
|
||||
|
||||
/**
|
||||
* 点位编码2
|
||||
*/
|
||||
private String point_code2;
|
||||
|
||||
/**
|
||||
* 任务编码
|
||||
*/
|
||||
private String task_code;
|
||||
|
||||
/**
|
||||
* 操作选项
|
||||
*/
|
||||
private String option;
|
||||
|
||||
/**
|
||||
* AGV编号
|
||||
*/
|
||||
private String agv_no;
|
||||
|
||||
/**
|
||||
* 页码
|
||||
*/
|
||||
private Integer page;
|
||||
|
||||
/**
|
||||
* 每页大小
|
||||
*/
|
||||
private Integer size;
|
||||
|
||||
@Data
|
||||
public static class DataItem {
|
||||
/**
|
||||
* 容器编码(卷号)
|
||||
*/
|
||||
private String container_code;
|
||||
|
||||
/**
|
||||
* 物料编码
|
||||
*/
|
||||
private String material_code;
|
||||
|
||||
/**
|
||||
* 物料名称
|
||||
*/
|
||||
private String material_name;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private String qty;
|
||||
|
||||
/**
|
||||
* 计量单位
|
||||
*/
|
||||
private String measure_unit_id;
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String pscn;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,54 @@
|
||||
package org.nl.wms.pda.task.service.dao.vo;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PdaResponseVo {
|
||||
|
||||
/**
|
||||
* 先提供一个message
|
||||
* 返回数据列表
|
||||
*/
|
||||
private List<DataItem> data;
|
||||
|
||||
/**
|
||||
* 返回消息
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 返回消息
|
||||
*/
|
||||
private String code;
|
||||
|
||||
public static PdaResponseVo pdaResultOk(String message) {
|
||||
PdaResponseVo vo = new PdaResponseVo();
|
||||
vo.setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class DataItem {
|
||||
/**
|
||||
* 物料编码
|
||||
*/
|
||||
private String material_code;
|
||||
|
||||
/**
|
||||
* 物料类型
|
||||
*/
|
||||
private String material_type;
|
||||
|
||||
/**
|
||||
* 物料名称
|
||||
*/
|
||||
private String material_name;
|
||||
|
||||
/**
|
||||
* 计量单位
|
||||
*/
|
||||
private String measure_unit_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.nl.wms.pda.task.service.dao.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ResponseVo {
|
||||
/**
|
||||
* 返回数据列表
|
||||
*/
|
||||
private List<DataItem> data;
|
||||
|
||||
/**
|
||||
* 返回消息
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 返回结果
|
||||
*/
|
||||
private String code;
|
||||
|
||||
@Data
|
||||
public static class DataItem {
|
||||
/**
|
||||
* 值
|
||||
*/
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* 显示文本
|
||||
*/
|
||||
private String text;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,93 @@
|
||||
package org.nl.wms.sch.forewarn.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 载具扩展属性信息表
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-05-23
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("md_pb_storagevehicleext")
|
||||
public class MdPbStoragevehicleext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 载具扩展标识
|
||||
*/
|
||||
@TableId(value = "storagevehicleext_id")
|
||||
private String storagevehicleext_id;
|
||||
|
||||
/**
|
||||
* 载具编码
|
||||
*/
|
||||
private String storagevehicle_code;
|
||||
|
||||
/**
|
||||
* 物料标识
|
||||
*/
|
||||
private String material_id;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
*/
|
||||
private String pcsn;
|
||||
|
||||
/**
|
||||
* 数量计量单位标识
|
||||
*/
|
||||
private String qty_unit_id;
|
||||
|
||||
/**
|
||||
* 数量计量单位名称
|
||||
*/
|
||||
private String qty_unit_name;
|
||||
|
||||
/**
|
||||
* 可用数
|
||||
*/
|
||||
private BigDecimal canuse_qty;
|
||||
|
||||
/**
|
||||
* 冻结数
|
||||
*/
|
||||
private BigDecimal frozen_qty;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 修改人
|
||||
*/
|
||||
private String update_optid;
|
||||
|
||||
/**
|
||||
* 修改人姓名
|
||||
*/
|
||||
private String update_optname;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private String update_time;
|
||||
|
||||
/**
|
||||
* 入库时间
|
||||
*/
|
||||
private String insert_time;
|
||||
|
||||
|
||||
}
|
||||
@@ -54,4 +54,8 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
List<SchBasePoint> getNewEndBasePoints(@Param("point_code2") String point_code2, @Param("region_code") String region_code);
|
||||
|
||||
List<SchBasePoint> getSamePoints(@Param("regionCode") String regionCode, @Param("material_code") String material_code);
|
||||
|
||||
List<SchBasePoint> getNewStartBasePoints(@Param("point_code1") String point_code1, @Param("region_code") String region_code);
|
||||
|
||||
List<SchBasePoint> selectSameGroupPoints(@Param("point") SchBasePoint point);
|
||||
}
|
||||
|
||||
@@ -223,9 +223,18 @@
|
||||
FROM `sch_base_point` p
|
||||
WHERE p.region_code = #{region_code}
|
||||
AND p.parent_point_code = #{point_code2}
|
||||
AND (point_type = '1' OR point_type = '2' OR point_type = '3')
|
||||
AND point_type = '1'
|
||||
AND is_used = 1
|
||||
AND point_status = "1"
|
||||
AND 0 = (
|
||||
SELECT COUNT(1) FROM sch_base_point p2
|
||||
WHERE
|
||||
p2.point_status = '2'
|
||||
AND p2.row_num = p.row_num
|
||||
AND p2.col_num <![CDATA[<]]> p.col_num
|
||||
AND p2.point_type = '1'
|
||||
AND p2.region_code = #{region_code}
|
||||
)
|
||||
ORDER BY in_order_seq asc
|
||||
</select>
|
||||
<select id="getSamePoints" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
@@ -250,4 +259,34 @@
|
||||
AND p.point_type = 1
|
||||
order by in_order_seq asc
|
||||
</select>
|
||||
<select id="getNewStartBasePoints" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT *
|
||||
FROM `sch_base_point` p
|
||||
WHERE p.region_code = #{region_code}
|
||||
AND p.parent_point_code = #{point_code2}
|
||||
AND point_type = '2'
|
||||
AND is_used = 1
|
||||
AND point_status = "1"
|
||||
AND 0 = (
|
||||
SELECT COUNT(1) FROM sch_base_point p2
|
||||
WHERE
|
||||
p2.point_status = '2'
|
||||
AND p2.row_num = p.row_num
|
||||
AND p2.col_num <![CDATA[<]]> p.col_num
|
||||
AND p2.point_type = '2'
|
||||
AND p2.region_code = #{region_code}
|
||||
)
|
||||
ORDER BY in_order_seq asc
|
||||
</select>
|
||||
<select id="selectSameGroupPoints" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"
|
||||
parameterType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT *
|
||||
FROM `sch_base_point` p
|
||||
WHERE p.region_code = #{point.region_code}
|
||||
AND p.point_code != #{point.point_code}
|
||||
AND p.row_num = #{point.row_num}
|
||||
AND p.point_location = #{point.point_location}
|
||||
AND point_type = '1'
|
||||
AND p.in_order_seq <![CDATA[<]]> #{point.in_order_seq}
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.nl.wms.sch.region.controller;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/agvCharge")
|
||||
public class AgvChargeController {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.nl.wms.sch.region.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.sch.region.service.dao.AgvCharge;
|
||||
|
||||
|
||||
public interface AgvChargeService extends IService<AgvCharge> {
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package org.nl.wms.sch.region.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("st_ivt_agvcharge")
|
||||
@Builder
|
||||
public class AgvCharge implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "agvcharge_id", type = IdType.NONE)
|
||||
private String agvcharge_id;
|
||||
|
||||
private String agv_no;
|
||||
|
||||
private int is_hasTask;
|
||||
|
||||
private String remark;
|
||||
|
||||
private String status;
|
||||
|
||||
private String create_id;
|
||||
|
||||
private String create_name;
|
||||
|
||||
private String create_time;
|
||||
|
||||
private String update_optid;
|
||||
|
||||
private String update_optname;
|
||||
|
||||
|
||||
private String update_time;
|
||||
}
|
||||
@@ -27,6 +27,8 @@ public class RegionCharge implements Serializable {
|
||||
|
||||
private String remark;
|
||||
|
||||
private String status;
|
||||
|
||||
private String create_id;
|
||||
|
||||
private String create_name;
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.nl.wms.sch.region.service.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.sch.region.service.dao.AgvCharge;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface AgvChargeMapper extends BaseMapper<AgvCharge> {
|
||||
List<JSONObject> selectPageLeftJoin(@Param("whereJson") JSONObject whereJson);
|
||||
|
||||
List<JSONObject> selectCarNos();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.region.service.dao.mapper.AgvChargeMapper">
|
||||
<select id="selectPageLeftJoin" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT agv_no,
|
||||
CASE status WHEN '1' THEN '暂停' WHEN '2' THEN '正常' ELSE '未知' END AS status ,
|
||||
CASE is_hasTask WHEN '1' THEN '有任务' WHEN '0' THEN '无任务' ELSE '未知' END AS hasTask
|
||||
FROM st_ivt_agvcharge
|
||||
where 1=1
|
||||
<if test="whereJson.agv_no != null and whereJson.agv_no != ''">
|
||||
AND agv_no = #{whereJson.agv_no}
|
||||
</if>
|
||||
</select>
|
||||
<select id="selectCarNos" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT agv_no
|
||||
FROM st_ivt_agvcharge
|
||||
where 1=1
|
||||
ORDER BY agv_no
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
<select id="selectPageLeftJoin" resultType="com.alibaba.fastjson.JSONObject"
|
||||
parameterType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT region_name,
|
||||
create_time,
|
||||
create_name
|
||||
SELECT region_code,
|
||||
CASE status WHEN '1' THEN '管制' WHEN '2' THEN '正常' ELSE '未知' END AS status ,
|
||||
region_name
|
||||
FROM st_ivt_regioncharge
|
||||
where is_delete = '0'
|
||||
<if test="whereJson.region_code != null and whereJson.region_code != ''">
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.nl.wms.sch.region.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.wms.sch.region.service.AgvChargeService;
|
||||
import org.nl.wms.sch.region.service.dao.AgvCharge;
|
||||
import org.nl.wms.sch.region.service.dao.mapper.AgvChargeMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class AgvChargeServiceImpl extends ServiceImpl<AgvChargeMapper, AgvCharge> implements AgvChargeService {
|
||||
}
|
||||
@@ -69,6 +69,14 @@ public class SchBaseTaskController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskStatusList()),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/taskTypeList")
|
||||
@Log("任务类型下拉框")
|
||||
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> getTaskTypeList(){
|
||||
return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskTypeList()),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping("/operation")
|
||||
@Log("任务操作")
|
||||
|
||||
|
||||
@@ -126,4 +126,6 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
|
||||
List<JSONObject> queryPdaTask(JSONObject whereJson);
|
||||
|
||||
List<SchBaseTask> findTaskByPoint(String point_code);
|
||||
|
||||
JSONArray getTaskTypeList();
|
||||
}
|
||||
|
||||
@@ -59,13 +59,13 @@
|
||||
WHEN '2' THEN '创建完成'
|
||||
WHEN '3' THEN '下发'
|
||||
WHEN '4' THEN '执行中'
|
||||
WHEN '071' THEN '取货完成'
|
||||
WHEN '051' THEN '取货完成'
|
||||
END) AS task_status
|
||||
FROM
|
||||
sch_base_task
|
||||
<where>
|
||||
is_delete = '0'
|
||||
AND task_status IN ('0','1','2','3','4','071')
|
||||
AND task_status IN ('0','1','2','3','4','051')
|
||||
<if test="param.task_code != null and param.task_code != ''">
|
||||
AND
|
||||
(task_code = #{param.task_code} or
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.nl.wms.sch.task.service.dto.SchBaseTaskQuery;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.task.TaskFactory;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskType;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -216,6 +217,19 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
return arr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONArray getTaskTypeList() {
|
||||
TaskType[] values = TaskType.values();
|
||||
JSONArray arr = new JSONArray();
|
||||
for (TaskType value : values) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("code", value.getCode());
|
||||
json.put("name", value.getName());
|
||||
arr.add(json);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void operation(Map<String, Object> param) {
|
||||
String task_code = ObjectUtil.isNotEmpty(param.get("task_code")) ? param.get("task_code").toString() : null;
|
||||
@@ -245,6 +259,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
case "cancel":
|
||||
abstractTask.cancel(task_code);
|
||||
break;
|
||||
case "forceFinishByHand":
|
||||
abstractTask.forceFinishByPDA(task_code);
|
||||
break;
|
||||
case "finish":
|
||||
taskOne.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskOne.setRemark("任务被用户:" + SecurityUtils.getCurrentUsername() + "在:" + DateUtil.now() + "强制完成。");
|
||||
|
||||
@@ -266,6 +266,17 @@ AbstractTask {
|
||||
*/
|
||||
public abstract void forceFinish(String task_code);
|
||||
|
||||
/**
|
||||
* 手持强制结束完成任务
|
||||
*
|
||||
* @param task_code 任务标识
|
||||
* @return
|
||||
* @discription 强制结束完成任务
|
||||
* @author ldjun
|
||||
* @created 2020年6月19日 上午10:34:58
|
||||
*/
|
||||
public abstract void forceFinishByPDA(String task_code);
|
||||
|
||||
/**
|
||||
* 取消任务,货物搬回原点
|
||||
*
|
||||
@@ -347,5 +358,4 @@ AbstractTask {
|
||||
bean.create();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package org.nl.wms.sch.task_manage;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.mnt.websocket.MsgType;
|
||||
import org.nl.common.mnt.websocket.SocketMsg;
|
||||
import org.nl.common.mnt.websocket.WebSocketServer;
|
||||
import org.nl.config.language.LangProcess;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class AutoInventoryReport {
|
||||
|
||||
@Resource
|
||||
private WebSocketServer webSocketServer;
|
||||
@Resource
|
||||
private SchBasePointMapper schBasePointMapper;
|
||||
|
||||
@SneakyThrows
|
||||
public void run() {
|
||||
log.debug("定时任务AutoInventoryReport开始执行:");
|
||||
boolean flag = checkFullInventory();
|
||||
if (flag) {
|
||||
log.debug("定时任务AutoInventoryReport执行结束:");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean checkFullInventory() {
|
||||
List<SchBasePoint> list = schBasePointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, "R6")
|
||||
.eq(SchBasePoint::getPoint_type, "1"));
|
||||
List<SchBasePoint> list1 = schBasePointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, "R7")
|
||||
.eq(SchBasePoint::getPoint_type, "1"));
|
||||
|
||||
Map<Integer, List<SchBasePoint>> groupedByRow = list.stream()
|
||||
.collect(Collectors.groupingBy(SchBasePoint::getRow_num));
|
||||
Map<Integer, List<SchBasePoint>> groupedByRow1 = list1.stream()
|
||||
.collect(Collectors.groupingBy(SchBasePoint::getRow_num));
|
||||
Map<Integer, List<SchBasePoint>> mergedMap = Stream.of(groupedByRow, groupedByRow1)
|
||||
.flatMap(map -> map.entrySet().stream())
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
Map.Entry::getValue,
|
||||
(list3, list4) -> {
|
||||
list3.addAll(list4);
|
||||
return list3;
|
||||
}
|
||||
));
|
||||
|
||||
for (Map.Entry<Integer, List<SchBasePoint>> entry : mergedMap.entrySet()) {
|
||||
List<SchBasePoint> points = entry.getValue();
|
||||
if (points.stream().allMatch(point -> point.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode()))) {
|
||||
SchBasePoint schBasePoint = points.get(0);
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("data", schBasePoint.getRegion_code() + "区域第" + schBasePoint.getRow_num() + "排库存已满!");
|
||||
SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO);
|
||||
try {
|
||||
webSocketServer.sendInfo(messageInfo, "sid");
|
||||
} catch (IOException e) {
|
||||
throw new BadRequestException(LangProcess.msg("error_Send"));
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.nl.wms.sch.task_manage.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum CommonParamEnum {
|
||||
// 异常
|
||||
ONE("1", "生产下料"),
|
||||
// 警告
|
||||
TWO("2", "质检配送"),
|
||||
// 通知
|
||||
THREE("3", "质检下料");
|
||||
|
||||
private final String code;
|
||||
private final String name;
|
||||
}
|
||||
@@ -2,19 +2,27 @@ package org.nl.wms.sch.task_manage.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.MapOf;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PointTypeEnum {
|
||||
|
||||
NET_IN_POINT("1", "N1/N3下料位"),
|
||||
//点位类型
|
||||
POINT_STATUS(MapOf.of("普通点位/上料点", "1", "下料点/等待点", "2"));
|
||||
|
||||
NET_OUT_POINT("2", "N1/N3下料位"),
|
||||
private Map<String, String> code;
|
||||
|
||||
L_IN_POINT("4", "L1/L2位"),
|
||||
public String code(String desc) {
|
||||
String code = this.getCode().get(desc);
|
||||
if (StringUtils.isNotEmpty(code)) {
|
||||
return code;
|
||||
}
|
||||
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
|
||||
}
|
||||
|
||||
L_OUT_POINT("4", "L1/L2下料位");
|
||||
|
||||
private final String code;
|
||||
private final String label;
|
||||
}
|
||||
|
||||
@@ -15,9 +15,8 @@ public enum RegionTypeEnum {
|
||||
POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱位", "5", "装箱区", "6","等待点", "7")),
|
||||
|
||||
//深浅位类型
|
||||
REGION_TYPE(MapOf.of("MB制布区", "MB", "NET加工区1", "N1", "NET加工区3", "N3", "E反保管1区", "E1",
|
||||
"E反保管2区", "E2", "骨才区", "GC", "活性碳保管1区", "H1", "活性碳保管2区", "H2", "活性碳放置区", "HXTFZW", "贴合加工区1", "L1",
|
||||
"贴合加工区1", "L1", "贴合加工区2", "L2", "待捆包区", "DKB", "空托盘区", "KTP"));
|
||||
REGION_TYPE(MapOf.of("区域1", "R1", "区域2", "R2", "区域3", "R3", "区域4", "R4",
|
||||
"区域5", "R5", "区域6", "R6", "区域7", "R7"));
|
||||
|
||||
private Map<String, String> code;
|
||||
|
||||
|
||||
@@ -4,15 +4,20 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.system.service.param.impl.SysParamServiceImpl;
|
||||
import org.nl.wms.ext.acs.service.dto.ResultForAcs;
|
||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskStatusEnum;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,10 +32,11 @@ import java.util.List;
|
||||
public class AcsUtil {
|
||||
/**
|
||||
* 原生默认请求方法: 默认执行的参数都是jsonArray
|
||||
*
|
||||
* @param api
|
||||
* @param list
|
||||
* @return
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> ResultForAcs notifyAcs(String api, List<T> list) {
|
||||
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
|
||||
@@ -70,12 +76,75 @@ public class AcsUtil {
|
||||
return resultForAcs;
|
||||
}
|
||||
|
||||
public static JSONObject notifyAcs(String api, JSONArray list) {
|
||||
AcsUtil bean = SpringContextHolder.getBean(AcsUtil.class);
|
||||
JSONObject jsonObject = bean.notifyAcs3(api, list);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
||||
public JSONObject notifyAcs3(String api, JSONArray list) {
|
||||
log.info("下发ACS参数----------------------------------------+" + api + ",---" + list.toString());
|
||||
JSONObject result = new JSONObject();
|
||||
//判断是否连接ACS系统
|
||||
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
|
||||
// list转JSONArray
|
||||
String s = JSON.toJSONString(list);
|
||||
//判断是否连接ACS系统
|
||||
Param isConnectAcs = sysParamService.findByCode(GeneralDefinition.IS_CONNECT_ACS);
|
||||
if (ObjectUtil.isEmpty(isConnectAcs)) {
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "下发成功,但未连接ACS!");
|
||||
result.put("data", new JSONObject());
|
||||
return result;
|
||||
}
|
||||
String isConnect = isConnectAcs.getValue();
|
||||
//ACS地址:127.0.0.1:8010
|
||||
Param acsUrlObj = sysParamService.findByCode(GeneralDefinition.ACS_URL);
|
||||
if (ObjectUtil.isEmpty(acsUrlObj)) {
|
||||
throw new BadRequestException("未查询到区域对应的acs地址!");
|
||||
}
|
||||
String acsUrl = acsUrlObj.getValue();
|
||||
if (StrUtil.equals(GeneralDefinition.NO, isConnect)) {
|
||||
throw new BadRequestException("未连接ACS!");
|
||||
}
|
||||
String url = acsUrl + api;
|
||||
for (int j = 0; j < list.size(); j++) {
|
||||
JSONObject jo = list.getJSONObject(j);
|
||||
try {
|
||||
JSONArray rows = new JSONArray();
|
||||
rows.add(jo);
|
||||
String resultMsg = HttpRequest.post(url)
|
||||
.body(String.valueOf(rows))
|
||||
.execute().body();
|
||||
result = JSONObject.parseObject(resultMsg);
|
||||
log.info("下发acs任务成功,返回参数----------------------------------------+" + api + ",---" + result.toString());
|
||||
} catch (Exception e) {
|
||||
String msg = e.getMessage();
|
||||
//ConnectException: Connection refused: connect
|
||||
//网络不通
|
||||
result.put("status", HttpStatus.BAD_REQUEST);
|
||||
result.put("message", "网络不通,操作失败!");
|
||||
result.put("data", new JSONObject());
|
||||
log.info("下发ACS任务失败,原因是:----------------------------------------+" + msg);
|
||||
}
|
||||
//acs抛异常这里
|
||||
if (!StrUtil.equals(result.getString("status"), "200")) {
|
||||
log.info("下发acs任务失败,原因是:----------------------------------------+" + result.getString("message"));
|
||||
throw new BadRequestException(result.getString("message"));
|
||||
}
|
||||
}
|
||||
log.info("下发acs任务,结果是:----------------------------------------+" + result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新的请求方式:对象中包含数组
|
||||
*
|
||||
* @param api
|
||||
* @param object
|
||||
* @return
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T> AcsResponse notifyAcs2(String api, T object) {
|
||||
SysParamServiceImpl sysParamService = SpringContextHolder.getBean(SysParamServiceImpl.class);
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package org.nl.wms.sch.task_manage.task.core;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务类型枚举
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-11-16
|
||||
*/
|
||||
public enum TaskType {
|
||||
/**
|
||||
* 申请
|
||||
*/
|
||||
ONE("1", "普通任务", "普通任务"),
|
||||
/**
|
||||
* 创建完成
|
||||
*/
|
||||
TWO("2", "取货二次分配", "取货二次分配"),
|
||||
/**
|
||||
* 下发
|
||||
*/
|
||||
THREE("3", "放货二次分配", "放货二次分配"),
|
||||
/**
|
||||
* 执行中
|
||||
*/
|
||||
FOUR("4", "E2取放货二次分配", "E2取放货二次分配"),
|
||||
/**
|
||||
* 完成
|
||||
*/
|
||||
FIVE("5", "取放货二次分配", "取放货二次分配");
|
||||
|
||||
|
||||
|
||||
|
||||
TaskType(String code, String name, String desc) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private String code;
|
||||
private String name;
|
||||
private String desc;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
@@ -131,6 +131,35 @@ public class PdaPointTask extends AbstractTask {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
|
||||
@@ -192,6 +192,36 @@ public class NETSLTask extends AbstractTask {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
|
||||
@@ -158,6 +158,36 @@ public class NETXLTask extends AbstractTask {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
private SchBasePoint findNextPoint(List<String> nextRegionStr, String regionCode, SchBaseTask task) {
|
||||
// 找到同一个区域下物料相同的所有点位
|
||||
if ("E2".equals(regionCode)) {
|
||||
|
||||
@@ -0,0 +1,369 @@
|
||||
package org.nl.wms.sch.tasks.scxl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlate;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlatedtl;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplatedtlMapper;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.scxl.mapper.SCXLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// 生产下料任务
|
||||
@Component(value = "SCXLTask")
|
||||
@TaskType("SCXLTask")
|
||||
public class SCXLTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "SCXLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private SCXLMapper scxlMapper;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||
@Autowired
|
||||
private MdPbGroupplatedtlMapper mdPbGroupplatedtlMapper;
|
||||
@Autowired
|
||||
private ISysParamService paramService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
findNextPoint(nextRegionStr, task);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
findNextPoint(nextRegionStr, task);
|
||||
}
|
||||
|
||||
private void findNextPoint(List<String> nextRegionStr, SchBaseTask task) {
|
||||
RedissonUtils.lock(c -> {
|
||||
//按组找同一半区没有阻挡的空闲点位
|
||||
List<SchBasePoint> points = scxlMapper.findNextPoint(nextRegionStr);
|
||||
if (CollectionUtils.isEmpty(points)) {
|
||||
throw new BadRequestException("区域3接收区域没有空闲的点位!");
|
||||
}
|
||||
SchBasePoint schBasePoint = null;
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
SchBasePoint point = points.get(i);
|
||||
|
||||
//判断该点位的所在的排是否达到任务最大数
|
||||
if (!checkMaxTaskNum(point)) {
|
||||
continue;
|
||||
}
|
||||
schBasePoint = point;
|
||||
break;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(schBasePoint.getExt_point_code());
|
||||
task.setPoint_code4(schBasePoint.getPoint_code());
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String point3 = jsonObject.getString("point3");
|
||||
if (StrUtil.isNotEmpty(point3)){
|
||||
task.setPoint_code3(point3);
|
||||
}
|
||||
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
schBasePoint.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(schBasePoint);
|
||||
pointService.updateById(schBasePoint);
|
||||
return true;
|
||||
// List<SchBasePoint> points = pointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
// .in(SchBasePoint::getRegion_code, nextRegionStr)
|
||||
// .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
|
||||
// .eq(SchBasePoint::getIng_task_code, "")
|
||||
// .eq(SchBasePoint::getIs_used, true)
|
||||
// .orderByAsc(SchBasePoint::getIn_order_seq));
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(points)) {
|
||||
// throw new BadRequestException("区域3没有空闲的上料点位!");
|
||||
// }
|
||||
// SchBasePoint point = getNextPoint(points);
|
||||
// if (ObjectUtil.isNull(point)) {
|
||||
// // 找不到一排都为空的点位 取第一列第一个为空的位置
|
||||
// point = points.get(0);
|
||||
// }
|
||||
// // 设置终点并修改创建成功状态
|
||||
// task.setPoint_code2(point.getPoint_code());
|
||||
// String requestParam = task.getRequest_param();
|
||||
// JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
// String point3 = jsonObject.getString("point3");
|
||||
// if (StrUtil.isNotEmpty(point3)){
|
||||
// task.setPoint_code3(point3);
|
||||
// }
|
||||
// // 设置终点并修改创建成功状态
|
||||
// task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配"));
|
||||
// task.setRemark("");
|
||||
// task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
// taskService.save(task);
|
||||
// // 点位更新
|
||||
// point.setIng_task_code(task.getTask_code());
|
||||
// PointUtils.setUpdateByAcs(point);
|
||||
// pointService.updateById(point);
|
||||
// return true;
|
||||
}, "SCXLTask", null);
|
||||
}
|
||||
|
||||
public SchBasePoint getNextPoint(List<SchBasePoint> points) {
|
||||
//查找整排为空的点位
|
||||
for (SchBasePoint point : points) {
|
||||
boolean result = checkIsAllEmpty(point);
|
||||
if (!result) {
|
||||
continue;
|
||||
}
|
||||
return point;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean checkMaxTaskNum(SchBasePoint point) {
|
||||
String ext_point_code = point.getExt_point_code();
|
||||
if (StrUtil.isEmpty(ext_point_code)){
|
||||
throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!");
|
||||
}
|
||||
List<SchBaseTask> zjpsTask = taskService.findUnFinishTasksByTaskConfigAndPointCode("ZJPSTask", ext_point_code);
|
||||
String point_location = point.getPoint_location();
|
||||
if (StrUtil.isEmpty(point_location)){
|
||||
throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置点位位置!");
|
||||
}
|
||||
Param zjpsTaskNum = null;
|
||||
if (point_location.equals("1")) {
|
||||
zjpsTaskNum = paramService.findByCode("SCXLTask_num1");
|
||||
} else if (point_location.equals("2")) {
|
||||
zjpsTaskNum = paramService.findByCode("SCXLTask_num2");
|
||||
}
|
||||
if (zjpsTaskNum == null) {
|
||||
throw new BadRequestException("请先设置参数【SCXLTask_num】!");
|
||||
}
|
||||
if (zjpsTask.size() >= Integer.parseInt(zjpsTaskNum.getValue())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean checkIsAllEmpty(SchBasePoint point) {
|
||||
String point_code = point.getPoint_code();
|
||||
String point_code_format = formatPointCode(point_code);
|
||||
SchBasePoint basePoint = pointService.findByCode(point_code_format);
|
||||
if (basePoint.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String formatPointCode(String point_code) {
|
||||
return point_code.substring(0, point_code.length() - 1) + "2";
|
||||
}
|
||||
|
||||
|
||||
private Boolean checkIsFree(String point_code) {
|
||||
SchBasePoint newPoint = pointService.findByCode(point_code);
|
||||
// 判断点位是否有货
|
||||
if (newPoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) {
|
||||
return false;
|
||||
}
|
||||
List<SchBaseTask> list = taskService.findUnFinishTasksByTaskConfigAndPointCode("NETXLTask", point_code);
|
||||
if (list.size() > 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private String forametDevice_code(String point_code, int col_num) {
|
||||
return point_code.substring(0, point_code.length() - 1) + (col_num);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv已经取货完成,不允许点取消!");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
endPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
String storagevehicle_code = startPointObj.getStoragevehicle_code();
|
||||
//取货完成会清空托盘号
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
SchBasePoint point2 = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(point2)) {
|
||||
point2.setIng_task_code("");
|
||||
pointService.updateById(point2);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.nl.wms.sch.tasks.scxl.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SCXLMapper {
|
||||
List<SchBasePoint> findNextPoint(@Param("nextRegionStr") List<String> nextRegionStr);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.scxl.mapper.SCXLMapper">
|
||||
<select id="findNextPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT * FROM sch_base_point p1
|
||||
WHERE
|
||||
p1.point_status = '1'
|
||||
AND p1.point_type = '1'
|
||||
AND p1.region_code = 'R3'
|
||||
AND 0 = (
|
||||
SELECT COUNT(*)
|
||||
FROM sch_base_task
|
||||
WHERE (point_code1 = p1.point_code
|
||||
OR point_code2 = p1.point_code
|
||||
OR point_code3 = p1.point_code
|
||||
OR point_code4 = p1.point_code
|
||||
)
|
||||
AND task_status <![CDATA[<]]> '5'
|
||||
AND is_delete = '0'
|
||||
)
|
||||
AND 0 = (
|
||||
SELECT COUNT(1) FROM sch_base_point p2
|
||||
WHERE
|
||||
p2.point_status = '2'
|
||||
AND p2.point_location = p1.point_location
|
||||
AND p2.in_order_seq > p1.in_order_seq
|
||||
AND p2.point_type = '1'
|
||||
AND p2.region_code = 'R3'
|
||||
)
|
||||
ORDER BY p1.in_order_seq
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -190,6 +190,36 @@ public class THSLTask extends AbstractTask {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
|
||||
@@ -256,6 +256,36 @@ public class THXLTask extends AbstractTask {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
|
||||
private String forametDevice_code(String point_code, int col_num) {
|
||||
return point_code.substring(0, point_code.length() - 1) + (col_num);
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
package org.nl.wms.sch.tasks.zjps;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlate;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlatedtl;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplatedtlMapper;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.zjps.mapper.ZJPSMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// 质检配送任务
|
||||
@Component(value = "ZJPSTask")
|
||||
@TaskType("ZJPSTask")
|
||||
public class ZJPSTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "ZJPSTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private ZJPSMapper zjpsMapper;
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||
@Autowired
|
||||
private MdPbGroupplatedtlMapper mdPbGroupplatedtlMapper;
|
||||
@Autowired
|
||||
private ISysParamService paramService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String regionCode = jsonObject.getString("region_code");
|
||||
findNextPoint(nextRegionStr, task);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
findNextPoint(nextRegionStr, task);
|
||||
}
|
||||
|
||||
private void findNextPoint(List<String> nextRegionStr,SchBaseTask task) {
|
||||
RedissonUtils.lock(c -> {
|
||||
List<SchBasePoint> points = zjpsMapper.findNextPoint(nextRegionStr);
|
||||
if (CollectionUtils.isEmpty(points)) {
|
||||
throw new BadRequestException("区域4和区域5没有空闲的上料点位!");
|
||||
}
|
||||
SchBasePoint schBasePoint = null;
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
SchBasePoint point = points.get(i);
|
||||
|
||||
//判断该点位的所在的排是否达到任务最大数
|
||||
if (!checkMaxTaskNum(point)) {
|
||||
continue;
|
||||
}
|
||||
schBasePoint = point;
|
||||
break;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(schBasePoint.getExt_point_code());
|
||||
task.setPoint_code4(schBasePoint.getPoint_code());
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String point3 = jsonObject.getString("point3");
|
||||
if (StrUtil.isNotEmpty(point3)){
|
||||
task.setPoint_code3(point3);
|
||||
}
|
||||
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
schBasePoint.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(schBasePoint);
|
||||
pointService.updateById(schBasePoint);
|
||||
return true;
|
||||
}, "ZJPSTask", null);
|
||||
}
|
||||
|
||||
private boolean checkMaxTaskNum(SchBasePoint point) {
|
||||
String ext_point_code = point.getExt_point_code();
|
||||
if (StrUtil.isEmpty(ext_point_code)){
|
||||
throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!");
|
||||
}
|
||||
List<SchBaseTask> zjpsTask = taskService.findUnFinishTasksByTaskConfigAndPointCode("ZJPSTask", ext_point_code);
|
||||
Param zjpsTaskNum = paramService.findByCode("ZJPSTask_num");
|
||||
if (zjpsTaskNum == null) {
|
||||
throw new BadRequestException("请先设置参数【ZJPSTask_num】!");
|
||||
}
|
||||
if (zjpsTask.size() >= Integer.parseInt(zjpsTaskNum.getValue())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
private boolean checkIsEmpty(SchBasePoint point) {
|
||||
if (point.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode()) && StrUtil.isEmpty(point.getIng_task_code())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Boolean checkIsFree(String point_code) {
|
||||
SchBasePoint newPoint = pointService.findByCode(point_code);
|
||||
// 判断点位是否有货
|
||||
if (newPoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) {
|
||||
return false;
|
||||
}
|
||||
List<SchBaseTask> list = taskService.findUnFinishTasksByTaskConfigAndPointCode("NETXLTask", point_code);
|
||||
if (list.size() > 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private String forametDevice_code(String point_code, int col_num) {
|
||||
return point_code.substring(0, point_code.length() - 1) + (col_num);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())){
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
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("该任务不存在");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())){
|
||||
throw new BadRequestException("agv已经取货完成,不允许点取消!");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
endPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
String storagevehicle_code = startPointObj.getStoragevehicle_code();
|
||||
//取货完成会清空托盘号
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
SchBasePoint point2 = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(point2)) {
|
||||
point2.setIng_task_code("");
|
||||
pointService.updateById(point2);
|
||||
}
|
||||
SchBasePoint point4 = pointService.getById(taskObj.getPoint_code4());
|
||||
if (ObjectUtil.isNotEmpty(point4)) {
|
||||
point4.setIng_task_code("");
|
||||
pointService.updateById(point4);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.nl.wms.sch.tasks.zjps.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ZJPSMapper {
|
||||
List<SchBasePoint> findNextPoint(@Param("nextRegionStr") List<String> nextRegionStr);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.zjps.mapper.ZJPSMapper">
|
||||
<select id="findNextPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT * FROM sch_base_point p1
|
||||
WHERE
|
||||
p1.point_status = '1'
|
||||
AND p1.point_type = '1'
|
||||
AND p1.is_used= '1'
|
||||
AND 0 = (
|
||||
SELECT COUNT(*)
|
||||
FROM sch_base_task
|
||||
WHERE (point_code1 = p1.point_code
|
||||
OR point_code2 = p1.point_code
|
||||
OR point_code3 = p1.point_code
|
||||
OR point_code4 = p1.point_code
|
||||
)
|
||||
AND task_status <![CDATA[<]]> '5'
|
||||
AND is_delete = '0'
|
||||
)
|
||||
AND (p1.region_code = 'R4' OR p1.region_code = 'R5')
|
||||
AND 0 = (
|
||||
SELECT COUNT(1) FROM sch_base_point p2
|
||||
WHERE
|
||||
p2.point_status = '2'
|
||||
AND p2.row_num = p1.row_num
|
||||
AND p2.col_num <![CDATA[<]]> p1.col_num
|
||||
AND p2.point_type = '1'
|
||||
AND (p2.region_code = 'R4' OR p2.region_code = 'R5')
|
||||
)
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,378 @@
|
||||
package org.nl.wms.sch.tasks.zjxl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import org.nl.common.enums.PackageInfoIvtEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.system.service.param.dao.Param;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlate;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlatedtl;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplatedtlMapper;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.zjxl.mapper.ZJXLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// 质检下料任务
|
||||
@Component(value = "ZJXLTask")
|
||||
@TaskType("ZJXLTask")
|
||||
public class ZJXLTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "ZJXLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||
@Autowired
|
||||
private MdPbGroupplatedtlMapper mdPbGroupplatedtlMapper;
|
||||
@Autowired
|
||||
private ZJXLMapper zjxlMapper;
|
||||
@Autowired
|
||||
private ISysParamService paramService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
// 找终点
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String regionCode = jsonObject.getString("region_code");
|
||||
findNextPoint(nextRegionStr, regionCode,task);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String regionCode = jsonObject.getString("region_code");
|
||||
// 找终点
|
||||
findNextPoint(nextRegionStr,regionCode,task);
|
||||
}
|
||||
|
||||
private void findNextPoint(List<String> nextRegionStr,String regionCode,SchBaseTask task) {
|
||||
// 查找R6 R7区域的空闲点位
|
||||
if ("R6".equals(regionCode)) {
|
||||
RedissonUtils.lock(c -> {
|
||||
List<SchBasePoint> points = zjxlMapper.findNextPoint(nextRegionStr,regionCode);
|
||||
if (CollectionUtils.isEmpty(points)) {
|
||||
throw new BadRequestException("区域6没有空闲的点位!");
|
||||
}
|
||||
|
||||
SchBasePoint schBasePoint = null;
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
SchBasePoint point = points.get(i);
|
||||
|
||||
//判断该点位的所在的排是否达到任务最大数
|
||||
if (!checkMaxTaskNum(point)) {
|
||||
continue;
|
||||
}
|
||||
schBasePoint = point;
|
||||
break;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(schBasePoint.getExt_point_code());
|
||||
task.setPoint_code4(schBasePoint.getPoint_code());
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String point3 = jsonObject.getString("point3");
|
||||
if (StrUtil.isNotEmpty(point3)){
|
||||
task.setPoint_code3(point3);
|
||||
}
|
||||
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
schBasePoint.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(schBasePoint);
|
||||
pointService.updateById(schBasePoint);
|
||||
return true;
|
||||
}, "ZJXLToR6Task", null);
|
||||
} else {
|
||||
//R7
|
||||
RedissonUtils.lock(c -> {
|
||||
List<SchBasePoint> points = zjxlMapper.findNextPoint(nextRegionStr,regionCode);
|
||||
if (CollectionUtils.isEmpty(points)) {
|
||||
throw new BadRequestException("区域7没有空闲的点位!");
|
||||
}
|
||||
SchBasePoint schBasePoint = null;
|
||||
for (int i = 0; i < points.size(); i++) {
|
||||
SchBasePoint point = points.get(i);
|
||||
|
||||
//判断该点位的所在的排是否达到任务最大数
|
||||
if (!checkMaxTaskNum(point)) {
|
||||
continue;
|
||||
}
|
||||
schBasePoint = point;
|
||||
break;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(schBasePoint.getExt_point_code());
|
||||
task.setPoint_code4(schBasePoint.getPoint_code());
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject jsonObject = JSONObject.parseObject(requestParam);
|
||||
String point3 = jsonObject.getString("point3");
|
||||
if (StrUtil.isNotEmpty(point3)){
|
||||
task.setPoint_code3(point3);
|
||||
}
|
||||
task.setVehicle_code2(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取放货二次分配"));
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
schBasePoint.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(schBasePoint);
|
||||
pointService.updateById(schBasePoint);
|
||||
return true;
|
||||
}, "ZJXLToR7Task", null);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkMaxTaskNum(SchBasePoint point) {
|
||||
String ext_point_code = point.getExt_point_code();
|
||||
if (StrUtil.isEmpty(ext_point_code)){
|
||||
throw new BadRequestException("该点位【"+point.getPoint_code()+"】没有设置等待点位!");
|
||||
}
|
||||
String region_code = point.getRegion_code();
|
||||
Param zjpsTaskNum = new Param();
|
||||
if (region_code.equals("R6")) {
|
||||
zjpsTaskNum = paramService.findByCode("ZJXLToR6Task_num");
|
||||
}else if (region_code.equals("R7")) {
|
||||
zjpsTaskNum = paramService.findByCode("ZJXLToR7Task_num");
|
||||
}
|
||||
List<SchBaseTask> zjpsTask = taskService.findUnFinishTasksByTaskConfigAndPointCode("ZJXLTask", ext_point_code);
|
||||
if (zjpsTaskNum == null) {
|
||||
if (region_code.equals("R6")) {
|
||||
throw new BadRequestException("请先设置参数【ZJXLToR6Task_num】!");
|
||||
}else if (region_code.equals("R7")) {
|
||||
throw new BadRequestException("请先设置参数【ZJXLToR7Task_num】!");
|
||||
}
|
||||
}
|
||||
if (zjpsTask.size() >= Integer.parseInt(zjpsTaskNum.getValue())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinishByPDA(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())) {
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
//清空起点信息
|
||||
startPointObj.setPoint_status(PointStatusEnum.EMPTY_POINT.getCode());
|
||||
startPointObj.setStoragevehicle_code("");
|
||||
startPointObj.setMaterial_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(startPointObj);
|
||||
//绑定终点信息
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
PointUtils.setUpdateByType(endPointObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
pointService.updateById(endPointObj);
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.MANUAL_PDA);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
private boolean checkIsEmpty(SchBasePoint point) {
|
||||
if (point.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode()) && StrUtil.isEmpty(point.getIng_task_code())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Boolean checkIsFree(String point_code) {
|
||||
SchBasePoint newPoint = pointService.findByCode(point_code);
|
||||
// 判断点位是否有货
|
||||
if (newPoint.getPoint_status().equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) {
|
||||
return false;
|
||||
}
|
||||
List<SchBaseTask> list = taskService.findUnFinishTasksByTaskConfigAndPointCode("NETXLTask", point_code);
|
||||
if (list.size() > 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private String forametDevice_code(String point_code, int col_num) {
|
||||
return point_code.substring(0, point_code.length() - 1) + (col_num);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())){
|
||||
throw new BadRequestException("agv还未取货完成,不允许点完成!");
|
||||
}
|
||||
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("该任务不存在");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.PICK_UP_COMPLETED.getCode())){
|
||||
throw new BadRequestException("agv已经取货完成,不允许点取消!");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
endPointObj.setMaterial_code(taskObj.getMaterial_code());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
endPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
String storagevehicle_code = startPointObj.getStoragevehicle_code();
|
||||
//取货完成会清空托盘号
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
SchBasePoint point3 = pointService.getById(taskObj.getPoint_code3());
|
||||
SchBasePoint point4 = pointService.getById(taskObj.getPoint_code4());
|
||||
SchBasePoint point2 = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(point2)) {
|
||||
point2.setIng_task_code("");
|
||||
pointService.updateById(point2);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(point3)) {
|
||||
point3.setIng_task_code("");
|
||||
pointService.updateById(point3);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(point4)) {
|
||||
point4.setIng_task_code("");
|
||||
pointService.updateById(point4);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.nl.wms.sch.tasks.zjxl.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ZJXLMapper {
|
||||
List<SchBasePoint> findNextPoint(@Param("nextRegionStr") List<String> nextRegionStr, @Param("regionCode") String regionCode);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.zjxl.mapper.ZJXLMapper">
|
||||
|
||||
<select id="findNextPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT * FROM sch_base_point p1
|
||||
WHERE
|
||||
p1.point_status = '1'
|
||||
AND p1.point_type = '1'
|
||||
AND p1.region_code = #{regionCode}
|
||||
AND 0 = (
|
||||
SELECT COUNT(*)
|
||||
FROM sch_base_task
|
||||
WHERE (point_code1 = p1.point_code
|
||||
OR point_code2 = p1.point_code
|
||||
OR point_code3 = p1.point_code
|
||||
OR point_code4 = p1.point_code
|
||||
)
|
||||
AND task_status <![CDATA[<]]> '5'
|
||||
AND is_delete = '0'
|
||||
)
|
||||
AND 0 = (
|
||||
SELECT COUNT(1) FROM sch_base_point p2
|
||||
WHERE
|
||||
p2.point_status = '2'
|
||||
AND p2.row_num = p1.row_num
|
||||
AND p2.col_num <![CDATA[<]]> p1.col_num
|
||||
AND p2.point_type = '1'
|
||||
AND p2.region_code = #{regionCode}
|
||||
)
|
||||
ORDER BY p1.in_order_seq
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -102,11 +102,22 @@ public class PointUtils {
|
||||
pointObj.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 点位修改更新信息
|
||||
**/
|
||||
public static void setUpdateByPDA(SchBasePoint pointObj) {
|
||||
pointObj.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
pointObj.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
pointObj.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
public static void setUpdateByType(SchBasePoint pointObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) {
|
||||
setUpdateByAcs(pointObj);
|
||||
} else {
|
||||
} else if (taskFinishedType.equals(TaskFinishedTypeEnum.MANUAL_PC)){
|
||||
setUpdateByPC(pointObj);
|
||||
} else {
|
||||
setUpdateByPDA(pointObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,8 +107,10 @@ public class TaskUtils {
|
||||
public static void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) {
|
||||
setUpdateByAcs(taskObj);
|
||||
} else {
|
||||
} else if (taskFinishedType.equals(TaskFinishedTypeEnum.MANUAL_PC)){
|
||||
setUpdateByPC(taskObj);
|
||||
}else {
|
||||
setUpdateByDefault(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user