Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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;
|
||||
@@ -263,6 +264,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
.set(Structattr::getInv_type, jsonObject.getString("inv_type"))
|
||||
.set(Structattr::getStoragevehicle_code, jsonObject.getString("storagevehicle_code"))
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.set(StringUtils.isNotBlank(jsonObject.getString("occupancy_state")),Structattr::getOccupancy_state, jsonObject.getString("occupancy_state"))
|
||||
.eq(Structattr::getStruct_code, jsonObject.getString("struct_code"))
|
||||
);
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.diy;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 原料出库规则
|
||||
* @Author: zhengxuming
|
||||
* @Date: 2025年7月29日14:11:10
|
||||
*/
|
||||
@Slf4j
|
||||
@Service("rawInRuleHandle")
|
||||
public class RawInRuleHandle extends Decisioner<Structattr, JSONObject> {
|
||||
|
||||
/**
|
||||
* 出入库明细服务
|
||||
*/
|
||||
@Autowired
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
|
||||
@Override
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
QueryWrapper<Structattr> query = new QueryWrapper<Structattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq("sect_code", param.getString("sect_code"))
|
||||
.isNotNull("storagevehicle_code")
|
||||
.isNull("Task_code")
|
||||
.eq("occupancy_state",2)
|
||||
.orderByAsc("update_time");
|
||||
List<Structattr> querylList = iStructattrService.list(query);
|
||||
return querylList;
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,13 @@ import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
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;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -106,9 +110,16 @@ public class PdaIosInController {
|
||||
|
||||
@PostMapping("/zwConfirmIn")
|
||||
@Log("中钨组盘入库确认")
|
||||
public ResponseEntity<Object> zwConfirmIn(@RequestBody JSONObject whereJson) {
|
||||
assertNotBlankJson(whereJson, "请求参数不能为空", "vehicle_code", "site_code");
|
||||
return new ResponseEntity<>(pdaIosInService.zwConfirmIn(whereJson), HttpStatus.OK);
|
||||
public ResponseEntity<Object> zwConfirmIn(@RequestBody ZwConfirmInDto dto) {
|
||||
if(CollectionUtils.isEmpty(dto.getParamList())){
|
||||
throw new IllegalArgumentException("请传入参数!");
|
||||
}
|
||||
for(ZwConfirmInParamDto paramDto : dto.getParamList()){
|
||||
if(StringUtils.isBlank(paramDto.getVehicle_code())||StringUtils.isBlank(paramDto.getSite_code()))
|
||||
throw new IllegalArgumentException("载具且卸货区点位不能为空!");
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(pdaIosInService.zwConfirmIn(dto), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.nl.wms.pda_manage.ios_manage.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ZwConfirmInDto {
|
||||
private List<ZwConfirmInParamDto> paramList;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.nl.wms.pda_manage.ios_manage.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ZwConfirmInParamDto {
|
||||
private String site_code;
|
||||
private String vehicle_code;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.vo.SelectItemVo;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInDto;
|
||||
import org.nl.wms.pda_manage.util.PdaResponse;
|
||||
|
||||
import java.util.List;
|
||||
@@ -110,13 +111,17 @@ public interface PdaIosInService {
|
||||
* 株洲中钨入库确认
|
||||
* 步骤1:入库确认
|
||||
* 步骤2:空托盘出库
|
||||
* @param whereJson {
|
||||
* vehicle_code:载具编码
|
||||
* sect_code:库区
|
||||
* }
|
||||
* @param dto [{
|
||||
* vehicle_code:载具编码
|
||||
* site_code:库区
|
||||
* },
|
||||
* {
|
||||
* vehicle_code:载具编码
|
||||
* site_code:库区
|
||||
* }]
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse zwConfirmIn(JSONObject whereJson);
|
||||
PdaResponse zwConfirmIn(ZwConfirmInDto dto);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,6 +27,8 @@ 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.ZwConfirmInDto;
|
||||
import org.nl.wms.pda_manage.ios_manage.dto.ZwConfirmInParamDto;
|
||||
import org.nl.wms.pda_manage.ios_manage.service.PdaIosInService;
|
||||
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
|
||||
import org.nl.wms.pda_manage.util.PdaResponse;
|
||||
@@ -445,180 +447,297 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse zwConfirmIn(JSONObject whereJson) {
|
||||
public PdaResponse zwConfirmIn(ZwConfirmInDto dto) {
|
||||
//查询字典表
|
||||
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
|
||||
.eq(Dict::getCode, "MATERIAL_MODEL_SECT"));
|
||||
|
||||
//组盘入库
|
||||
//根据组盘编号获取物料型号
|
||||
whereJson.put("vehicleCode", whereJson.getString("vehicle_code"));
|
||||
whereJson.put("noEmptyVehicle", "1");
|
||||
String material_model = getVehicleMaterial(whereJson).getString("material_model");
|
||||
if(StringUtils.isEmpty(material_model)){
|
||||
throw new BadRequestException("组盘的物料未配置【物料型号】!");
|
||||
}
|
||||
//根据物料型号匹配字典表获取入库编码
|
||||
List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
|
||||
.eq(Dict::getCode, "MATERIAL_MODEL_SECT")
|
||||
.eq(Dict::getPara1, material_model));
|
||||
if(CollectionUtils.isEmpty(dictList)){
|
||||
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型与库区的对应关系,请核对!");
|
||||
if (CollectionUtils.isEmpty(dictList)) {
|
||||
throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置,请核对!");
|
||||
}
|
||||
|
||||
String sect_code = dictList.get(0).getValue();
|
||||
//根据库区编码获取库区id sect_id
|
||||
List<Sectattr> sectattrList = sectattrMapper.selectList(new LambdaQueryWrapper<Sectattr>()
|
||||
.eq(Sectattr::getSect_code, sect_code));
|
||||
//循环判断每个 如果有问题,则抛出异常
|
||||
String lastSchBasePoint = null;
|
||||
Integer priority = 0 ;
|
||||
List<JSONObject> jsonObjectList = new ArrayList<>();
|
||||
for (ZwConfirmInParamDto paramDto : dto.getParamList()) {
|
||||
priority++;
|
||||
//当前点位
|
||||
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 (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("原料卸车区不存在空的点位");
|
||||
}
|
||||
|
||||
schBasePointString = schBasePointList.get(0).getPoint_code();
|
||||
}
|
||||
|
||||
//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",priority);
|
||||
|
||||
jsonObjectList.add(whereJson);
|
||||
//下一个的托盘放置点为本次的起点
|
||||
lastSchBasePoint = whereJson.getString("site_code");
|
||||
|
||||
if(CollectionUtils.isEmpty(sectattrList)){
|
||||
throw new BadRequestException("库区"+sect_code+"不存在,请核对!");
|
||||
}
|
||||
|
||||
//赋值给whereJson
|
||||
whereJson.put("sect_id",sectattrList.get(0).getSect_id());
|
||||
//校验没有问题,则进行入库世纪操作
|
||||
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("组盘")));
|
||||
|
||||
//获取起点
|
||||
SchBasePoint schBasePoint = iSchBasePointService
|
||||
.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.get("vehicle_code")));
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||
throw new BadRequestException("未找到载具所在的点位信息,请检查该载具是否绑定点位");
|
||||
}
|
||||
whereJson.put("point_code",whereJson.getString("site_code"));
|
||||
// 预组织出入库单据实体
|
||||
Map<String, Object> jsonMstO = organizeInsertData(whereJson);
|
||||
// 调用服务新增出入库单
|
||||
String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMstO);
|
||||
// 预组织出入库单据明细的分配数据
|
||||
whereJson.put("iostorinv_id", iostorinv_id);
|
||||
Map<String, Object> jsonDtl = organizeDivData(whereJson);
|
||||
// 调用分配,默认自动分配库位
|
||||
iRawAssistIStorService.divStruct(new JSONObject(jsonDtl));
|
||||
|
||||
// 组织主数据
|
||||
Map<String, Object> jsonMst = new HashMap<>();
|
||||
jsonMst.put("point_code", whereJson.getString("point_code"));
|
||||
// 组织明细数据
|
||||
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
new QueryWrapper<IOStorInvDtl>().lambda()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
);
|
||||
// 查找分配明细
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id());
|
||||
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
|
||||
// 类型转换
|
||||
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
|
||||
disDtl.forEach(item -> {
|
||||
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
|
||||
});
|
||||
jsonMst.put("tableMater", tableMater);
|
||||
|
||||
String point_code2 = iRawAssistIStorService.divPointNoTask(jsonMst);
|
||||
|
||||
//空托盘出库
|
||||
// 需要计算新的siteCode 根据方案 找region_code=YLXCQ 原料卸车区的
|
||||
// 已启用的 编号最大的 空的 point_type = 1 点位
|
||||
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("原料卸车区不存在空的点位");
|
||||
}
|
||||
|
||||
//从库区拉一个空托盘到这个点位
|
||||
whereJson.put("siteCode", schBasePointList.get(0).getPoint_code());
|
||||
|
||||
LambdaQueryWrapper<MdMeMaterialbase> maQueryWrapper = new LambdaQueryWrapper<>();
|
||||
maQueryWrapper.eq(MdMeMaterialbase::getMaterial_code, StatusEnum.VEHICLE_TYPE.code("空托盘"));
|
||||
|
||||
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(maQueryWrapper);
|
||||
if (materDao == null) {
|
||||
throw new BadRequestException("未找到空载具物料信息!");
|
||||
}
|
||||
whereJson.put("material_id", materDao.getMaterial_id());
|
||||
whereJson.put("material_code", materDao.getMaterial_code());
|
||||
Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<>(Sectattr.class)
|
||||
.eq(Sectattr::getSect_id, whereJson.getString("sect_id"))
|
||||
.eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(sectattr)) {
|
||||
throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
|
||||
}
|
||||
BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id());
|
||||
whereJson.put("stor_code", storeDao.getStor_code());
|
||||
whereJson.put("sect_code", sectattr.getSect_code());
|
||||
StrategyStructParam strategyStructParam = StrategyStructParam.builder()
|
||||
.ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库")))
|
||||
.sect_code(whereJson.getString("sect_code"))
|
||||
.stor_code(whereJson.getString("stor_code"))
|
||||
.material_id(whereJson.getString("material_id"))
|
||||
.material_code(whereJson.getString("material_code"))
|
||||
.qty(new BigDecimal(1))
|
||||
.stragegyType("1")
|
||||
.build();
|
||||
List<StrategyStructMaterialVO> structList = iStructattrService.outBoundSectDiv(strategyStructParam);
|
||||
if (CollectionUtils.isEmpty(structList)) {
|
||||
throw new BadRequestException("无可用空托盘库存!");
|
||||
}
|
||||
|
||||
//创建任务
|
||||
JSONObject taskForm = new JSONObject();
|
||||
taskForm.put("task_type", IOSConstant.IN_BILL_TASK);
|
||||
taskForm.put("config_code", IOSConstant.IN_BILL_TASK);
|
||||
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
//空托盘出库库位
|
||||
taskForm.put("point_code1", structList.get(0).getStruct_code());
|
||||
//拉到卸货区空余的位置
|
||||
taskForm.put("point_code2", whereJson.getString("siteCode"));
|
||||
|
||||
taskForm.put("point_code3", whereJson.getString("site_code"));
|
||||
//计算入库库位
|
||||
taskForm.put("point_code4", point_code2);
|
||||
taskForm.put("vehicle_code", structList.get(0).getStoragevehicle_code());
|
||||
InBillTask inBillTask = SpringContextHolder.getBean("InBillTask");
|
||||
String task_id = inBillTask.create(taskForm);
|
||||
|
||||
Set<String> vehicleCodeSet = structList.stream()
|
||||
.map(StrategyStructMaterialVO::getStoragevehicle_code)
|
||||
.collect(Collectors.toSet());
|
||||
mdPbGroupplateMapper.update(
|
||||
new GroupPlate(),
|
||||
new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
.in(GroupPlate::getStoragevehicle_code, vehicleCodeSet)
|
||||
);
|
||||
|
||||
//锁定仓位
|
||||
Set<String> structCodeSet = structList.stream()
|
||||
.map(StrategyStructMaterialVO::getStruct_code)
|
||||
.collect(Collectors.toSet());
|
||||
iStructattrService.update(
|
||||
new LambdaUpdateWrapper<Structattr>()
|
||||
.set(Structattr::getInv_id, null)
|
||||
.set(Structattr::getInv_code, null)
|
||||
.set(Structattr::getInv_type, null)
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||
.in(Structattr::getStruct_code, structCodeSet)
|
||||
);
|
||||
|
||||
|
||||
//分配明细表更新任务相关数据
|
||||
IOStorInvDis dis = new IOStorInvDis();
|
||||
dis.setIostorinvdis_id(dtlDao.getIostorinvdtl_id());
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(whereJson.getString("site_code"));
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
|
||||
return PdaResponse.requestOk();
|
||||
|
||||
}
|
||||
|
||||
// @Override
|
||||
// @Transactional
|
||||
// public PdaResponse zwConfirmIn(JSONObject whereJson) {
|
||||
|
||||
// //组盘入库
|
||||
// //根据组盘编号获取物料型号
|
||||
// whereJson.put("vehicleCode", whereJson.getString("vehicle_code"));
|
||||
// whereJson.put("noEmptyVehicle", "1");
|
||||
// String material_model = getVehicleMaterial(whereJson).getString("material_model");
|
||||
// if(StringUtils.isEmpty(material_model)){
|
||||
// throw new BadRequestException("组盘的物料未配置【物料型号】!");
|
||||
// }
|
||||
// //根据物料型号匹配字典表获取入库编码
|
||||
// List<Dict> dictList = sysDictMapper.selectList(new LambdaQueryWrapper<Dict>()
|
||||
// .eq(Dict::getCode, "MATERIAL_MODEL_SECT")
|
||||
// .eq(Dict::getPara1, material_model));
|
||||
// if(CollectionUtils.isEmpty(dictList)){
|
||||
// throw new BadRequestException("字典MATERIAL_MODEL_SECT未配置物料类型与库区的对应关系,请核对!");
|
||||
// }
|
||||
|
||||
// String sect_code = dictList.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
|
||||
// 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("未找到载具所在的点位信息,请检查该载具是否绑定点位");
|
||||
// }
|
||||
// whereJson.put("point_code",whereJson.getString("site_code"));
|
||||
// // 预组织出入库单据实体
|
||||
// Map<String, Object> jsonMstO = organizeInsertData(whereJson);
|
||||
// // 调用服务新增出入库单
|
||||
// String iostorinv_id = iRawAssistIStorService.insertDtl(jsonMstO);
|
||||
// // 预组织出入库单据明细的分配数据
|
||||
// whereJson.put("iostorinv_id", iostorinv_id);
|
||||
// Map<String, Object> jsonDtl = organizeDivData(whereJson);
|
||||
// // 调用分配,默认自动分配库位
|
||||
// iRawAssistIStorService.divStruct(new JSONObject(jsonDtl));
|
||||
|
||||
// // 组织主数据
|
||||
// Map<String, Object> jsonMst = new HashMap<>();
|
||||
// jsonMst.put("point_code", whereJson.getString("point_code"));
|
||||
// // 组织明细数据
|
||||
// IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
// new QueryWrapper<IOStorInvDtl>().lambda()
|
||||
// .eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
// );
|
||||
// // 查找分配明细
|
||||
// Map<String, Object> map = new HashMap<>();
|
||||
// map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id());
|
||||
// List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
|
||||
// // 类型转换
|
||||
// ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
|
||||
// disDtl.forEach(item -> {
|
||||
// tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
|
||||
// });
|
||||
// jsonMst.put("tableMater", tableMater);
|
||||
|
||||
// String point_code2 = iRawAssistIStorService.divPointNoTask(jsonMst);
|
||||
|
||||
// //空托盘出库
|
||||
// // 需要计算新的siteCode 根据方案 找region_code=YLXCQ 原料卸车区的
|
||||
// // 已启用的 编号最大的 空的 point_type = 1 点位
|
||||
// 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("原料卸车区不存在空的点位");
|
||||
// }
|
||||
|
||||
// //从库区拉一个空托盘到这个点位
|
||||
// whereJson.put("siteCode", schBasePointList.get(0).getPoint_code());
|
||||
|
||||
// LambdaQueryWrapper<MdMeMaterialbase> maQueryWrapper = new LambdaQueryWrapper<>();
|
||||
// maQueryWrapper.eq(MdMeMaterialbase::getMaterial_code, StatusEnum.VEHICLE_TYPE.code("空托盘"));
|
||||
|
||||
// MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne(maQueryWrapper);
|
||||
// if (materDao == null) {
|
||||
// throw new BadRequestException("未找到空载具物料信息!");
|
||||
// }
|
||||
// whereJson.put("material_id", materDao.getMaterial_id());
|
||||
// whereJson.put("material_code", materDao.getMaterial_code());
|
||||
// Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<>(Sectattr.class)
|
||||
// .eq(Sectattr::getSect_id, whereJson.getString("sect_id"))
|
||||
// .eq(Sectattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
// );
|
||||
// if (ObjectUtil.isEmpty(sectattr)) {
|
||||
// throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
|
||||
// }
|
||||
// BsrealStorattr storeDao = iSrealStorattrService.getById(sectattr.getStor_id());
|
||||
// whereJson.put("stor_code", storeDao.getStor_code());
|
||||
// whereJson.put("sect_code", sectattr.getSect_code());
|
||||
// StrategyStructParam strategyStructParam = StrategyStructParam.builder()
|
||||
// .ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库")))
|
||||
// .sect_code(whereJson.getString("sect_code"))
|
||||
// .stor_code(whereJson.getString("stor_code"))
|
||||
// .material_id(whereJson.getString("material_id"))
|
||||
// .material_code(whereJson.getString("material_code"))
|
||||
// .qty(new BigDecimal(1))
|
||||
// .stragegyType("1")
|
||||
// .build();
|
||||
// List<StrategyStructMaterialVO> structList = iStructattrService.outBoundSectDiv(strategyStructParam);
|
||||
// if (CollectionUtils.isEmpty(structList)) {
|
||||
// throw new BadRequestException("无可用空托盘库存!");
|
||||
// }
|
||||
|
||||
// //创建任务
|
||||
// JSONObject taskForm = new JSONObject();
|
||||
// taskForm.put("task_type", IOSConstant.IN_BILL_TASK);
|
||||
// taskForm.put("config_code", IOSConstant.IN_BILL_TASK);
|
||||
// taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
|
||||
// //空托盘出库库位
|
||||
// taskForm.put("point_code1", structList.get(0).getStruct_code());
|
||||
// //拉到卸货区空余的位置
|
||||
// taskForm.put("point_code2", whereJson.getString("siteCode"));
|
||||
|
||||
// taskForm.put("point_code3", whereJson.getString("site_code"));
|
||||
// //计算入库库位
|
||||
// taskForm.put("point_code4", point_code2);
|
||||
// taskForm.put("vehicle_code", structList.get(0).getStoragevehicle_code());
|
||||
// InBillTask inBillTask = SpringContextHolder.getBean("InBillTask");
|
||||
// String task_id = inBillTask.create(taskForm);
|
||||
|
||||
// Set<String> vehicleCodeSet = structList.stream()
|
||||
// .map(StrategyStructMaterialVO::getStoragevehicle_code)
|
||||
// .collect(Collectors.toSet());
|
||||
// mdPbGroupplateMapper.update(
|
||||
// new GroupPlate(),
|
||||
// new LambdaUpdateWrapper<GroupPlate>()
|
||||
// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
// .in(GroupPlate::getStoragevehicle_code, vehicleCodeSet)
|
||||
// );
|
||||
|
||||
// //锁定仓位
|
||||
// Set<String> structCodeSet = structList.stream()
|
||||
// .map(StrategyStructMaterialVO::getStruct_code)
|
||||
// .collect(Collectors.toSet());
|
||||
// iStructattrService.update(
|
||||
// new LambdaUpdateWrapper<Structattr>()
|
||||
// .set(Structattr::getInv_id, null)
|
||||
// .set(Structattr::getInv_code, null)
|
||||
// .set(Structattr::getInv_type, null)
|
||||
// .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||
// .in(Structattr::getStruct_code, structCodeSet)
|
||||
// );
|
||||
|
||||
|
||||
// //分配明细表更新任务相关数据
|
||||
// IOStorInvDis dis = new IOStorInvDis();
|
||||
// dis.setIostorinvdis_id(dtlDao.getIostorinvdtl_id());
|
||||
// dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
// dis.setTask_id(task_id);
|
||||
// dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
// dis.setPoint_code(whereJson.getString("site_code"));
|
||||
// ioStorInvDisMapper.updateById(dis);
|
||||
|
||||
// return PdaResponse.requestOk();
|
||||
// }
|
||||
|
||||
/**
|
||||
* 组织入库插入数据
|
||||
* @param whereJson {
|
||||
@@ -651,7 +770,9 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
jsonMst.put("bill_status", IOSEnum.BILL_STATUS.code("生成"));
|
||||
jsonMst.put("total_qty", total_qty);
|
||||
jsonMst.put("detail_count", 1);
|
||||
jsonMst.put("bill_type", StatusEnum.IOBILL_TYPE_IN.code("生产入库"));
|
||||
if(!jsonMst.containsKey("bill_type")) {
|
||||
jsonMst.put("bill_type", StatusEnum.IOBILL_TYPE_IN.code("来料入库"));
|
||||
}
|
||||
jsonMst.put("biz_date", DateUtil.now());
|
||||
// 组织明细数据
|
||||
ArrayList<HashMap> tableData = new ArrayList<>();
|
||||
@@ -745,6 +866,42 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 下发任务-中钨原料入库
|
||||
* @param whereJson {
|
||||
* storagevehicle_code:载具编码
|
||||
* point_code:点位编码
|
||||
* sect_code:库区
|
||||
* iostorinv_id: id
|
||||
* }
|
||||
*/
|
||||
private void sendZwTask(JSONObject whereJson) {
|
||||
// 组织主数据
|
||||
Map<String, Object> jsonMst = new HashMap<>();
|
||||
jsonMst.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("来料入库"));
|
||||
jsonMst.put("point_code2", whereJson.getString("sch_base_point"));
|
||||
jsonMst.put("point_code3", whereJson.getString("point_code"));
|
||||
jsonMst.put("priority", whereJson.getString("priority"));
|
||||
jsonMst.put("vehicle_code", whereJson.getString("vehicle_code"));
|
||||
// 组织明细数据
|
||||
IOStorInvDtl dtlDao = ioStorInvDtlMapper.selectOne(
|
||||
new QueryWrapper<IOStorInvDtl>().lambda()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, whereJson.getString("iostorinv_id"))
|
||||
);
|
||||
// 查找分配明细
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("iostorinvdtl_id",dtlDao.getIostorinvdtl_id());
|
||||
List<IOStorInvDisDto> disDtl = iRawAssistIStorService.getDisDtl(map);
|
||||
// 类型转换
|
||||
ArrayList<LinkedHashMap> tableMater = new ArrayList<>();
|
||||
disDtl.forEach(item -> {
|
||||
tableMater.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
|
||||
});
|
||||
jsonMst.put("tableMater", tableMater);
|
||||
|
||||
iRawAssistIStorService.divPoint(jsonMst);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ public enum StatusEnum {
|
||||
* 出入库单据类型退货出库
|
||||
*/
|
||||
IOBILL_TYPE_IN(ForkMap.of("生产入库", "10", "inStorageTask", "调拨入库", "11", "inStorageTask", "退货入库", "12", "inStorageTask", "拣选回库",
|
||||
"13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask")),
|
||||
"13", "inStorageTask", "盘点入库", "14", "inStorageTask", "托盘入库", "30", "inStorageTask", "二楼CTU入库", "80", "inStorageTask","来料入库", "1013", "inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20", "outStorageTask", "生产出库", "21", "outStorageTask", "调拨出库", "22", "outStorageTask",
|
||||
"拣选出库", "23", "conveyorOutStorageTask", "盘点出库", "24", "outStorageTask", "出库拣选", "25", "toPickPlatformTask",
|
||||
"退货出库", "26", "outStorageTask", "托盘出库", "40", "outStorageTask", "二楼CTU出库", "81", "inStorageTask", "二楼出库AGV搬运",
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.nl.wms.sch_manage.service.util.tasks.zw;
|
||||
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.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
@@ -25,11 +26,14 @@ import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
|
||||
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.service.dao.GroupPlate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: zhengxuming
|
||||
@@ -55,15 +59,25 @@ public class InBillTask extends AbstractTask {
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
@Resource
|
||||
private IOutBillService outBillService;
|
||||
private IMdPbGroupplateService iMdPbGroupplateService;
|
||||
|
||||
@Resource
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
/**
|
||||
* 仓位服务
|
||||
*/
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(json.getString("TaskCode"));
|
||||
task.setTask_code(json.getString("task_code"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(json.getString("task_type"));
|
||||
task.setConfig_code(json.getString("config_code"));
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setPoint_code3(json.getString("point_code3"));
|
||||
@@ -72,7 +86,7 @@ public class InBillTask extends AbstractTask {
|
||||
task.setVehicle_code2(json.getString("vehicle_code2"));
|
||||
task.setGroup_id(json.getString("group_id"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setPriority(json.getString("priority"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
@@ -153,6 +167,25 @@ public class InBillTask extends AbstractTask {
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
|
||||
//更改点位的托盘信息,空托盘的点位 2为空托盘放置点位
|
||||
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
|
||||
.set(SchBasePoint::getPoint_status, "1")
|
||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()));
|
||||
|
||||
//更改点位的托盘信息,卸货的点位 3为起始点
|
||||
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getPoint_status, "1")
|
||||
.set(SchBasePoint::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code3()));
|
||||
|
||||
rawAssistIStorService.taskFinish(taskObj);
|
||||
}
|
||||
|
||||
@@ -167,6 +200,29 @@ public class InBillTask extends AbstractTask {
|
||||
.eq(SchBaseTask::getTask_id,taskObj.getTask_id())
|
||||
);
|
||||
|
||||
|
||||
List<IOStorInvDis> ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id()));
|
||||
|
||||
for(IOStorInvDis ioStorInvDis:ioStorInvDisList){
|
||||
//库存表解锁 lock_type inv_type inv_id inv_code
|
||||
//解锁库位
|
||||
JSONObject finish_map = new JSONObject();
|
||||
finish_map.put("struct_code", ioStorInvDis.getStruct_code());
|
||||
finish_map.put("inv_type", null);
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
|
||||
//解绑库位
|
||||
iStructattrService.updateStatusByCode("2", finish_map);
|
||||
|
||||
|
||||
//更新组盘表 status 20->10
|
||||
iMdPbGroupplateService.update(new LambdaUpdateWrapper<>(GroupPlate.class)
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
.eq(GroupPlate::getStoragevehicle_code,ioStorInvDis.getStoragevehicle_code()));
|
||||
}
|
||||
|
||||
//分配表清除任务
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getTask_id,null)
|
||||
|
||||
@@ -40,7 +40,7 @@ public interface IInBillService extends IService<IOStorInv> {
|
||||
|
||||
void divStruct(JSONObject whereJson);
|
||||
|
||||
|
||||
void zwInDivStruct(JSONObject whereJson);
|
||||
|
||||
void unDivStruct(Map whereJson);
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StInTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbBackAgvTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||
@@ -95,6 +96,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
private JbDownAgvTask jbDownAgvTask;
|
||||
@Resource
|
||||
private JbBackAgvTask jbBackAgvTask;
|
||||
@Resource
|
||||
private InBillTask inBillTask;
|
||||
|
||||
@Override
|
||||
public IPage<IOStorInv> pageQuery(Map whereJson, PageQuery page) {
|
||||
@@ -442,6 +445,123 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
ioStorInvMapper.updateById(ios);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void zwInDivStruct(JSONObject param) {
|
||||
Assert.noNullElements(new Object[]{param.getString("stor_code"),param.getString("sect_code")},"参数异常");
|
||||
ArrayList<HashMap> rows = (ArrayList<HashMap>) param.get("tableMater");
|
||||
JSONObject mst = JSONObject.parseObject(JSON.toJSONString(param));
|
||||
HashMap<String, String> map = rows.get(0);
|
||||
//判断该分配明细是否已经分配货位
|
||||
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id"))
|
||||
.isNull(IOStorInvDis::getStruct_code));
|
||||
if (ioStorInvDis ==null){
|
||||
throw new BadRequestException("当前明细已经分配过库位");
|
||||
}
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
String sect_id = "";
|
||||
String sect_code = "";
|
||||
String sect_name = "";
|
||||
String struct_id = "";
|
||||
String struct_code = "";
|
||||
String struct_name = "";
|
||||
String storagevehicle_code = "";
|
||||
//是否自动分配仓位
|
||||
Boolean checked = mst.getBoolean("checked");
|
||||
if (ObjectUtil.isNotEmpty(checked) && checked) {
|
||||
param.put("qty", map.get("plan_qty"));
|
||||
param.put("material_code", map.get("material_code"));
|
||||
param.put("pcsn", map.get("pcsn"));
|
||||
param.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库"));
|
||||
List<Structattr> structattrs = iStructattrService.inBoundSectDiv(
|
||||
StrategyStructParam.builder()
|
||||
.ioType(param.getString("ioType"))
|
||||
.sect_code(param.getString("sect_code"))
|
||||
.stor_code(param.getString("stor_code"))
|
||||
.material_code(param.getString("material_code"))
|
||||
.qty(new BigDecimal(param.getString("qty")))
|
||||
.pcsn(param.getString("pcsn"))
|
||||
.dis_id(map.get("iostorinvdis_id"))
|
||||
.build());
|
||||
Structattr struct = structattrs.get(0);
|
||||
sect_id = struct.getSect_id();
|
||||
sect_code = struct.getSect_code();
|
||||
sect_name = struct.getSect_name();
|
||||
struct_id = struct.getStruct_id();
|
||||
struct_code = struct.getStruct_code();
|
||||
struct_name = struct.getStruct_name();
|
||||
storagevehicle_code = struct.getStoragevehicle_code();
|
||||
} else {
|
||||
Structattr structattr = iStructattrService.findById(map.get("struct_id"));
|
||||
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = mdPbStoragevehicleinfoMapper.selectOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
|
||||
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, map.get("storagevehicle_code"))
|
||||
);
|
||||
sect_id = map.get("sect_id");
|
||||
sect_code = map.get("sect_code");
|
||||
sect_name = map.get("sect_name");
|
||||
struct_id = map.get("struct_id");
|
||||
struct_code = map.get("struct_code");
|
||||
struct_name = map.get("struct_name");
|
||||
storagevehicle_code = map.get("storagevehicle_code");
|
||||
}
|
||||
JSONObject dis_map = new JSONObject();
|
||||
dis_map.put("sect_id", sect_id);
|
||||
dis_map.put("sect_code", sect_code);
|
||||
dis_map.put("sect_name", sect_name);
|
||||
dis_map.put("struct_id", struct_id);
|
||||
dis_map.put("struct_code", struct_code);
|
||||
dis_map.put("struct_name", struct_name);
|
||||
dis_map.put("storagevehicle_code", storagevehicle_code);
|
||||
//锁定货位
|
||||
IOStorInv ioStorInv = ioStorInvMapper.selectById(map.get("iostorinv_id"));
|
||||
JSONObject lock_map = new JSONObject();
|
||||
lock_map.put("struct_code", struct_code);
|
||||
lock_map.put("inv_id", ioStorInv.getIostorinv_id());
|
||||
lock_map.put("inv_code", ioStorInv.getBill_code());
|
||||
lock_map.put("inv_type", ioStorInv.getBill_type());
|
||||
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, map.get("storagevehicle_code"))
|
||||
.eq(GroupPlate::getStatus,IOSEnum.GROUP_PLATE_STATUS.code("组盘")));
|
||||
// 更新分配明细表
|
||||
ioStorInvDisMapper.update(dis_map.toJavaObject(IOStorInvDis.class),new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getSect_id,dis_map.getString("sect_id"))
|
||||
.set(IOStorInvDis::getSect_code,dis_map.getString("sect_code"))
|
||||
.set(IOStorInvDis::getSect_name,dis_map.getString("sect_name"))
|
||||
.set(IOStorInvDis::getStruct_id,dis_map.getString("struct_id"))
|
||||
.set(IOStorInvDis::getStoragevehicle_code,dis_map.getString("storagevehicle_code"))
|
||||
.set(IOStorInvDis::getStruct_code,dis_map.getString("struct_code"))
|
||||
.set(IOStorInvDis::getStruct_name,dis_map.getString("struct_name"))
|
||||
.eq(IOStorInvDis::getIostorinvdis_id,map.get("iostorinvdis_id"))
|
||||
);
|
||||
//维护单据明细表里 分配数量
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("iostorinvdtl_id",map.get("iostorinvdtl_id"));
|
||||
jsonObject.put("bill_status",IOSEnum.BILL_STATUS.code("分配完"));
|
||||
jsonObject.put("assign_qty",map.get("plan_qty"));
|
||||
jsonObject.put("unassign_qty","0");
|
||||
ioStorInvDtlMapper.updateById(jsonObject.toJavaObject(IOStorInvDtl.class));
|
||||
//根据单据标识判断分配明细是否都已经分配完成
|
||||
int disCount = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinv_id, map.get("iostorinv_id"))
|
||||
.and(wrapper -> wrapper.isNull(IOStorInvDis::getStruct_code).or().eq(IOStorInvDis::getStruct_code, "")));
|
||||
// 根据分配货位情况 更新主表单据状态
|
||||
IOStorInv ios = new IOStorInv();
|
||||
ios.setIostorinv_id(map.get("iostorinv_id"));
|
||||
ios.setUpdate_optid(currentUserId);
|
||||
ios.setUpdate_optname(nickName);
|
||||
ios.setUpdate_time(now);
|
||||
ios.setBill_status(disCount > 0 ? IOSEnum.BILL_STATUS.code("分配中") : IOSEnum.BILL_STATUS.code("分配完"));
|
||||
ioStorInvMapper.updateById(ios);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据库区策略获取仓位
|
||||
@@ -649,6 +769,26 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
task.put("point_code3", fullPoint.getPoint_code());
|
||||
task.put("point_code4", structCode);
|
||||
jbBackAgvTask.create(task);
|
||||
} else if (StatusEnum.IOBILL_TYPE_IN.code("来料入库").equals(invObj.getBill_type())) {
|
||||
// 获取组盘信息
|
||||
GroupPlate groupPlate = mdPbGroupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.get("vehicle_code"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("config_code", IOSConstant.IN_BILL_TASK);
|
||||
task.put("group_id", groupPlate.getGroup_id());
|
||||
task.put("priority",whereJson.get("priority"));
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("point_code1",ioStorInvDis.getStruct_code());
|
||||
task.put("point_code2", whereJson.get("point_code2"));
|
||||
task.put("point_code3", whereJson.get("point_code3"));
|
||||
task.put("point_code4", ioStorInvDis.getStruct_code());
|
||||
|
||||
//第一个载具为计算得到的,第二个载具为起始点载具
|
||||
task.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
task.put("vehicle_code2", whereJson.get("vehicle_code"));
|
||||
task_id = inBillTask.create(task);
|
||||
} else {
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
@@ -809,6 +949,7 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
|
||||
finish_map.put("inv_type", null);
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
finish_map.put("occupancy_state","3");
|
||||
iStructattrService.updateStatusByCode("1",finish_map);
|
||||
//库存变动
|
||||
StructattrChangeDto changeDto = StructattrChangeDto.builder()
|
||||
|
||||
Reference in New Issue
Block a user