Merge branch 'refs/heads/b_lms' into master_merge

This commit is contained in:
zhouz
2024-06-17 11:05:00 +08:00
49 changed files with 467 additions and 368 deletions

View File

@@ -88,7 +88,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
jsonTaskParam.put("task_type", "010715");
jsonTaskParam.put("start_device_code", point_code);
jsonTaskParam.put("next_device_code", "RK1004");
jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type"));
jsonTaskParam.put("containerType", whereJson.getString("vehicle_type"));
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
JSONObject param = new JSONObject();
param.put("containerType", whereJson.getString("vehicle_type"));
@@ -132,7 +132,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
jsonTaskParam.put("start_device_code", point_code);
jsonTaskParam.put("next_device_code", next_device_code);
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type"));
jsonTaskParam.put("containerType", whereJson.getString("vehicle_type"));
JSONObject param = new JSONObject();
param.put("containerType", whereJson.getString("vehicle_type"));
param.put("heightLevel", "0");

View File

@@ -1,8 +1,11 @@
package org.nl.b_lms.pdm.subpackagerelation.dao.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.common.domain.query.PageQuery;
import java.util.List;
@@ -17,6 +20,12 @@ import java.util.Map;
public interface PdmBiSubpackagerelationMapper extends BaseMapper<PdmBiSubpackagerelation> {
List<PdmBiSubpackagerelation> selectGroupedSubPackageRelation(Page<PdmBiSubpackagerelation> page, Map<String, Object> whereJson);
List<PdmBiSubpackagerelation> selectGroupedSubPackageRelation1(@Param("page") Integer page,@Param("size") Integer size, @Param("whereJson") Map<String, Object> whereJson);
Page<PdmBiSubpackagerelation> selectGroupedSubPackageRelation(Page<PdmBiSubpackagerelation> page, @Param("sale_order_name") String sale_order_name,
@Param("customer_name") String customer_name,
@Param("customer_description") String customer_description,
@Param("status") String status);
}

View File

