rev:修改

This commit is contained in:
2026-03-23 21:58:54 +08:00
parent f4019b9e90
commit d25ebfaedf
21 changed files with 265 additions and 86 deletions

View File

@@ -124,6 +124,7 @@
attr.stor_name, attr.stor_name,
attr.sect_name, attr.sect_name,
attr.lock_type, attr.lock_type,
attr.block_num,
mater.material_id, mater.material_id,
mater.material_code, mater.material_code,
mater.material_name, mater.material_name,

View File

@@ -12,6 +12,10 @@
AND AND
attr.sect_id LIKE #{param.sect_id} attr.sect_id LIKE #{param.sect_id}
</if> </if>
<if test="param.ext_id != null and param.ext_id != ''">
AND
attr.ext_id = #{param.ext_id}
</if>
</where> </where>
GROUP BY GROUP BY

View File

@@ -45,6 +45,10 @@ public class StrategyStructParam {
* 载具编码 * 载具编码
*/ */
private String storagevehicle_code; private String storagevehicle_code;
/**
* 对应称重平台
*/
private String ext_id;
/** /**
* 载具明细:混料的话则是数组 * 载具明细:混料的话则是数组

View File

@@ -1,6 +1,7 @@
package org.nl.wms.decision_manage.service.decisioner.impl.base; package org.nl.wms.decision_manage.service.decisioner.impl.base;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
@@ -13,6 +14,7 @@ import org.nl.wms.basedata_manage.service.dao.mapper.StructattrMapper;
import org.nl.wms.basedata_manage.service.dto.StrategyMater; import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.decision_manage.service.decisioner.Decisioner; import org.nl.wms.decision_manage.service.decisioner.Decisioner;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -20,6 +22,7 @@ import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* <p> * <p>
@@ -42,6 +45,67 @@ public class MiddleRuleHandler extends Decisioner<Structattr, StrategyStructPara
@Resource @Resource
private StructattrMapper structattrMapper; private StructattrMapper structattrMapper;
public List<Structattr> handler1(List<Structattr> list, StrategyStructParam param) {
log.info("---------执行middle入库分配规则---------");
List<Structattr> resuList = new ArrayList<>();
Structattr structattr = list.get(0);
List<Structattr> attrList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, structattr.getSect_id())
.and(row -> row.isNotNull(Structattr::getStoragevehicle_code)
.ne(Structattr::getStoragevehicle_code, "")
)
);
// 查询此托盘对应的库存信息
List<String> vehicleList = attrList.stream()
.map(Structattr::getStoragevehicle_code)
.distinct()
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(vehicleList)) {
// 为空:查询空的一组可用货位
return this.queryAttrGroup(structattr,param.getExt_id());
}
List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleList)
);
// 不为空:判断是否有相同物料批次的库存
StrategyMater strategyMater = param.getStrategyMaters().get(0);
MdPbStoragevehicleext extDaoLike = extList.stream()
.filter(row -> row.getMaterial_id().equals(strategyMater.getMaterial_id())
&& row.getPcsn().equals(strategyMater.getPcsn())
).findFirst().orElse(null);
if (ObjectUtil.isEmpty(extDaoLike)) {
// 为空:查询空的一组可用货位
return this.queryAttrGroup(structattr,param.getExt_id());
}
// 不为空查询此组空位
Structattr attrLikeVehicle = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, extDaoLike.getStoragevehicle_code())
);
resuList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, structattr.getSect_id())
.eq(Structattr::getBlock_num, attrLikeVehicle.getBlock_num())
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.and(row -> row.isNull(Structattr::getStoragevehicle_code)
.or().eq(Structattr::getStoragevehicle_code, "")
)
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(resuList)) {
return this.queryAttrGroup(structattr, param.getExt_id());
}
return resuList;
}
@Override @Override
public List<Structattr> handler(List<Structattr> list, StrategyStructParam param) { public List<Structattr> handler(List<Structattr> list, StrategyStructParam param) {
log.info("---------执行middle入库分配规则---------"); log.info("---------执行middle入库分配规则---------");
@@ -63,7 +127,7 @@ public class MiddleRuleHandler extends Decisioner<Structattr, StrategyStructPara
if (ObjectUtil.isEmpty(vehicleList)) { if (ObjectUtil.isEmpty(vehicleList)) {
// 为空:查询空的一组可用货位 // 为空:查询空的一组可用货位
return this.queryAttrGroup(structattr); return this.queryAttrGroup(structattr,param.getExt_id());
} }
List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list( List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
@@ -73,32 +137,44 @@ public class MiddleRuleHandler extends Decisioner<Structattr, StrategyStructPara
// 不为空:判断是否有相同物料批次的库存 // 不为空:判断是否有相同物料批次的库存
StrategyMater strategyMater = param.getStrategyMaters().get(0); StrategyMater strategyMater = param.getStrategyMaters().get(0);
MdPbStoragevehicleext extDaoLike = extList.stream() List<MdPbStoragevehicleext> extDaoLikeList = extList.stream()
.filter(row -> row.getMaterial_id().equals(strategyMater.getMaterial_id()) .filter(row -> row.getMaterial_id().equals(strategyMater.getMaterial_id())
&& row.getPcsn().equals(strategyMater.getPcsn()) && row.getPcsn().equals(strategyMater.getPcsn())
).findFirst().orElse(null); ).collect(Collectors.toList());
if (ObjectUtil.isEmpty(extDaoLike)) { if (ObjectUtil.isEmpty(extDaoLikeList)) {
// 为空:查询空的一组可用货位 // 为空:查询空的一组可用货位
return this.queryAttrGroup(structattr); return this.queryAttrGroup(structattr,param.getExt_id());
} }
// 不为空查询此组空 // 查询所属仓
Structattr attrLikeVehicle = iStructattrService.getOne( List<String> vehicleInfo = extDaoLikeList.stream()
.map(MdPbStoragevehicleext::getStoragevehicle_code)
.distinct()
.collect(Collectors.toList());
List<Structattr> attrListInfo = iStructattrService.list(
new QueryWrapper<Structattr>().lambda() new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, extDaoLike.getStoragevehicle_code()) .in(Structattr::getStoragevehicle_code, vehicleInfo)
);
resuList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, structattr.getSect_id())
.eq(Structattr::getBlock_num, attrLikeVehicle.getBlock_num())
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.and(row -> row.isNull(Structattr::getStoragevehicle_code)
.or().eq(Structattr::getStoragevehicle_code, "")
)
.orderByAsc(Structattr::getStruct_code)
); );
for (Structattr attr : attrListInfo) {
// 不为空查询此组空位
resuList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, structattr.getSect_id())
.eq(Structattr::getBlock_num, attr.getBlock_num())
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.and(row -> row.isNull(Structattr::getStoragevehicle_code)
.or().eq(Structattr::getStoragevehicle_code, "")
)
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isNotEmpty(resuList)) {
break;
}
}
if (ObjectUtil.isEmpty(resuList)) { if (ObjectUtil.isEmpty(resuList)) {
return this.queryAttrGroup(structattr); return this.queryAttrGroup(structattr, param.getExt_id());
} }
return resuList; return resuList;
@@ -110,9 +186,9 @@ public class MiddleRuleHandler extends Decisioner<Structattr, StrategyStructPara
* @param structattr 实体类 * @param structattr 实体类
* @return List<Structattr> * @return List<Structattr>
*/ */
public List<Structattr> queryAttrGroup(Structattr structattr) { public List<Structattr> queryAttrGroup(Structattr structattr, String ext_id) {
// 查询一组未有货组仓位 // 查询一组未有货组仓位
List<Structattr> groupBlockList = structattrMapper.queryAttrGroup(MapOf.of("sect_id", structattr.getSect_id())); List<Structattr> groupBlockList = structattrMapper.queryAttrGroup(MapOf.of("sect_id", structattr.getSect_id(),"ext_id",ext_id));
if (ObjectUtil.isEmpty(groupBlockList)) { if (ObjectUtil.isEmpty(groupBlockList)) {
throw new BadRequestException("当前组仓位不足!"); throw new BadRequestException("当前组仓位不足!");
} }
@@ -125,4 +201,66 @@ public class MiddleRuleHandler extends Decisioner<Structattr, StrategyStructPara
); );
} }
public Structattr isLikeMaterial(JSONObject json) {
String material_id = json.getString("material_id");
String pcsn = json.getString("pcsn");
List<Structattr> attrList = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, IOSEnum.SECT_ID.code("中间站库区"))
.and(row -> row.isNotNull(Structattr::getStoragevehicle_code)
.ne(Structattr::getStoragevehicle_code, "")
)
);
// 查询此托盘对应的库存信息
List<String> vehicleList = attrList.stream()
.map(Structattr::getStoragevehicle_code)
.distinct()
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(vehicleList)) {
// 为空:
return null;
}
List<MdPbStoragevehicleext> extList = iMdPbStoragevehicleextService.list(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleList)
);
// 不为空:判断是否有相同物料批次的库存
MdPbStoragevehicleext extDaoLike = extList.stream()
.filter(row -> row.getMaterial_id().equals(material_id)
&& row.getPcsn().equals(pcsn)
).findFirst().orElse(null);
if (ObjectUtil.isEmpty(extDaoLike)) {
// 为空:
return null;
}
// 不为空查询此组空位
Structattr attrLikeVehicle = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, extDaoLike.getStoragevehicle_code())
);
List<Structattr> attrListRest = iStructattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getSect_id, IOSEnum.SECT_ID.code("中间站库区"))
.eq(Structattr::getBlock_num, attrLikeVehicle.getBlock_num())
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.and(row -> row.isNull(Structattr::getStoragevehicle_code)
.or().eq(Structattr::getStoragevehicle_code, "")
)
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(attrListRest)) {
return null;
}
return attrListRest.get(0);
}
} }

