add:增加手持出库

This commit is contained in:
2025-07-03 09:41:51 +08:00
parent 12515d5ec7
commit 96d188ecfd
22 changed files with 483 additions and 289 deletions

View File

@@ -3,34 +3,80 @@ package org.nl.common.enums;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.Getter; import lombok.Getter;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.LConsumer; import org.apache.poi.ss.formula.functions.T;
import org.nl.common.domain.interfaces.LConsumer;
import java.util.Collection; import java.util.Collection;
/** /**
* s * s
*
* @author ZZQ * @author ZZQ
* @Date 2022/12/14 8:26 下午 * @Date 2022/12/14 8:26 下午
*/ */
@Getter @Getter
public enum QueryTEnum { public enum QueryTEnum {
// //
EQ((q, k, v) -> { q.eq(k[0],v); }), EQ((q, k, v) -> {
IN((q, key, o) -> { if (o instanceof Collection){ q.in(key[0],(Collection) o); } }), q.eq(k[0], v);
LK((q, keys, o) -> { for (String key : keys) { q.like(key,o); } }), }),
LE((q, k, v) -> { q.le(k[0],v); }), IN((q, key, o) -> {
BY((q, k, v) -> { q.orderByDesc(k[0],v); }), if (o instanceof Collection) {
NO((q, k, v) -> { q.isNull(k[0]); }), q.in(key[0], (Collection) o);
LT((q, k, v) -> { q.lt(k[0],v); }), }
OREQ((q, k, v) -> { if (StringUtils.isBlank((String)v)){ q.isNull(k[0]); }else { q.eq(k[0],v); } }); }),
LK((q, keys, o) -> {
for (String key : keys) {
q.like(key, o);
}
}),
ORLK((q, k, o) -> {
q.and(query -> {
QueryWrapper queryWrapper = (QueryWrapper) query;
for (int i = 0; i < k.length; i++) {
queryWrapper.like(k[i], o);
if (i != (k.length - 1)) {
queryWrapper.or();
}
}
});
}),
LE((q, k, v) -> {
q.le(k[0], v);
}),
GE((q, k, v) -> {
q.ge(k[0], v);
}),
BY((q, k, v) -> {
q.orderByDesc(k[0], String.valueOf(v));
}),
NO((q, k, v) -> {
q.isNull(k[0]);
}),
NULL_OR_EMPTY((queryWrapper, k, v) -> {
queryWrapper.nested(a -> a.isNull(k[0]).or().eq(k[0], ""));
}),
LT((q, k, v) -> {
q.lt(k[0], v);
}),
GT((q, k, v) -> {
q.gt(k[0], v);
}),
OREQ((q, k, v) -> {
if (StringUtils.isBlank((String) v)) {
q.isNull(k[0]);
} else {
q.eq(k[0], v);
}
});
private LConsumer<QueryWrapper,String[], Object> doP; private org.nl.common.domain.interfaces.LConsumer<QueryWrapper<T>, String[], Object> doP;
QueryTEnum(LConsumer<QueryWrapper,String[], Object> doP) { QueryTEnum(LConsumer<QueryWrapper<T>, String[], Object> doP) {
this.doP = doP; this.doP = doP;
} }
public static void build(QueryTEnum type, QueryWrapper q, String[] k , Object v){ public static void build(QueryTEnum type, QueryWrapper q, String[] k, Object v) {
type.getDoP().accept(q,k,v); type.getDoP().accept(q, k, v);
} }
} }

View File

@@ -10,7 +10,7 @@ import java.math.BigDecimal;
* @Date 2023/5/4 19:49 * @Date 2023/5/4 19:49
*/ */
@Data @Data
public class StructattrVechielDto extends MdPbStoragevehicleext { public class StructattrVechielDto extends GroupPlate {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
@@ -177,4 +177,17 @@ public class StructattrVechielDto extends MdPbStoragevehicleext {
private String font_direction_scode; private String font_direction_scode;
/**
* 物料编码
*/
private String material_code;
/**
* 物料名称
*/
private String material_name;
} }

View File

@@ -3,34 +3,53 @@
<mapper namespace="org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper"> <mapper namespace="org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper">
<select id="collectVehicle" resultType="org.nl.wms.basedata_manage.service.dao.StructattrVechielDto"> <select id="collectVehicle" resultType="org.nl.wms.basedata_manage.service.dao.StructattrVechielDto">
SELECT SELECT
vm.canuse_qty, gro.qty,
vm.frozen_qty, gro.frozen_qty,
vm.update_time, gro.create_time,
vm.material_id, gro.qty_unit_name,
vm.pcsn, gro.material_id,
vm.storagevehicleext_id AS vm_id, gro.pcsn,
gro.group_id,
mater.material_code,
mater.material_name,
ivt.* ivt.*
FROM FROM
st_ivt_structattr ivt st_ivt_structattr ivt
LEFT JOIN md_pb_storagevehicleext vm ON ivt.storagevehicle_code = vm.storagevehicle_code LEFT JOIN md_pb_groupplate gro ON ivt.storagevehicle_code = gro.storagevehicle_code
WHERE LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
vm.material_id = #{material_id} <where>
<if test="pcsn != null and pcsn != ''"> <if test="search != null and search != ''">
AND vm.pcsn = #{pcsn} and (mater.material_code LIKE '%${search}%'
</if> or mater.material_name LIKE '%${search}%')
AND ivt.stor_code = #{stor_code} </if>
<if test="vehicles != null and vehicles.size() > 0"> <if test="status != null and status != ''">
AND ivt.storagevehicle_code in AND gro.status = #{status}
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=","> </if>
#{value} <if test="material_id != null and material_id != ''">
</foreach> AND gro.material_id = #{material_id}
</if> </if>
<if test="is_lock != null and is_lock != ''"> <if test="pcsn != null and pcsn != ''">
and ivt.lock_type = '00' AND gro.pcsn = #{pcsn}
and vm.frozen_qty = 0 </if>
</if> <if test="stor_code != null and stor_code != ''">
<if test="order_by != null and order_by != ''"> AND ivt.stor_code = #{stor_code}
order by ${order_by} </if>
</if> <if test="sect_code != null and sect_code != ''">
AND ivt.sect_code = #{sect_code}
</if>
<if test="vehicles != null and vehicles.size() > 0">
AND ivt.storagevehicle_code in
<foreach collection="vehicles" item="value" index="key" open="(" close=")" separator=",">
#{value}
</foreach>
</if>
<if test="is_lock != null and is_lock != ''">
and ivt.lock_type = '00'
and gro.frozen_qty = 0
</if>
<if test="order_by != null and order_by != ''">
order by ${order_by}
</if>
</where>
</select> </select>
</mapper> </mapper>

