add 出入库功能评审

This commit is contained in:
ls
2025-08-13 16:15:34 +08:00
parent dea92901bd
commit 4b4d915b95
33 changed files with 287 additions and 319 deletions

View File

@@ -37,7 +37,7 @@ public enum BoxStackEnum {
STOCK_UP_STATUS(MapOf.of("未开始", "1", "执行中", "2", "完成", "3")),
//木箱库区域
POINT_STATUS(MapOf.of("密集区", "1", "零散区", "2", "缓存区", "3", "等待区", "4"));
POINT_STATUS(MapOf.of("密集区", "1", "零散区", "2", "缓存区", "3", "等待区", "4","对接区", "5"));
private Map<String, String> code;

View File

@@ -58,7 +58,7 @@
where bs.point_status = #{point_status}
and bs.current_layer_count = 0
and bs.box_spec is null
and (bs.box_spec is null or bs.box_spec = "" )
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[<]]> '07'
AND (t.point_code2 = bs.stack_code))
@@ -82,7 +82,7 @@
select * from bst_ivt_boxstack bs
WHERE
bs.current_layer_coun= 0
and bs.box_spec is null
and (bs.box_spec is null or bs.box_spec = "" )
<if test="param.point_status != null and param.point_status != ''">
AND bs.point_status = #{param.point_status}
</if>

View File

@@ -257,19 +257,16 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
if (ObjectUtil.isEmpty(sub_list)) {
throw new BadRequestException("未查询到子卷包装信息!");
}
String material_barcode = "";
List<String> subs = new ArrayList<>();
List<String> material_barcodes = new ArrayList<>();
for (int i = 0; i < sub_list.size(); i++) {
PdmBiSubpackagerelation sub_jo = sub_list.get(i);
String containerName = sub_jo.getContainer_name();
subs.add(containerName);
PdmBiSubpackagerelation pdmBiSubpackagerelation = sub_list.get(i);
if (i == 0) {
material_barcode = containerName;
material_barcodes.add(pdmBiSubpackagerelation.getContainer_name());
} else {
material_barcode += "," + containerName;
material_barcodes.add(pdmBiSubpackagerelation.getContainer_name());
}
}
whereJson.put("material_barcode", material_barcode);
if (StringUtils.isBlank(sub_list.get(0).getPackage_box_sn())) {
throw new BadRequestException("木箱号不能为空!");
}
@@ -306,7 +303,7 @@ public class VehicleTwoServiceImpl implements VehicleTwoService {
}
ext_jo.setPcsn(whereJson.getString("box_no"));
mdPbStoragevehicleextService.updateById(ext_jo);
whereJson.put("material_barcode", material_barcodes);
inBussManageService.inTask(whereJson);
JSONObject result = new JSONObject();
result.put("message", "入库成功!");

View File

@@ -486,16 +486,18 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
.eq("point_status", BoxStackEnum.POINT_STATUS.code("对接区"))
.orderByAsc("update_time"));
if (CollUtil.isEmpty(bstIvtBoxstacks)) {
List<BstIvtBoxstack> bstIvtBoxstacks1 = boxstackMapper.selectList(new QueryWrapper<BstIvtBoxstack>().eq("box_spec", whereJson.getString("checked")).eq("point_status", BoxStackEnum.POINT_STATUS.code("缓存区")));
// 查询缓存区木箱,先送数量少的
List<BstIvtBoxstack> bstIvtBoxstacks1 = boxstackMapper.selectList(new QueryWrapper<BstIvtBoxstack>().eq("box_spec", whereJson.getString("checked"))
.eq("point_status", BoxStackEnum.POINT_STATUS.code("缓存区")).orderByAsc("current_layer_count"));
if (CollUtil.isEmpty(bstIvtBoxstacks1)) {
throw new BadRequestException("缓存区无可用木箱,请新建备货计划");
}
//查看是否有相同物料类型的任务,如果有合并任务组,三个为一组
//查看是否有相同物料类型的任务,如果有合并任务组,达到当前任务层数时生成任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getTask_type, BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位"))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode())
.eq(SchBaseTask::getMaterial_code, whereJson.getString("checked")));
if (!taskList.isEmpty()) {
List<SchBaseTask> taskSort = taskList.stream().filter(task -> task.getSort_seq().compareTo(BigDecimal.valueOf(3)) > 0).collect(Collectors.toList());
List<SchBaseTask> taskSort = taskList.stream().filter(task -> task.getSort_seq().compareTo(BigDecimal.valueOf(bstIvtBoxstacks1.get(0).getCurrent_layer_count())) == 0).collect(Collectors.toList());
if (CollUtil.isNotEmpty(taskSort)) {
SchBaseTask schBaseTask = taskSort.get(0);
schBaseTask.setSort_seq(schBaseTask.getSort_seq().add(BigDecimal.valueOf(1)));
@@ -571,6 +573,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位"));
taskParam.put("point_code1", bstIvtBoxstacks1.get(0).getStack_code());
taskParam.put("material_code", whereJson.getString("checked"));
taskParam.put("vehicle_code", bstIvtBoxstacks1.get(0).getBox_no());
taskParam.put("task_status", TaskStatusEnum.SURE_END.getCode());
mxOutTask.createTask(taskParam);
}
@@ -779,7 +782,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
jo.put("point_code1", item.getPoint_code());
jo.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
jo.put("date", now);
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
zxqTask.createTask(jo);
}
}

View File

@@ -3,6 +3,7 @@ package org.nl.b_lms.sch.point.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.nl.b_lms.sch.point.dao.SchBasePoint;
import java.util.List;
@@ -54,4 +55,7 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<SchBasePoint> selectList(@Param("param") JSONObject map);
List<SchBasePoint> selectDjwPoints(@Param("param") JSONObject map);
@Select("SELECT * FROM sch_base_point WHERE region_code = 'BLKCK' and is_used = '1'")
List<SchBasePoint> selectByReginCode();
}