View File

@@ -25,7 +25,7 @@ public class EXTConstant {
/** /**
* ACS下发 取放货确认 * ACS下发 取放货确认
*/ */
public final static String CONFIRM_AGV_ACS_API = "api/wms/confirmAgv"; public final static String CONFIRM_AGV_ACS_API = "api/wms/isGetPut";
/** /**
* ACS下发 获取称重信息 * ACS下发 获取称重信息

View File

@@ -41,9 +41,8 @@ public interface WmsToAcsService {
/** /**
* 确认取放货 * 确认取放货
* @param whereJson { * @param whereJson {
* task_type: 1-取货确认 2- 放货确认 * type: 1-取货完成 2- 放货完成
* task_code: 任务号 * device_code: 点位编码
* point_code: 点位编码
* } * }
* @return AcsResponse * @return AcsResponse
*/ */

View File

@@ -41,6 +41,5 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
@Override @Override
public AcsResponse confirmAgv(JSONObject whereJson) { public AcsResponse confirmAgv(JSONObject whereJson) {
return AcsUtil.notifyAcs(EXTConstant.CONFIRM_AGV_ACS_API, whereJson); return AcsUtil.notifyAcs(EXTConstant.CONFIRM_AGV_ACS_API, whereJson);
} }
} }

View File