@@ -0,0 +1,76 @@
<?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.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper">
<select id="selectGroupedSubPackageRelation" resultType="org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation">
SELECT
sale_order_name,
MAX(create_time) AS create_time,
workorder_id,
package_box_sn,
quanlity_in_box,
box_weight,
quality_guaran_period,
customer_name,
customer_description,
product_name,
product_description,
date_of_FG_inbound,
container_name,
width,
thickness,
mass_per_unit_area,
net_weight,
length,
date_of_production,
is_un_plan_production,
un_plan_product_property1,
un_plan_product_property2,
un_plan_product_property3,
remark,
create_id,
create_name,
status,
isRePrintPackageBoxLabel,
isUnPackBox,
box_type,
sap_pcsn,
vbeln,
posnr,
box_length,
box_width,
box_high,
sale_order_description,
width_standard,
thickness_request,
real_weight,
sub_type,
demand_limit,
standard_limit,
actual_value,
need_delete,
ext_code,
box_group
FROM
pdm_bi_subpackagerelation
WHERE
container_name IN (SELECT container_name FROM bst_ivt_packageinfoivt WHERE point_status = '3')
<if test="sale_order_name != null and sale_order_name != ''">
AND sale_order_name LIKE CONCAT('%', #{sale_order_name}, '%')
</if>
<if test="customer_name != null and customer_name != ''">
AND customer_name LIKE CONCAT('%', #{customer_name}, '%')
</if>
<if test="customer_description != null and customer_description != ''">
AND customer_description LIKE CONCAT('%', #{customer_description}, '%')
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
GROUP BY
sale_order_name
ORDER BY
MAX(create_time) DESC
</select>
</mapper>

View File

@@ -1,20 +0,0 @@
<?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.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper">
<select id="selectGroupedSubPackageRelation" resultType="org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation">
SELECT *
FROM pdm_bi_subpackagerelation
WHERE (sale_order_name, create_time) IN (
SELECT sale_order_name, MAX(create_time) AS create_time
FROM pdm_bi_subpackagerelation
<if test="_parameter.containsKey('customer_name')">
WHERE customer_name = #{customer_name}
</if>
GROUP BY sale_order_name
)
ORDER BY create_time DESC
LIMIT #{page.offset}, #{page.size}
</select>
</mapper>

View File

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
@@ -19,8 +18,8 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.tasks.first_floor_area.*;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueueManager;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
import org.nl.common.enums.ContainerLevelEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -36,7 +35,6 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -56,6 +54,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@Resource
private ISysParamService iSysParamService;
@Resource
private DjqTask djqTask;
@Resource
@@ -80,6 +80,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource
private TaskQueueManager taskQueueManager;
@Resource
private TaskQueue taskQueue;
/**
* 查询数据分页
@@ -94,14 +98,21 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
@Override
public IPage<PdmBiSubpackagerelation> queryContainerization(Map whereJson, PageQuery pageable) {
Page<PdmBiSubpackagerelation> pageObject = new Page<>(pageable.getPage(), pageable.getSize());
return pdmBiSubpackagerelationMapper.selectGroupedSubPackageRelation(pageObject,(String)whereJson.get("sale_order_name"),(String)whereJson.get("customer_name"),(String)whereJson.get("customer_description"),(String)whereJson.get("status"));
}
/**
* 查询订单装箱信息
*
* @param whereJson 查询条件
* @param pageable 分页参数
*/
@Override
public IPage<PdmBiSubpackagerelation> queryContainerization(Map whereJson, PageQuery pageable) {
public IPage<PdmBiSubpackagerelation> queryContainerization1(Map whereJson, PageQuery pageable) {
IPage<PdmBiSubpackagerelation> resultPage = new Page<>(pageable.getPage(), pageable.getSize());
LambdaQueryWrapper<PdmBiSubpackagerelation> queryWrapper = new LambdaQueryWrapper<>();
if (whereJson.containsKey("customer_description")) {
@@ -120,12 +131,19 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
queryWrapper.lt(PdmBiSubpackagerelation::getStatus, "99");
}
}
queryWrapper.groupBy(PdmBiSubpackagerelation::getSale_order_name)
.orderByDesc(PdmBiSubpackagerelation::getCreate_time);
return pdmBiSubpackagerelationMapper.selectPage(resultPage, queryWrapper);
}
/**
* 根据订单号查询子卷信息
*
@@ -166,7 +184,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
//下发空木箱出库任务
outBox1();
//outBox1();
//满轴->待检
//mzToDj();
@@ -384,9 +402,9 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
public void updateEntityList(JSONObject whereJson) {
List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
List<PdmBiSubpackagerelation> isOutBox = packagerelationList.stream().filter(r -> r.getStatus().equals("0")).collect(Collectors.toList());
if (isOutBox.size() > 0) {
throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷");
}
// if (isOutBox.size() > 0) {
// throw new BadRequestException("标记为黄色的子卷号已分配木箱,请重新选择未分配木箱的子卷");
// }
List<String> entityList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
.map(PdmBiSubpackagerelation::getWorkorder_id)
.map(String::valueOf)
@@ -411,7 +429,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper.set("status", "0");
updateWrapper.in("workorder_id", entityList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper);
// outBox(entityList, packagerelationList, boxType);
outBox(entityList, packagerelationList, boxType);
} catch (Exception e) {
throw new BadRequestException(e.getMessage());
}
@@ -429,40 +447,42 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
if (CollectionUtils.isEmpty(bstIvtPackageinfoivtList)) {
throw new BadRequestException("没有可用的装箱区对接位");
}
List<Map<String, Integer>> pointCodeList = bstIvtPackageinfoivtList.stream()
.map(p -> {
Map<String, Integer> map = new HashMap<>();
map.put(p.getPoint_code(), StringUtils.isNotBlank(p.getContainer_name()) ? 1 : 0);
return map;
})
.collect(Collectors.toList());
Map<String, Integer> resultMap = new HashMap<>();
//获取装箱位任务数量
List<Map<String, Integer>> taskCount = bstIvtPackageinfoivtMapper.getPointTaskCount();
if (CollectionUtils.isNotEmpty(taskCount)) {
for (Map<String, Integer> p : pointCodeList) {
for (Map.Entry<String, Integer> e : p.entrySet()) {
String pointCode = e.getKey();
for (Map<String, Integer> taskMap : taskCount) {
if (taskMap.containsKey(pointCode)) {
e.setValue(taskMap.get(pointCode));
break;
}
}
List<Map<String, Object>> taskCount = bstIvtPackageinfoivtMapper.getPointTaskCount();
if (taskCount != null) {
for (Map<String, Object> map : taskCount) {
Object pointCode2Obj = map.get("point_code2");
Object countObj = map.get("count");
if (pointCode2Obj != null && countObj != null) {
String pointCode2 = pointCode2Obj.toString();
Long countLong = (Long) countObj;
Integer count = countLong.intValue();
resultMap.merge(pointCode2, count, Integer::sum);
}
}
//获取资源最少的装箱对接位
Optional<String> minPointKey = pointCodeList.stream()
.min(Comparator.comparingInt(map -> map.entrySet().iterator().next().getValue()))
.map(map -> map.keySet().iterator().next());
deviceCode = minPointKey.orElse("");
} else {
deviceCode = bstIvtPackageinfoivtList.get(0).getPoint_code();
}
bstIvtPackageinfoivtList.stream()
.collect(Collectors.toMap(
BstIvtPackageinfoivt::getPoint_code,
p -> StringUtils.isNotBlank(p.getContainer_name()) ? 1 : 0,
Integer::sum
))
.forEach((key, value) -> resultMap.merge(key, value, Integer::sum));
List<Map<String, Integer>> result = resultMap.entrySet().stream()
.map(entry -> Collections.singletonMap(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
//获取数量最少的点位
Optional<String> minPointCode = result.stream()
.min(Comparator.comparingInt(map -> map.entrySet().iterator().next().getValue()))
.map(map -> map.keySet().iterator().next());
deviceCode = minPointCode.orElseGet(() -> bstIvtPackageinfoivtList.get(0).getPoint_code());
//确定装箱区终点
boxInfo.put("device_code", deviceCode);
boxInfo.put("material_code", boxType);
boxInfo.put("num", entityList.size());
String boxSn = outBoxManageService.outBox(boxInfo);
//String boxSn = outBoxManageService.outBox(boxInfo);
String boxSn = "MX61401";
if (StringUtils.isBlank(boxSn)) {
throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!");
}
@@ -472,14 +492,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper1.in("workorder_id", entityList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper1);
//待检区->装箱区agv任务
//agvTransfer(packagerelationList, deviceCode, boxSn);
agvTransfer(packagerelationList, deviceCode, boxSn);
}
/**
* 待检区->装箱区agv任务
*/
private void agvTransfer(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
private void agvTransfer1(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
//待检区点位
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
@@ -519,13 +539,14 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}
private void agvTransfer1(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
private void agvTransfer(List<PdmBiSubpackagerelation> packagerelationList, String deviceCode, String boxSn) {
//待检区点位
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"))
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品"))
//.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
Set<String> containerNames = packagerelationList.stream()
.map(PdmBiSubpackagerelation::getContainer_name)
@@ -534,7 +555,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.filter(djqPoint -> containerNames.contains(djqPoint.getContainer_name()))
.collect(Collectors.toList());
//任务组id
String groupId = deviceCode.substring(deviceCode.indexOf("_") + 1);
String groupId = deviceCode.substring(deviceCode.lastIndexOf("_") + 1);
List<SchBaseTask> schBaseTaskList = new ArrayList<>();
//确定起点,安装装箱组标识加入任务队列
djqPoints.forEach(r -> {
@@ -544,12 +565,13 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
jo.put("point_code1", r.getPoint_code());
//木箱号
jo.put("vehicle_code2", boxSn);
SchBaseTask task = zxqTask.dynamicCreateTask(jo);
SchBaseTask task = new SchBaseTask();
task.setTask_id(zxqTask.createTask(jo));
//增加任务到队列
schBaseTaskList.add(task);
});
TaskQueueManager taskQueueManager = new TaskQueueManager();
taskQueueManager.addTasksToQueue(deviceCode, schBaseTaskList);
//taskQueueManager.addTasksToQueue(groupId, schBaseTaskList);
taskQueue.addTasksToQueue(groupId, schBaseTaskList);
}

View File

@@ -19,6 +19,6 @@ public interface BstIvtPackageinfoivtMapper extends BaseMapper<BstIvtPackageinfo
/**
* 获取对接位任务数量
*/
List<Map<String,Integer>> getPointTaskCount();
List<Map<String, Object>> getPointTaskCount();
}

View File

@@ -3,19 +3,14 @@
<mapper namespace="org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper">
<select id="getPointTaskCount" resultType="java.util.Map">
SELECT
p.point_code,
COUNT(t.point_code2) AS count
t.point_code2,
COUNT( t.point_code2 ) AS count
FROM
bst_ivt_packageinfoivt p
LEFT JOIN
sch_base_task t ON p.point_code = t.point_code2
sch_base_task t
WHERE
p.point_status = '5'
AND t.task_status <![CDATA[ < ]]> '07'
GROUP BY
p.point_code
ORDER BY
p.point_code;
t.task_type ='010704'
AND t.task_status <![CDATA[ < ]]> 08
GROUP BY t.point_code2
</select>
</mapper>

View File

@@ -23,6 +23,7 @@
point.is_used = '1'
AND point.is_delete = '0'
AND point.region_code = 'BKZ01'
ORDER BY out_empty_seq
</select>
<select id="queryLikeOrderRow" resultType="com.alibaba.fastjson.JSONObject">

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtCoolregionioMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtCutpointivtMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtDeliverypointivtMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtEmptytubeivtMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtEmptyvehiclerecordMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtHotpointivtMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtSbpointivtMapper">
</mapper>

View File

@@ -1,6 +0,0 @@
<?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.b_lms.sch.point.dao.mapper.StIvtShaftivtMapper">
</mapper>

View File

@@ -37,7 +37,7 @@ public interface IbstIvtPackageinfoivtService extends IService<BstIvtPackageinfo
* @param ivtStatus 库存状态
* @return List<BstIvtPackageinfoivt>
*/
List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode);
List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String taskType);

View File

@@ -1,7 +1,9 @@
package org.nl.b_lms.sch.point.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper;
@@ -9,6 +11,7 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import cn.hutool.core.date.DateUtil;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -56,7 +59,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
@Override
public List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode) {
public List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = bstIvtPackageinfoivtMapper
.selectList(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
@@ -64,27 +67,61 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus)
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
Set<String> pointIds = packageinfoivtList.stream().map(BstIvtPackageinfoivt::getPoint_code).collect(Collectors.toSet());
if (CollectionUtils.isNotEmpty(pointIds)) {
if (pointCode.equals("1")) {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//起点未完成任务
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.and(
r -> r.in(SchBaseTask::getPoint_code1, pointIds)
));
return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code1).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList());
} else {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//终点未完成任务
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.and(
r -> r.in(SchBaseTask::getPoint_code2, pointIds)
));
return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList());
}
} else {
if (CollectionUtils.isEmpty(pointIds)) {
return null;
}
if (pointCode.equals("1")) {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//起点未完成任务
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType)
.and(
r -> r.in(SchBaseTask::getPoint_code1, pointIds)
));
return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code1).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList());
} else {
List<SchBaseTask> taskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
//终点未完成任务
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(taskType != null && !taskType.equals(""), SchBaseTask::getTask_type, taskType)
.and(
r -> r.in(SchBaseTask::getPoint_code2, pointIds)
));
return packageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList());
}
}
public List<BstIvtPackageinfoivt> checkEndPointTask1(String ivtType, String ivtStatus, String pointCode, String taskType) {
List<BstIvtPackageinfoivt> packageinfoivtList = bstIvtPackageinfoivtMapper
.selectList(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType)
.eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus)
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
Set<String> pointIds = packageinfoivtList.stream()
.map(BstIvtPackageinfoivt::getPoint_code)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(pointIds)) {
return null;
}
//1起点2终点
SFunction<SchBaseTask, String> pointCodeType = pointCode.equals("1") ? SchBaseTask::getPoint_code1 : SchBaseTask::getPoint_code2;
// 查询未完成任务
LambdaQueryWrapper<SchBaseTask> taskQueryWrapper = new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.in(pointCodeType, pointIds);
if (taskType != null && !taskType.isEmpty()) {
taskQueryWrapper.eq(SchBaseTask::getTask_type, taskType);
}
List<SchBaseTask> taskList = taskService.list(taskQueryWrapper);
Set<String> taskPointCodes = taskList.stream()
.map(pointCodeType)
.collect(Collectors.toSet());
// 过滤未完成任务的任务
return packageinfoivtList.stream()
.filter(packageInfo -> !taskPointCodes.contains(packageInfo.getPoint_code()))
.collect(Collectors.toList());
}