View File

@@ -18,7 +18,6 @@
sch_base_point.is_used = '1'
AND sch_base_point.is_delete = '0'
AND sch_base_point.region_code = 'BKZ01'
GROUP BY sch_base_point.point_code
ORDER BY out_empty_seq
</select>

View File

@@ -598,6 +598,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
subpackagerelation.setJoint_type(slittingproductionplan.getJoint_type());
subpackagerelation.setMaterial_type(slittingproductionplan.getMaterial_type());
subpackagerelation.setBox_type(slittingproductionplan.getBox_code());
subpackagerelationService.save(subpackagerelation);
} else {
//更新入包装关系

View File

@@ -68,7 +68,7 @@ public class TwoInBoxTrussTask extends AbstractAcsTask {
.route_plan_code(getRoutePlanCode(task.getPoint_code2()))
.vehicle_code(task.getVehicle_code())
.priority(task.getPriority())
.class_type(IOSEnum.ACS_TYPE.code("木箱入库行架任务"))
.class_type(IOSEnum.ACS_TYPE.code("退货入库行架任务"))
.dtl_type(String.valueOf(dtl_type))
.interaction_json((JSONObject) JSONObject.parse(task.getRequest_param()))
.remark(task.getRemark())

View File

@@ -250,11 +250,11 @@ public class TwoOutTask extends AbstractAcsTask {
* request_param.put("DemandDate", DemandDate);
* request_param.put("bill_type", IOSEnum.OUT_TYPE.code("转单出库"));
*/
if (parse.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("转单出库")) || parse.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("换标出库"))) {
if (ObjectUtil.isNotEmpty(jsonTask.getRequest_param())) {
jsonParam.putAll(JSONObject.parseObject(jsonTask.getRequest_param()));
}
}
// if (parse.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("转单出库")) || parse.getString("bill_type").equals(IOSEnum.OUT_TYPE.code("换标出库"))) {
// if (ObjectUtil.isNotEmpty(jsonTask.getRequest_param())) {
// jsonParam.putAll(JSONObject.parseObject(jsonTask.getRequest_param()));
// }
// }
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
bean1.createHeapTask(jsonParam);
// 判断此任务组是否全部完成

View File

@@ -2,15 +2,25 @@ package org.nl.b_lms.sch.tasks.boxstack;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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 org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack;
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper;
import org.nl.b_lms.pdm.storagevehicleext.dao.MdPbStoragevehicleext;
import org.nl.b_lms.pdm.storagevehicleext.dao.mapper.MdPbStoragevehicleextMapper;
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.b_lms.storage_manage.md.dao.MdPdStorageVehicleInfo;
import org.nl.b_lms.storage_manage.md.dao.mapper.MdStorageVehicleInfoMapper;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.StringUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
@@ -39,6 +49,16 @@ public class BoxSSXTask extends AbstractAcsTask {
@Resource
private BstIvtBoxstackMapper boxstackMapper;
@Resource
private IschBaseTaskService taskService;
@Resource
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
@Resource
private MdStorageVehicleInfoMapper mdStorageVehicleInfoMapper;
@Override
public List<AcsTaskDto> addTask() {
/*
@@ -75,43 +95,72 @@ public class BoxSSXTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
// 任务表
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
// 更新任务的参数
JSONObject map = new JSONObject();
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);
/*
* 1-执行中, 2-完成 ,0-acs取消
*/
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_id, taskObj.getString("task_id"))
.set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentUsername())
.set(SchBaseTask::getUpdate_time, DateUtil.now());
// 执行中
if (status.equals(TaskStatusEnum.EXECUTING.getCode())) {
map.put("task_status", TaskStatusEnum.EXECUTING.getCode());
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode());
}
// 完成
if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
map.put("task_status", TaskStatusEnum.FINISHED.getCode());
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
//更新组盘信息
MdPdStorageVehicleInfo mdPdStorageVehicleInfo = mdStorageVehicleInfoMapper.selectOne(new QueryWrapper<MdPdStorageVehicleInfo>().eq("storagevehicle_code", taskObj.getString("vehicle_code2")));
if (ObjectUtil.isEmpty(mdPdStorageVehicleInfo)) {
throw new BadRequestException("载具不存在!");
}
MdPbStoragevehicleext mdPbStoragevehicleext = mdPbStoragevehicleextMapper.selectOne(new LambdaQueryWrapper<MdPbStoragevehicleext>().eq(MdPbStoragevehicleext::getStoragevehicle_code, mdPdStorageVehicleInfo.getStoragevehicle_code()));
if (ObjectUtil.isEmpty(mdPbStoragevehicleext)) {
MdPbStoragevehicleext mdPbStoragevehicleextInsert = new MdPbStoragevehicleext();
mdPbStoragevehicleextInsert.setStoragevehicleext_id( org.nl.common.utils.IdUtil.getStringId());
mdPbStoragevehicleextInsert.setStoragevehicle_id(mdPdStorageVehicleInfo.getStoragevehicle_id());
mdPbStoragevehicleextInsert.setStoragevehicle_code(mdPdStorageVehicleInfo.getStoragevehicle_code());
mdPbStoragevehicleextInsert.setStoragevehicle_type(mdPdStorageVehicleInfo.getStoragevehicle_type());
mdPbStoragevehicleextInsert.setPcsn( taskObj.getString("vehicle_code"));
mdPbStoragevehicleextInsert.setDevice_uuid( org.nl.common.utils.IdUtil.getStringId());
mdPbStoragevehicleextInsert.setUpdate_time( DateUtil.now());
mdPbStoragevehicleextMapper.insert(mdPbStoragevehicleextInsert);
}else {
mdPbStoragevehicleext.setPcsn( taskObj.getString("vehicle_code"));
mdPbStoragevehicleext.setDevice_uuid( org.nl.common.utils.IdUtil.getStringId());
mdPbStoragevehicleext.setUpdate_time( DateUtil.now());
mdPbStoragevehicleextMapper.updateById(mdPbStoragevehicleext);
}
}
// 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) {
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) {
throw new BadRequestException("任务已执行不能取消");
}
// 更新任务表删除字段
map.put("is_delete", IOSEnum.IS_NOTANDYES.code(""));
//任务被标记为取消
updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""));
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode());
updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。");
}
map.put("update_optid", SecurityUtils.getCurrentUserId());
map.put("update_optname", SecurityUtils.getCurrentNickName());
map.put("update_time", DateUtil.now());
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'");
taskService.update(null, updateWrapper);
}
@Override
@@ -128,9 +177,6 @@ public class BoxSSXTask extends AbstractAcsTask {
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
if (StrUtil.isBlank(form.getString("task_type"))) {
throw new BadRequestException("业务类型不能为空!");
}
if (StrUtil.isBlank(form.getString("start_device_code"))) {
throw new BadRequestException("起点不能为空!");
@@ -140,9 +186,7 @@ public class BoxSSXTask extends AbstractAcsTask {
throw new BadRequestException("终点不能为空!");
}
//创建任务点位层数要扣减
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code")));
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack();
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1);
JSONObject json = new JSONObject();
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());