@@ -39,6 +39,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.SecondaryPackagingService; import org.nl.wms.sch_manage.service.SecondaryPackagingService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; 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.AbstractTask;
import org.nl.wms.sch_manage.service.util.TaskFactory; import org.nl.wms.sch_manage.service.util.TaskFactory;
import org.nl.wms.sch_manage.service.util.tasks.PalletOutTask; import org.nl.wms.sch_manage.service.util.tasks.PalletOutTask;
@@ -121,6 +122,8 @@ public class PdaProductionServiceImpl implements PdaProductionService {
private SecondaryPackagingService secondaryPackagingService; private SecondaryPackagingService secondaryPackagingService;
@Resource @Resource
private SectMaterialCheck sectMaterialCheck; private SectMaterialCheck sectMaterialCheck;
@Resource
private SchBasePointMapper schBasePointMapper;
@Override @Override
public PdaResponse getGroupInfo(JSONObject param) { public PdaResponse getGroupInfo(JSONObject param) {
// search; // search;
@@ -662,10 +665,13 @@ public class PdaProductionServiceImpl implements PdaProductionService {
JSONObject divObj = defaultPdaBuildParam.buildManuaOutBuckDivData(param, ioStorInvDtlDto); JSONObject divObj = defaultPdaBuildParam.buildManuaOutBuckDivData(param, ioStorInvDtlDto);
outBillService.manualDiv(divObj); outBillService.manualDiv(divObj);
} }
// 找一个没任务的称重位
List<SchBasePoint> czws = pointService.getCanUsePointByRegion("ZJZ01"); // 根据仓位定位到出到哪个称重位
String end_code = structattr.getExt_id();
List<SchBasePoint> czws = schBasePointMapper.getCanUsePointByCode(end_code);
// List<SchBasePoint> czws = pointService.getCanUsePointByRegion("ZJZ01");
if (czws.isEmpty()) { if (czws.isEmpty()) {
throw new BadRequestException("找不到中间站的称重位!"); throw new BadRequestException("当前称重位【"+end_code+"】有任务在执行");
} }
// 3 创建任务 // 3 创建任务
JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(czws.get(0), invId); JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(czws.get(0), invId);
@@ -763,6 +769,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
String invId = rawAssistIStorService.insertDtl(invObj); String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用分配 // 2 调用分配
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param2, sectattr, invId, true); Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param2, sectattr, invId, true);
divObj.put("ext_id", startPoint.getPoint_code());
rawAssistIStorService.divStruct(divObj); rawAssistIStorService.divStruct(divObj);
// 3 创建任务 // 3 创建任务
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId); Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);

