|
|
@ -3,20 +3,22 @@ package org.nl.wms.pda.ios_manage.service.impl; |
|
|
|
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.metadata.IPage; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.nl.common.domain.query.PageQuery; |
|
|
|
import org.nl.common.exception.BadRequestException; |
|
|
|
import org.nl.common.utils.IdUtil; |
|
|
|
import org.nl.common.utils.RedissonUtils; |
|
|
|
import org.nl.common.utils.SecurityUtils; |
|
|
|
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; |
|
|
|
import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService; |
|
|
|
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; |
|
|
|
import org.nl.wms.basedata_manage.service.ISectattrService; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.MdPbMeasureunit; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.Sectattr; |
|
|
|
import org.nl.wms.basedata_manage.service.*; |
|
|
|
import org.nl.wms.basedata_manage.service.dao.*; |
|
|
|
import org.nl.wms.pda.ios_manage.service.PdaIosInService; |
|
|
|
import org.nl.wms.pda.util.PdaResponse; |
|
|
|
import org.nl.wms.sch_manage.enums.StatusEnum; |
|
|
|
import org.nl.wms.sch_manage.service.ISchBasePointService; |
|
|
|
import org.nl.wms.sch_manage.service.dao.SchBasePoint; |
|
|
|
import org.nl.wms.warehouse_management.enums.IOSConstant; |
|
|
|
import org.nl.wms.warehouse_management.enums.IOSEnum; |
|
|
|
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; |
|
|
@ -30,6 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
@ -61,7 +64,8 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
*/ |
|
|
|
@Autowired |
|
|
|
private IMdMeMaterialbaseService iMdMeMaterialbaseService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private IStructattrService iStructattrService; |
|
|
|
/** |
|
|
|
* 计量单位服务 |
|
|
|
*/ |
|
|
@ -80,6 +84,20 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
@Autowired |
|
|
|
private ISectattrService iSectattrService; |
|
|
|
|
|
|
|
/** |
|
|
|
* 点位服务 |
|
|
|
*/ |
|
|
|
@Autowired |
|
|
|
private ISchBasePointService iSchBasePointService; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 库区服务 |
|
|
|
*/ |
|
|
|
@Autowired |
|
|
|
private IBsrealStorattrService iSrealStorattrService; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 入库服务 |
|
|
|
*/ |
|
|
@ -94,98 +112,49 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public PdaResponse sweepCode(JSONObject whereJson) { |
|
|
|
// 解析二维码内容:"wl0001##pc050401##1000##kg##dj000001##01"
|
|
|
|
String code = whereJson.getString("code"); |
|
|
|
String[] split = code.split("##"); |
|
|
|
public PdaResponse groupPlate(JSONObject whereJson) { |
|
|
|
// 物料编码
|
|
|
|
String material_code = split[0]; |
|
|
|
// 批次
|
|
|
|
String pcsn = split[1]; |
|
|
|
String materialId = whereJson.getString("material_id"); |
|
|
|
//批次
|
|
|
|
String pcsn = whereJson.getString("pcsn"); |
|
|
|
// 数量
|
|
|
|
String qty = split[2]; |
|
|
|
// 计量单位
|
|
|
|
String unit_code = split[3]; |
|
|
|
// 单据号
|
|
|
|
String ext_code = split[4]; |
|
|
|
// 业务类型
|
|
|
|
String ext_type = split[5]; |
|
|
|
|
|
|
|
String qty = whereJson.getString("qty"); |
|
|
|
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("vehicle_code")); |
|
|
|
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(materialId); |
|
|
|
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getById(materDao.getBase_unit_id()); |
|
|
|
// 校验
|
|
|
|
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(material_code); |
|
|
|
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getByCode(unit_code); |
|
|
|
GroupPlate groupDao = iMdPbGroupplateService.getOne( |
|
|
|
new QueryWrapper<GroupPlate>().lambda() |
|
|
|
.eq(GroupPlate::getMaterial_id, materDao.getMaterial_id()) |
|
|
|
.eq(GroupPlate::getPcsn, pcsn) |
|
|
|
.eq(GroupPlate::getQty, qty) |
|
|
|
.eq(GroupPlate::getQty_unit_id, unitDao.getMeasure_unit_id()) |
|
|
|
.eq(GroupPlate::getExt_code, ext_code) |
|
|
|
.eq(GroupPlate::getExt_type, ext_type) |
|
|
|
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("生成")) |
|
|
|
); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(groupDao)) { |
|
|
|
// 插入组盘记录表
|
|
|
|
groupDao = new GroupPlate(); |
|
|
|
groupDao.setGroup_id(IdUtil.getStringId()); |
|
|
|
groupDao.setMaterial_id(materDao.getMaterial_code()); |
|
|
|
groupDao.setPcsn(pcsn); |
|
|
|
groupDao.setQty_unit_id(unitDao.getMeasure_unit_id()); |
|
|
|
groupDao.setQty_unit_name(unitDao.getUnit_name()); |
|
|
|
groupDao.setQty(BigDecimal.valueOf(Double.parseDouble(qty))); |
|
|
|
groupDao.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("生成")); |
|
|
|
groupDao.setExt_code(ext_code); |
|
|
|
groupDao.setExt_type(ext_type); |
|
|
|
groupDao.setCreate_id(SecurityUtils.getCurrentUserId()); |
|
|
|
groupDao.setCreate_name(SecurityUtils.getCurrentNickName()); |
|
|
|
groupDao.setCreate_time(DateUtil.now()); |
|
|
|
iMdPbGroupplateService.save(groupDao); |
|
|
|
if (ObjectUtil.isEmpty(vehicleDao) || ObjectUtil.isEmpty(materDao)) { |
|
|
|
throw new BadRequestException("载具,物料或单位信息有误!"); |
|
|
|
} |
|
|
|
|
|
|
|
// 组织返回数据
|
|
|
|
JSONObject result = new JSONObject(); |
|
|
|
result.put("group_id", groupDao.getGroup_id()); |
|
|
|
result.put("material_code", material_code); |
|
|
|
result.put("pcsn", pcsn); |
|
|
|
result.put("qty", qty); |
|
|
|
result.put("qty_unit_name", unitDao.getUnit_name()); |
|
|
|
return PdaResponse.requestParamOk(result); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public PdaResponse groupPlate(JSONObject whereJson) { |
|
|
|
// 校验载具
|
|
|
|
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(whereJson.getString("storagevehicle_code")); |
|
|
|
// 校验组盘记录
|
|
|
|
GroupPlate groupDao = iMdPbGroupplateService.getById(whereJson.getString("group_id")); |
|
|
|
if (!groupDao.getStatus().equals(IOSEnum.GROUP_PLATE_STATUS.code("生成"))) { |
|
|
|
throw new BadRequestException("当前组盘记录不为生成状态!【"+whereJson.getString("group_id")+"】"); |
|
|
|
} |
|
|
|
// 校验组盘物料批次是否一样
|
|
|
|
List<GroupPlate> plateDaoList = iMdPbGroupplateService.list( |
|
|
|
new QueryWrapper<GroupPlate>().lambda() |
|
|
|
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) |
|
|
|
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) |
|
|
|
); |
|
|
|
if (ObjectUtil.isNotEmpty(plateDaoList)) { |
|
|
|
boolean is_like = plateDaoList.stream() |
|
|
|
.allMatch(row -> row.getMaterial_id().equals(groupDao.getMaterial_id()) && |
|
|
|
row.getPcsn().equals(groupDao.getPcsn()) |
|
|
|
); |
|
|
|
if (!is_like) { |
|
|
|
throw new BadRequestException("当前托盘所绑物料批次与当前组盘物料批次不一致!"); |
|
|
|
RedissonUtils.lock(() -> { |
|
|
|
//判断该载具编号是否已经存在库内
|
|
|
|
long count = iStructattrService.count( |
|
|
|
new LambdaQueryWrapper<Structattr>() |
|
|
|
.eq(Structattr::getStoragevehicle_code, vehicleDao.getStoragevehicle_code()) |
|
|
|
); |
|
|
|
if (count > 0) { |
|
|
|
throw new BadRequestException("载具编码:" + vehicleDao.getStoragevehicle_code() + "已存在库内,请对数据进行核实!"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 更新数据
|
|
|
|
groupDao.setStoragevehicle_code(vehicleDao.getStoragevehicle_code()); |
|
|
|
groupDao.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘")); |
|
|
|
iMdPbGroupplateService.updateById(groupDao); |
|
|
|
}, StatusEnum.STRATEGY_TYPE.code("入库") + vehicleDao.getStoragevehicle_code(), 5); |
|
|
|
GroupPlate groupDao = GroupPlate.builder() |
|
|
|
.group_id(IdUtil.getStringId()) |
|
|
|
.material_id(materDao.getMaterial_code()) |
|
|
|
.storagevehicle_code(vehicleDao.getStoragevehicle_code()) |
|
|
|
.pcsn(pcsn) |
|
|
|
.qty_unit_id(unitDao != null ? unitDao.getMeasure_unit_id() : null) |
|
|
|
.qty_unit_name(unitDao != null ? unitDao.getUnit_name() : null) |
|
|
|
.qty(new BigDecimal(qty)) |
|
|
|
.status(IOSEnum.GROUP_PLATE_STATUS.code("组盘")) |
|
|
|
.ext_code(whereJson.getString("ext_code")) |
|
|
|
.create_id(SecurityUtils.getCurrentUserId()) |
|
|
|
.create_name(SecurityUtils.getCurrentNickName()) |
|
|
|
.create_time(DateUtil.now()) |
|
|
|
.build(); |
|
|
|
iMdPbGroupplateService.save(groupDao); |
|
|
|
return PdaResponse.requestOk(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public PdaResponse getPlateDtl(JSONObject whereJson) { |
|
|
|
return PdaResponse.requestParamOk(mdPbGroupplateMapper.getDtl(whereJson)); |
|
|
@ -199,24 +168,74 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PdaResponse getSect() { |
|
|
|
List<Sectattr> sectList = iSectattrService.list( |
|
|
|
new QueryWrapper<Sectattr>().lambda() |
|
|
|
.eq(Sectattr::getIs_delete, IOSConstant.IS_DELETE_NO) |
|
|
|
.eq(Sectattr::getIs_used, IOSConstant.IS_DELETE_YES) |
|
|
|
public PdaResponse getStorageList() { |
|
|
|
List<BsrealStorattr> storageList = iSrealStorattrService.list( |
|
|
|
new QueryWrapper<BsrealStorattr>().lambda() |
|
|
|
.eq(BsrealStorattr::getIs_delete, IOSConstant.IS_DELETE_NO) |
|
|
|
.eq(BsrealStorattr::getIs_used, IOSConstant.IS_DELETE_YES).select(BsrealStorattr::getStor_name, BsrealStorattr::getStor_code, BsrealStorattr::getStor_id) |
|
|
|
); |
|
|
|
return PdaResponse.requestParamOk(sectList); |
|
|
|
return PdaResponse.requestParamOk(storageList); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PdaResponse getMaterialList(JSONObject whereJson) { |
|
|
|
String search = whereJson.getString("search"); |
|
|
|
LambdaQueryWrapper<MdMeMaterialbase> wrapper = new QueryWrapper<MdMeMaterialbase>().lambda(); |
|
|
|
if (StringUtils.isNotBlank(search)) { |
|
|
|
wrapper.nested(r -> r |
|
|
|
.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) |
|
|
|
.eq(MdMeMaterialbase::getIs_used, IOSConstant.IS_DELETE_YES) |
|
|
|
.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 |
|
|
|
public PdaResponse getSect() { |
|
|
|
PageQuery page = new PageQuery(); |
|
|
|
page.setSize(100); |
|
|
|
page.setPage(0); |
|
|
|
IPage<SectattrDto> sectList = iSectattrService.queryAll(new HashMap(), page); |
|
|
|
List<SectattrDto> result = sectList.getRecords(); |
|
|
|
result.forEach(r -> r.setSect_name(r.getStor_name() + "-" + r.getSect_name())); |
|
|
|
result.sort(Comparator.comparing(SectattrDto::getSect_name)); |
|
|
|
return PdaResponse.requestParamOk(result); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public PdaResponse confirmIn(JSONObject whereJson) { |
|
|
|
//校验起点
|
|
|
|
SchBasePoint schBasePoint = iSchBasePointService.getOne( |
|
|
|
new LambdaQueryWrapper<SchBasePoint>(). |
|
|
|
eq(SchBasePoint::getStoragevehicle_code, whereJson.getString("vehicle_code")) |
|
|
|
); |
|
|
|
if (schBasePoint == null) { |
|
|
|
throw new BadRequestException("载具编码:" + whereJson.getString("vehicle_code") + "未绑定站点信息,请检查!"); |
|
|
|
} |
|
|
|
whereJson.put("point_code", schBasePoint.getPoint_code()); |
|
|
|
// 组织新增数据
|
|
|
|
Map<String, Object> jsonMst = organizeInsertData(whereJson); |
|
|
|
// 调用服务新增数据
|
|
|
|
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMst); |
|
|
|
// 组织分配数据
|
|
|
|
whereJson.put("iostorinv_id",iostorinv_id); |
|
|
|
whereJson.put("iostorinv_id", iostorinv_id); |
|
|
|
Map<String, Object> jsonDtl = organizeDivData(whereJson); |
|
|
|
// 调用分配
|
|
|
|
iRawAssistIStorService.divStruct(new JSONObject(jsonDtl)); |
|
|
@ -238,7 +257,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
// 查询组盘明细
|
|
|
|
List<GroupPlate> plateDaoList = iMdPbGroupplateService.list( |
|
|
|
new QueryWrapper<GroupPlate>().lambda() |
|
|
|
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) |
|
|
|
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code")) |
|
|
|
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) |
|
|
|
); |
|
|
|
if (ObjectUtil.isEmpty(plateDaoList)) { |
|
|
@ -345,4 +364,35 @@ public class PdaIosInServiceImpl implements PdaIosInService { |
|
|
|
|
|
|
|
iRawAssistIStorService.divPoint(jsonMst); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 拣选余料回库物料查询 |
|
|
|
* |
|
|
|
* @param whereJson { |
|
|
|
* vehicle_code:载具编码 |
|
|
|
* } |
|
|
|
* @return PdaResponse |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public PdaResponse getReturnMaterial(JSONObject whereJson) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 余料回库确认 |
|
|
|
* |
|
|
|
* @param whereJson { |
|
|
|
* vehicle_code:载具编码 |
|
|
|
* sect_id:库区 |
|
|
|
* } |
|
|
|
* @return PdaResponse |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public PdaResponse confirmReturnMaterial(JSONObject whereJson) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|