opt:优化物料组盘、来料入库、点位属性设置、手工叫料、手工退料 优化

This commit is contained in:
zhengxuming
2025-09-04 15:21:56 +08:00
parent e8977efa20
commit d08c9d588c
30 changed files with 539 additions and 242 deletions

View File

@@ -107,8 +107,6 @@ public class GroupController {
.list(new LambdaUpdateWrapper<PmFormData>().eq(PmFormData::getCode, groupPlate.getExt_code()));
if (!CollectionUtils.isEmpty(pmFormDataList)) {
if(!pmFormDataList.get(0).getMaterial_code().equals(groupPlate.getMaterial_code())){
throw new BadRequestException("组盘的物料编码与单据的物料编码不一致,请核对!");
}
@@ -119,7 +117,6 @@ public class GroupController {
.set(PmFormData::getUpdate_time, DateUtil.now())
.set(PmFormData::getUpdate_name, SecurityUtils.getCurrentNickName())
.eq(PmFormData::getCode, groupPlate.getExt_code()));
}
}
//修改点位表中的点位为有料
@@ -130,7 +127,6 @@ public class GroupController {
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
.eq(SchBasePoint::getVehicle_code, groupPlate.getStoragevehicle_code()));
groupPlate.setSupp_code(supp.getSupp_code());
groupPlate.setSupp_name(supp.getSupp_name());
groupPlate.setGroup_id(IdUtil.getStringId());

View File

@@ -28,6 +28,14 @@ public interface ISectattrService extends IService<Sectattr> {
*/
IPage<SectattrDto> queryAll(Map whereJson, PageQuery page);
/**
* 获取所有数据,不分页
*
* @param whereJson 条件
* @return Map<String, Object>
*/
List<SectattrDto> getAll(Map whereJson);
/**
* 根据ID查询
*

View File

@@ -120,4 +120,12 @@ public interface IStructattrService extends IService<Structattr> {
* @param changeDto
*/
void changeStruct(StructattrChangeDto changeDto);
/**
* 根据仓位编码
*
* @param vehicleCode 仓位编码
* @return Structattr
*/
Structattr getByVehicleCode(String vehicleCode);
}

View File

@@ -129,4 +129,8 @@ public class MdPbStoragevehicleinfo implements Serializable {
*/
private String ext_id;
/**
* 推荐库区
*/
private String recommended_sect_code;
}

View File