View File

@@ -0,0 +1,33 @@
package org.nl.wms.basedata_manage.service.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.common.domain.query.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
/* *
*物料查询对象
* @author ZZQ
* @Date 2023/5/4 19:49
*/
@Data
public class MaterialQuery extends BaseQuery<MdMeMaterialbase> {
/**
* 物料编码名称
*/
private String search;
/**
* 物料类型
*/
private String material_type_id;
@Override
public void paramMapping() {
super.doP.put("search", QParam.builder().k(new String[]{"material_code","material_name"}).type(QueryTEnum.ORLK).build());
super.doP.put("material_type_id", QParam.builder().k(new String[]{"material_type_id"}).type(QueryTEnum.EQ).build());
}
}

View File

@@ -82,24 +82,15 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
@Override @Override
public BsrealStorattr findByCode(String code) { public BsrealStorattr findByCode(String code) {
LambdaQueryWrapper<BsrealStorattr> queryWrapper = new LambdaQueryWrapper<>(BsrealStorattr.class) LambdaQueryWrapper<BsrealStorattr> queryWrapper = new LambdaQueryWrapper<>(BsrealStorattr.class)
.eq(BsrealStorattr::getStor_code, code) .eq(BsrealStorattr::getStor_code, code)
.eq(BsrealStorattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("")); .eq(BsrealStorattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code(""));
return bsrealStorattrMapper.selectOne(queryWrapper);
BsrealStorattr bsrealStorattr = bsrealStorattrMapper.selectOne(queryWrapper);
if (ObjectUtil.isEmpty(bsrealStorattr)) {
throw new BadRequestException("仓库编码为【"+code+"】不存在!");
}
return bsrealStorattr;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void create(BsrealStorattr dto) { public void create(BsrealStorattr dto) {
BsrealStorattr bsrealStorattr = this.findByCode(dto.getStor_code()); BsrealStorattr bsrealStorattr = this.findByCode(dto.getStor_code());
if (ObjectUtil.isNotEmpty(bsrealStorattr) && BaseDataEnum.IS_YES_NOT.code("").equals(bsrealStorattr.getIs_delete())) { if (ObjectUtil.isNotEmpty(bsrealStorattr) && BaseDataEnum.IS_YES_NOT.code("").equals(bsrealStorattr.getIs_delete())) {
throw new BadRequestException("存在相同的仓库编号"); throw new BadRequestException("存在相同的仓库编号");
@@ -107,7 +98,6 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now(); String now = DateUtil.now();
dto.setStor_id(IdUtil.getStringId()); dto.setStor_id(IdUtil.getStringId());
dto.setCreate_id(currentUserId); dto.setCreate_id(currentUserId);
dto.setCreate_name(nickName); dto.setCreate_name(nickName);
@@ -115,12 +105,10 @@ public class BsrealStorattrServiceImpl extends ServiceImpl<BsrealStorattrMapper,
dto.setUpdate_optname(nickName); dto.setUpdate_optname(nickName);
dto.setUpdate_time(now); dto.setUpdate_time(now);
dto.setCreate_time(now); dto.setCreate_time(now);
//TODO //TODO
dto.setSyscompanyid(9L); dto.setSyscompanyid(9L);
dto.setSysdeptid(9L); dto.setSysdeptid(9L);
dto.setSysownerid(9L); dto.setSysownerid(9L);
bsrealStorattrMapper.insert(dto); bsrealStorattrMapper.insert(dto);
} }

View File

@@ -316,11 +316,13 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
return one; return one;
} }
/**
* 库存查询
*/
@Override @Override
public List<StructattrVechielDto> collectVechicle(Map query) { public List<StructattrVechielDto> collectVechicle(Map query) {
List<StructattrVechielDto> collectVehicle = this.baseMapper.collectVehicle(query); return this.baseMapper.collectVehicle(query);
return collectVehicle;
} }

View File

@@ -69,7 +69,7 @@ public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject
for (Map.Entry<String, List<StructattrVechielDto>> entry : sortedGroupMap.entrySet()) { for (Map.Entry<String, List<StructattrVechielDto>> entry : sortedGroupMap.entrySet()) {
List<StructattrVechielDto> sortedList = new ArrayList<>(entry.getValue()); List<StructattrVechielDto> sortedList = new ArrayList<>(entry.getValue());
for (StructattrVechielDto structattr : sortedList) { for (StructattrVechielDto structattr : sortedList) {
BigDecimal qty = structattr.getCanuse_qty() != null ? structattr.getCanuse_qty() : BigDecimal.ZERO; BigDecimal qty = structattr.getXqty() != null ? structattr.getQty() : BigDecimal.ZERO;
BigDecimal frozen = structattr.getFrozen_qty() != null ? structattr.getFrozen_qty() : BigDecimal.ZERO; BigDecimal frozen = structattr.getFrozen_qty() != null ? structattr.getFrozen_qty() : BigDecimal.ZERO;
int available = qty.subtract(frozen).intValue(); int available = qty.subtract(frozen).intValue();
if (available <= 0) { if (available <= 0) {

View File

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService; import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService; import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService;
@@ -19,7 +20,6 @@ import org.nl.wms.warehouse_management.service.IOutBillService;
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 javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -83,11 +83,13 @@ public class ErpToWmsServiceImpl implements ErpToWmsService {
jsonMst.put("source_id", whereJson.getString("inv_code")); jsonMst.put("source_id", whereJson.getString("inv_code"));
jsonMst.put("source_type", whereJson.getString("task_type")); jsonMst.put("source_type", whereJson.getString("task_type"));
jsonMst.put("bill_type", whereJson.getString("task_type")); jsonMst.put("bill_type", whereJson.getString("task_type"));
jsonMst.put("user","erp"); jsonMst.put("user", "erp");
// 查询仓库 // 查询仓库
BsrealStorattr storDao = iBsrealStorattrService.findByCode(whereJson.getString("stor_code")); BsrealStorattr storDao = iBsrealStorattrService.findByCode(whereJson.getString("stor_code"));
if (storDao == null) {
throw new BadRequestException("仓库不存在");
}
jsonMst.put("stor_id", storDao.getStor_id()); jsonMst.put("stor_id", storDao.getStor_id());
// 组织明细 // 组织明细
List<JSONObject> dataList = whereJson.getJSONArray("data").toJavaList(JSONObject.class); List<JSONObject> dataList = whereJson.getJSONArray("data").toJavaList(JSONObject.class);
// 查询所有物料 // 查询所有物料

View File

@@ -2,12 +2,12 @@ package org.nl.wms.pda.ios_manage.controller;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.base.TableDataInfo;
import org.nl.common.logging.annotation.Log; import org.nl.common.logging.annotation.Log;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.pda.ios_manage.service.PdaIosInService; import org.nl.wms.pda.ios_manage.service.PdaIosInService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@@ -73,7 +73,7 @@ public class PdaIosInController {
*/ */
@PostMapping("/getMaterialList") @PostMapping("/getMaterialList")
@Log("获取物料列表") @Log("获取物料列表")
public ResponseEntity<Object> getMaterialList(@RequestBody JSONObject whereJson) { public ResponseEntity<TableDataInfo<MdMeMaterialbase>> getMaterialList(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosInService.getMaterialList(whereJson), HttpStatus.OK); return new ResponseEntity<>(pdaIosInService.getMaterialList(whereJson), HttpStatus.OK);
} }
@@ -91,6 +91,7 @@ public class PdaIosInController {
@PostMapping("/confirmIn") @PostMapping("/confirmIn")
@Log("组盘入库确认") @Log("组盘入库确认")
public ResponseEntity<Object> confirmIn(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> confirmIn(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "vehicle_code", "sect_id");
return new ResponseEntity<>(pdaIosInService.confirmIn(whereJson), HttpStatus.OK); return new ResponseEntity<>(pdaIosInService.confirmIn(whereJson), HttpStatus.OK);
} }
@@ -109,7 +110,7 @@ public class PdaIosInController {
@PostMapping("/confirmReturnMaterial") @PostMapping("/confirmReturnMaterial")
@Log("余料回库确认") @Log("余料回库确认")
public ResponseEntity<Object> confirmReturnMaterial(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> confirmReturnMaterial(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "sect_code", "group_id", "vehicle_code", "material_code", "qty", "stor_id");
return new ResponseEntity<>(pdaIosInService.confirmReturnMaterial(whereJson),HttpStatus.OK); return new ResponseEntity<>(pdaIosInService.confirmReturnMaterial(whereJson),HttpStatus.OK);
} }
} }

View File

@@ -10,7 +10,6 @@ import org.nl.common.base.TableDataInfo;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.logging.annotation.Log; import org.nl.common.logging.annotation.Log;
import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda.ios_manage.service.dto.InventoryDto;
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;
@@ -19,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import static org.nl.common.utils.ValidationUtil.assertNotBlankJson;
/** /**
* 手持出库管理 * 手持出库管理
* *
@@ -47,8 +48,8 @@ public class PdaIosOutController {
*/ */
@PostMapping("/getMaterialDtl") @PostMapping("/getMaterialDtl")
@Log("物料出库获取物料库存") @Log("物料出库获取物料库存")
public ResponseEntity<InventoryDto> getMaterialDtl(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> getMaterialDtl(@RequestBody JSONObject whereJson) {
return null; return new ResponseEntity<>(pdaIosOutService.getMaterialDtl(whereJson), HttpStatus.OK);
} }
@@ -62,17 +63,28 @@ public class PdaIosOutController {
throw new BadRequestException("请求参数不能为空"); throw new BadRequestException("请求参数不能为空");
} }
// pdaIosOutService.bindOrUnbind(param.getString("siteCode"), param.getString("shelfCode"), param.getString("mode")); // pdaIosOutService.bindOrUnbind(param.getString("siteCode"), param.getString("shelfCode"), param.getString("mode"));
return new ResponseEntity<>(pdaIosOutService.confirm(param), HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
/** /**
* 物料出库确认 * 线边库物料出库确认
*/ */
@PostMapping("/materialConfirm") @PostMapping("/materialConfirm")
@Log("物料出库确认") @Log("线边库物料出库确认")
public ResponseEntity<Object> materialConfirm(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> materialConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosOutService.confirm(whereJson), HttpStatus.OK); assertNotBlankJson(whereJson, "请求参数不能为空", "group_id", "storagevehicle_code", "siteCode", "struct_code");
return new ResponseEntity<>(pdaIosOutService.materialConfirm(whereJson), HttpStatus.OK);
}
/**
* 载具出库确认
*/
@PostMapping("/confirm")
@Log("载具出库确认")
public ResponseEntity<Object> outStorageConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosOutService.outStorageConfirm(whereJson), HttpStatus.OK);
} }
@@ -81,19 +93,11 @@ public class PdaIosOutController {
*/ */
@PostMapping("/getVehicleMaterial") @PostMapping("/getVehicleMaterial")
@Log("出库确认获取物料明细") @Log("出库确认获取物料明细")
public ResponseEntity<InventoryDto> getVehicleMaterial(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> getVehicleMaterial(@RequestBody JSONObject whereJson) {
return null; return new ResponseEntity<>(pdaIosOutService.getVehicleMaterial(whereJson), HttpStatus.OK);
} }
/**
* 出库确认
*/
@PostMapping("/confirm")
@Log("出库确认")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosOutService.confirm(whereJson), HttpStatus.OK);
}

View File

@@ -1,7 +1,10 @@
package org.nl.wms.pda.ios_manage.service; package org.nl.wms.pda.ios_manage.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.nl.common.base.TableDataInfo;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.pda.util.PdaResponse;
import org.springframework.http.ResponseEntity;
/** /**
* <p> * <p>
@@ -60,7 +63,7 @@ public interface PdaIosInService {
* *
* @return PdaResponse * @return PdaResponse
*/ */
PdaResponse getMaterialList(JSONObject whereJson); TableDataInfo<MdMeMaterialbase> getMaterialList(JSONObject whereJson);
/** /**
* 查询物料列表 * 查询物料列表
@@ -84,7 +87,7 @@ public interface PdaIosInService {
* *
* @param whereJson { * @param whereJson {
* vehicle_code载具编码 * vehicle_code载具编码
* sect_id:库区 * sect_code:库区
* } * }
* @return PdaResponse * @return PdaResponse
*/ */
@@ -106,7 +109,7 @@ public interface PdaIosInService {
* *
* @param whereJson { * @param whereJson {
* vehicle_code载具编码 * vehicle_code载具编码
* sect_id:库区 * sect_code:库区
* } * }
* @return PdaResponse * @return PdaResponse
*/ */

View File

@@ -36,7 +36,18 @@ public interface PdaIosOutService {
/** /**
* 出库确认 * 出库确认获取物料明细
*
* @param whereJson {
* search 搜索条件
* }
* @return PdaResponse
*/
PdaResponse getVehicleMaterial(JSONObject whereJson);
/**
* 线边库物料出库确认
* *
* @param whereJson { * @param whereJson {
* storagevehicle_code 载具码 * storagevehicle_code 载具码
@@ -44,5 +55,16 @@ public interface PdaIosOutService {
* } * }
* @return PdaResponse * @return PdaResponse
*/ */
PdaResponse confirm(JSONObject whereJson); PdaResponse materialConfirm(JSONObject whereJson);
/**
* 载具出库确认
*
* @param whereJson {
* storagevehicle_code 载具码
* point_code 点位编码
* }
* @return PdaResponse
*/
PdaResponse outStorageConfirm(JSONObject whereJson);
} }

View File

@@ -7,31 +7,35 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil; import org.nl.common.utils.IdUtil;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.*; import org.nl.wms.basedata_manage.service.*;
import org.nl.wms.basedata_manage.service.dao.*; import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
import org.nl.wms.pda.ios_manage.service.PdaIosInService; import org.nl.wms.pda.ios_manage.service.PdaIosInService;
import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService; import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper; import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -107,15 +111,17 @@ public class PdaIosInServiceImpl implements PdaIosInService {
*/ */
@Autowired @Autowired
private IRawAssistIStorService iRawAssistIStorService; private IRawAssistIStorService iRawAssistIStorService;
/**
* 回库任务类
*/
@Autowired
private BackInTask backInTask;
/** /**
* 入库明细服务 * 入库明细服务
*/ */
@Autowired @Autowired
private IOStorInvDtlMapper ioStorInvDtlMapper; private IOStorInvDtlMapper ioStorInvDtlMapper;
@Autowired
private GroupPlateMapper groupPlateMapper;
@Override @Override
@Transactional @Transactional
@@ -133,16 +139,23 @@ public class PdaIosInServiceImpl implements PdaIosInService {
if (ObjectUtil.isEmpty(vehicleDao) || ObjectUtil.isEmpty(materDao)) { if (ObjectUtil.isEmpty(vehicleDao) || ObjectUtil.isEmpty(materDao)) {
throw new BadRequestException("载具,物料或单位信息有误!"); throw new BadRequestException("载具,物料或单位信息有误!");
} }
RedissonUtils.lock(() -> { //判断该载具是否存在组盘信息
//判断该载具编号是否已经存在库内 long statusCount = iMdPbGroupplateService.count(
long count = iStructattrService.count( new LambdaQueryWrapper<GroupPlate>()
new LambdaQueryWrapper<Structattr>() .eq(GroupPlate::getStoragevehicle_code, vehicleDao.getStoragevehicle_code())
.eq(Structattr::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) .lt(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("出库"))
); );
if (count > 0) { if (statusCount > 0) {
throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!"); throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在组盘信息,请对数据进行核实!");
} }
}, StatusEnum.STRATEGY_TYPE.code("入库") + vehicleDao.getStoragevehicle_code(), 5); //判断该载具编号是否已经存在库内
long count = iStructattrService.count(
new LambdaQueryWrapper<Structattr>()
.eq(Structattr::getStoragevehicle_code, vehicleDao.getStoragevehicle_code())
);
if (count > 0) {
throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!");
}
GroupPlate groupDao = GroupPlate.builder() GroupPlate groupDao = GroupPlate.builder()
.group_id(IdUtil.getStringId()) .group_id(IdUtil.getStringId())
.material_id(materDao.getMaterial_code()) .material_id(materDao.getMaterial_code())
@@ -185,38 +198,24 @@ public class PdaIosInServiceImpl implements PdaIosInService {
} }
@Override @Override
public PdaResponse getMaterialList(JSONObject whereJson) { public TableDataInfo<MdMeMaterialbase> getMaterialList(JSONObject whereJson) {
PageQuery pageQuery = new PageQuery();
pageQuery.setPage(whereJson.getInteger("page") - 1);
pageQuery.setSize(whereJson.getInteger("size"));
String search = whereJson.getString("search"); String search = whereJson.getString("search");
LambdaQueryWrapper<MdMeMaterialbase> wrapper = new QueryWrapper<MdMeMaterialbase>().lambda(); MaterialQuery materialQuery = new MaterialQuery();
if (StringUtils.isNotBlank(search)) { if (StringUtils.isNotBlank(whereJson.getString("search"))) {
wrapper.nested(r -> r materialQuery.setSearch(whereJson.getString("search").trim().toUpperCase());
.like(MdMeMaterialbase::getMaterial_code, search)
.or()
.like(MdMeMaterialbase::getMaterial_name, search)
.or()
.like(MdMeMaterialbase::getMaterial_spec, search)
);
} }
wrapper.eq(MdMeMaterialbase::getIs_delete, IOSConstant.IS_DELETE_NO) Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build());
.eq(MdMeMaterialbase::getIs_used, IOSConstant.IS_DELETE_YES) return PdaResponse.build(mapPage);
.select(
MdMeMaterialbase::getMaterial_id,
MdMeMaterialbase::getMaterial_code,
MdMeMaterialbase::getMaterial_name,
MdMeMaterialbase::getMaterial_model,
MdMeMaterialbase::getMaterial_spec,
MdMeMaterialbase::getBase_unit_id
)
.last("LIMIT 100");
List<MdMeMaterialbase> materialist = iMdMeMaterialbaseService.list(wrapper);
return PdaResponse.requestParamOk(materialist);
} }
@Override @Override
public PdaResponse getVehicleMaterial(JSONObject whereJson) { public PdaResponse getVehicleMaterial(JSONObject whereJson) {
whereJson.put("status", GROUP_PLATE_STATUS.code("组盘")); whereJson.put("status", GROUP_PLATE_STATUS.code("组盘"));
whereJson.put("vehicleCode", whereJson.getString("search")); whereJson.put("vehicleCode", whereJson.getString("search"));
return PdaResponse.requestParamOk(groupPlateMapper.getVehicleMaterial(whereJson)); return PdaResponse.requestParamOk(mdPbGroupplateMapper.getVehicleMaterial(whereJson));
} }
/** /**
@@ -232,13 +231,17 @@ public class PdaIosInServiceImpl implements PdaIosInService {
whereJson.put("status", GROUP_PLATE_STATUS.code("出库")); whereJson.put("status", GROUP_PLATE_STATUS.code("出库"));
whereJson.put("vehicleCode", whereJson.getString("search")); whereJson.put("vehicleCode", whereJson.getString("search"));
whereJson.put("qty", 0); whereJson.put("qty", 0);
return PdaResponse.requestParamOk(groupPlateMapper.getVehicleMaterial(whereJson)); List<JSONObject> list = mdPbGroupplateMapper.getVehicleMaterial(whereJson);
if (CollectionUtils.isEmpty(list)) {
throw new BadRequestException("此载具无余料可回库!");
}
return PdaResponse.requestParamOk(list);
} }
@Override @Override
public PdaResponse getSect() { public PdaResponse getSect() {
PageQuery page = new PageQuery(); PageQuery page = new PageQuery();
page.setSize(100); page.setSize(20);
page.setPage(0); page.setPage(0);
IPage<SectattrDto> sectList = iSectattrService.queryAll(new HashMap(), page); IPage<SectattrDto> sectList = iSectattrService.queryAll(new HashMap(), page);
List<SectattrDto> result = sectList.getRecords(); List<SectattrDto> result = sectList.getRecords();
@@ -253,7 +256,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
* *
* @param whereJson { * @param whereJson {
* vehicle_code载具编码 * vehicle_code载具编码
* sect_id:库区 * sect_code:库区
* } * }
* @return PdaResponse * @return PdaResponse
*/ */
@@ -262,9 +265,46 @@ public class PdaIosInServiceImpl implements PdaIosInService {
public PdaResponse confirmReturnMaterial(JSONObject whereJson) { public PdaResponse confirmReturnMaterial(JSONObject whereJson) {
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code"));
if (ObjectUtil.isEmpty(vehicleDao)) { if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("没有该载具号信息"); throw new BadRequestException("不存在该载具号信息,请检查");
} }
// 查找入库货位 // 查询仓库
BsrealStorattr storeDao = iSrealStorattrService.getById(whereJson.getString("stor_id"));
if (ObjectUtil.isEmpty(storeDao)) {
throw new BadRequestException("该库区未找到对应仓库信息,请检查");
}
//分配仓位
JSONObject params = new JSONObject();
params.put("storagevehicle_code", vehicleDao.getStoragevehicle_code());
params.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库"));
params.put("sect_code", whereJson.getString("sect_code"));
params.put("stor_code", storeDao.getStor_code());
params.put("material_code", whereJson.getString("material_code"));
params.put("qty", whereJson.getString("qty"));
params.put("pcsn", whereJson.getString("pcsn"));
Structattr attrDao = iRawAssistIStorService.divBackStruct(params);
//获取起点
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查");
}
// 生成回库任务
JSONObject task = new JSONObject();
task.put("config_code", IOSConstant.BACK_IN_TASK);
task.put("point_code1", schBasePoint.getPoint_code());
task.put("point_code2", attrDao.getStruct_code());
task.put("vehicle_code", whereJson.getString("vehicle_code"));
task.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
String task_id = backInTask.create(task);
// 更新终点锁定状态
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
attrDao.setTaskdtl_id(task_id);
iStructattrService.updateById(attrDao);
// 更新起点绑定id
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.set(SchBasePoint::getIos_id, null)
.eq(SchBasePoint::getPoint_code, schBasePoint.getPoint_code())
);
return PdaResponse.requestOk(); return PdaResponse.requestOk();
} }
@@ -272,12 +312,9 @@ public class PdaIosInServiceImpl implements PdaIosInService {
@Override @Override
@Transactional @Transactional
public PdaResponse confirmIn(JSONObject whereJson) { public PdaResponse confirmIn(JSONObject whereJson) {
//校验起点 //获取起点
SchBasePoint schBasePoint = iSchBasePointService SchBasePoint schBasePoint = iSchBasePointService
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code"))); .getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("vehicle_code")));
if (schBasePoint == null) {
throw new BadRequestException("载具编码:" + whereJson.getString("vehicle_code") + "未绑定站点信息,请检查!");
}
whereJson.put("point_code", schBasePoint.getPoint_code()); whereJson.put("point_code", schBasePoint.getPoint_code());
// 预组织出入库单据实体 // 预组织出入库单据实体
Map<String, Object> jsonMst = organizeInsertData(whereJson); Map<String, Object> jsonMst = organizeInsertData(whereJson);
@@ -298,7 +335,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
* @param whereJson { * @param whereJson {
* storagevehicle_code载具编码 * storagevehicle_code载具编码
* point_code点位编码 * point_code点位编码
* sect_id:库区 * sect_code:库区
* } * }
* @return Map<String, Object> * @return Map<String, Object>
*/ */
@@ -358,7 +395,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
private Map<String, Object> organizeDivData(JSONObject whereJson) { private Map<String, Object> organizeDivData(JSONObject whereJson) {
// 查询库区 // 查询库区
Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id")); Sectattr sectDao = iSectattrService.getById(whereJson.getString("sect_id"));
// 查询库 // 查询
BsrealStorattr storeDao = iSrealStorattrService.getById(sectDao.getStor_id()); BsrealStorattr storeDao = iSrealStorattrService.getById(sectDao.getStor_id());
// 组织主数据 // 组织主数据
Map<String, Object> jsonMst = new HashMap<>(); Map<String, Object> jsonMst = new HashMap<>();
@@ -391,7 +428,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
* @param whereJson { * @param whereJson {
* storagevehicle_code载具编码 * storagevehicle_code载具编码
* point_code点位编码 * point_code点位编码
* sect_id:库区 * sect_code:库区
* iostorinv_id: id * iostorinv_id: id
* } * }
*/ */

View File

@@ -1,32 +1,36 @@
package org.nl.wms.pda.ios_manage.service.impl; package org.nl.wms.pda.ios_manage.service.impl;
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.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.MapOf;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.pda.ios_manage.service.PdaIosOutService; import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda.util.PdaResponse; import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.util.tasks.BackInTask; import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService; import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils; import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
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 java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS;
/** /**
* <p> * <p>
@@ -38,6 +42,12 @@ import java.math.BigDecimal;
*/ */
@Service @Service
public class PdaIosOutServiceImpl implements PdaIosOutService { public class PdaIosOutServiceImpl implements PdaIosOutService {
/**
* 组盘记录mapper
*/
@Autowired
private MdPbGroupplateMapper mdPbGroupplateMapper;
/** /**
* 载具扩展属性服务 * 载具扩展属性服务
@@ -76,10 +86,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
private UpdateIvtUtils updateIvtUtils; private UpdateIvtUtils updateIvtUtils;
/** /**
* 库任务类 * 库任务类
*/ */
@Autowired @Autowired
private BackInTask backInTask; private StOutTask stOutTask;
/** /**
* 入库服务服务 * 入库服务服务
@@ -87,6 +97,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired @Autowired
private IRawAssistIStorService iRawAssistIStorService; private IRawAssistIStorService iRawAssistIStorService;
@Override @Override
public PdaResponse getDtl(JSONObject whereJson) { public PdaResponse getDtl(JSONObject whereJson) {
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.getIosDtl(whereJson)); return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.getIosDtl(whereJson));
@@ -95,87 +106,72 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Override @Override
public PdaResponse getMaterialDtl(JSONObject whereJson) { public PdaResponse getMaterialDtl(JSONObject whereJson) {
return null; List<StructattrVechielDto> list = iStructattrService.collectVechicle(
MapOf.of("search", whereJson.getString("search"),
"stor_code", "XB01",
"status", GROUP_PLATE_STATUS.code("入库"),
"is_lock", "false",
"order_by", "gro.create_time asc"));
return PdaResponse.requestParamOk(list);
}
@Override
public PdaResponse getVehicleMaterial(JSONObject whereJson) {
whereJson.put("status", GROUP_PLATE_STATUS.code("出库"));
whereJson.put("vehicleCode", whereJson.getString("search"));
whereJson.put("qty", 0);
return PdaResponse.requestParamOk(mdPbGroupplateMapper.getVehicleMaterial(whereJson));
} }
@Override @Override
@Transactional @Transactional
public PdaResponse confirm(JSONObject whereJson) { public PdaResponse materialConfirm(JSONObject whereJson) {
// 获取点位信息 //锁定货位
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code")); JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", whereJson.getString("struct_code"));
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
//创建任务
JSONObject taskForm = new JSONObject();
taskForm.put("task_type", "STOutTask");
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
taskForm.put("PickingLocation", whereJson.getString("struct_code"));
taskForm.put("PlacedLocation", whereJson.getString("siteCode"));
taskForm.put("vehicle_code", whereJson.getString("storagevehicle_code"));
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
stOutTask.create(taskForm);
iStructattrService.updateStatusByCode("0", lock_map);
//更新组盘记录表
mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getGroup_id, whereJson.getString("group_id"))
);
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse outStorageConfirm(JSONObject whereJson) {
//获取终点
SchBasePoint pointDao = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")));
if (ObjectUtil.isEmpty(pointDao)) { if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前点位不存在!!"); throw new BadRequestException("未找到载具所在的点位信息,请检查");
} }
// 获取出入库单明细信息 GroupPlate groupPlate = mdPbGroupplateMapper.selectById(whereJson.getString("group_id"));
IOStorInvDis disDao = ioStorInvDisMapper.selectById(pointDao.getIos_id()); //更新组盘信息
if(ObjectUtil.isEmpty(disDao)) { LambdaUpdateWrapper<GroupPlate> updateWrapper = new LambdaUpdateWrapper<>();
throw new BadRequestException("未查询到出库单分配明细!"); if ("1" .equals(whereJson.getString("type"))) {
} BigDecimal qty = groupPlate.getQty().subtract(groupPlate.getFrozen_qty()).abs();
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectById(disDao.getIostorinvdtl_id()); updateWrapper.set(GroupPlate::getQty, qty).set(GroupPlate::getFrozen_qty, 0);
// 获取点位库存信息
JSONObject jsonIvt = mdPbStoragevehicleextMapper.getIosDtl(whereJson).get(0);
if (ObjectUtil.isEmpty(jsonIvt)) {
throw new BadRequestException("当前点位没有库存信息!");
}
// 判断是否整出
double plan_qty = dtlDao.getPlan_qty().doubleValue();
double real_qty = NumberUtil.add(dtlDao.getReal_qty(), jsonIvt.getDoubleValue("qty")).doubleValue();
if (plan_qty >= real_qty) {
// ------整出------
// 删除当前库存记录
mdPbStoragevehicleextMapper.deleteById(jsonIvt.getString("storagevehicleext_id"));
// 释放点位
iSchBasePointService.unLockPoint(pointDao.getPoint_code());
// 更新明细实际出库重量
dtlDao.setReal_qty(BigDecimal.valueOf(real_qty));
ioStorInvDtlMapper.updateById(dtlDao);
// 更新分配明细实际出库数量
disDao.setReal_qty(jsonIvt.getBigDecimal("qty"));
ioStorInvDisMapper.updateById(disDao);
} else { } else {
// ------剩余回库------ updateWrapper.set(GroupPlate::getQty, 0).set(GroupPlate::getFrozen_qty, 0);
// 更新库存 :变动数量 = 减可用(库存数量-(实际出库数量-计划数量))
jsonIvt.put("type", IOSConstant.UPDATE_IVT_TYPE_SUB_CANUSE_IVT);
BigDecimal change_qty = NumberUtil.sub(jsonIvt.getBigDecimal("qty"), NumberUtil.sub(real_qty, plan_qty));
jsonIvt.put("change_qty", change_qty);
jsonIvt.put("remark", "剩余回库");
updateIvtUtils.updateIvt(jsonIvt);
// 更新明细实际出库重量(明细计划数量)
dtlDao.setReal_qty(BigDecimal.valueOf(plan_qty));
ioStorInvDtlMapper.updateById(dtlDao);
// 更新分配明细实际出库重量 = 变动数量
disDao.setReal_qty(change_qty);
ioStorInvDisMapper.updateById(disDao);
// 查找入库货位
JSONObject paramPoint = new JSONObject();
paramPoint.put("sect_id", disDao.getSect_id());
paramPoint.put("storagevehicle_code", jsonIvt.getString("storagevehicle_code"));
Structattr attrDao = iRawAssistIStorService.autoDis(paramPoint);
// 生成回库任务
JSONObject task = new JSONObject();
task.put("config_code", IOSConstant.BACK_IN_TASK);
task.put("point_code1", pointDao.getPoint_code());
task.put("point_code2", attrDao.getStruct_code());
task.put("vehicle_code", jsonIvt.getString("storagevehicle_code"));
task.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
String task_id = backInTask.create(task);
// 更新终点锁定状态
attrDao.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
attrDao.setTaskdtl_id(task_id);
iStructattrService.updateById(attrDao);
// 更新起点绑定id
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
.set(SchBasePoint::getIos_id, null)
.eq(SchBasePoint::getPoint_code, pointDao.getPoint_code())
);
} }
updateWrapper.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")).eq(GroupPlate::getGroup_id, whereJson.getString("group_id"));
// 释放点位
// iSchBasePointService.unLockPoint(pointDao.getPoint_code());
return PdaResponse.requestOk(); return PdaResponse.requestOk();
} }
} }

View File

@@ -1,7 +1,10 @@
package org.nl.wms.pda.util; package org.nl.wms.pda.util;
import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import org.nl.common.base.TableDataInfo;
/** /**
* <p> * <p>
@@ -46,5 +49,14 @@ public class PdaResponse<T> {
.build(); .build();
} }
public static <T> TableDataInfo<T> build(IPage<T> page) {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
rspData.setMsg("查询成功");
rspData.setContent(page.getRecords());
rspData.setTotalElements(page.getTotal());
return rspData;
}
} }

View File

@@ -1,6 +1,5 @@
package org.nl.wms.warehouse_management.service; package org.nl.wms.warehouse_management.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@@ -11,7 +10,6 @@ import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto; import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.data.domain.Pageable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -42,6 +40,16 @@ public interface IRawAssistIStorService extends IService<IOStorInv> {
void divStruct(JSONObject whereJson); void divStruct(JSONObject whereJson);
/**
* 根据库区策略获取仓位
* storagevehicle_code 载具号
* ioType 出入库类型
* sect_code 库区编码
* stor_code 仓库编码
* material_code 物料编码
* qty 计划数量
* pcsn 批次号
*/
Structattr divBackStruct(JSONObject whereJson); Structattr divBackStruct(JSONObject whereJson);
void unDivStruct(Map whereJson); void unDivStruct(Map whereJson);

View File

@@ -1,23 +0,0 @@
package org.nl.wms.warehouse_management.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import java.util.List;
import java.util.Map;
/**
* @author dsh
* 2025/5/21
*/
@Mapper
public interface GroupPlateMapper extends BaseMapper<GroupPlate> {
//查询载具物料信息
List<JSONObject> getVehicleMaterial(@Param("params") Map whereJson);
}

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper">
<select id="getVehicleMaterial" resultType="com.alibaba.fastjson.JSONObject">
SELECT
gro.*,
mater.material_id,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate gro
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
<where>
1 = 1
<if test="params.vehicleCode != null and params.vehicleCode != ''">
AND
gro.storagevehicle_code = #{params.vehicleCode}
</if>
<if test="params.status != null and params.status != ''">
AND
gro.status = #{params.status}
</if>
<if test="params.qty != null and params.qty != ''">
AND
gro.qty>0
</if>
</where>
ORDER BY gro.create_time Desc
</select>
</mapper>

View File

@@ -35,4 +35,10 @@ public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
* @return IPage<StIvtMoveinv> * @return IPage<StIvtMoveinv>
*/ */
IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson); IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson);
//查询载具物料信息
List<JSONObject> getVehicleMaterial(@Param("params") Map whereJson);
} }

View File

@@ -52,4 +52,31 @@
</where> </where>
ORDER BY late.create_time Desc ORDER BY late.create_time Desc
</select> </select>
<select id="getVehicleMaterial" resultType="com.alibaba.fastjson.JSONObject">
SELECT
gro.*,
mater.material_id,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate gro
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
<where>
1 = 1
<if test="params.vehicleCode != null and params.vehicleCode != ''">
AND
gro.storagevehicle_code = #{params.vehicleCode}
</if>
<if test="params.status != null and params.status != ''">
AND
gro.status = #{params.status}
</if>
<if test="params.qty != null and params.qty != ''">
AND
gro.qty>0
</if>
</where>
ORDER BY gro.create_time Desc
</select>
</mapper> </mapper>

View File

@@ -42,10 +42,10 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.IOStorInv; import org.nl.wms.warehouse_management.service.dao.IOStorInv;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.GroupPlateMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper; import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto; import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -75,7 +75,11 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
@Resource @Resource
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
/**
* 组盘记录mapper
*/
@Autowired
private MdPbGroupplateMapper mdPbGroupplateMapper;
/** /**
* 载具扩展属性mapper * 载具扩展属性mapper
*/ */
@@ -94,8 +98,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
@Resource @Resource
private IOStorInvDtlMapper ioStorInvDtlMapper; private IOStorInvDtlMapper ioStorInvDtlMapper;
@Resource
private GroupPlateMapper groupPlateMapper;
@Resource @Resource
private SchBasePointMapper schBasePointMapper; private SchBasePointMapper schBasePointMapper;
@@ -1134,7 +1137,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
dtlSet.add(ioStorInvDis.getIostorinvdtl_id()); dtlSet.add(ioStorInvDis.getIostorinvdtl_id());
//更新组盘记录表 //更新组盘记录表
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class) mdPbGroupplateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库")) .set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn()) .eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id()) .eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())
@@ -1218,7 +1221,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
); );
//更新组盘记录表 //更新组盘记录表
groupPlateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class) mdPbGroupplateMapper.update(new GroupPlate(),new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库")) .set(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn()) .eq(GroupPlate::getPcsn,ioStorInvDis.getPcsn())
.eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id()) .eq(GroupPlate::getMaterial_id,ioStorInvDis.getMaterial_id())

