add:出库功能
This commit is contained in:
@@ -24,7 +24,7 @@ public enum StatusEnum {
|
|||||||
/**
|
/**
|
||||||
* 单据状态
|
* 单据状态
|
||||||
*/
|
*/
|
||||||
FORM_STATUS(MapOf.of("生成", "10", "执行中", "20","完成", "90","取消", "100")),
|
FORM_STATUS(MapOf.of("生成", "10","已分配", "13", "执行中", "20","完成", "90","取消", "100")),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库单据类型
|
* 出入库单据类型
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ public class VehicleMaterQuery extends BaseQuery<MdPbVehicleMater> {
|
|||||||
private String vehicle_code_begin;
|
private String vehicle_code_begin;
|
||||||
private String vehicle_code_end;
|
private String vehicle_code_end;
|
||||||
private String vehicle_type;
|
private String vehicle_type;
|
||||||
|
private String pcsn;
|
||||||
|
private String material_id;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paramMapping() {
|
public void paramMapping() {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package org.nl.wms.base_manage.vehicle.vehicleMater.service.impl;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.mapper.MdPbVehicleMaterMapper;
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.mapper.MdPbVehicleMaterMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|||||||
@@ -1,16 +1,33 @@
|
|||||||
package org.nl.wms.decision_manage.handler.impl.base;
|
package org.nl.wms.decision_manage.handler.impl.base;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleInfo.service.dto.VehicleQuery;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dto.VehicleMaterQuery;
|
||||||
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.IStIvtIostorinvdtlService;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.IStIvtIostorinvdtlService;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
@@ -18,19 +35,16 @@ import java.util.List;
|
|||||||
* 先进先出策略
|
* 先进先出策略
|
||||||
*/
|
*/
|
||||||
@Service("fifo")
|
@Service("fifo")
|
||||||
public class FIFORuleHandler extends Decisioner<StIvtStructattr,String> {
|
public class FIFORuleHandler extends Decisioner<StIvtStructattr, StIvtIostorinvdtl> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 出入库明细服务
|
* 出入库明细服务
|
||||||
*/
|
*/
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
|
@Autowired
|
||||||
|
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||||
|
|
||||||
/**
|
|
||||||
* 载具扩展属性服务服务
|
|
||||||
*/
|
|
||||||
// @Autowired
|
|
||||||
// private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 巷道均衡策略
|
* 巷道均衡策略
|
||||||
@@ -43,106 +57,35 @@ public class FIFORuleHandler extends Decisioner<StIvtStructattr,String> {
|
|||||||
* @return List<StIvtStructattr> :仓位集合
|
* @return List<StIvtStructattr> :仓位集合
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, String param) {
|
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
||||||
// 判断仓位是否为空
|
// 判断仓位是否为空
|
||||||
if (ObjectUtil.isEmpty(list)) {
|
if (ObjectUtil.isEmpty(list)) {
|
||||||
throw new BadRequestException("仓位集合为空!");
|
throw new BadRequestException("仓位集合为空!");
|
||||||
}
|
}
|
||||||
|
//分配数量
|
||||||
|
int plan_qty = param.getPlan_qty().intValue();
|
||||||
|
//当前条件只有id,批次
|
||||||
|
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", param.getMaterial_id()
|
||||||
|
, "pcsn", param.getPcsn()
|
||||||
|
, "stor_code", param.getStor_code()
|
||||||
|
, "order_by", "update_time asc")
|
||||||
|
);
|
||||||
|
List<String> need = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList());
|
||||||
|
|
||||||
// 判断策略类型
|
List<StIvtStructattr> disList = new ArrayList<>();
|
||||||
JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class);
|
for (StructattrVechielDto structattr : vechielDtos) {
|
||||||
|
if (need.contains(structattr.getStruct_code())){
|
||||||
|
StIvtStructattr stIvtStructattr = new StIvtStructattr();
|
||||||
|
BeanUtils.copyProperties(structattr,stIvtStructattr);
|
||||||
|
disList.add(stIvtStructattr);
|
||||||
|
|
||||||
List<StIvtStructattr> resultList = new ArrayList<>();
|
int cause_qty = structattr.getQty().subtract(structattr.getFrozen_qty()).intValue();
|
||||||
|
plan_qty = plan_qty - cause_qty;
|
||||||
switch (jsonParam.getString("ioType")) {
|
if (plan_qty<=0){
|
||||||
case "1":
|
break;
|
||||||
// 入库策略
|
}
|
||||||
resultList = inHandler(list,jsonParam);
|
}
|
||||||
break;
|
|
||||||
case "2":
|
|
||||||
// 出库策略
|
|
||||||
// resultList = outHandler(list,jsonParam);
|
|
||||||
break;
|
|
||||||
case "3":
|
|
||||||
// 通用策略
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new BadRequestException("策略类型错误!");
|
|
||||||
}
|
}
|
||||||
return resultList;
|
return disList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 入库策略
|
|
||||||
* @param attrList :仓位集合
|
|
||||||
* @param jsonParam:materialId :物料标识
|
|
||||||
* @return List<StIvtStructattr> :仓位集合
|
|
||||||
*/
|
|
||||||
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, JSONObject jsonParam) {
|
|
||||||
|
|
||||||
return attrList;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 出库策略
|
|
||||||
* @param attrList :仓位物料信息
|
|
||||||
* @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配)
|
|
||||||
* @return List<StIvtStructattr> :需出库仓位集合
|
|
||||||
*/
|
|
||||||
// private List<StIvtStructattr> outHandler(List<StIvtStructattr> attrList, JSONObject jsonParam) {
|
|
||||||
//
|
|
||||||
// // 查询对应的出入库明细
|
|
||||||
// StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId"));
|
|
||||||
//
|
|
||||||
// // 查询传入仓位物料中的数量是否满足明细中的数量
|
|
||||||
// List<String> vehicleCodeIn = attrList.stream()
|
|
||||||
// .map(StIvtStructattr::getVehicle_code)
|
|
||||||
// .distinct()
|
|
||||||
// .collect(Collectors.toList());
|
|
||||||
//
|
|
||||||
// // 查询对应的载具物料,根据入库时间升序(先进先出规则)
|
|
||||||
// List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
|
|
||||||
// new QueryWrapper<MdPbStoragevehicleext>().lambda()
|
|
||||||
// .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn)
|
|
||||||
// .orderByAsc(MdPbStoragevehicleext::getInsert_time)
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// double attrQty = extList.stream()
|
|
||||||
// .map(MdPbStoragevehicleext::getQty)
|
|
||||||
// .reduce(BigDecimal.ZERO, BigDecimal::add)
|
|
||||||
// .doubleValue();
|
|
||||||
//
|
|
||||||
// if (dtlDao.getUnassign_qty().doubleValue() > attrQty) {
|
|
||||||
// // 说明不满足所需重量则全部返回
|
|
||||||
// return attrList;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 需返回仓位物料集合
|
|
||||||
// List<StIvtStructattr> resultList = new ArrayList<>();
|
|
||||||
// // 满足所需数量: 根据巷道进行平均分配
|
|
||||||
// double unAssingQty = dtlDao.getUnassign_qty().doubleValue();
|
|
||||||
//
|
|
||||||
// while (unAssingQty > 0) {
|
|
||||||
//
|
|
||||||
// // 添加需返回的仓位物料
|
|
||||||
// StIvtStructattr attrDao = attrList.get(0);
|
|
||||||
// resultList.add(attrDao);
|
|
||||||
//
|
|
||||||
// // 减去未分配重量
|
|
||||||
// MdPbStoragevehicleext extDao = extList.stream()
|
|
||||||
// .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code()))
|
|
||||||
// .findFirst().orElse(null);
|
|
||||||
//
|
|
||||||
// if (ObjectUtil.isEmpty(extDao)) {
|
|
||||||
// throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue());
|
|
||||||
//
|
|
||||||
// // 移出此仓位物料,方便下一轮进行匹配
|
|
||||||
// attrList.remove(attrDao);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return resultList;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ package org.nl.wms.decision_manage.handler.impl.base;
|
|||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
import org.nl.wms.decision_manage.handler.Decisioner;
|
import org.nl.wms.decision_manage.handler.Decisioner;
|
||||||
import org.nl.wms.decision_manage.service.dao.StStrategyConfig;
|
import org.nl.wms.decision_manage.service.dao.StStrategyConfig;
|
||||||
@@ -10,6 +13,7 @@ import org.nl.wms.stor_manage.io.service.in.iostor_dtl.IStIvtIostorinvdtlService
|
|||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -27,7 +31,7 @@ public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorin
|
|||||||
* 出入库明细服务
|
* 出入库明细服务
|
||||||
*/
|
*/
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 载具扩展属性服务服务
|
* 载具扩展属性服务服务
|
||||||
@@ -46,9 +50,8 @@ public class NearbyRuleHandler extends Decisioner<StIvtStructattr, StIvtIostorin
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
public List<StIvtStructattr> handler(List<StIvtStructattr> list, StIvtIostorinvdtl param) {
|
||||||
// 判断仓位是否为空
|
if (CollectionUtils.isEmpty(list)){
|
||||||
if (ObjectUtil.isEmpty(list)) {
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
throw new BadRequestException("仓位集合为空!");
|
|
||||||
}
|
}
|
||||||
list.sort(Comparator.comparingInt(i -> i.getRow_num()+i.getCol_num()+i.getLayer_num()+i.getBlock_num()));
|
list.sort(Comparator.comparingInt(i -> i.getRow_num()+i.getCol_num()+i.getLayer_num()+i.getBlock_num()));
|
||||||
//就近分配区分出库还是入库策略
|
//就近分配区分出库还是入库策略
|
||||||
|
|||||||
@@ -23,13 +23,5 @@ import java.util.Map;
|
|||||||
public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
||||||
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, @Param("whereJson") SchBaseTaskQuery whereJson, @Param("collect") List<String> collect);
|
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, @Param("whereJson") SchBaseTaskQuery whereJson, @Param("collect") List<String> collect);
|
||||||
|
|
||||||
@Select("SELECT\n" +
|
List<Map> getByVehicle(@Param("vehicles") List<String> vehicles);
|
||||||
"\tsch_base_task.*, md_pb_vehicleMater.*,md_me_materialbase.material_code,md_me_materialbase.material_name,md_me_materialbase.material_spec\n" +
|
|
||||||
"FROM\n" +
|
|
||||||
"\tsch_base_task\n" +
|
|
||||||
"\tLEFT JOIN md_pb_vehicleMater ON sch_base_task.vehicle_code = md_pb_vehicleMater.vehicle_code \n" +
|
|
||||||
"\tleft join md_me_materialbase on md_pb_vehicleMater.material_id = md_me_materialbase.material_id\n" +
|
|
||||||
"WHERE\n" +
|
|
||||||
"\tsch_base_task.vehicle_code = #{vehicle_code}")
|
|
||||||
List<Map> getByVehicle(String vehicle_code);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,4 +38,26 @@
|
|||||||
</where>
|
</where>
|
||||||
ORDER BY t.create_time DESC
|
ORDER BY t.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getByVehicle" resultType="java.util.Map">
|
||||||
|
SELECT
|
||||||
|
md_pb_vehicleMater.*,
|
||||||
|
md_me_materialbase.material_code,
|
||||||
|
md_me_materialbase.material_name,
|
||||||
|
md_me_materialbase.material_spec,
|
||||||
|
st_ivt_structattr.stor_code,
|
||||||
|
st_ivt_structattr.struct_code,
|
||||||
|
sch_base_task.point_code1,
|
||||||
|
sch_base_task.point_code2,
|
||||||
|
sch_base_task.task_type,
|
||||||
|
sch_base_task.task_status
|
||||||
|
FROM
|
||||||
|
md_pb_vehicleMater
|
||||||
|
LEFT JOIN st_ivt_structattr ON md_pb_vehicleMater.vehicle_code = st_ivt_structattr.vehicle_code
|
||||||
|
LEFT JOIN md_me_materialbase ON md_pb_vehicleMater.material_id = md_me_materialbase.material_id
|
||||||
|
LEFT JOIN sch_base_task ON md_pb_vehicleMater.vehicle_code = sch_base_task.vehicle_code
|
||||||
|
where md_pb_vehicleMater.vehicle_code in
|
||||||
|
<foreach collection="vehicles" item="vehicle_code" open="(" close=")" separator=",">
|
||||||
|
#{vehicle_code}
|
||||||
|
</foreach>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
import org.nl.common.domain.exception.BadRequestException;
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.common.utils.ListOf;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.dispatch_manage.task.service.dao.mapper.SchBaseTaskMapper;
|
import org.nl.wms.dispatch_manage.task.service.dao.mapper.SchBaseTaskMapper;
|
||||||
@@ -60,7 +61,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
|||||||
if (StringUtils.isEmpty(vehicle_code)){
|
if (StringUtils.isEmpty(vehicle_code)){
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
return this.baseMapper.getByVehicle(vehicle_code);
|
return this.baseMapper.getByVehicle(ListOf.of(vehicle_code.split(",")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -26,10 +26,7 @@ import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -38,6 +35,7 @@ import java.util.stream.Stream;
|
|||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
* @Date 2024/5/6 17:47
|
* @Date 2024/5/6 17:47
|
||||||
|
* 后续可以定义规则
|
||||||
*/
|
*/
|
||||||
@Service("subProcess")
|
@Service("subProcess")
|
||||||
public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
|
public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
|
||||||
@@ -63,9 +61,20 @@ public class SubProcessActivityBehavior extends FlowNodeActivityBehavior<JSONObj
|
|||||||
JSONObject form = entity.getT();
|
JSONObject form = entity.getT();
|
||||||
JSONArray items = (JSONArray)form.get("item");
|
JSONArray items = (JSONArray)form.get("item");
|
||||||
StringBuffer buffer = new StringBuffer();
|
StringBuffer buffer = new StringBuffer();
|
||||||
if (items!=null){
|
//基于明细id拆分还是继续vehicle_code拆分
|
||||||
|
List<JSONObject> subList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < items.size(); i++) {
|
||||||
|
JSONObject item = items.getJSONObject(i);
|
||||||
|
String[] vehicle_codes = item.getString("vehicle_code").split(",");
|
||||||
|
for (String vehicle_code : vehicle_codes) {
|
||||||
|
JSONObject sub = new JSONObject(item);
|
||||||
|
sub.put("vehicle_code",vehicle_code);
|
||||||
|
subList.add(sub);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (subList!=null){
|
||||||
//子流程并行,子流程单一的时候直接串行
|
//子流程并行,子流程单一的时候直接串行
|
||||||
items.stream().map((Function<Object, CompletableFuture>) o -> CompletableFuture.runAsync(() -> {
|
subList.stream().map((Function<Object, CompletableFuture>) o -> CompletableFuture.runAsync(() -> {
|
||||||
ExecutionEntity subEntity = new ExecutionEntity();
|
ExecutionEntity subEntity = new ExecutionEntity();
|
||||||
subEntity.setParent_id(entity.getProc_inst_id());
|
subEntity.setParent_id(entity.getProc_inst_id());
|
||||||
subEntity.setForm_id(entity.getForm_id());
|
subEntity.setForm_id(entity.getForm_id());
|
||||||
|
|||||||
@@ -16,11 +16,14 @@ import org.nl.wms.stor_manage.io.service.in.iostor_dtl.IStIvtIostorinvdtlService
|
|||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author ZZQ
|
* @author ZZQ
|
||||||
@@ -51,20 +54,37 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
//出入库明细
|
//出入库明细
|
||||||
JSONObject t = entity.getT();
|
JSONObject t = entity.getT();
|
||||||
JSONObject item_json = t.getJSONObject("t");
|
JSONObject item_json = t.getJSONObject("t");
|
||||||
StIvtIostorinvdtl iostorinvdtlIn = item_json.toJavaObject(StIvtIostorinvdtl.class);
|
StIvtIostorinvdtl iostorinvdtl = item_json.toJavaObject(StIvtIostorinvdtl.class);
|
||||||
AtomicReference<String> atomicStruct= new AtomicReference<>();
|
List<StIvtStructattr> list = dispense(params, iostorinvdtl);
|
||||||
|
//更新仓位,更新数据
|
||||||
|
String collect = list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.joining(","));
|
||||||
|
stIvtIostorinvdtlInService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||||
|
.set("struct_code",collect)
|
||||||
|
.eq("id",iostorinvdtl.getId()));
|
||||||
|
item_json.put("struct_code",collect);
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
@Transactional
|
||||||
|
public List<StIvtStructattr> dispense(List<String> params, StIvtIostorinvdtl iostorinvdtl) {
|
||||||
|
AtomicReference<List<StIvtStructattr>> structCode = new AtomicReference<>();
|
||||||
RedissonUtils.lock(()->{
|
RedissonUtils.lock(()->{
|
||||||
List<StIvtStructattr> list = iStIvtStructattrService.list(new QueryWrapper<StIvtStructattr>()
|
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||||
.eq("vehicle_code", "")
|
|
||||||
.eq("is_used", true)
|
.eq("is_used", true)
|
||||||
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
.eq("lock_type", StatusEnum.LOCK.code("无"))
|
||||||
.eq("stor_code",iostorinvdtlIn.getStor_code()));
|
.eq("stor_code", iostorinvdtl.getStor_code());
|
||||||
|
if (iostorinvdtl.getIn_storage()){
|
||||||
|
query.eq("vehicle_code","");
|
||||||
|
}else {
|
||||||
|
query.ne("vehicle_code","");
|
||||||
|
}
|
||||||
|
//如果是入库则过滤空;否则则不过滤
|
||||||
|
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("当前分配策略无可用货位");
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
}
|
}
|
||||||
for (String param : params) {
|
for (String param : params) {
|
||||||
Decisioner decisioner = decisionHandlerMap.get(param);
|
Decisioner decisioner = decisionHandlerMap.get(param);
|
||||||
list = decisioner.handler(list, iostorinvdtlIn);
|
list = decisioner.handler(list, iostorinvdtl);
|
||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("当前分配策略无可用货位");
|
throw new BadRequestException("当前分配策略无可用货位");
|
||||||
}
|
}
|
||||||
@@ -73,19 +93,12 @@ public class DecisionHandler extends TypeHandler<JSONObject,ExecutionEntity<JSON
|
|||||||
if (CollectionUtils.isEmpty(list)){
|
if (CollectionUtils.isEmpty(list)){
|
||||||
throw new BadRequestException("无可分配货位!");
|
throw new BadRequestException("无可分配货位!");
|
||||||
}
|
}
|
||||||
String structCode = list.get(0).getStruct_code();
|
structCode.set(list);
|
||||||
atomicStruct.set(structCode);
|
|
||||||
//更新仓位,更新数据
|
|
||||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||||
.set("vehicle_code",iostorinvdtlIn.getVehicle_code())
|
// .set("vehicle_code", iostorinvdtl.getVehicle_code())
|
||||||
.set("lock_type", StatusEnum.LOCK.code("入"))
|
.set("lock_type", StatusEnum.LOCK.code(iostorinvdtl.getIn_storage()?"入":"出"))
|
||||||
.eq("struct_code",structCode));
|
.in("struct_code", list.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())));
|
||||||
},"入",2);
|
},"入",2);
|
||||||
|
return structCode.get();
|
||||||
stIvtIostorinvdtlInService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
|
||||||
.set("struct_code",atomicStruct.get())
|
|
||||||
.eq("id",iostorinvdtlIn.getId()));
|
|
||||||
item_json.put("struct_code",atomicStruct.get());
|
|
||||||
return t;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.nl.common.TableDataInfo;
|
import org.nl.common.TableDataInfo;
|
||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.stor_manage.io.service.dto.StorInvOutQuery;
|
import org.nl.wms.stor_manage.io.service.dto.StorInvOutQuery;
|
||||||
import org.nl.wms.stor_manage.io.service.dto.StorInvQuery;
|
import org.nl.wms.stor_manage.io.service.dto.StorInvQuery;
|
||||||
@@ -12,6 +13,7 @@ import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
|
|||||||
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
|
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
|
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
@@ -36,6 +38,8 @@ public class StIvtIostorinvOutController {
|
|||||||
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
|
private IStIvtIostorinvOutService iStIvtIostorinvOutService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlOutService iStIvtIostorinvDtlOutService;
|
private IStIvtIostorinvdtlOutService iStIvtIostorinvDtlOutService;
|
||||||
|
@Autowired
|
||||||
|
private ISchBaseTaskService iSchBaseTaskService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -56,5 +60,32 @@ public class StIvtIostorinvOutController {
|
|||||||
return new ResponseEntity<>(mapList,HttpStatus.OK);
|
return new ResponseEntity<>(mapList,HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出库分配
|
||||||
|
* @param dtl
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/outDecision")
|
||||||
|
public ResponseEntity<Object> outDecision(@RequestBody JSONObject dtl) {
|
||||||
|
String struct_code = iStIvtIostorinvOutService.dispense(dtl);
|
||||||
|
return new ResponseEntity<>(struct_code,HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消分配
|
||||||
|
* @param dtl
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/cancelDecision")
|
||||||
|
public ResponseEntity<Object> cancelDecision(@RequestBody JSONObject dtl) {
|
||||||
|
iStIvtIostorinvOutService.canceldispense(dtl);
|
||||||
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/divDis")
|
||||||
|
public ResponseEntity<Object> divDis(@RequestBody JSONObject dtl) {
|
||||||
|
List<Map> dis = iSchBaseTaskService.getByVehicle(dtl.getString("vehicle_code"));
|
||||||
|
return new ResponseEntity<>(TableDataInfo.build(dis),HttpStatus.OK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ public class StIvtIostorinvdtl implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String inv_id;
|
private String inv_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入单标识
|
||||||
|
*/
|
||||||
|
private Boolean in_storage = Boolean.TRUE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 源单号
|
* 源单号
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import lombok.EqualsAndHashCode;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@TableName("st_ivt_iostorinv_in")
|
@TableName("st_ivt_iostorinv_out")
|
||||||
public class StIvtIostorinvout implements Serializable {
|
public class StIvtIostorinvOut implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|||||||
@@ -2,25 +2,31 @@ package org.nl.wms.stor_manage.io.service.out.iostor.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
import org.nl.common.utils.CodeUtil;
|
import org.nl.common.utils.CodeUtil;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor.dao.StIvtIostorinvIn;
|
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor.dao.mapper.StIvtIostorinvMapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
|
import org.nl.wms.stor_manage.io.service.out.iostor.IStIvtIostorinvOutService;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
|
import org.nl.wms.stor_manage.io.service.out.iostor.dao.StIvtIostorinvOut;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor.dao.mapper.StIvtIostorinvOutMapper;
|
import org.nl.wms.stor_manage.io.service.out.iostor.dao.mapper.StIvtIostorinvOutMapper;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -35,6 +41,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtIostorinvdtlOutService iStIvtIostorinvDtlOutService;
|
private IStIvtIostorinvdtlOutService iStIvtIostorinvDtlOutService;
|
||||||
|
@Autowired
|
||||||
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -60,4 +68,47 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
|
|||||||
}
|
}
|
||||||
this.save(mst);
|
this.save(mst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String dispense(JSONObject form) {
|
||||||
|
//分配更新
|
||||||
|
List<StIvtStructattr> desicion = iStIvtStructattrService.desicion(form, Boolean.FALSE);
|
||||||
|
if (CollectionUtils.isEmpty(desicion)){
|
||||||
|
throw new BadRequestException("分配失败,当前出库分配无可用货位");
|
||||||
|
}
|
||||||
|
iStIvtIostorinvDtlOutService.update(new UpdateWrapper<StIvtIostorinvdtlOut>()
|
||||||
|
.set("vehicle_code",desicion.stream().map(StIvtStructattr::getVehicle_code).collect(Collectors.joining(",")))
|
||||||
|
.eq("id",form.getString("id")));
|
||||||
|
int count = iStIvtIostorinvDtlOutService.count(new QueryWrapper<StIvtIostorinvdtlOut>()
|
||||||
|
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
|
||||||
|
if (count == 0){
|
||||||
|
this.update(new UpdateWrapper<StIvtIostorinvOut>()
|
||||||
|
.set("status",StatusEnum.FORM_STATUS.code("已分配"))
|
||||||
|
.eq("id",form.getString("inv_id")));
|
||||||
|
}
|
||||||
|
return desicion.get(0).getStruct_code();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public String canceldispense(JSONObject form) {
|
||||||
|
String vehicles = form.getString("vehicle_code");
|
||||||
|
if (StringUtils.isNotEmpty(vehicles)){
|
||||||
|
String[] split = vehicles.split(",");
|
||||||
|
//更新点位锁,删除分配
|
||||||
|
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||||
|
.set("lock_type", StatusEnum.LOCK.code("无"))
|
||||||
|
.in("vehicle_code", Arrays.asList(split)));
|
||||||
|
iStIvtIostorinvDtlOutService.update(new UpdateWrapper<StIvtIostorinvdtlOut>()
|
||||||
|
.set("vehicle_code",null)
|
||||||
|
.eq("id",form.getString("id")));
|
||||||
|
|
||||||
|
this.update(new UpdateWrapper<StIvtIostorinvOut>()
|
||||||
|
.set("status",StatusEnum.FORM_STATUS.code("生成"))
|
||||||
|
.eq("id",form.getString("inv_id")));
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.nl.wms.stor_manage.io.service.out.iostor_dtl;
|
package org.nl.wms.stor_manage.io.service.out.iostor_dtl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
||||||
@@ -21,4 +22,5 @@ public interface IStIvtIostorinvdtlOutService extends IService<StIvtIostorinvdtl
|
|||||||
|
|
||||||
|
|
||||||
List<Map> getByInv(String inv_id);
|
List<Map> getByInv(String inv_id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@TableName(value = "st_ivt_iostorinvdtl_out", autoResultMap = true)
|
@TableName(value = "st_ivt_iostorinvdtl_out", autoResultMap = true)
|
||||||
public class StIvtIostorinvdtlOut implements Serializable {
|
public class StIvtIostorinvdtlOut implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,5 +108,7 @@ public class StIvtIostorinvdtlOut implements Serializable {
|
|||||||
private JSONObject form_data;
|
private JSONObject form_data;
|
||||||
|
|
||||||
|
|
||||||
|
private Boolean in_storage = Boolean.FALSE;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,4 +38,5 @@ public interface StIvtIostorinvdtlOutMapper extends BaseMapper<StIvtIostorinvdtl
|
|||||||
@Results({@Result(property = "form_data",column = "form_data",typeHandler = FastjsonTypeHandler.class)})
|
@Results({@Result(property = "form_data",column = "form_data",typeHandler = FastjsonTypeHandler.class)})
|
||||||
List<Map> findByInv(String inv_id);
|
List<Map> findByInv(String inv_id);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,32 @@
|
|||||||
package org.nl.wms.stor_manage.io.service.out.iostor_dtl.impl;
|
package org.nl.wms.stor_manage.io.service.out.iostor_dtl.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
|
import org.nl.common.enums.StatusEnum;
|
||||||
|
import org.nl.common.utils.MapOf;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper;
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.mapper.StIvtIostorinvdtlMapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.IStIvtIostorinvdtlOutService;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
||||||
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.mapper.StIvtIostorinvdtlOutMapper;
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.mapper.StIvtIostorinvdtlOutMapper;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -24,6 +39,8 @@ import java.util.Map;
|
|||||||
@Service
|
@Service
|
||||||
public class StIvtIostorinvdtlOutServiceImpl extends ServiceImpl<StIvtIostorinvdtlOutMapper, StIvtIostorinvdtlOut> implements IStIvtIostorinvdtlOutService {
|
public class StIvtIostorinvdtlOutServiceImpl extends ServiceImpl<StIvtIostorinvdtlOutMapper, StIvtIostorinvdtlOut> implements IStIvtIostorinvdtlOutService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IStIvtStructattrService iStIvtStructattrService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void batchInsert(List<StIvtIostorinvdtlOut> dtls) {
|
public void batchInsert(List<StIvtIostorinvdtlOut> dtls) {
|
||||||
@@ -35,6 +52,23 @@ public class StIvtIostorinvdtlOutServiceImpl extends ServiceImpl<StIvtIostorinvd
|
|||||||
if (StringUtils.isEmpty(inv_id)){
|
if (StringUtils.isEmpty(inv_id)){
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
return this.baseMapper.findByInv(inv_id);
|
List<Map> byInv = this.baseMapper.findByInv(inv_id);
|
||||||
|
//查询载具所在仓位
|
||||||
|
for (Map map : byInv) {
|
||||||
|
Object vehicle_code = map.get("vehicle_code");
|
||||||
|
if (vehicle_code!=null){
|
||||||
|
List<String> vehicles = Arrays.asList(((String) vehicle_code).split(","));
|
||||||
|
List<StructattrVechielDto> vechielDtos = iStIvtStructattrService.collectVechicle(MapOf.of("material_id", map.get("material_id")
|
||||||
|
, "pcsn", map.get("pcsn")
|
||||||
|
, "stor_code", map.get("stor_code")
|
||||||
|
, "vehicles", vehicles));
|
||||||
|
String structs = vechielDtos.stream().map(StructattrVechielDto::getStruct_code).collect(Collectors.joining(","));
|
||||||
|
int qty = vechielDtos.stream().mapToInt(a->a.getQty().intValue()).sum();
|
||||||
|
map.put("struct_code",structs);
|
||||||
|
map.put("qty",qty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return byInv;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nl.wms.stor_manage.struct.controller;
|
package org.nl.wms.stor_manage.struct.controller;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
@@ -13,6 +14,9 @@ import org.springframework.http.ResponseEntity;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 仓位属性表 前端控制器
|
* 仓位属性表 前端控制器
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package org.nl.wms.stor_manage.struct.service;
|
package org.nl.wms.stor_manage.struct.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -31,4 +33,14 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
|
|||||||
Object pageQuery(StructattrQuery query, PageQuery page);
|
Object pageQuery(StructattrQuery query, PageQuery page);
|
||||||
|
|
||||||
void changeActive(StIvtStructattr dto);
|
void changeActive(StIvtStructattr dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手动调用出入库规则
|
||||||
|
* @param form
|
||||||
|
* @param in
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<StIvtStructattr> desicion(JSONObject form, Boolean in);
|
||||||
|
|
||||||
|
List<StructattrVechielDto> collectVechicle(Map query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -20,4 +21,6 @@ import java.util.Map;
|
|||||||
public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
|
public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
|
||||||
|
|
||||||
List<Map> getPageQuery(@Param("query") StructattrQuery query, PageQuery pageQuery);
|
List<Map> getPageQuery(@Param("query") StructattrQuery query, PageQuery pageQuery);
|
||||||
|
|
||||||
|
List<StructattrVechielDto> collectVehicle(Map query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,4 +36,28 @@
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="collectVehicle" resultType="org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto">
|
||||||
|
SELECT
|
||||||
|
md_pb_vehicleMater.qty,
|
||||||
|
md_pb_vehicleMater.frozen_qty,
|
||||||
|
md_pb_vehicleMater.material_id,
|
||||||
|
md_pb_vehicleMater.pcsn,
|
||||||
|
st_ivt_structattr.*
|
||||||
|
FROM
|
||||||
|
st_ivt_structattr
|
||||||
|
LEFT JOIN md_pb_vehicleMater ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code
|
||||||
|
WHERE
|
||||||
|
material_id = #{material_id}
|
||||||
|
AND pcsn = #{pcsn}
|
||||||
|
AND st_ivt_structattr.stor_code = #{stor_code}
|
||||||
|
<if test="vehicles != null and vehicles.size() > 0">
|
||||||
|
AND st_ivt_structattr.vehicle_code in
|
||||||
|
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=",">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="order_by != null and order_by != ''">
|
||||||
|
order by ${order_by}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -0,0 +1,176 @@
|
|||||||
|
package org.nl.wms.stor_manage.struct.service.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.nl.common.domain.entity.BaseQuery;
|
||||||
|
import org.nl.common.domain.entity.QParam;
|
||||||
|
import org.nl.common.enums.QueryTEnum;
|
||||||
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2023/5/4 19:49
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class StructattrVechielDto extends MdPbVehicleMater {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓位标识
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓位编码
|
||||||
|
*/
|
||||||
|
private String struct_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓位名称
|
||||||
|
*/
|
||||||
|
private String struct_name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库区标识
|
||||||
|
*/
|
||||||
|
private String sect_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓库标识
|
||||||
|
*/
|
||||||
|
private String stor_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 容量
|
||||||
|
*/
|
||||||
|
private Integer capacity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度
|
||||||
|
*/
|
||||||
|
private Integer w;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 高度
|
||||||
|
*/
|
||||||
|
private Integer h;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 深度(长度)
|
||||||
|
*/
|
||||||
|
private Integer l;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 承受重量
|
||||||
|
*/
|
||||||
|
private Integer weight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 起始X坐标
|
||||||
|
*/
|
||||||
|
private BigDecimal xqty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 起始Y坐标
|
||||||
|
*/
|
||||||
|
private BigDecimal yqty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 起始Z坐标
|
||||||
|
*/
|
||||||
|
private BigDecimal zqty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排
|
||||||
|
*/
|
||||||
|
private Integer row_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列
|
||||||
|
*/
|
||||||
|
private Integer col_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 层
|
||||||
|
*/
|
||||||
|
private Integer layer_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 块
|
||||||
|
*/
|
||||||
|
private Integer block_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超限货位关联的货位编号
|
||||||
|
*/
|
||||||
|
private String control_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private String create_id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人姓名
|
||||||
|
*/
|
||||||
|
private String create_name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private String create_time;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否临时仓位
|
||||||
|
*/
|
||||||
|
private Boolean is_temp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用
|
||||||
|
*/
|
||||||
|
private Boolean is_used;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 锁定类型
|
||||||
|
*/
|
||||||
|
private String lock_type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否判断高度
|
||||||
|
*/
|
||||||
|
private String is_zdepth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 存储载具号
|
||||||
|
*/
|
||||||
|
private String vehicle_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 背景图片
|
||||||
|
*/
|
||||||
|
private String back_ground_pic;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 前景色
|
||||||
|
*/
|
||||||
|
private String front_ground_color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 背景色
|
||||||
|
*/
|
||||||
|
private String back_ground_color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体显示方向
|
||||||
|
*/
|
||||||
|
private String font_direction_scode;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,16 +1,22 @@
|
|||||||
package org.nl.wms.stor_manage.struct.service.impl;
|
package org.nl.wms.stor_manage.struct.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.nl.common.TableDataInfo;
|
import org.nl.common.TableDataInfo;
|
||||||
import org.nl.common.domain.entity.PageQuery;
|
import org.nl.common.domain.entity.PageQuery;
|
||||||
|
import org.nl.common.domain.exception.BadRequestException;
|
||||||
import org.nl.common.enums.StatusEnum;
|
import org.nl.common.enums.StatusEnum;
|
||||||
import org.nl.common.utils.IdUtil;
|
import org.nl.common.utils.IdUtil;
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService;
|
||||||
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater;
|
||||||
|
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
|
||||||
|
import org.nl.wms.stor_manage.io.service.in.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||||
|
import org.nl.wms.stor_manage.io.service.out.iostor_dtl.dao.StIvtIostorinvdtlOut;
|
||||||
import org.nl.wms.stor_manage.record.service.IStIvtStructivtflowService;
|
import org.nl.wms.stor_manage.record.service.IStIvtStructivtflowService;
|
||||||
import org.nl.wms.stor_manage.record.service.dao.StIvtStructivtflow;
|
import org.nl.wms.stor_manage.record.service.dao.StIvtStructivtflow;
|
||||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||||
@@ -18,10 +24,15 @@ import org.nl.wms.stor_manage.struct.service.dao.mapper.StIvtStructattrMapper;
|
|||||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrQuery;
|
||||||
|
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||||
|
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||||
|
import org.nl.wms.system_manage.service.param.dao.Param;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -40,6 +51,11 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
private IMdPbVehicleMaterService vehicleMaterService;
|
private IMdPbVehicleMaterService vehicleMaterService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IStIvtStructivtflowService structivtflowService;
|
private IStIvtStructivtflowService structivtflowService;
|
||||||
|
@Autowired
|
||||||
|
private ISysParamService iSysParamService;
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
private DecisionHandler decisionHandler;
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@@ -106,4 +122,22 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
|||||||
this.updateById(dto);
|
this.updateById(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StIvtStructattr> desicion(JSONObject form, Boolean in) {
|
||||||
|
//查询出入库配置规则
|
||||||
|
Param byCode = iSysParamService.findByCode("decision_"+ in);
|
||||||
|
if (byCode ==null || StringUtils.isEmpty(byCode.getValue())){
|
||||||
|
throw new BadRequestException("未配置出入库默认规则,请在系统配置中配置");
|
||||||
|
}
|
||||||
|
List<String> decisions = Arrays.asList(byCode.getValue().split(","));
|
||||||
|
List<StIvtStructattr> dispense = decisionHandler.dispense(decisions, form.toJavaObject(StIvtIostorinvdtl.class));
|
||||||
|
return dispense;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StructattrVechielDto> collectVechicle(Map query) {
|
||||||
|
List<StructattrVechielDto> collectVehicle = this.baseMapper.collectVehicle(query);
|
||||||
|
return collectVehicle;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user