@@ -38,6 +38,13 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper<MdPbStoragevehic
*/
BigDecimal queryCanuseSum(@Param("pcsn") String pcsn,@Param("material_id") String material_id);
/**
* 查询
* @param whereJson 查询条件
* @return IPage<List>
*/
List<JSONObject> queryAll( @Param("param") Map whereJson);
/**
* 分页查询
* @param page 分页条件

View File

@@ -66,6 +66,8 @@
ext.frozen_qty,
ext.remark,
ext.create_time,
ext.supp_code,
ext.supp_name,
attr.struct_code,
attr.struct_name,
attr.stor_name,
@@ -88,6 +90,12 @@
attr.sect_id = #{param.sect_id}
</if>
<if test="param.sect_code != null and param.sect_code != ''">
AND
attr.sect_code = #{param.sect_code}
</if>
<if test="param.struct_code != null and param.struct_code != ''">
AND
(attr.struct_code LIKE #{param.struct_code} or
@@ -96,8 +104,8 @@
<if test="param.material_code != null and param.material_code != ''">
AND
(mater.material_code LIKE #{param.material_code} or
mater.material_name LIKE #{param.material_code} )
(mater.material_code LIKE CONCAT('%', #{param.material_code},'%') or
mater.material_name LIKE CONCAT('%', #{param.material_code},'%') )
</if>
<if test="param.pcsn != null and param.pcsn != ''">
@@ -108,6 +116,67 @@
ORDER BY ext.create_time Desc
</select>
<select id="queryAll" resultType="com.alibaba.fastjson.JSONObject">
SELECT
ext.group_id as storagevehicleext_id,
ext.storagevehicle_code,
ext.pcsn,
ext.qty_unit_name,
ext.qty,
ext.frozen_qty,
ext.remark,
ext.create_time,
ext.supp_code,
ext.supp_name,
attr.struct_code,
attr.struct_name,
attr.stor_name,
attr.sect_name,
mater.material_code,
mater.material_name
FROM
md_pb_groupplate ext
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
INNER JOIN md_me_materialbase mater ON mater.material_id = ext.material_id
<where>
1 = 1
<if test="param.stor_id != null and param.stor_id != ''">
AND
attr.stor_id = #{param.stor_id}
</if>
<if test="param.sect_id != null and param.sect_id != ''">
AND
attr.sect_id = #{param.sect_id}
</if>
<if test="param.sect_code != null and param.sect_code != ''">
AND
attr.sect_code = #{param.sect_code}
</if>
<if test="param.struct_code != null and param.struct_code != ''">
AND
(attr.struct_code LIKE #{param.struct_code} or
attr.struct_name LIKE #{param.struct_code} )
</if>
<if test="param.material_code != null and param.material_code != ''">
AND
(mater.material_code LIKE CONCAT('%', #{param.material_code},'%') or
mater.material_name LIKE CONCAT('%', #{param.material_code},'%') )
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn LIKE #{param.pcsn}
</if>
</where>
ORDER BY ext.create_time Desc
</select>
<select id="queryCanuseSum" resultType="java.math.BigDecimal">
SELECT
SUM(qty)

View File

@@ -9,6 +9,7 @@ import org.nl.wms.basedata_manage.service.dao.BsrealStorattrDto;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.SectattrDto;
import java.util.List;
import java.util.Map;
/**
@@ -20,4 +21,5 @@ public interface SectattrMapper extends BaseMapper<Sectattr> {
IPage<SectattrDto> queryAllByPage(Page<BsrealStorattrDto> page, @Param("params") Map params);
List<SectattrDto> queryAll( @Param("params") Map params);
}

View File

@@ -18,4 +18,30 @@
</where>
ORDER BY sect.update_time Desc
</select>
<select id="queryAll" resultType="org.nl.wms.basedata_manage.service.dao.SectattrDto">
SELECT sect.*,stor.stor_name FROM st_ivt_sectattr sect LEFT JOIN st_ivt_bsrealstorattr stor ON sect.stor_id = stor.stor_id
<where>
sect.is_delete = '0'
<if test="params.search != null">
AND
sect.sect_code LIKE CONCAT('%', #{params.search}, '%')
OR
sect.sect_name LIKE CONCAT('%', #{params.search}, '%')
</if>
<if test="params.stor_id != null">
AND
sect.stor_id = #{params.stor_id}
</if>
<if test="params.sect_code != null ">
AND
sect.sect_code LIKE CONCAT('%', #{params.sect_code}, '%')
</if>
<if test="params.stor_code != null">
AND
stor.stor_code = #{params.stor_code}
</if>
</where>
ORDER BY sect.update_time Desc
</select>
</mapper>

View File

@@ -31,5 +31,4 @@ public class MdPbStoragevehicleextServiceImpl extends ServiceImpl<MdPbStorageveh
whereJson);
}
}

View File

@@ -53,6 +53,11 @@ public class SectattrServiceImpl extends ServiceImpl<SectattrMapper, Sectattr> i
return sectattrMapper.queryAllByPage(new Page<>(page.getPage() +1 ,page.getSize()), whereJson);
}
@Override
public List<SectattrDto> getAll(Map whereJson) {
return sectattrMapper.queryAll(whereJson);
}
@Override
public Sectattr findById(String sect_id) {

View File

@@ -455,4 +455,16 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
}
}
@Override
public Structattr getByVehicleCode(String vehicleCode) {
Structattr one = this.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, vehicleCode)
);
if (ObjectUtil.isEmpty(one)) {
throw new BadRequestException("此载具不在仓位上【" + vehicleCode + "");
}
return one;
}
}

View File

@@ -164,7 +164,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
}
// 出库的仓位
Structattr outStructAttr = structattrService.getByCode(dto.getStruct_code());
Structattr outStructAttr = structattrService.getByVehicleCode(dto.getStruct_code());
if (ObjectUtil.isEmpty(outStructAttr)) {
throw new BadRequestException("仓位【" + dto.getStruct_code() + "】不存在!");
}

View File

@@ -11,6 +11,7 @@ import org.nl.common.base.TableDataInfo;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmCheckParamDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosCheckService;
@@ -94,6 +95,12 @@ public class PdaIosInController {
return new ResponseEntity<>(pdaIosInService.getPdaSect(whereJson), HttpStatus.OK);
}
@PostMapping("/getPdaCallMaterialSect")
@Log("PDA叫料获取库区")
public ResponseEntity<Object> getPdaCallMaterialSect(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaIosInService.getPdaCallMaterialSect(whereJson), HttpStatus.OK);
}
@PostMapping("/getPdaStruct")
@Log("PDA获取库位")
@@ -145,17 +152,15 @@ public class PdaIosInController {
@PostMapping("/zwConfirmIn")
@Log("中钨组盘入库确认")
public ResponseEntity<Object> zwConfirmIn(@RequestBody ZwConfirmInDto dto) {
if(StringUtils.isEmpty(dto.getForm_data_code())){
throw new IllegalArgumentException("单据编码不能为空!");
}
if(CollectionUtils.isEmpty(dto.getParam_list())){
throw new IllegalArgumentException("请传入参数!");
}
for(ZwConfirmInParamDto paramDto : dto.getParam_list()){
if(StringUtils.isBlank(paramDto.getVehicle_code()) || StringUtils.isBlank(paramDto.getSite_code()))
throw new IllegalArgumentException("载具且卸货区点位不能为空!");
if(StringUtils.isBlank(paramDto.getVehicle_code()) || StringUtils.isBlank(paramDto.getSite_code())
|| StringUtils.isBlank(paramDto.getForm_data_code()))
throw new IllegalArgumentException("载具、卸货区点位、单据不能为空!");
}
return new ResponseEntity<>(pdaIosInService.zwConfirmIn(dto), HttpStatus.OK);
@@ -228,7 +233,7 @@ public class PdaIosInController {
@PostMapping("/inCheck")
@Log("PDA来料入库校验点位和托盘码")
public ResponseEntity<Object> inCheck(@RequestBody ZwConfirmInParamDto dto) {
public ResponseEntity<Object> inCheck(@RequestBody ZwConfirmCheckParamDto dto) {
return new ResponseEntity<>(pdaIosInService.inCheck(dto), HttpStatus.OK);
}

View File

@@ -143,5 +143,12 @@ public class PdaIosOutController {
return new ResponseEntity<>(pdaIosOutService.getMaterialSuppByVehicleCode(whereJson), HttpStatus.OK);
}
@PostMapping("/getStructivtByMaterialAndSectCode")
@Log("根据库区、物料信息获取库存信息")
public ResponseEntity<Object> getStructivtByMaterialAndSectCode(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "sect_code");
return new ResponseEntity<>(pdaIosOutService.getStructivtByMaterialAndSectCode(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,8 @@
package org.nl.wms.pda_manage.ios_manage.dto;
import lombok.Data;
@Data
public class ZwConfirmCheckParamDto {
private String site_vehicle_code;
}

View File

@@ -0,0 +1,12 @@
package org.nl.wms.pda_manage.ios_manage.dto;
import lombok.Data;
@Data
public class ZwConfirmCheckParamRespondDto {
private String site_code;
private String vehicle_code;
private String material_code;
private String qty;
private String form_data_code;
}

View File

@@ -6,6 +6,5 @@ import java.util.List;
@Data
public class ZwConfirmInDto {
private String form_data_code;
private List<ZwConfirmInParamDto> param_list;
}

View File

@@ -6,4 +6,5 @@ import lombok.Data;
public class ZwConfirmInParamDto {
private String site_code;
private String vehicle_code;
private String form_data_code;
}

View File

@@ -5,6 +5,7 @@ import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.vo.SelectItemVo;
import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmCheckParamDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto;
import org.nl.wms.pda_manage.util.PdaResponse;
@@ -103,6 +104,13 @@ public interface PdaIosInService {
*/
PdaResponse getPdaSect(JSONObject whereJson);
/**
* 叫料查询库区
*
* @return PdaResponse
*/
PdaResponse getPdaCallMaterialSect(JSONObject whereJson);
/**
* 查询库位
*
@@ -220,7 +228,7 @@ public interface PdaIosInService {
PdaResponse inCheck (ZwConfirmInParamDto dto);
PdaResponse inCheck (ZwConfirmCheckParamDto dto);
/**
* 通过载具编码获取点位

View File

@@ -131,4 +131,11 @@ public interface PdaIosOutService {
* @return PdaResponse
*/
PdaResponse getMaterialSuppByVehicleCode(JSONObject whereJson);
/**
* 查询组盘信息通过载具编号
*
* @return PdaResponse
*/
PdaResponse getStructivtByMaterialAndSectCode(JSONObject whereJson);
}