View File

@@ -76,14 +76,14 @@ public class SchBasePointController {
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@Log("确认取货") @Log("取货完成")
@PostMapping("/getConfirm") @PostMapping("/getConfirm")
public ResponseEntity<Object> getConfirm(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> getConfirm(@RequestBody JSONObject whereJson) {
schBasePointService.getConfirm(whereJson); schBasePointService.getConfirm(whereJson);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@Log("确认放货") @Log("放货完成")
@PostMapping("/putConfirm") @PostMapping("/putConfirm")
public ResponseEntity<Object> putConfirm(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> putConfirm(@RequestBody JSONObject whereJson) {
schBasePointService.putConfirm(whereJson); schBasePointService.putConfirm(whereJson);

View File

@@ -92,13 +92,13 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
void unLockPoint(String point_code); void unLockPoint(String point_code);
/** /**
* 确认取货 * 取货完成
* @param whereJson 点位实体 * @param whereJson 点位实体
*/ */
void getConfirm(JSONObject whereJson); void getConfirm(JSONObject whereJson);
/** /**
* 确认放货 * 放货完成
* @param whereJson 点位实体 * @param whereJson 点位实体
*/ */
void putConfirm(JSONObject whereJson); void putConfirm(JSONObject whereJson);

View File

@@ -59,6 +59,8 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<SchBasePoint> getCanUsePointByRegion(String regionCode); List<SchBasePoint> getCanUsePointByRegion(String regionCode);
List<SchBasePoint> getCanUsePointByCode(String point_code);
/** /**
* 无人车卸货 - 查询无人车点位信息 * 无人车卸货 - 查询无人车点位信息
* @return PdaResponse * @return PdaResponse

View File

@@ -124,6 +124,20 @@
OR t.point_code2 = p.point_code )) OR t.point_code2 = p.point_code ))
</select> </select>
<select id="getCanUsePointByCode" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT *
FROM `sch_base_point` p
WHERE p.point_code = #{point_code}
AND p.is_used = TRUE
AND p.point_status = '1'
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.is_delete = '0'
AND t.task_status <![CDATA[ < ]]> '5'
AND ( t.point_code1 = p.point_code
OR t.point_code2 = p.point_code ))
</select>
<select id="queryNotCarPoint" resultType="com.alibaba.fastjson.JSONObject"> <select id="queryNotCarPoint" resultType="com.alibaba.fastjson.JSONObject">
SELECT SELECT
point.*, point.*,

View File

@@ -224,26 +224,10 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override @Override
@Transactional @Transactional
public void getConfirm(JSONObject whereJson) { public void getConfirm(JSONObject whereJson) {
SchBasePoint pointDao = this.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao.getIng_task_code())) {
throw new BadRequestException("当前站点没有任务【"+pointDao.getPoint_code()+"");
}
// 查询任务
SchBaseTask taskDao = iSchBaseTaskService.getById(pointDao.getIng_task_code());
if (ObjectUtil.isEmpty(taskDao)) {
throw new BadRequestException("当前点位没有正在执行的任务!");
}
// 判断任务是否在执行中
if (!taskDao.getTask_status().equals(TaskStatus.EXECUTING.getCode())) {
throw new BadRequestException("当前点位任务已完成或未执行【"+taskDao.getTask_code()+"");
}
// 通知ACS可以离开 // 通知ACS可以离开
JSONObject jsonParam = new JSONObject(); JSONObject jsonParam = new JSONObject();
jsonParam.put("task_type", IOSConstant.ONE); jsonParam.put("type", IOSConstant.ONE);
jsonParam.put("task_code", taskDao.getTask_code()); jsonParam.put("device_code", whereJson.getString("point_code"));
jsonParam.put("point_code", taskDao.getPoint_code2());
AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam); AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam);
if (acsResponse.getStatus() != 200) { if (acsResponse.getStatus() != 200) {
throw new BadRequestException(acsResponse.getMessage()); throw new BadRequestException(acsResponse.getMessage());
@@ -253,25 +237,10 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override @Override
@Transactional @Transactional
public void putConfirm(JSONObject whereJson) { public void putConfirm(JSONObject whereJson) {
SchBasePoint pointDao = this.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao.getIng_task_code())) {
throw new BadRequestException("当前站点没有任务【"+pointDao.getPoint_code()+"");
}
// 查询任务
SchBaseTask taskDao = iSchBaseTaskService.getById(pointDao.getIng_task_code());
if (ObjectUtil.isEmpty(taskDao)) {
throw new BadRequestException("当前点位没有正在执行的任务!");
}
// 判断任务是否在执行中
if (!taskDao.getTask_status().equals(TaskStatus.EXECUTING.getCode())) {
throw new BadRequestException("当前点位任务已完成或未执行【"+taskDao.getTask_code()+"");
}
// 通知ACS可以离开 // 通知ACS可以离开
JSONObject jsonParam = new JSONObject(); JSONObject jsonParam = new JSONObject();
jsonParam.put("task_type", IOSConstant.TWO); jsonParam.put("type", IOSConstant.TWO);
jsonParam.put("task_code", taskDao.getTask_code()); jsonParam.put("device_code", whereJson.getString("point_code"));
jsonParam.put("point_code", taskDao.getPoint_code1());
AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam); AcsResponse acsResponse = wmsToAcsService.confirmAgv(jsonParam);
if (acsResponse.getStatus() != 200) { if (acsResponse.getStatus() != 200) {
throw new BadRequestException(acsResponse.getMessage()); throw new BadRequestException(acsResponse.getMessage());

View File

@@ -85,7 +85,8 @@ public class CenterInTask extends AbstractTask {
AcsTaskDto acsTaskDto = new AcsTaskDto(); AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_id(taskDao.getTask_id()); acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code()); acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); // 对应关系CZJT01 CZJT03CZJT02 CZJT04
acsTaskDto.setStart_device_code(IOSEnum.CZW_SHIP.code(taskDao.getPoint_code1()));
acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); acsTaskDto.setVehicle_code(taskDao.getVehicle_code());

View File

@@ -18,6 +18,7 @@ import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum;
import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.warehouse_management.enums.IOSConstant; import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -75,7 +76,8 @@ public class CoatingUpTask extends AbstractTask {
AcsTaskDto acsTaskDto = new AcsTaskDto(); AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_id(taskDao.getTask_id()); acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code()); acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); // 对应关系CZJT01 CZJT03CZJT02 CZJT04
acsTaskDto.setStart_device_code(IOSEnum.CZW_SHIP.code(taskDao.getPoint_code1()));
acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); acsTaskDto.setVehicle_code(taskDao.getVehicle_code());

View File

@@ -135,7 +135,8 @@ public class IntermediateOutTask extends AbstractTask {
acsTaskDto.setExt_task_id(taskDao.getTask_id()); acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code()); acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); // 对应关系CZJT01 CZJT03CZJT02 CZJT04
acsTaskDto.setNext_device_code(IOSEnum.CZW_SHIP.code(taskDao.getPoint_code2()));
acsTaskDto.setPriority(taskDao.getPriority()); acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
@@ -211,6 +212,9 @@ public class IntermediateOutTask extends AbstractTask {
throw new BadRequestException("获取重量失败:" + weighAcs.getMessage()); throw new BadRequestException("获取重量失败:" + weighAcs.getMessage());
} }
JSONObject data = weighAcs.getParameters(); JSONObject data = weighAcs.getParameters();
if (ObjectUtil.isEmpty(data.getString("weigh")) || data.getDoubleValue("weigh") == 0) {
throw new BadRequestException("获取重量失败重量为0或者为空!");
}
// 毛重 // 毛重
BigDecimal weigh = NumberUtil.round(data.getString("weigh"), 2); BigDecimal weigh = NumberUtil.round(data.getString("weigh"), 2);
// 净重 // 净重

View File

@@ -5,13 +5,17 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.Put;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil; import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil; import org.nl.config.IdUtil;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService; import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService;
import org.nl.wms.basedata_manage.service.ISectattrService; import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.dao.Sectattr; import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.decision_manage.service.decisioner.impl.base.MiddleRuleHandler;
import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.ext.service.WmsToAcsService;
import org.nl.wms.ext.service.util.AcsResponse; import org.nl.wms.ext.service.util.AcsResponse;
import org.nl.wms.pda.general_management.service.PdaBuildParamService; import org.nl.wms.pda.general_management.service.PdaBuildParamService;
@@ -21,6 +25,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; 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.ACSTaskTypeEnum; import org.nl.wms.sch_manage.service.util.ACSTaskTypeEnum;
import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.AcsTaskDto;
@@ -32,6 +37,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -61,6 +67,8 @@ public class TabletingInTask extends AbstractTask {
private IRawAssistIStorService rawAssistIStorService; private IRawAssistIStorService rawAssistIStorService;
@Resource @Resource
private WmsToAcsService wmsToAcsService; private WmsToAcsService wmsToAcsService;
@Resource
private SchBasePointMapper schBasePointMapper;
/** /**
* 桶记录服务 * 桶记录服务
@@ -76,12 +84,28 @@ public class TabletingInTask extends AbstractTask {
if (bucket.size() == 0) { if (bucket.size() == 0) {
throw new BadRequestException("该载具未存在组桶信息,请先组桶!"); throw new BadRequestException("该载具未存在组桶信息,请先组桶!");
} }
// 找一个没任务的称重位 JSONObject jsonObject = bucket.get(0);
List<SchBasePoint> czws = pointService.getCanUsePointByRegion("ZJZ01"); List<SchBasePoint> czws = new ArrayList<>();
// 查询中间站是否有相同物料、批次仓位
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("material_id", jsonObject.getString("material_id"));
jsonObject1.put("pcsn", jsonObject.getString("pcsn"));
// 调用分配规则
MiddleRuleHandler bean = SpringContextHolder.getBean(MiddleRuleHandler.class);
Structattr attr = bean.isLikeMaterial(jsonObject1);
if (ObjectUtil.isEmpty(attr)) {
// 找一个没任务的称重位
czws = pointService.getCanUsePointByRegion("ZJZ01");
} else {
czws = schBasePointMapper.getCanUsePointByCode(attr.getExt_id());
if (czws.size() == 0) {
throw new BadRequestException("称重位【"+attr.getExt_id()+"】有任务正在执行!");
}
}
if (czws.size() == 0) { if (czws.size() == 0) {
throw new BadRequestException("找不到中间站的称重位!"); throw new BadRequestException("找不到中间站的称重位!");
} }
JSONObject jsonObject = bucket.get(0);
SchBasePoint point = czws.get(0); SchBasePoint point = czws.get(0);
SchBaseTask task = new SchBaseTask(); SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId()); task.setTask_id(IdUtil.getStringId());
@@ -119,7 +143,8 @@ public class TabletingInTask extends AbstractTask {
acsTaskDto.setExt_task_id(taskDao.getTask_id()); acsTaskDto.setExt_task_id(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code()); acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); // 对应关系CZJT01 CZJT03CZJT02 CZJT04
acsTaskDto.setNext_device_code(IOSEnum.CZW_SHIP.code(taskDao.getPoint_code2()));
acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
acsTaskDto.setVehicle_type(IOSConstant.ONE); acsTaskDto.setVehicle_type(IOSConstant.ONE);
@@ -222,6 +247,7 @@ public class TabletingInTask extends AbstractTask {
String invId = rawAssistIStorService.insertDtl(invObj); String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用分配 // 2 调用分配
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true); Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true);
divObj.put("ext_id", taskObj.getPoint_code2());
rawAssistIStorService.divStruct(divObj); rawAssistIStorService.divStruct(divObj);
// 3 创建任务 // 3 创建任务
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId); Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);

View File

@@ -93,6 +93,9 @@ public enum IOSEnum {
// 仓库ID // 仓库ID
STOR_ID(MapOf.of("物料室仓库", "1582991156504039424","内包材仓库","1582991156504039425")), STOR_ID(MapOf.of("物料室仓库", "1582991156504039424","内包材仓库","1582991156504039425")),
// 库区id
SECT_ID(MapOf.of("中间站库区", "1993215690856861696")),
// 库区编码 // 库区编码
SECT_CODE(MapOf.of("内包材区", "NBC01", "批料室区", "PZC01", SECT_CODE(MapOf.of("内包材区", "NBC01", "批料室区", "PZC01",
"中间站区", "ZZC01", "物料间区", "WZC01", "辅料区", "WFL01", "原料区", "WYL01", "中间站区", "ZZC01", "物料间区", "WZC01", "辅料区", "WFL01", "原料区", "WYL01",
@@ -145,6 +148,9 @@ public enum IOSEnum {
// 打印记录托盘类型 // 打印记录托盘类型
PRINT_VEHICLE_TYPE(MapOf.of("托盘", "1", "料桶", "2")), PRINT_VEHICLE_TYPE(MapOf.of("托盘", "1", "料桶", "2")),
// 中间站称重机台对应关系1.CZJT01:CZJT03,2.CZJT02:CZJT04
CZW_SHIP(MapOf.of("CZJT01", "CZJT03", "CZJT02", "CZJT04")),
; ;
private Map<String, String> code; private Map<String, String> code;

View File

@@ -421,6 +421,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
jo_form.put("stor_code", storDao.getStor_code()); jo_form.put("stor_code", storDao.getStor_code());
jo_form.put("storagevehicle_code", map.get("storagevehicle_code")); jo_form.put("storagevehicle_code", map.get("storagevehicle_code"));
jo_form.put("strategyMaters", strategyDaoList); jo_form.put("strategyMaters", strategyDaoList);
jo_form.put("ext_id", whereJson.get("ext_id"));
// 调用自动分配 // 调用自动分配
struct = this.autoDis(jo_form); struct = this.autoDis(jo_form);
} else { } else {
@@ -850,6 +851,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
.sect_code(whereJson.getString("sect_code")) .sect_code(whereJson.getString("sect_code"))
.stor_code(whereJson.getString("stor_code")) .stor_code(whereJson.getString("stor_code"))
.storagevehicle_code(whereJson.getString("storagevehicle_code")) .storagevehicle_code(whereJson.getString("storagevehicle_code"))
.ext_id(whereJson.getString("ext_id"))
.strategyMaters(whereJson.getJSONArray("strategyMaters").toJavaList(StrategyMater.class)) .strategyMaters(whereJson.getJSONArray("strategyMaters").toJavaList(StrategyMater.class))
.build()); .build());

View File

@@ -175,20 +175,20 @@
type="primary" type="primary"
icon="el-icon-circle-close" icon="el-icon-circle-close"
:disabled="crud.selections.length !== 1" :disabled="crud.selections.length !== 1"
@click="cleanVehicle" @click="getConfirm"
> >
清载具 放货完成
</el-button> </el-button>
<el-button <el-button
slot="right" slot="right"
class="filter-item" class="filter-item"
size="mini" size="mini"
type="danger" type="primary"
icon="el-icon-circle-close" icon="el-icon-circle-close"
:disabled="crud.selections.length !== 1" :disabled="crud.selections.length !== 1"
@click="cleanMaterial" @click="putConfirm"
> >
清物料 取货完成
</el-button> </el-button>
</crudOperation> </crudOperation>
<!--表单组件--> <!--表单组件-->
@@ -601,16 +601,16 @@ export default {
this.crud.toQuery() this.crud.toQuery()
}) })
}, },
cleanVehicle() { getConfirm() {
const data = this.$refs.table.selection[0] const data = this.$refs.table.selection[0]
crudSchBasePoint.cleanVehicle(data).then(res => { crudSchBasePoint.getConfirm(data).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery() this.crud.toQuery()
}) })
}, },
cleanMaterial() { putConfirm() {
const data = this.$refs.table.selection[0] const data = this.$refs.table.selection[0]
crudSchBasePoint.cleanMaterial(data).then(res => { crudSchBasePoint.putConfirm(data).then(res => {
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery() this.crud.toQuery()
}) })
@@ -688,8 +688,8 @@ export default {
// 表格渲染 // 表格渲染
LODOP.ADD_PRINT_TABLE('15mm', '5mm', '95%', '95%', tableHtml) LODOP.ADD_PRINT_TABLE('15mm', '5mm', '95%', '95%', tableHtml)
LODOP.PREVIEW()// 预览 // LODOP.PREVIEW()// 预览
// LODOP.PRINT()// 打印 LODOP.PRINT()// 打印
// LODOP.PRINT_DESIGN()// 编辑 // LODOP.PRINT_DESIGN()// 编辑
this.crud.notify('打印成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('打印成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery() this.crud.toQuery()

View File

@@ -90,6 +90,7 @@
<el-table-column prop="canuse_qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" /> <el-table-column prop="canuse_qty" label="可用数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" /> <el-table-column prop="frozen_qty" label="冻结数" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" /> <el-table-column prop="qty_unit_name" label="计量单位" :min-width="flexWidth('qty_unit_name',crud.data,'计量单位')" />
<el-table-column prop="block_num" label="所属区块" :min-width="flexWidth('block_num',crud.data,'所属区块')" />
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" /> <el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')" />
<el-table-column prop="insert_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" /> <el-table-column prop="insert_time" label="入库时间" :min-width="flexWidth('insert_time',crud.data,'入库时间')" />
</el-table> </el-table>