View File

@@ -177,6 +177,7 @@ public class InBoxTrussTask extends AbstractAcsTask {
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code")));
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack();
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1);
boxstackMapper.updateById(bstIvtBoxstack);
JSONObject json = new JSONObject();
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId());
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId());

View File

@@ -72,6 +72,9 @@ public class MxOutTask extends AbstractAcsTask {
@Autowired
private SchBaseTaskMapper schBaseTaskMapper;
@Autowired
private InBoxTrussTask inBoxTrussTask;
@@ -123,6 +126,7 @@ public class MxOutTask extends AbstractAcsTask {
}
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
log.info("任务编号为:" + schBaseTask.getTask_code() + "的任务完成接口在" + now + "被调用---------------------------------------------");
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode());
//更新终点库存
String box_spec = schBaseTask.getMaterial_code();
String vehicle_code = schBaseTask.getVehicle_code();
@@ -141,7 +145,6 @@ public class MxOutTask extends AbstractAcsTask {
BstIvtBoxstack boxstackStart = boxstackService.getOne(new LambdaQueryWrapper<BstIvtBoxstack>()
.eq(BstIvtBoxstack::getStack_code, schBaseTask.getPoint_code1()));
//agv任务完成生成行架任务
InBoxTrussTask inBoxTrussTask = new InBoxTrussTask();
JSONObject taskParam = new JSONObject();
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱行架"));
taskParam.put("acs_task_type", IOSEnum.ACS_TYPE.code("子卷装箱行架任务"));
@@ -156,7 +159,7 @@ public class MxOutTask extends AbstractAcsTask {
// 根据当前层查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, split[boxstackStart.getCurrent_layer_count()]));
.eq(BstIvtBoxinfo::getBox_no, split[boxstackStart.getCurrent_layer_count()-1]));
if (boxDao == null) {
throw new BadRequestException("木箱不存在!");
}
@@ -249,10 +252,10 @@ public class MxOutTask extends AbstractAcsTask {
SchBaseTask task = new SchBaseTask();
BeanUtils.copyProperties(schBaseTaskVo, task);
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
}
//测试屏蔽下发acs
// if (isSend) {
// this.immediateNotifyAcs(null);
// }
return task.getTask_id();
}

View File

@@ -107,6 +107,9 @@ public class AutoMxZxTask {
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
schBaseTask.setPoint_code2(bstIvtBoxstacks.get(0).getStack_code());
taskService.updateById(schBaseTask);
//测试屏蔽下发acs
// this.immediateNotifyAcs(null);
}
} else {
log.info("木箱移库自动搬运任务正在创建被锁住。");

View File

@@ -207,9 +207,10 @@ public class DjqTask extends AbstractAcsTask {
BeanUtils.copyProperties(schBaseTaskVo, task);
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
}
//测试屏蔽下发acs
// if (isSend) {
// this.immediateNotifyAcs(null);
// }
return task.getTask_id();
}

View File

@@ -249,9 +249,12 @@ public class ZxqTask extends AbstractAcsTask {
BeanUtils.copyProperties(schBaseTaskVo, task);
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
}
//测试屏蔽下发acs
// if (isSend) {
// this.immediateNotifyAcs(null);
// }
return task.getTask_id();
}

View File

