add:新增手持接口

This commit is contained in:
2025-12-22 08:52:05 +08:00
parent 8c07042db6
commit df27310059
56 changed files with 3126 additions and 143 deletions

View File

@@ -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")),
//是否自动下发

View File

@@ -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();
}

View File

@@ -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,

View File

@@ -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);
}

View File

@@ -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 {

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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 {
}

View File

@@ -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> {
}

View File

@@ -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;
}

View File

@@ -27,6 +27,8 @@ public class RegionCharge implements Serializable {
private String remark;
private String status;
private String create_id;
private String create_name;

View File

@@ -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();
}

View File

@@ -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>

View File

@@ -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 != ''">

View File

@@ -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 {
}

View File

@@ -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("任务操作")

View File

@@ -126,4 +126,6 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
List<JSONObject> queryPdaTask(JSONObject whereJson);
List<SchBaseTask> findTaskByPoint(String point_code);
JSONArray getTaskTypeList();
}

View File

@@ -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

View File

@@ -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() + "强制完成。");

View File

@@ -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();
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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)) {

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}