View File

@@ -2,7 +2,6 @@ package org.nl.wms.pda_manage.ios_manage.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -16,17 +15,14 @@ import org.nl.common.base.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.domain.vo.SelectItemVo;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.*;
import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dao.mapper.SectattrMapper;
import org.nl.wms.basedata_manage.service.dto.MaterialQuery;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmCheckParamDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmCheckParamRespondDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto;
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService;
@@ -49,15 +45,10 @@ import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.tasks.BackInTask;
import org.nl.wms.sch_manage.service.util.tasks.VehicleInTask;
import org.nl.wms.sch_manage.service.util.tasks.VehicleOutTask;
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
import org.nl.wms.system_manage.service.dict.dao.Dict;
import org.nl.wms.system_manage.service.dict.dao.mapper.SysDictMapper;
import org.nl.wms.system_manage.service.logicflow.dao.StageImage;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
@@ -359,6 +350,25 @@ public class PdaIosInServiceImpl implements PdaIosInService {
return PdaResponse.requestParamOk(selectList);
}
@Override
public PdaResponse getPdaCallMaterialSect(JSONObject whereJson) {
Map <String,String> selectMap = new HashMap<>();
SchBasePoint schBasePoint = iSchBasePointService.getPointByCode(whereJson.getString("point_code"));
if(schBasePoint != null && StringUtils.isNotBlank(schBasePoint.getRegion_code())){
selectMap.put("sect_code",schBasePoint.getRegion_code().substring(0,2));
}
selectMap.put("stor_code","LT");
List<SectattrDto> sectattrList = iSectattrService.getAll(selectMap);
List<SelectItemVo> selectList = new ArrayList<>();
sectattrList.forEach(r ->
selectList.add(SelectItemVo.builder().text( r.getSect_name()).value(r.getSect_id()).build())
);
return PdaResponse.requestParamOk(selectList);
}
@Override
public PdaResponse getPdaStruct(JSONObject whereJson) {
List<Structattr> structattrList = iStructattrService.list(new LambdaQueryWrapper<Structattr>()
@@ -759,208 +769,215 @@ public class PdaIosInServiceImpl implements PdaIosInService {
@Override
@Transactional
public PdaResponse zwConfirmIn(ZwConfirmInDto dto) {
//校验是否重复
if (dto.getParam_list().stream()
.map(ZwConfirmInParamDto::getSite_code)
.distinct()
.count() != dto.getParam_list().size() || dto.getParam_list().stream()
.map(ZwConfirmInParamDto::getVehicle_code)
.distinct()
.count() != dto.getParam_list().size()) {
throw new BadRequestException("存在重复的点位或托盘号,请核对!");
}
public PdaResponse zwConfirmIn(ZwConfirmInDto dtoList) {
//查询字典表
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "MATERIAL_MODEL_SECT"));
Map<String, List<ZwConfirmInParamDto>> paramMap = dtoList.getParam_list().stream()
.collect(Collectors.groupingBy(ZwConfirmInParamDto::getForm_data_code));
if (CollectionUtils.isEmpty(dictList)) {
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置请核对");
}
List<PmFormData> formDataList = iPmFormDataService.list(new LambdaUpdateWrapper<PmFormData>()
.eq(PmFormData::getCode, dto.getForm_data_code())
.eq(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")));
if(CollectionUtils.isNotEmpty(formDataList)){
throw new BadRequestException("单据" +dto.getForm_data_code() +"已完成");
}
//循环判断每个 如果有问题,则抛出异常
String lastSchBasePoint = null;
Integer taskGroupSeq = 0 ;
String taskGroupId = IdUtil.getStringId();
List<JSONObject> jsonObjectList = new ArrayList<>();
for (ZwConfirmInParamDto paramDto : dto.getParam_list()) {
//判断点位和仓位是否有正在执行的任务
List<SchBaseTask> schBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.eq(SchBaseTask::getPoint_code2, paramDto.getSite_code())
.or()
.eq(SchBaseTask::getPoint_code3, paramDto.getSite_code())
.or()
.eq(SchBaseTask::getPoint_code1, paramDto.getSite_code())
.or()
.eq(SchBaseTask::getPoint_code4, paramDto.getSite_code())
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
if(CollectionUtils.isNotEmpty(schBaseTaskList)){
throw new BadRequestException("存在正在执行任务的点位"+paramDto.getSite_code());
for (Map.Entry<String, List<ZwConfirmInParamDto>> entry : paramMap.entrySet()) {
//校验是否重复
if (entry.getValue().stream()
.map(ZwConfirmInParamDto::getSite_code)
.distinct()
.count() != entry.getValue().size() || entry.getValue().stream()
.map(ZwConfirmInParamDto::getVehicle_code)
.distinct()
.count() != entry.getValue().size()) {
throw new BadRequestException("存在重复的点位或托盘号,请核对");
}
taskGroupSeq++;
//当前点位
String schBasePointString = lastSchBasePoint;
JSONObject whereJson = new JSONObject();
whereJson.put("vehicle_code", paramDto.getVehicle_code());
whereJson.put("search", paramDto.getVehicle_code());
//查询字典表
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "MATERIAL_MODEL_SECT"));
//起点
whereJson.put("site_code", paramDto.getSite_code());
whereJson.put("noEmptyVehicle", "1");
String material_model = getVehicleMaterial(whereJson).getString("material_model");
if (StringUtils.isEmpty(material_model)) {
throw new BadRequestException("组盘的物料未配置【物料型号】!");
if (CollectionUtils.isEmpty(dictList)) {
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置请核对");
}
//判断每个物料是否都已经配置库区
List<Dict> dicts = dictList.stream().filter(a -> material_model.equals(a.getPara1())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(dicts)) {
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型" + material_model + "与库区的对应关系,请核对!");
List<PmFormData> formDataList = iPmFormDataService.list(new LambdaUpdateWrapper<PmFormData>()
.eq(PmFormData::getCode, entry.getValue().get(0).getForm_data_code())
.eq(PmFormData::getStatus, StatusEnum.FORM_STATUS.code("完成")));
if(CollectionUtils.isNotEmpty(formDataList)){
throw new BadRequestException("单据" + entry.getValue().get(0).getForm_data_code() +"已完成!");
}
String sect_code = dicts.get(0).getValue();
//根据库区编码获取库区id sect_id
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<Sectattr>()
.eq(Sectattr::getSect_code, sect_code));
//循环判断每个 如果有问题,则抛出异常
String lastSchBasePoint = null;
Integer taskGroupSeq = 0 ;
String taskGroupId = IdUtil.getStringId();
List<JSONObject> jsonObjectList = new ArrayList<>();
for (ZwConfirmInParamDto paramDto : entry.getValue()) {
if (CollectionUtils.isEmpty(sectattrList)) {
throw new BadRequestException("库区" + sect_code + "不存在,请核对!");
}
whereJson.put("sect_id",sectattrList.get(0).getSect_id());
//获取起点
SchBasePoint schBasePoint = iSchBasePointService
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位");
}
if(!"3".equals(schBasePoint.getPoint_status())){
throw new BadRequestException("系统显示点位"+schBasePoint.getPoint_code()+"不是有料状态,请确认是否组盘!");
}
if (!schBasePoint.getPoint_code().equals(paramDto.getSite_code())) {
throw new BadRequestException("载具" + paramDto.getVehicle_code() + "不在" + paramDto.getSite_code() + "");
}
//如果是第一个,则不知道搬出来的托盘应该放哪里,因此需要计算得出,其他的则是【上一个点位】
if (StringUtils.isBlank(lastSchBasePoint)) {
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class)
.select(SchBasePoint::getPoint_code)
.eq(SchBasePoint::getRegion_code, "YLXCQ")
.eq(SchBasePoint::getIs_used, true)
.eq(SchBasePoint::getPoint_status, 1)
.eq(SchBasePoint::getPoint_type, "1")
.orderByDesc(SchBasePoint::getOut_empty_seq);
List<SchBasePoint> schBasePointList = schBasePointMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(schBasePointList)) {
throw new BadRequestException("原料卸车区不存在空的点位");
}
//剔除任务执行中的点位
final List<String> emptyPointStringList = schBasePointList.stream().map(SchBasePoint::getPoint_code)
.collect(Collectors.toList());
//找到空点位正在执行的任务(正常来说不应该存在)
List<SchBaseTask> taskingSchBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
//判断点位和仓位是否有正在执行的任务
List<SchBaseTask> schBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.in(SchBaseTask::getPoint_code1, emptyPointStringList)
.eq(SchBaseTask::getPoint_code2, paramDto.getSite_code())
.or()
.in(SchBaseTask::getPoint_code2, emptyPointStringList)
.eq(SchBaseTask::getPoint_code3, paramDto.getSite_code())
.or()
.in(SchBaseTask::getPoint_code3, emptyPointStringList)
.eq(SchBaseTask::getPoint_code1, paramDto.getSite_code())
.or()
.in(SchBaseTask::getPoint_code4, emptyPointStringList)
.eq(SchBaseTask::getPoint_code4, paramDto.getSite_code())
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
//如果不存在,则正常执行
if(CollectionUtils.isEmpty(taskingSchBaseTaskList)){
schBasePointString = schBasePointList.get(0).getPoint_code();
} else {
List<String> pointList1 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code1)
.collect(Collectors.toList());
List<String> pointList2 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code2)
.collect(Collectors.toList());
List<String> pointList3 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code3)
.collect(Collectors.toList());
List<String> pointList4 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code4)
.collect(Collectors.toList());
List<String> pointStringList = emptyPointStringList.stream().filter(a -> StringUtils.isNotBlank(a)
&& !pointList1.contains(a)
&& !pointList2.contains(a)
&& !pointList3.contains(a)
&& !pointList4.contains(a))
.collect(Collectors.toList());
schBasePointString = pointStringList.get(0);
if(CollectionUtils.isNotEmpty(schBaseTaskList)){
throw new BadRequestException("存在正在执行任务的点位"+paramDto.getSite_code());
}
taskGroupSeq++;
//当前点位
String schBasePointString = lastSchBasePoint;
JSONObject whereJson = new JSONObject();
whereJson.put("vehicle_code", paramDto.getVehicle_code());
whereJson.put("search", paramDto.getVehicle_code());
//起点
whereJson.put("site_code", paramDto.getSite_code());
whereJson.put("noEmptyVehicle", "1");
String material_model = getVehicleMaterial(whereJson).getString("material_model");
if (StringUtils.isEmpty(material_model)) {
throw new BadRequestException("组盘的物料未配置【物料型号】!");
}
//判断每个物料是否都已经配置库区
List<Dict> dicts = dictList.stream().filter(a -> material_model.equals(a.getPara1())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(dicts)) {
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型" + material_model + "与库区的对应关系,请核对!");
}
String sect_code = dicts.get(0).getValue();
//根据库区编码获取库区id sect_id
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<Sectattr>()
.eq(Sectattr::getSect_code, sect_code));
if (CollectionUtils.isEmpty(sectattrList)) {
throw new BadRequestException("库区" + sect_code + "不存在,请核对!");
}
whereJson.put("sect_id",sectattrList.get(0).getSect_id());
//获取起点
SchBasePoint schBasePoint = iSchBasePointService
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位");
}
if(!"3".equals(schBasePoint.getPoint_status())){
throw new BadRequestException("系统显示点位"+schBasePoint.getPoint_code()+"不是有料状态,请确认是否组盘!");
}
if (!schBasePoint.getPoint_code().equals(paramDto.getSite_code())) {
throw new BadRequestException("载具" + paramDto.getVehicle_code() + "不在" + paramDto.getSite_code() + "");
}
//如果是第一个,则不知道搬出来的托盘应该放哪里,因此需要计算得出,其他的则是【上一个点位】
if (StringUtils.isBlank(lastSchBasePoint)) {
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<>(SchBasePoint.class)
.select(SchBasePoint::getPoint_code)
.eq(SchBasePoint::getRegion_code, "YLXCQ")
.eq(SchBasePoint::getIs_used, true)
.eq(SchBasePoint::getPoint_status, 1)
.eq(SchBasePoint::getPoint_type, "1")
.orderByDesc(SchBasePoint::getOut_empty_seq);
List<SchBasePoint> schBasePointList = schBasePointMapper.selectList(queryWrapper);
if (CollectionUtils.isEmpty(schBasePointList)) {
throw new BadRequestException("原料卸车区不存在空的点位");
}
//剔除任务执行中的点位
final List<String> emptyPointStringList = schBasePointList.stream().map(SchBasePoint::getPoint_code)
.collect(Collectors.toList());
//找到空点位正在执行的任务(正常来说不应该存在)
List<SchBaseTask> taskingSchBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.in(SchBaseTask::getPoint_code1, emptyPointStringList)
.or()
.in(SchBaseTask::getPoint_code2, emptyPointStringList)
.or()
.in(SchBaseTask::getPoint_code3, emptyPointStringList)
.or()
.in(SchBaseTask::getPoint_code4, emptyPointStringList)
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
//如果不存在,则正常执行
if(CollectionUtils.isEmpty(taskingSchBaseTaskList)){
schBasePointString = schBasePointList.get(0).getPoint_code();
} else {
List<String> pointList1 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code1)
.collect(Collectors.toList());
List<String> pointList2 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code2)
.collect(Collectors.toList());
List<String> pointList3 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code3)
.collect(Collectors.toList());
List<String> pointList4 = taskingSchBaseTaskList.stream().map(SchBaseTask::getPoint_code4)
.collect(Collectors.toList());
List<String> pointStringList = emptyPointStringList.stream().filter(a -> StringUtils.isNotBlank(a)
&& !pointList1.contains(a)
&& !pointList2.contains(a)
&& !pointList3.contains(a)
&& !pointList4.contains(a))
.collect(Collectors.toList());
schBasePointString = pointStringList.get(0);
}
}
//point1为库存空托盘点
//point2为卸货区空托盘应该放置的点
//point3为入库起始点位
//起始点 对于task point3
whereJson.put ("point_code", whereJson.getString("site_code"));
//卸货区空托盘应该放置的点,对应task point2
whereJson.put("sch_base_point", schBasePointString);
whereJson.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("来料入库"));
whereJson.put("priority","1");
whereJson.put("task_group_seq",taskGroupSeq);
whereJson.put("task_group_id",taskGroupId);
whereJson.put("form_data_code", entry.getValue().get(0).getForm_data_code());
jsonObjectList.add(whereJson);
//下一个的托盘放置点为本次的起点
lastSchBasePoint = whereJson.getString("site_code");
}
//point1为库存空托盘点
//point2为卸货区空托盘应该放置的点
//point3为入库起始点位
//校验没有问题,则进行入库世纪操作
for(JSONObject whereJson:jsonObjectList){
//起始点 对于task point3
whereJson.put ("point_code", whereJson.getString("site_code"));
//卸货区空托盘应该放置的点,对应task point2
whereJson.put("sch_base_point", schBasePointString);
whereJson.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("来料入库"));
whereJson.put("priority","1");
whereJson.put("task_group_seq",taskGroupSeq);
whereJson.put("task_group_id",taskGroupId);
whereJson.put("form_data_code",dto.getForm_data_code());
jsonObjectList.add(whereJson);
//下一个的托盘放置点为本次的起点
lastSchBasePoint = whereJson.getString("site_code");
// 预组织出入库单据实体
Map<String, Object> jsonMst = organizeInsertData(whereJson);
// 调用服务新增出入库单
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst);
// 预组织出入库单据明细的分配数据
whereJson.put("iostorinv_id", iostorinv_id);
Map<String, Object> jsonDtl = organizeDivData(whereJson);
// 调用分配,默认自动分配库位
iRawAssistIStorService.zwInDivStruct(new JSONObject(jsonDtl));
// 下发任务
sendZwTask(whereJson);
//更新组盘表状态
mdPbGroupplateMapper.update(new GroupPlate(), 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("组盘")));
}
}
//校验没有问题,则进行入库世纪操作
for(JSONObject whereJson:jsonObjectList){
// 预组织出入库单据实体
Map<String, Object> jsonMst = organizeInsertData(whereJson);
// 调用服务新增出入库单
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst);
// 预组织出入库单据明细的分配数据
whereJson.put("iostorinv_id", iostorinv_id);
Map<String, Object> jsonDtl = organizeDivData(whereJson);
// 调用分配,默认自动分配库位
iRawAssistIStorService.zwInDivStruct(new JSONObject(jsonDtl));
// 下发任务
sendZwTask(whereJson);
//更新组盘表状态
mdPbGroupplateMapper.update(new GroupPlate(), 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 PdaResponse.requestOk();
}
@@ -1323,31 +1340,55 @@ public class PdaIosInServiceImpl implements PdaIosInService {
}
@Override
public PdaResponse inCheck(ZwConfirmInParamDto dto) {
public PdaResponse inCheck(ZwConfirmCheckParamDto dto) {
if(StringUtils.isBlank(dto.getSite_vehicle_code())){
throw new BadRequestException("点位码/托盘码不能为空");
}
String site_code;
String vehicle_code;
//查点位表
SchBasePoint schBasePoint = iSchBasePointService
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, dto.getSite_vehicle_code())
.or()
.eq(SchBasePoint::getPoint_code, dto.getSite_vehicle_code()));
if(null == schBasePoint){
//存在点位表,说明传入的是点位,则根据点位查询载具
throw new BadRequestException("未找到载具/点位信息,请检查!");
}
if(!"3".equals(schBasePoint.getPoint_status())){
throw new BadRequestException("系统显示点位"+schBasePoint.getPoint_code()+"不是有料状态,请确认是否组盘!");
}
site_code =schBasePoint.getPoint_code();
vehicle_code =schBasePoint.getVehicle_code();
//判断点位和仓位是否有正在执行的任务
List<SchBaseTask> schBaseTaskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wp -> wp
.eq(SchBaseTask::getPoint_code2, dto.getSite_code())
.eq(SchBaseTask::getPoint_code2, site_code)
.or()
.eq(SchBaseTask::getPoint_code3, dto.getSite_code())
.eq(SchBaseTask::getPoint_code3, site_code)
.or()
.eq(SchBaseTask::getPoint_code1, dto.getSite_code())
.eq(SchBaseTask::getPoint_code1, site_code)
.or()
.eq(SchBaseTask::getPoint_code4, dto.getSite_code())
.eq(SchBaseTask::getPoint_code4, site_code)
)
.le(SchBaseTask::getTask_status, TaskStatus.EXECUTING.getCode()));
if(CollectionUtils.isNotEmpty(schBaseTaskList)){
throw new BadRequestException("存在正在执行任务的点位"+dto.getSite_code());
throw new BadRequestException("存在正在执行任务的点位"+site_code);
}
JSONObject whereJson = new JSONObject();
whereJson.put("vehicle_code", dto.getVehicle_code());
whereJson.put("search", dto.getVehicle_code());
whereJson.put("vehicle_code", vehicle_code);
whereJson.put("search", vehicle_code);
//起点
whereJson.put("site_code", dto.getSite_code());
whereJson.put("site_code", site_code);
whereJson.put("noEmptyVehicle", "1");
String material_model = getVehicleMaterial(whereJson).getString("material_model");
if (StringUtils.isEmpty(material_model)) {
@@ -1355,8 +1396,6 @@ public class PdaIosInServiceImpl implements PdaIosInService {
}
//判断每个物料是否都已经配置库区
//查询字典表
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "MATERIAL_MODEL_SECT"));
@@ -1377,22 +1416,22 @@ public class PdaIosInServiceImpl implements PdaIosInService {
whereJson.put("sect_id",sectattrList.get(0).getSect_id());
//获取起点
SchBasePoint schBasePoint = iSchBasePointService
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code")));
if (ObjectUtil.isEmpty(schBasePoint)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位");
//通过载具查找组盘
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", vehicle_code)
.lt("status", IOSEnum.GROUP_PLATE_STATUS.code("出库")));
if(CollectionUtils.isEmpty(groupPlates)) {
throw new BadRequestException("载具" + vehicle_code + "未组盘,请先组盘!");
}
if(!"3".equals(schBasePoint.getPoint_status())){
throw new BadRequestException("系统显示点位"+schBasePoint.getPoint_code()+"不是有料状态,请确认是否组盘!");
}
if (!schBasePoint.getPoint_code().equals(dto.getSite_code())) {
throw new BadRequestException("载具" + dto.getVehicle_code() + "不在" + dto.getSite_code() + "");
}
return PdaResponse.requestOk();
ZwConfirmCheckParamRespondDto respDto = new ZwConfirmCheckParamRespondDto();
respDto.setQty(String.valueOf(groupPlates.get(0).getQty()));
respDto.setMaterial_code(groupPlates.get(0).getMaterial_code());
respDto.setForm_data_code(groupPlates.get(0).getExt_code());
respDto.setVehicle_code(vehicle_code);
respDto.setSite_code(site_code);
return PdaResponse.requestParamOk(respDto);
}
@@ -1404,7 +1443,18 @@ public class PdaIosInServiceImpl implements PdaIosInService {
if(schBasePointList.isEmpty()){
return PdaResponse.requestOk();
}
return PdaResponse.requestParamOk(schBasePointList.get(0).getPoint_code());
JSONObject outJson = new JSONObject();
//查询托盘的
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code"));
if(mdPbStoragevehicleinfo != null ){
}
outJson.put("point_code",schBasePointList.get(0).getPoint_code());
outJson.put("recommended_sect_code",mdPbStoragevehicleinfo.getRecommended_sect_code());
return PdaResponse.requestParamOk(outJson);
}