@@ -1,95 +0,0 @@
package org.nl.b_lms.sch.tasks.first_floor_area.auto;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
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.common.enums.PackageInfoIvtEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@Component
@RequiredArgsConstructor
public class AutoSendToZxq extends Prun{
private final String THIS_CLASS = AutoSendToZxq.class.getName();
@Resource
private RedissonClient redissonClient;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource
private ZxqTask zxqTask;
@Resource
private TaskQueueManager taskQueueManager;
@Resource
private TaskQueue taskQueue;
@Resource
private IschBaseTaskService taskService;
//待检区->装箱区agv自动搬运任务
@Autowired
public void run() {
try {
this.sendDjqToZxq();
}catch (Exception ex){
log.error(ex.getMessage());
}
}
@SneakyThrows
public void sendDjqToZxq() {
log.info(THIS_CLASS + "-待检区->装箱区定时任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
JSONObject task = new JSONObject();
//待检区有库位为合格品且过滤未完成任务
List<BstIvtPackageinfoivt> selectEmpPoints = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"));
if (ObjectUtils.isEmpty(selectEmpPoints)) {
return;
}
//装箱区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> zxqPackageinfoivtList = packageinfoivtService.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code(""));
if (ObjectUtils.isEmpty(zxqPackageinfoivtList)) {
return;
}
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"));
task.put("vehicle_code", selectEmpPoints.get(0).getContainer_name());
task.put("point_code1", selectEmpPoints.get(0).getPoint_code());
task.put("point_code2", zxqPackageinfoivtList.get(0).getPoint_code());
zxqTask.createTask(task);
} else {
log.info("待检区->装箱区agv自动搬运任务正在创建被锁住。");
}
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
}

View File

@@ -39,7 +39,7 @@
</if>
</where>
GROUP BY
stack_stat.box_spec;
stack_stat.box_spec
</select>
<select id="getBoxIvtPage" resultType="java.util.Map">

View File

@@ -110,10 +110,10 @@ public enum IOSEnum {
"6","B_FH06_0")),
// 行架点位
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017","木箱出库位", "CK2017")),
OUT_HANGER(MapOf.of("行架位1", "CK2013","行架位2", "CK2017")),
// 点位
POINT_CODE(MapOf.of("退货入库位", "THRKDJW1", "2020","CK2020", "2022","CK2022","木箱扫码","CK2024")),
POINT_CODE(MapOf.of("退货入库位", "THRKDJW1", "2020","CK2020", "2022","CK2022","木箱装箱","CK2024")),
//acs申请任务
ACSTOLMS_TYPE(MapOf.of("成品入库任务", "1","空盘入库","2","空盘出库","3","异常处理位","4","木箱入库","5","退货入库","6","贴标","1","捆扎","2","子卷装箱","7")),

View File

@@ -141,11 +141,15 @@
LEFT JOIN SCH_BASE_POINT po ON po.point_id = dis.point_id
LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = dis.pcsn AND dis.box_no = sub.package_box_sn
WHERE
dis.box_no in
dis.iostorinv_id = #{iostorinvId}
<if test="boxNos != null">
and dis.box_no in
<foreach item="code" collection="boxNos" open="(" separator="," close=")">
#{code}
</foreach>
AND dis.iostorinv_id = #{iostorinvId}
</if>
</select>
<select id="selectPageLeftJoin" resultType="org.nl.wms.stat.service.vo.InBillPageVo">
SELECT

View File

@@ -706,6 +706,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
List<SchBaseTask> taskList = schBaseTaskMapper.selectList(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getTable_fk, mstDao.getIostorinv_id().toString()).eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()).eq(SchBaseTask::getIs_delete, "0"));
if (CollUtil.isEmpty(taskList)) {
//测试屏蔽下发acs
// twoOutTask.immediateNotifyAcs(null);
}
}

View File