View File

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil; import org.nl.common.utils.CodeUtil;
@@ -46,7 +47,6 @@ import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
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.Assert; import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -428,9 +428,34 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
ioStorInvMapper.updateById(ios); ioStorInvMapper.updateById(ios);
} }
/**
* 根据库区策略获取仓位
* storagevehicle_code 载具号
* ioType 出入库类型
* sect_code 库区编码
* stor_code 仓库编码
* material_code 物料编码
* qty 计划数量
* pcsn 批次号
*/
@Override @Override
public Structattr divBackStruct(JSONObject whereJson) { public Structattr divBackStruct(JSONObject whereJson) {
return null; Structattr structattr = getStructattr(whereJson);
//锁定货位
JSONObject lock_map = new JSONObject();
lock_map.put("struct_code", structattr.getStruct_code());
lock_map.put("inv_id", null);
lock_map.put("inv_code", null);
lock_map.put("inv_type", null);
lock_map.put("lock_type", IOSEnum.LOCK_TYPE.code("入库锁"));
iStructattrService.updateStatusByCode("0", lock_map);
//更新组盘表状态
mdPbGroupplateService.update(new LambdaUpdateWrapper<GroupPlate>()
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")));
return structattr;
} }
@@ -440,7 +465,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
* sect_code 库区编码 * sect_code 库区编码
* stor_code 仓库编码 * stor_code 仓库编码
* material_code 物料编码 * material_code 物料编码
* plan_qty 计划数量 * qty 计划数量
* pcsn 批次号 * pcsn 批次号
*/ */
public Structattr getStructattr(JSONObject param) { public Structattr getStructattr(JSONObject param) {
@@ -534,14 +559,14 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
//创建任务 //创建任务
JSONObject task_form = new JSONObject(); JSONObject task_form = new JSONObject();
task_form.put("task_type", "STInTask"); task_form.put("task_type", "STInTask");
task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task_form.put("PickingLocation", point_code); task_form.put("PickingLocation", point_code);
task_form.put("PlacedLocation", ioStorInvDis.getStruct_code()); task_form.put("PlacedLocation", ioStorInvDis.getStruct_code());
task_form.put("vehicle_code", map.get("storagevehicle_code")); task_form.put("vehicle_code", map.get("storagevehicle_code"));
// GroupPlate groupPlate = groupPlateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class) // GroupPlate groupPlate = mdPbGroupplateMapper.selectOne(new LambdaQueryWrapper<>(GroupPlate.class)
// .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code")) // .eq(GroupPlate::getStoragevehicle_code,map.get("storagevehicle_code"))
// ); // );
// task_form.put("group_id", groupPlate.getGroup_id()); // task_form.put("group_id", groupPlate.getGroup_id());
StInTask stInTask = SpringContextHolder.getBean("STInTask"); StInTask stInTask = SpringContextHolder.getBean("STInTask");
String task_id = stInTask.create(task_form); String task_id = stInTask.create(task_form);