View File

@@ -80,6 +80,9 @@ import static org.nl.wms.warehouse_manage.enums.IOSEnum.GROUP_PLATE_STATUS;
public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired
private Map<String, AbstractTask> applyTaskMap;
@Autowired
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
/**
* 组盘记录mapper
*/
@@ -110,11 +113,6 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
/**
* 载具扩展属性服务
*/
@Autowired
private MdPbStoragevehicleextMapper mdPbStoragevehicleextMapper;
/**
* 点位服务
@@ -421,7 +419,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
//查找状态为入库状态的组盘表
List<GroupPlate> groupPlateList = iMdPbGroupPlateService.list(new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
.ne(GroupPlate::getPcsn, "空托盘入库")
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code"))
);
@@ -435,7 +433,6 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
throw new BadRequestException("载具组盘信息重复,请核对!");
}
JSONObject outJson = new JSONObject();
//根据物料id获取物料名称等信息
@@ -453,6 +450,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
return PdaResponse.requestParamOk(outJson);
}
@Override
public PdaResponse getStructivtByMaterialAndSectCode(JSONObject whereJson) {
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.queryAll(whereJson));
}
private String createOutBills(JSONObject whereJson) {
String now = DateUtil.now();

View File

@@ -56,6 +56,13 @@ public class SchBasePointController {
}
@PostMapping("/getInBillPointList")
@Log("查询入库点位清单")
public ResponseEntity<Object> getInBillPointList(@Validated @RequestBody SchBasePoint entity) {
return new ResponseEntity<>(schBasePointService.getInBillPointList(entity),HttpStatus.OK);
}
@Log("删除点位管理")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {

View File

@@ -48,6 +48,13 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
*/
PdaResponse updatePointType(SchBasePoint entity);
/**
* 编辑点位类型
*
* @param entity /
*/
PdaResponse getInBillPointList(SchBasePoint entity);
/**
* 多选删除
*
@@ -136,4 +143,6 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
List<SchBasePoint> getPointList2(SchBasePoint region);
List<SchBasePoint> getPointsByCode(String regions);
SchBasePoint getPointByCode(String pointCode);
}

View File

@@ -28,6 +28,13 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
*/
List<SchBasePoint> getAllUnlockAbnormalPoints();
/**
* 获得原料卸车区所有点位
*
* @return List<SchBasePoint>
*/
List<SchBasePoint> getInBillPointList(String point_code);
/**
* 行锁获取id的点位
*

View File

@@ -19,6 +19,14 @@
WHERE p.ing_task_code IS NOT NULL
AND p.ing_task_code != '' AND (t.task_status = '5' OR t.task_status = '6')
</select>
<select id="getInBillPointList" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT p.point_code,p.point_name,p.point_type
FROM `sch_base_point` p
WHERE region_code = 'YLXCQ'
<if test="point_code != null and point_code != ''">
AND p.point_code like CONCAT('%', #{point_code}, '%')
</if>
</select>
<select id="selectByIdLock" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT p.*
FROM `sch_base_point` p

View File

@@ -164,6 +164,11 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
return PdaResponse.requestOk();
}
@Override
public PdaResponse getInBillPointList(SchBasePoint entity) {
return PdaResponse.requestParamOk( pointMapper.getInBillPointList(entity.getPoint_code()));
}
@Override
@Transactional
public void deleteAll(Set<String> ids) {
@@ -349,4 +354,15 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
return schBasePointList;
}
@Override
public SchBasePoint getPointByCode(String pointCode) {
List<SchBasePoint> schBasePointList = pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, pointCode));
if(schBasePointList.isEmpty()){
return null;
}
return schBasePointList.get(0);
}
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -37,6 +38,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -209,6 +212,15 @@ public class InBillTask extends AbstractTask {
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.eq(GroupPlate::getStoragevehicle_code,taskObj.getVehicle_code2()));
//删除组盘表
//删除
Set<String> groupSet = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>().lambda()
.in(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code()))
.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet());
if(CollectionUtils.isNotEmpty(groupSet)) {
iMdPbGroupplateService.delete(groupSet);
}
//更新formdata
updateFormData(taskObj);
}

View File

@@ -119,8 +119,9 @@ public class StIvtMoveinvServiceImpl extends ServiceImpl<StIvtMoveinvMapper, StI
//只能本库移动或移动到不合格区
for (JSONObject jsonObject : dto.getTableData()) {
if (!jsonObject.getString("turnout_sect_code").equals(jsonObject.getString("turnin_sect_code")) || !jsonObject.getString("turnin_sect_code").equals("BHG")) {
throw new IllegalArgumentException("只能移动不合格区或在本库区移库!");
if (!jsonObject.getString("turnout_sect_code").equals(jsonObject.getString("turnin_sect_code")) && !jsonObject.getString("turnin_sect_code").equals("BHG")) {
throw new IllegalArgumentException("只能移动到不合格区或在本库区移库!");
}
}

View File

@@ -87,7 +87,7 @@
<el-table-column prop="pcsn" label="批次号" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="qty" label="总数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column label="可用数" :min-width="100" >
<el-table-column label="可用数" :min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.qty - scope.row.frozen_qty }}</span>
</template>
@@ -96,6 +96,8 @@
<el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="create_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />
<el-table-column prop="supp_code" label="供应商编码" :min-width="flexWidth('supp_code',crud.data,'供应商编码')" />
<el-table-column prop="supp_name" label="供应商名称" :min-width="flexWidth('supp_name',crud.data,'供应商名称')" />
</el-table>
<!--分页组件-->
<pagination />
@@ -154,15 +156,15 @@ export default {
sectQueryChange(val) {
if (val.length === 1) {
this.query.stor_id = val[0]
this.query.sect_id = ''
this.query.sect_code = ''
}
if (val.length === 0) {
this.query.sect_id = ''
this.query.sect_code = ''
this.query.stor_id = ''
}
if (val.length === 2) {
this.query.stor_id = val[0]
this.query.sect_id = val[1]
this.query.sect_code = val[1]
}
this.crud.toQuery()
},