@@ -456,7 +456,8 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
// 下发任务
JSONObject sendJson = new JSONObject();
sendJson.put("task_id", task_id1);
this.reIssueTask(sendJson);
//测试屏蔽下发acs
// this.reIssueTask(sendJson);
}
} else {
throw new BadRequestException("有入库单据正在分配中,请稍后在试");

View File

@@ -355,7 +355,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
}
param.put("heightLevel", height);
taskParam.put("request_param", param.toString());
TwoInBoxTrussTask taskBean = new TwoInBoxTrussTask();
TwoInBoxTrussTask taskBean = SpringContextHolder.getBean(TwoInBoxTrussTask.class);
taskBean.createTask(taskParam);
taskBean.immediateNotifyAcs(null);
}
@@ -407,7 +407,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
}
param.put("heightLevel", height);
taskParam.put("request_param", param.toString());
TwoInBoxTrussTask taskBean = new TwoInBoxTrussTask();
TwoInBoxTrussTask taskBean = SpringContextHolder.getBean(TwoInBoxTrussTask.class);
taskBean.createTask(taskParam);
taskBean.immediateNotifyAcs(null);
}
@@ -538,7 +538,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
}
param.put("heightLevel", height);
taskParam.put("request_param", param.toString());
TwoInBoxTrussTask taskBean = new TwoInBoxTrussTask();
TwoInBoxTrussTask taskBean = SpringContextHolder.getBean(TwoInBoxTrussTask.class);
taskBean.createTask(taskParam);
taskBean.immediateNotifyAcs(null);
}
@@ -1039,21 +1039,21 @@ public class InBoxManageServiceImpl implements InBoxManageService {
StIvtStructattr json = rowStructList.get(i);
// 判断伸位
if (json.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
if (String.valueOf(json.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
// 无需深度
jsonAttr = json;
break;
} else if (json.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
} else if (String.valueOf(json.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
/*
* 深货位:判断浅货位是否被锁定
*/
// 获取此货位对应的浅货位
List<StIvtStructattr> lowAttr = structAllList.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(json.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(json.getLayer_num()) &&
String.valueOf( row.getRow_num()).equals(json.getRow_num()) &&
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(json.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(json.getLayer_num())) &&
String.valueOf( row.getRow_num()).equals(String.valueOf(json.getRow_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.collect(Collectors.toList());
@@ -1074,16 +1074,16 @@ public class InBoxManageServiceImpl implements InBoxManageService {
continue;
}
} else if (json.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
} else if (String.valueOf(json.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
/*
* 浅货位:判断深货位是否空洞,是否是相同类型的托盘
*/
// 获取此货位对应的深货位
List<StIvtStructattr> darkAttr = structAllList.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(json.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(json.getLayer_num()) &&
String.valueOf( row.getRow_num()).equals(json.getRow_num()) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(json.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(json.getLayer_num())) &&
String.valueOf( row.getRow_num()).equals(String.valueOf(json.getRow_num())) &&
String.valueOf(row.getZdepth()).equals(String.valueOf(IOSEnum.ZDEPTH_STRUCT.code(""))))
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(darkAttr) || darkAttr.size() != 1) {

View File

@@ -1,5 +1,6 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
@@ -242,17 +243,18 @@ public class InBussManageServiceImpl implements InBussManageService {
public void inTask(JSONObject jsonObject) {
// 处理子卷号
String material_barcode = jsonObject.getString("material_barcode");
if (ObjectUtil.isEmpty(material_barcode)) {
List<String> containers = jsonObject.getObject("material_barcode", List.class);
if (CollUtil.isEmpty(containers)) {
throw new BadRequestException("子卷号不能为空!");
}
if (ObjectUtil.isEmpty(jsonObject.getString("device_code"))) {
throw new BadRequestException("设备号不能为空!");
}
List<String> pcsnList = Arrays.asList(material_barcode.split(","));
// 查询子卷包装关系
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().in("container_name", pcsnList).in("status", "0", "1", "99"));
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().in("container_name", containers).in("status", "0", "1", "99"));
if (ObjectUtil.isEmpty(pdmBiSubpackagerelations)) {
throw new BadRequestException("未查询到子卷包装信息!");
}

View File

@@ -104,7 +104,8 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
TwoInEmpTask taskBean = new TwoInEmpTask();
taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(null);
//测试屏蔽下发acs
// taskBean.immediateNotifyAcs(null);
// 锁定终点
StIvtStructattr stIvtStructattr = stIvtStructattrMapper.selectOne(new QueryWrapper<StIvtStructattr>().lambda().eq(StIvtStructattr::getStruct_code, jsonAttr.getString("struct_code")));
@@ -414,23 +415,24 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
StIvtStructattr stIvtStructattr = vehicleRowStructattr.get(i);
// 判断伸位
if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
if (String.valueOf(stIvtStructattr.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
// 无需深度
stIvtStructattrReturn = stIvtStructattr;
break;
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
} else if (String.valueOf(stIvtStructattr.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
/*
* 深货位:判断浅货位是否被锁定
*/
// 获取此货位对应的浅货位
List<StIvtStructattr> lowAttr = allVehicleStruct.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(stIvtStructattr.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(stIvtStructattr.getLayer_num()) &&
.filter(row -> String.valueOf(row.getCol_num()).equals(String.valueOf(stIvtStructattr.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(stIvtStructattr.getLayer_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.collect(Collectors.toList());
if (CollUtil.isEmpty(lowAttr) || lowAttr.size() != 1) {
notInRowList.clear();
notInBlockList.clear();
@@ -448,14 +450,14 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
continue;
}
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
} else if (String.valueOf(stIvtStructattr.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
/*
* 浅货位:判断深货位是否空洞,是否是相同类型的托盘
*/
// 获取此货位对应的深货位
List<StIvtStructattr> darkAttr = allVehicleStruct.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(stIvtStructattr.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(stIvtStructattr.getLayer_num()) &&
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(stIvtStructattr.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(stIvtStructattr.getLayer_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.collect(Collectors.toList());
@@ -499,7 +501,7 @@ public class InVehicleManageServiceImpl implements InVehicleManageService {
}
}
if (ObjectUtil.isEmpty(stIvtStructattrReturn)){
if (ObjectUtil.isEmpty(stIvtStructattrReturn.getStruct_id())){
return null;
}else {
JSONObject jsonAttr = (JSONObject) JSONObject.toJSON(stIvtStructattrReturn);

View File

@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sun.xml.bind.v2.TODO;
import lombok.RequiredArgsConstructor;
import org.nl.b_lms.sch.point.dao.SchBasePoint;
import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper;
@@ -263,7 +264,8 @@ public class LashManageServiceImpl implements LashManageService {
jsonTaskParam.put("is_auto_issue", is_move);
twoLashTask.createTask(jsonTaskParam);
twoLashTask.immediateNotifyAcs(null);
//测试屏蔽下发acs
// twoLashTask.immediateNotifyAcs(null);
}
@Override
@@ -294,15 +296,14 @@ public class LashManageServiceImpl implements LashManageService {
String bill_type = whereJson.getString("bill_type");
//换标出库或转单出库的rgv任务目的点需要特殊处理
if (bill_type.equals(IOSEnum.OUT_TYPE.code("转单出库")) || bill_type.equals(IOSEnum.OUT_TYPE.code("换标出库"))) {
next_device_code = IOSEnum.CHANGE_OUT.code("换标出库口");
} else {
// if (bill_type.equals(IOSEnum.OUT_TYPE.code("转单出库")) || bill_type.equals(IOSEnum.OUT_TYPE.code("换标出库"))) {
// next_device_code = IOSEnum.CHANGE_OUT.code("换标出库口");
// } else {
// 判断是否是启用状态
// List<JSONObject> jsonList = pointTab.query("region_code = 'BLKCK' AND is_used = '1'")
// .getResultJSONArray(0).toJavaList(JSONObject.class);
List<SchBasePoint> schBasePoints = schBasePointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, "BLKCK").eq(SchBasePoint::getIs_used, "1"));
List<SchBasePoint> schBasePoints = schBasePointMapper.selectByReginCode();
if (CollUtil.isEmpty(schBasePoints)) {
throw new BadRequestException("请检查CK2012/CK2017是否启用!");
@@ -319,7 +320,7 @@ public class LashManageServiceImpl implements LashManageService {
next_device_code = schBasePoints.get(0).getPoint_code();
}
}
// }
// 查询木箱对应的载具
// JSONObject jsonVeExt = extTab.query("pcsn = '" + whereJson.getString("vehicle_code") + "'")

View File

@@ -117,7 +117,11 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
TwoOutEmpTask taskBean = new TwoOutEmpTask();
taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(null);
//测试屏蔽下发acs
// taskBean.immediateNotifyAcs(null);
// 锁定起点
@@ -477,17 +481,18 @@ public class OutVehicleManageServiceImpl implements OutVehicleManageService {
for (int i = 0; i < vehicleRowStructattr.size(); i++) {
StIvtStructattr stIvtStructattr = vehicleRowStructattr.get(i);
if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
if (String.valueOf(stIvtStructattr.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
stIvtStructattrReturn = stIvtStructattr;
break;
} else if (stIvtStructattr.getZdepth().equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
} else if (String.valueOf(stIvtStructattr.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
/*
* 深货位: 判断浅货位是否被锁定
*/
// 获取此货位对应的浅货位
List<StIvtStructattr> lowAttr = allVehicleStruct.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(stIvtStructattr.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(stIvtStructattr.getLayer_num()) &&
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(stIvtStructattr.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(stIvtStructattr.getLayer_num())) &&
String.valueOf( row.getRow_num()).equals(String.valueOf(stIvtStructattr.getRow_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.collect(Collectors.toList());

View File

@@ -265,7 +265,7 @@ public class TwoInBussManageServiceImpl implements TwoInBussManageService {
*/
// 获取此货位对应的浅货位
List<StIvtStructattr> lowAttr = allStruct.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(stIvtStructattr.getCol_num())) &&
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(String.valueOf(stIvtStructattr.getCol_num()))) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(stIvtStructattr.getLayer_num())) &&
String.valueOf( row.getRow_num()).equals(String.valueOf(stIvtStructattr.getRow_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code(""))).collect(Collectors.toList());
@@ -367,9 +367,9 @@ public class TwoInBussManageServiceImpl implements TwoInBussManageService {
// 找对应的浅货位
StIvtStructattr darkJson = stIvtStructattrs.stream()
.filter(row ->String.valueOf(row.getCol_num()).equals(json.getCol_num()) &&
String.valueOf(row.getLayer_num()).equals(json.getLayer_num()) &&
String.valueOf( row.getRow_num()).equals(json.getRow_num()) &&
.filter(row ->String.valueOf(row.getCol_num()).equals(String.valueOf(json.getCol_num())) &&
String.valueOf(row.getLayer_num()).equals(String.valueOf(json.getLayer_num())) &&
String.valueOf( row.getRow_num()).equals(String.valueOf(json.getRow_num())) &&
String.valueOf(row.getZdepth()).equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.findFirst().orElse(null);

View File

@@ -305,7 +305,7 @@
<if test="row_in != null and !row_in.isEmpty()">
AND attr.row_in IN
AND attr.row_num IN
<foreach item="item" collection="row_in" open="(" separator="," close=")">
#{item}
</foreach>
@@ -330,13 +330,13 @@
AND attr.sect_id = #{sect_id}
<if test="block_num != null and block_num != ''">
AND attr.block_num != #{block_num}
AND attr.block_num = #{block_num}
</if>
<if test="row_in != null and !row_in.isEmpty()">
AND attr.row_in IN
<foreach item="item" collection="row_in" open="(" separator="," close=")">
<if test="not_row_in != null and !not_row_in.isEmpty()">
AND attr.row_num not IN
<foreach item="item" collection="not_row_in" open="(" separator="," close=")">
#{item}
</foreach>
</if>
@@ -450,7 +450,7 @@
<if test="row_num_in != null and !row_num_in.isEmpty()">
AND attr.row_in IN
AND attr.row_num IN
<foreach item="item" collection="row_num_in" open="(" separator="," close=")">
#{item}
</foreach>
@@ -481,7 +481,7 @@
AND attr.block_num = #{block_num}
</if>
<if test="not_row_in != null and !not_row_in.isEmpty()">
AND attr.row_in not IN
AND attr.row_num not IN
<foreach item="item" collection="not_row_in" open="(" separator="," close=")">
#{item}
</foreach>

View File

@@ -1,5 +1,6 @@
package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
@@ -15,7 +16,6 @@ import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.bst.ivt.boxstack.enums.BoxStackEnum;
import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService;
@@ -28,7 +28,7 @@ import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService;
import org.nl.b_lms.pdm.productSpec.service.impl.PdmProductSpecServiceImpl;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
@@ -45,7 +45,6 @@ import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.enums.TASKEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvOutService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.LashManageServiceImpl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*;
import org.nl.b_lms.storage_manage.md.dao.MdPdStorageVehicleInfo;
import org.nl.b_lms.storage_manage.md.dao.MdPdStoragevehicleext;
@@ -54,11 +53,9 @@ import org.nl.b_lms.storage_manage.md.dao.mapper.MdStorageVehicleInfoMapper;
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructattrMapper;
import org.nl.common.enums.NoticeTypeEnum;
import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.enums.SpecEnum;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
@@ -72,7 +69,6 @@ import org.nl.wms.pda.mps.service.CasingService;
import org.nl.wms.pda.mps.service.ShippingService;
import org.nl.wms.pda.mps.service.impl.BakingServiceImpl;
import org.nl.wms.pda.st.service.impl.PrintServiceImpl;
import org.nl.wms.sch.ComPareUtil;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.AutoSendFeiShu;
import org.nl.wms.sch.manage.TaskStatusEnum;
@@ -88,6 +84,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -195,6 +192,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Autowired
private MxMoveTask mxMoveTask;
@Autowired
private BoxSSXTask boxSSXTask;
/**
* task_id任务标识
@@ -1256,16 +1256,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
}
// 1-成品入库任务
if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("成品入库任务"))) {
// 调用服务处理
if (ObjectUtil.isEmpty(whereJson.getString("material_barcode"))) {
throw new BadRequestException("子卷号不能为空!");
}
if (whereJson.getIntValue("weight") <= 0) {
throw new BadRequestException("上报的重量不能为0!");
}
List<String> errorMsg = new ArrayList<>();
JSONObject jsonObject = ComPareUtil.CompareWhight(whereJson);
Boolean inbound = jsonObject.getBoolean("inbound");
JSONObject jsonObject = CompareWhight(whereJson);
Boolean compaerResult = jsonObject.getBoolean("compaer_result");
String box_no = jsonObject.getString("box_no");
Integer box_weight = jsonObject.getIntValue("box_weight");
@@ -1296,15 +1292,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
AutoSendFeiShu.sendFeiShuMsg(notify.getValue(), box_no + "称重" + current_weight + ",理论" + box_weight, "二期称重异常提醒");
}
}
if (!inbound) {
errorMsg.add("手动至异常口");
}
if (count > 0) {
errorMsg.add(whereJson.getString("vehicle_code") + "存在任务");
}
//"material_barcode":"C1101,","device_code":"RK1018","weight":500.95,"vehicle_code":"B01401","type":"1"
if (CollectionUtils.isEmpty(errorMsg)) {
whereJson.put("bill_type", IOSEnum.IN_TYPE.code("生产入库"));
whereJson.put("material_barcode",containers);
inBussManageService.inTask(whereJson);
PdmProductSpecServiceImpl.doRecord(SpecEnum.RK, null, Boolean.TRUE, null, containers);
} else {
@@ -1382,13 +1377,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(resultJSONArray)) {
throw new BadRequestException("未查询到子卷包装信息!");
}
String material_barcode = "";
List<String> material_barcodes = new ArrayList<>();
for (int i = 0; i < resultJSONArray.size(); i++) {
JSONObject resultObj = resultJSONArray.getJSONObject(i);
if (i == 0) {
material_barcode = resultObj.getString("container_name");
material_barcodes.add(resultObj.getString("container_name"));
} else {
material_barcode += "," + resultObj.getString("container_name");
material_barcodes.add(resultObj.getString("container_name"));
}
}
MdPdStorageVehicleInfo mdPdStorageVehicleInfo = mdStorageVehicleInfoMapper.selectOne(new QueryWrapper<MdPdStorageVehicleInfo>().eq("storagevehicle_code", whereJson.getString("vehicle_code")));
@@ -1430,12 +1425,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
mdPdStoragevehicleext.setUpdate_time(DateUtil.now());
mdPdStoragevehicleextMapper.updateById(mdPdStoragevehicleext);
}
whereJson.put("material_barcode", material_barcode);
whereJson.put("material_barcode", material_barcodes);
inBussManageService.inTask(whereJson);
} else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("子卷装箱"))) {
//校验
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", whereJson.getString("box_no")).eq("status", "0"));
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", whereJson.getString("material_barcode")).eq("status", "0"));
if (ObjectUtil.isEmpty(pdmBiSubpackagerelations)){
throw new BadRequestException("未查询到子卷包装信息!");
}
@@ -1443,10 +1438,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (ObjectUtil.isEmpty(mdPdStorageVehicleInfo)) {
throw new BadRequestException("载具不存在!");
}
BoxSSXTask boxSSXTask = new BoxSSXTask();
JSONObject jsonParam = new JSONObject();
jsonParam.put("start_device_code",IOSEnum.OUT_HANGER.code("木箱出库位"));
jsonParam.put("next_device_code",IOSEnum.POINT_CODE.code("木箱扫码"));
jsonParam.put("start_device_code",whereJson.getString("device_code"));
jsonParam.put("next_device_code",IOSEnum.POINT_CODE.code("木箱装箱"));
jsonParam.put("vehicle_code2",mdPdStorageVehicleInfo.getStoragevehicle_code());
jsonParam.put("vehicle_code",whereJson.getString("material_barcode"));
jsonParam.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
boxSSXTask.createTask(jsonParam);
@@ -1467,6 +1464,83 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
public JSONObject CompareWhight(JSONObject jsonObject) {
// WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
JSONObject json = new JSONObject();
String vehicle_code = jsonObject.getString("vehicle_code");
MdPdStoragevehicleext mdPdStoragevehicleext = mdPdStoragevehicleextMapper.selectOne(new QueryWrapper<MdPdStoragevehicleext>().eq("storagevehicle_code", vehicle_code));
if (ObjectUtil.isEmpty(mdPdStoragevehicleext)) {
throw new BadRequestException("托盘木箱组盘不能为空!");
}
//根据木箱查询子卷组盘关系
String boxNo = mdPdStoragevehicleext.getPcsn();
PdmBiContainerinbound pdmBiContainerinbound = iPdmBiContainerinboundService.getOne(new QueryWrapper<PdmBiContainerinbound>().eq("box", boxNo));
if (ObjectUtil.isEmpty(pdmBiContainerinbound)) {
throw new BadRequestException("子卷号木箱组盘不能为空!");
}
List<String> pcsnList = Arrays.asList(pdmBiContainerinbound.getContainer_name().split(","));
// 查询子卷包装关系
// List<JSONObject> subList = subTab.query("container_name in ('" + String.join("','", pcsnList) + "') and status in ('0','1','99')")
// .getResultJSONArray(0).toJavaList(JSONObject.class);
List<PdmBiSubpackagerelation> pdmBiSubpackagerelations = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().in("container_name", pcsnList).in("status", "0", "1", "99"));
if (CollUtil.isEmpty(pdmBiSubpackagerelations)) {
throw new BadRequestException("未查询到子卷包装信息!");
}
if (StringUtils.isBlank(pdmBiSubpackagerelations.get(0).getPackage_box_sn())) {
throw new BadRequestException("木箱号不能为空!");
}
//查询托盘重量
// JSONObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0);
// if (ObjectUtil.isEmpty(vehicle_ext)) {
// throw new BadRequestException("未查询到托盘的扩展信息");
// }
// IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService = SpringContextHolder.getBean(IpdmBiSubpackagerelationService.class);
// List<PdmBiSubpackagerelation> list = ipdmBiSubpackagerelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, vehicle_ext.getString("pcsn")));
List<PdmBiSubpackagerelation> list = pdmBiSubpackagerelationMapper.selectList(new QueryWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", mdPdStoragevehicleext.getPcsn()));
if (ObjectUtil.isEmpty(list)) {
throw new BadRequestException("未查询到对应的木箱包装关系!");
}
PdmBiSubpackagerelation sub = list.get(0);
double vehicle_weight = Double.parseDouble(mdPdStoragevehicleext.getQty());
double current_weight = NumberUtil.sub(jsonObject.getDoubleValue("weight"), vehicle_weight);
double box_weight = sub.getBox_weight().doubleValue();
double weight_sys = Double.parseDouble(SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("weight_sys2").getValue());
boolean compaer_result = true;
// if (!(NumberUtil.sub(box_weight, weight_sys) <= current_weight && NumberUtil.add(box_weight, weight_sys) >= current_weight)) {
// compaer_result = false;
// }
//查询子卷入库配置
json.put("compaer_result", compaer_result);
json.put("box_no", sub.getPackage_box_sn());
json.put("box_weight", sub.getBox_weight().intValue());
json.put("current_weight", new BigDecimal(current_weight).intValue());
json.put("containers", list.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toList()));
return json;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject applySendOutTwo(JSONObject whereJson) {

View File

@@ -1,86 +0,0 @@
package org.nl.wms.sch;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.info.dao.PdmBiContainerinbound;
import org.nl.b_lms.pdm.info.service.IPdmBiContainerinboundService;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ComPareUtil {
public static JSONObject CompareWhight(JSONObject jsonObject) {
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
String vehicle_code = jsonObject.getString("vehicle_code");
// 处理子卷号
String material_barcode = jsonObject.getString("material_barcode");
if (ObjectUtil.isEmpty(material_barcode)) {
throw new BadRequestException("子卷号不能为空!");
}
List<String> pcsnList = Arrays.asList(material_barcode.split(","));
// 查询子卷包装关系
List<JSONObject> subList = subTab.query("container_name in ('" + String.join("','", pcsnList) + "') and status in ('0','1','99')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(subList)) {
throw new BadRequestException("未查询到子卷包装信息!");
}
if (StringUtils.isBlank(subList.get(0).getString("package_box_sn"))) {
throw new BadRequestException("木箱号不能为空!");
}
//查询托盘重量
JSONObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext").query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicle_ext)) {
throw new BadRequestException("未查询到托盘的扩展信息");
}
IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService = SpringContextHolder.getBean(IpdmBiSubpackagerelationService.class);
List<PdmBiSubpackagerelation> list = ipdmBiSubpackagerelationService.list(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getPackage_box_sn, vehicle_ext.getString("pcsn")));
if (ObjectUtil.isEmpty(list)) {
throw new BadRequestException("未查询到对应的木箱包装关系!");
}
PdmBiSubpackagerelation sub = list.get(0);
double vehicle_weight = vehicle_ext.getDoubleValue("qty");
double current_weight = NumberUtil.sub(jsonObject.getDoubleValue("weight"), vehicle_weight);
double box_weight = sub.getBox_weight().doubleValue();
double weight_sys = Double.parseDouble(SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("weight_sys2").getValue());
boolean compaer_result = true;
if (!(NumberUtil.sub(box_weight, weight_sys) <= current_weight && NumberUtil.add(box_weight, weight_sys) >= current_weight)) {
compaer_result = false;
}
//查询子卷入库配置
IPdmBiContainerinboundService iPdmBiContainerinboundService = SpringContextHolder.getBean(IPdmBiContainerinboundService.class);
PdmBiContainerinbound pdmBiContainerinbound = iPdmBiContainerinboundService.getOne(new QueryWrapper<PdmBiContainerinbound>()
.eq("box", sub.getPackage_box_sn()));
JSONObject json = new JSONObject();
json.put("compaer_result", compaer_result);
json.put("box_no", sub.getPackage_box_sn());
json.put("box_weight", sub.getBox_weight().intValue());
json.put("current_weight", new BigDecimal(current_weight).intValue());
json.put("containers", list.stream().map(a->a.getContainer_name()).collect(Collectors.toList()));
json.put("inbound", (pdmBiContainerinbound != null ? pdmBiContainerinbound.getInbound():false));
return json;
}
}

View File

@@ -8,17 +8,13 @@ import lombok.SneakyThrows;
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.auto.AutoSendToZxq;
import org.nl.modules.wql.WQL;
import org.nl.wms.sch.tasks.InCoolIvtTask;
import org.nl.wms.sch.tasks.InHotTask;
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 javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -73,4 +69,4 @@ public class AutoIntoHotCacheTask {
}
}
}
}

View File

@@ -510,8 +510,8 @@ public class InchargeServiceImpl implements InchargeService {
}
}
iostorinvdtlService.updateBatchById(needSaveOutDtlList);
iostorinvdisService.updateBatchById(needSaveOutDisList);
iostorinvdtlService.saveBatch(needSaveOutDtlList);
iostorinvdisService.saveBatch(needSaveOutDisList);
LambdaUpdateWrapper<StIvtStructattr> upLam = new LambdaUpdateWrapper<>();
upLam.set(StIvtStructattr::getLock_type, "3")
.in(StIvtStructattr::getStruct_id, needLockStructIds);

View File

@@ -419,6 +419,9 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
for (int j = 0; j < disRows.size(); j++) {
vehicle_set.add(disRows.get(j).getBox_no());
}
if (vehicle_set.isEmpty()){
vehicle_set = null;
}
return stIvtIostorinvdisMapper.getDisDtls(vehicle_set,iostorinv_id);
}