View File

@@ -155,7 +155,7 @@ public class TwoInEmpTask extends AbstractAcsTask {
throw new BadRequestException("托盘号不能为空!");
}
if (StrUtil.isBlank(form.getString("vehicle_type"))) {
if (StrUtil.isBlank(form.getString("containerType"))) {
throw new BadRequestException("托盘类型不能为空!");
}

View File

@@ -89,10 +89,10 @@ public class TwoLashTask extends AbstractAcsTask {
interaction_json.put("length",dao.get(0).getBox_length());
interaction_json.put("weight",dao.get(0).getBox_width());
interaction_json.put("height",dao.get(0).getBox_high());
interaction_json.put("template","4");
interaction_json.put("template",dao.get(0).getLash_num());
//第二次捆扎次数
interaction_json.put("bindingTimes","1");
interaction_json.put("isBinding", IOSEnum.IS_SEND.code(""));
interaction_json.put("bindingTimes","3");
interaction_json.put("isBinding", IOSEnum.IS_SEND.code(""));
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(json.getString("task_id"))

View File

@@ -170,7 +170,7 @@ public class TwoOutTask extends AbstractAcsTask {
JSONObject jsonParam = new JSONObject();
jsonParam.put("device_code",jsonTask.getString("point_code2"));
jsonParam.put("vehicle_code",jsonTask.getString("vehicle_code"));
jsonParam.put("vehicle_type",jsonTask.getString("vehicle_type"));
jsonParam.put("vehicle_type",jsonTask.getJSONObject("request_param").getString("containerType"));
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
bean1.createHeapTask(jsonParam);

View File

@@ -29,6 +29,7 @@ import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -52,6 +53,8 @@ public class DjqTask extends AbstractAcsTask {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private MzhcwTask mzhcwTask;
@Resource
private TaskQueueManager taskQueueManager;
private final String THIS_CLASS = DjqTask.class.getName();
@@ -134,8 +137,8 @@ public class DjqTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -167,6 +170,7 @@ public class DjqTask extends AbstractAcsTask {
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -194,7 +198,7 @@ public class DjqTask extends AbstractAcsTask {
public void sendDjqToZxq(SchBaseTask schBaseTask) {
//装箱区有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2");
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2", "");
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
.collect(Collectors.groupingBy(
@@ -202,24 +206,23 @@ public class DjqTask extends AbstractAcsTask {
LinkedHashMap::new,
Collectors.mapping(BstIvtPackageinfoivt::getPoint_name, Collectors.toList())
));
TaskQueueManager taskQueueManager =new TaskQueueManager();
taskQueueManager.processTasks(ivtList);
}
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("满轴缓存位 -> 待检区强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -227,7 +230,7 @@ public class DjqTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("满轴缓存位 -> 待检区取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -122,8 +122,8 @@ public class GzqTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -155,6 +155,7 @@ public class GzqTask extends AbstractAcsTask {
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -180,21 +181,20 @@ public class GzqTask extends AbstractAcsTask {
return task.getTask_id();
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("满轴缓存位 -> 管制区强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -202,7 +202,7 @@ public class GzqTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("满轴缓存位 -> 管制区取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -126,8 +126,8 @@ public class KzjhcwTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -159,6 +159,7 @@ public class KzjhcwTask extends AbstractAcsTask {
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -184,20 +185,19 @@ public class KzjhcwTask extends AbstractAcsTask {
return task.getTask_id();
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("待检区或管制区 -> 空载具缓存位强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -205,7 +205,7 @@ public class KzjhcwTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("待检区或管制区 -> 空载具缓存位取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
@@ -217,7 +217,7 @@ public class KzjhcwTask extends AbstractAcsTask {
*/
public void toKzjHcw1(String pointCode) {
//存在空载具缓存位无空载具的点位
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2");
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2","");
String pointCode1 = null;
JSONObject toKzjHcwTask = new JSONObject();
if (StringUtils.isNotBlank(pointCode)) {
@@ -255,20 +255,20 @@ public class KzjhcwTask extends AbstractAcsTask {
public void toKzjHcw(String pointCode) {
//存在空载具缓存位无空载具的点位
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2");
List<BstIvtPackageinfoivt> kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2","");
String pointCode1 = null;
JSONObject toKzjHcwTask = new JSONObject();
if (StringUtils.isNotBlank(pointCode)) {
pointCode1 = pointCode;
} else {
//查询装箱区有空载具
List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1");
List<BstIvtPackageinfoivt> zxqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1","");
//装箱区有空载具
if (CollectionUtils.isNotEmpty(zxqPointList)) {
pointCode1 = zxqPointList.get(0).getPoint_code();
} else {
//待检区有空载具
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1");
List<BstIvtPackageinfoivt> djqPointList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "1","");
pointCode1 = djqPointList.get(0).getPoint_code();
}
}

View File

@@ -75,7 +75,6 @@ public class MzhcwTask extends AbstractAcsTask {
private SsxDjwTask ssxDjwTask;
@Override
public List<AcsTaskDto> addTask() {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -158,7 +157,7 @@ public class MzhcwTask extends AbstractAcsTask {
throw new BadRequestException("任务已执行不能取消");
}
// 更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -314,6 +313,7 @@ public class MzhcwTask extends AbstractAcsTask {
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -339,20 +339,19 @@ public class MzhcwTask extends AbstractAcsTask {
return task.getTask_id();
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("输送线点位 -> 满轴缓存位强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -360,7 +359,7 @@ public class MzhcwTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -99,8 +99,8 @@ public class SendKzjTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -131,7 +131,8 @@ public class SendKzjTask extends AbstractAcsTask {
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -159,19 +160,17 @@ public class SendKzjTask extends AbstractAcsTask {
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("装箱区->待检区或管制区送空载具强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -179,7 +178,7 @@ public class SendKzjTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("装箱区->待检区或管制区送空载具取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -117,8 +117,9 @@ public class SsxDjwTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -150,6 +151,7 @@ public class SsxDjwTask extends AbstractAcsTask {
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -176,17 +178,14 @@ public class SsxDjwTask extends AbstractAcsTask {
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false) ;
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("空载具缓存位 -> 输送线强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
@@ -196,7 +195,7 @@ public class SsxDjwTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -120,9 +120,9 @@ public class ZxDjwTask extends AbstractAcsTask {
//1.更改任务状态为完成
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
//2.改变起点点位状态
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("载具")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1()));
//更新库存记录
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
packageinfoivtService.update(new UpdateWrapper<BstIvtPackageinfoivt>().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code2()));
//3.更改子卷信息状态为包装1创建装箱区->装箱位桁架任务的时候判断是否最后一个子卷相同木箱号如果生成状态0个数等于1且子卷号等于当前载具号就是最后一个子卷
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
.getOne(new LambdaUpdateWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false);
@@ -131,7 +131,10 @@ public class ZxDjwTask extends AbstractAcsTask {
//4.查询同一个木箱号如果生成状态0个数等于0更新该木箱信息表为包装1
List<PdmBiSubpackagerelation> packagerelationList = subpackageRelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, schBaseTask.getVehicle_code2()).eq(PdmBiSubpackagerelation::getStatus, "0"));
if (CollectionUtils.isEmpty(packagerelationList)) {
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).eq(BstIvtBoxinfo::getIs_packing, null));
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("找不到该木箱信息!");
}
bstIvtBoxinfo.setIs_packing("1");
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo);
}
@@ -143,9 +146,10 @@ public class ZxDjwTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!");
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
@@ -153,9 +157,6 @@ public class ZxDjwTask extends AbstractAcsTask {
}
@Override
public String createTask(JSONObject form) {
Assert.notNull(form, "请求参数不能为空");
@@ -179,9 +180,10 @@ public class ZxDjwTask extends AbstractAcsTask {
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.point_code1(pointCode1)
.point_code2(pointCode2)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code3(form.getString("point_code3"))
.point_code4(form.getString("point_code4"))
.request_param(form.getString("request_param"))
@@ -208,17 +210,14 @@ public class ZxDjwTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("装箱区 -> 装箱对接位强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
@@ -228,10 +227,11 @@ public class ZxDjwTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
schBaseTask.setRemark("任务被强制取消,不执行任何逻辑!");
taskService.update(schBaseTask);
}
}

View File

@@ -78,55 +78,6 @@ public class ZxqTask extends AbstractAcsTask {
private final String THIS_CLASS = ZxqTask.class.getName();
public SchBaseTask dynamicCreateTask(JSONObject form) {
Assert.notNull(form, "请求参数不能为空");
String taskType = form.getString("task_type");
if (StrUtil.isBlank(taskType)) {
throw new BadRequestException("业务类型不能为空");
}
String vehicleCode = form.getString("vehicle_code");
if (StrUtil.isBlank(vehicleCode)) {
throw new BadRequestException("载具号不能为空");
}
String pointCode1 = form.getString("point_code1");
if (StrUtil.isBlank(pointCode1)) {
throw new BadRequestException("起点不能为空");
}
String pointCode2 = form.getString("point_code2");
if (StrUtil.isBlank(pointCode2)) {
throw new BadRequestException("下一点不能为空");
}
//是否立即下发
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
.point_code4(form.getString("point_code4"))
.task_id(org.nl.common.utils.IdUtil.getStringId())
.task_code(org.nl.common.utils.IdUtil.getStringId())
.handle_class(THIS_CLASS)
.create_id(SecurityUtils.getCurrentUserId())
.create_name(SecurityUtils.getCurrentUsername())
.create_time(DateUtil.now())
.is_send(isSend ? "1" : "0")
.request_param(form.getString("request_param"))
.acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type"))
.task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status"))
.product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area"))
.build();
SchBaseTask task = new SchBaseTask();
BeanUtils.copyProperties(schBaseTaskVo, task);
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
}
return task;
}
@Override
public List<AcsTaskDto> addTask() {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -190,8 +141,8 @@ public class ZxqTask extends AbstractAcsTask {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
//更新任务表删除字段
schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
}
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
@@ -237,9 +188,9 @@ public class ZxqTask extends AbstractAcsTask {
//扩展参数
JSONObject param = new JSONObject();
//获取木箱信息,未包装的木箱
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).eq(BstIvtBoxinfo::getIs_packing, null));
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, schBaseTask.getVehicle_code2()).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("找不到木箱信息!");
throw new BadRequestException("找不到木箱信息!");
}
//获取木箱高度等级
String height = "";
@@ -296,14 +247,15 @@ public class ZxqTask extends AbstractAcsTask {
throw new BadRequestException("起点不能为空");
}
String pointCode2 = form.getString("point_code2");
if (StrUtil.isBlank(pointCode2)) {
throw new BadRequestException("下一点不能为空");
}
// if (StrUtil.isBlank(pointCode2)) {
// throw new BadRequestException("下一点不能为空");
// }
//是否立即下发
boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send"));
SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder()
.task_type(taskType)
.vehicle_code(vehicleCode)
.vehicle_code2(form.getString("vehicle_code2"))
.point_code1(pointCode1)
.point_code2(pointCode2)
.point_code3(form.getString("point_code3"))
@@ -331,17 +283,14 @@ public class ZxqTask extends AbstractAcsTask {
}
@Override
@Transactional
public void forceFinish(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskId), false);
if (schBaseTask == null) {
throw new BadRequestException("待检区 -> 装箱区强制完成接口任务号为空!");
}
schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());
taskService.update(schBaseTask);
updateTaskStatus(JSONObject.parseObject(JSON.toJSONString(schBaseTask)), TaskStatusEnum.FINISHED.getCode());
}
@Override
@@ -351,7 +300,7 @@ public class ZxqTask extends AbstractAcsTask {
if (schBaseTask == null) {
throw new BadRequestException("待检区 -> 装箱区取消接口任务号为空!");
}
schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消"));
schBaseTask.setTask_status(TaskStatusEnum.CANCEL.getCode());
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId());
schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName());

View File

@@ -34,8 +34,8 @@ public class AutoSendMzToDjq {
void sendMzqToDjq() {
JSONObject toDjqTask =new JSONObject();
//满轴有子卷且没有未完成任务
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1");
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2");
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1","");
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2","");
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)&&CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code());

View File

@@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.springframework.stereotype.Component;
@@ -28,17 +27,20 @@ public class AutoSendToZxq {
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private ZxqTask zxqTask;
@Resource
private TaskQueueManager taskQueueManager;
@Resource
private TaskQueue taskQueue;
//待检区->装箱区agv自动搬运任务
public void run() {
this.sendDjqToZxq();
}
void sendDjqToZxq() {
void sendDjqToZxq1() {
JSONObject toDjqTask =new JSONObject();
//待检区有子卷且没有未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1");
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2");
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1","");
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""), "2","");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)&&CollectionUtils.isNotEmpty(zxqPackageinfoivtList)) {
toDjqTask.put("vehicle_code", djqPackageinfoivtList.get(0).getContainer_name());
toDjqTask.put("point_code1", djqPackageinfoivtList.get(0).getPoint_code());
@@ -49,18 +51,21 @@ public class AutoSendToZxq {
}
void sendDjqToZxq1() {
//装箱区有空位
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2");
public void sendDjqToZxq() {
//装箱区有空位,去待检区消费合格品子卷
List<BstIvtPackageinfoivt> bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(
PackageInfoIvtEnum.POINT_STATUS.code("装箱区"),
PackageInfoIvtEnum.IVT_STATUS.code(""),"2","");
if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) {
Map<String, List<String>> ivtList = bstIvtPackageinfoivtList.stream()
.collect(Collectors.groupingBy(
BstIvtPackageinfoivt::getPoint_code,
BstIvtPackageinfoivt::getBlock,
LinkedHashMap::new,
Collectors.mapping(BstIvtPackageinfoivt::getPoint_name, Collectors.toList())
Collectors.mapping(BstIvtPackageinfoivt::getPoint_code, Collectors.toList())
));
TaskQueueManager taskQueueManager =new TaskQueueManager();
taskQueueManager.processTasks(ivtList);
//taskQueueManager.processTasks(ivtList);
taskQueue.processTasks(ivtList);
}
}
}

View File

@@ -36,12 +36,12 @@ public class AutoSendVehicleToDjq {
String pointCode1=null;
String pointCode2;
//待检区有空位
List<BstIvtPackageinfoivt> djqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2");
List<BstIvtPackageinfoivt> djqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2","");
if (CollectionUtils.isNotEmpty(djqList)) {
pointCode2=djqList.get(0).getPoint_code();
}else{
//管制区有空位
List<BstIvtPackageinfoivt> zxqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2");
List<BstIvtPackageinfoivt> zxqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""),"2","");
pointCode2=zxqList.get(0).getPoint_code();
}
//查询装箱区有空载具

View File

@@ -58,8 +58,8 @@ public class AutoSendZxToDjw {
}
void sendZxToDjw() {
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1");
List<BstIvtPackageinfoivt> zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "2");
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1","");
List<BstIvtPackageinfoivt> zxwPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱位"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), "2",PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位"));
if (CollectionUtils.isNotEmpty(zxqPackageinfoivtList) && CollectionUtils.isNotEmpty(zxwPackageinfoivtList)) {
//3.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位桁架任务,否,什么都不做
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService
@@ -67,8 +67,9 @@ public class AutoSendZxToDjw {
if (pdmBiSubpackagerelation == null) {
throw new BadRequestException("装箱位木箱号无对应子卷包装关系的木箱号!");
}
String containerName = pdmBiSubpackagerelation.getContainer_name();
//装箱位上的木箱号
String boxNo = zxwPackageinfoivtList.get(0).getContainer_name();
String containerName = pdmBiSubpackagerelation.getContainer_name();
List<BstIvtPackageinfoivt> zxqPoint = zxqPackageinfoivtList.stream().filter(r -> r.getContainer_name().equals(containerName)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(zxqPoint)) {
throw new BadRequestException("装箱区暂无该子卷信息");
@@ -84,6 +85,7 @@ public class AutoSendZxToDjw {
jo.put("point_code1", zxqPoint.get(0).getPoint_code());
jo.put("point_code2", zxwPackageinfoivtList.get(0).getPoint_code());
jo.put("vehicle_code", pdmBiSubpackagerelation.getContainer_name());
jo.put("vehicle_code2", boxNo);
jo.put("is_send", "1");
//获取纸管长度
String containerLength = productionPlanList.get(0).getPaper_tube_or_FRP().equals("1") ? productionPlanList.get(0).getPaper_tube_description() : productionPlanList.get(0).getFRP_description();
@@ -100,8 +102,7 @@ public class AutoSendZxToDjw {
//扩展参数
JSONObject param = new JSONObject();
//获取木箱信息,未包装的木箱
// BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no,boxNo).eq(BstIvtBoxinfo::getIs_packing, null));
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, boxNo));
BstIvtBoxinfo bstIvtBoxinfo = bstIvtBoxinfoMapper.selectOne(new LambdaQueryWrapper<BstIvtBoxinfo>().eq(BstIvtBoxinfo::getBox_no, boxNo).ne(BstIvtBoxinfo::getIs_packing, "1"));
if (bstIvtBoxinfo == null) {
throw new BadRequestException("找不到木箱信息!");
}

View File

@@ -0,0 +1,50 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.nl.modules.common.utils.RedisUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
@Slf4j
public class TaskQueue {
@Resource
private IschBaseTaskService taskService;
private final RedisUtils redisUtils;
private static final String TASK_QUEUE_PREFIX = "taskQueue:";
public void addTasksToQueue(String groupId, List<SchBaseTask> tasks) {
tasks.forEach(task -> redisUtils.pushToList(TASK_QUEUE_PREFIX + groupId, task));
}
public void processTasks(Map<String, List<String>> tasksToProcessPerQueue) {
tasksToProcessPerQueue.forEach((groupId, points) -> {
int taskCount = points.size();
for (int i = 0; i < taskCount; i++) {
SchBaseTask task = (SchBaseTask) redisUtils.popFromList(TASK_QUEUE_PREFIX + groupId, SchBaseTask.class);
if (task != null) {
String pointCode = points.get(i);
executeTask(task, pointCode);
}
}
});
}
private void executeTask(SchBaseTask task, String pointCode) {
if (task != null) {
task.setPoint_code2(pointCode);
taskService.updateById(task);
ZxqTask taskBean = new ZxqTask();
taskBean.immediateNotifyAcs(null);
}
}
}

View File

@@ -1,17 +1,14 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
@Service()
@Service
@RequiredArgsConstructor
@Slf4j
public class TaskQueueManager {
@@ -25,22 +22,15 @@ public class TaskQueueManager {
taskGroupQueues = new HashMap<>();
}
public void addTasksToQueue(String groupIdentifier, List<SchBaseTask> tasks) {
if (!taskGroupQueues.containsKey(groupIdentifier)) {
taskGroupQueues.put(groupIdentifier, new LinkedList<>());
public void addTasksToQueue(String groupId, List<SchBaseTask> tasks) {
if (!taskGroupQueues.containsKey(groupId)) {
taskGroupQueues.put(groupId, new LinkedList<>());
}
Queue<SchBaseTask> queue = taskGroupQueues.get(groupIdentifier);
Queue<SchBaseTask> queue = taskGroupQueues.get(groupId);
queue.addAll(tasks);
}
public void processTasks(Map<String, List<String>> tasksToProcessPerQueue) {
//队列剩余数量
// int tasksCount = taskQueueManager.taskGroupQueues.getOrDefault("Group1", new LinkedList<>()).size();
//队列为空
// boolean isEmpty = taskQueueManager.taskGroupQueues.values().stream().allMatch(Queue::isEmpty);
for (Map.Entry<String, List<String>> entry : tasksToProcessPerQueue.entrySet()) {
String groupId = entry.getKey();
int taskCount = entry.getValue().size();
@@ -50,26 +40,20 @@ public class TaskQueueManager {
}
int getCount = 0;
while (!queue.isEmpty() && getCount < taskCount) {
String PointCode = entry.getValue().get(getCount);
//从队列中移除任务
String pointCode = entry.getValue().get(getCount);
SchBaseTask task = queue.poll();
executeTask(task, PointCode);
executeTask(task, pointCode);
getCount++;
}
}
}
// 执行任务
private void executeTask(SchBaseTask task, String pointCode) {
if (task != null) {
UpdateWrapper<SchBaseTask> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("point_code2", pointCode);
taskService.update(task, updateWrapper);
task.setPoint_code2(pointCode);
taskService.updateById(task);
ZxqTask taskBean = new ZxqTask();
//任务下发
taskBean.immediateNotifyAcs(null);
}
}
}

View File

@@ -400,9 +400,9 @@ public class SlitterServiceImpl implements SlitterService {
if (currentUpPlan != null && currentDownPlan != null) {
// 双轴任务 下双
taskParam.put("point_code1", device.getUp_point_code());
taskParam.put("point_code2", emptyPoint.getTruss_point_code2());
taskParam.put("point_code2", emptyPoint.getTruss_point_code1());
taskParam.put("point_code3", device.getDown_point_code());
taskParam.put("point_code4", emptyPoint.getTruss_point_code1());
taskParam.put("point_code4", emptyPoint.getTruss_point_code2());
taskParam.put("truss_type", "1");
taskParam.put("empty_site", "0");
} else {

View File

@@ -96,12 +96,16 @@ public enum IOSEnum {
// 区域
PRODUCT_AREA(MapOf.of("BLK", "BLK")),
// 入库 36 40 44
// 出库 38 42 46
// 出库堆垛机点位
OUT_POINT(MapOf.of("1","CK2036", "2","CK2038", "3","CK2040", "4","CK2042" ,"5","CK2044",
OUT_POINT(MapOf.of("1","CK2038", "2","CK2038", "3","CK2042", "4","CK2042" ,"5","CK2046",
"6","CK2046", "7","7", "8","8", "9","9", "10","10")),
// 行架点位
OUT_HANGER(MapOf.of("行架位1", "CK2026","行架位2", "CK2027")),
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")),
//acs申请任务
ACSTOLMS_TYPE(MapOf.of("成品入库任务", "1","空盘入库","2","空盘出库","3","异常处理位","4","木箱入库","5","退货入库","6","贴标","1","捆扎","2")),

View File

@@ -1276,7 +1276,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonTaskParam.put("point_code1", start_device_code);
jsonTaskParam.put("point_code2", end_device_code);
jsonTaskParam.put("vehicle_code", json.getString("storagevehicle_code"));
jsonTaskParam.put("vehicle_type", json.getString("storagevehicle_type"));
jsonTaskParam.put("containerType", json.getString("storagevehicle_type"));
if (ObjectUtil.isNotEmpty(jsonExt)) {
jsonTaskParam.put("vehicle_code2", jsonExt.getString("storagevehicle_code"));
}

View File

@@ -205,28 +205,28 @@ public class InBoxManageServiceImpl implements InBoxManageService {
if (boxDao == null) {
throw new BadRequestException("木箱不存在!");
}
JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVehicle)) {
throw new BadRequestException("载具不存在!");
}
JSONObject ext_jo = veExtTab.query("storagevehicle_code = '"+jsonVehicle.getString("storagevehicle_code")+"'").uniqueResult(0);
if (ObjectUtil.isEmpty(ext_jo)) {
JSONObject jsonVeExt = new JSONObject();
jsonVeExt.put("storagevehicleext_id", IdUtil.getLongId());
jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id"));
jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code"));
jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type"));
jsonVeExt.put("pcsn", whereJson.getString("box_no"));
jsonVeExt.put("device_uuid", IdUtil.getLongId());
jsonVeExt.put("update_time", DateUtil.now());
veExtTab.insert(jsonVeExt);
}else {
ext_jo.put("pcsn", whereJson.getString("box_no"));
ext_jo.put("device_uuid", IdUtil.getLongId());
ext_jo.put("update_time", DateUtil.now());
veExtTab.update(ext_jo);
}
// JSONObject jsonVehicle = vehicleTab.query("storagevehicle_code = '" + whereJson.getString("vehicle_code") + "'")
// .uniqueResult(0);
// if (ObjectUtil.isEmpty(jsonVehicle)) {
// throw new BadRequestException("载具不存在!");
// }
// JSONObject ext_jo = veExtTab.query("storagevehicle_code = '"+jsonVehicle.getString("storagevehicle_code")+"'").uniqueResult(0);
// if (ObjectUtil.isEmpty(ext_jo)) {
// JSONObject jsonVeExt = new JSONObject();
// jsonVeExt.put("storagevehicleext_id", IdUtil.getLongId());
// jsonVeExt.put("storagevehicle_id", jsonVehicle.getLongValue("storagevehicle_id"));
// jsonVeExt.put("storagevehicle_code", jsonVehicle.getString("storagevehicle_code"));
// jsonVeExt.put("storagevehicle_type", jsonVehicle.getString("storagevehicle_type"));
// jsonVeExt.put("pcsn", whereJson.getString("box_no"));
// jsonVeExt.put("device_uuid", IdUtil.getLongId());
// jsonVeExt.put("update_time", DateUtil.now());
// veExtTab.insert(jsonVeExt);
// }else {
// ext_jo.put("pcsn", whereJson.getString("box_no"));
// ext_jo.put("device_uuid", IdUtil.getLongId());
// ext_jo.put("update_time", DateUtil.now());
// veExtTab.update(ext_jo);
// }
// 下发桁架任务

View File

@@ -215,7 +215,9 @@ public class InBussManageServiceImpl implements InBussManageService {
}
List<String> pcsnList = Arrays.asList(material_barcode.split(","));
// 查询子卷包装关系
// List<JSONObject> subList = subTab.query("container_name ='A1262210272905A1' and status in ('0','1')")
// List<JSONObject> subList = subTab.query("container_name ='B2512402242302B1A1' and status in ('0','1')")
// .getResultJSONArray(0).toJavaList(JSONObject.class);
// List<JSONObject> subList = subTab.query("container_name ='B2512402242302B1A1' and status in ('0','1')")
// .getResultJSONArray(0).toJavaList(JSONObject.class);
List<JSONObject> subList = subTab.query("container_name in ('" + String.join("','", pcsnList) + "') and status in ('0','1')")
.getResultJSONArray(0).toJavaList(JSONObject.class);

View File

@@ -88,7 +88,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
jsonTaskParam.put("start_device_code", whereJson.getString("device_code"));
jsonTaskParam.put("next_device_code", jsonAttr.getString("struct_code"));
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type"));
jsonTaskParam.put("containerType", whereJson.getString("vehicle_type"));
JSONObject param = new JSONObject();
param.put("containerType", whereJson.getString("vehicle_type"));
//0表示为空托盘

View File

@@ -216,7 +216,7 @@ public class LashManageServiceImpl implements LashManageService {
// 创建任务并下发
JSONObject jsonTaskParam = new JSONObject();
jsonTaskParam.put("task_type", "010720");
jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type"));
whereJson.put("containerType", whereJson.getString("vehicle_type"));
jsonTaskParam.put("point_code1", whereJson.getString("device_code"));
jsonTaskParam.put("point_code2", next_device_code);
jsonTaskParam.put("vehicle_code", whereJson.getString("vehicle_code"));
@@ -246,17 +246,17 @@ public class LashManageServiceImpl implements LashManageService {
result.put("width", boxDao.getBox_width());
result.put("height", boxDao.getBox_high());
result.put("case", boxDao.getMaterial_code());
//result.put("isBinding", IOSEnum.IS_SEND.code("否"));
result.put("isBinding", IOSEnum.IS_SEND.code(""));
result.put("isLabeling", IOSEnum.IS_SEND.code(""));
result.put("labelingTemplate", boxDao.getLash_num());
//捆扎模板
result.put("bindingTemplate", boxDao.getLash_num());
result.put("printDevice", "1");
result.put("printQty", "1");
//第一次捆扎次数
result.put("bundleTimes", "1");
result.put("bundleTimes", "2");
return result;
}

View File

@@ -161,6 +161,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
)
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(likePcsnBoxList)) {
throw new BadRequestException("库存不足!");
}

View File

@@ -93,7 +93,7 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
jsonTaskParam.put("start_device_code", jsonAttr.getString("struct_code"));
jsonTaskParam.put("next_device_code", whereJson.getString("device_code"));
jsonTaskParam.put("vehicle_code", jsonAttr.getString("storagevehicle_code"));
jsonTaskParam.put("vehicle_type", whereJson.getString("vehicle_type"));
jsonTaskParam.put("containerType", whereJson.getString("vehicle_type"));
JSONObject param = new JSONObject();
param.put("containerType", whereJson.getString("vehicle_type"));
jsonTaskParam.put("request_param", param.toString());

View File

@@ -15,6 +15,8 @@
*/
package org.nl.modules.common.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.slf4j.Logger;
@@ -42,6 +44,11 @@ public class RedisUtils {
@Value("${jwt.online-key}")
private String onlineKey;
private final ObjectMapper objectMapper = new ObjectMapper();
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@@ -708,4 +715,25 @@ public class RedisUtils {
log.debug("缓存删除数量:" + count + "");
log.debug("--------------------------------------------");
}
public void pushToList(String key, Object value) {
try {
String valueJson = objectMapper.writeValueAsString(value);
redisTemplate.opsForList().rightPush(key, valueJson);
} catch (JsonProcessingException e) {
log.error("序列化对象出错:", e);
}
}
public Object popFromList(String key, Class<?> valueType) {
String valueJson = (String) redisTemplate.opsForList().leftPop(key);
if (valueJson != null) {
try {
return objectMapper.readValue(valueJson, valueType);
} catch (JsonProcessingException e) {
log.error("反序列化对象出错:", e);
}
}
return null;
}
}

View File

@@ -1827,6 +1827,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
jo.put("point_code4", whereJson.getString("device_code"));
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
} else {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = taskService.list(new LambdaUpdateWrapper<SchBaseTask>()

View File

@@ -8,7 +8,8 @@ public enum TaskStatusEnum {
START_AND_POINT("04", "起点终点确认"),
ISSUE("05", "下发"),
EXECUTING("06", "执行中"),
FINISHED("07", "完成");
FINISHED("07", "完成"),
CANCEL("08", "取消");
private String name;
private String code;

View File

@@ -43,6 +43,7 @@
<!-- </el-table-column>-->
<el-table-column show-overflow-tooltip prop="box_group" label="木箱组" align="center" />
<el-table-column show-overflow-tooltip prop="quanlity_in_box" label="箱内子卷数" align="center" />
<el-table-column show-overflow-tooltip prop="package_box_sn" label="木箱号" align="center" />
<el-table-column show-overflow-tooltip prop="container_name" label="子卷号" align="center" />
<el-table-column show-overflow-tooltip prop="sap_pcsn" label="sap批次" align="center" />

View File

@@ -66,7 +66,7 @@ export default {
url: 'api/Materialbase',
idField: 'material_id',
sort: 'material_id,desc',
query: { search: '木箱', material_id: '' },
query: { search: 'MX', material_id: '' },
crudMethod: { ...crudMaterattr }
})
},