fix:生产下料、料桶叫料
This commit is contained in:
@@ -15,10 +15,14 @@
|
||||
m.material_name,
|
||||
m.material_spec,
|
||||
m.material_model,
|
||||
m.material_type_id
|
||||
m.material_type_id,
|
||||
g.bucket_code AS vehicle_code,
|
||||
class.class_name
|
||||
FROM
|
||||
`md_pd_groupbucket` g
|
||||
LEFT JOIN md_me_materialbase m ON m.material_id = g.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = m.material_type_id
|
||||
|
||||
WHERE
|
||||
g.bucket_code = #{vehicleCode}
|
||||
</select>
|
||||
@@ -68,11 +72,13 @@
|
||||
m.material_name,
|
||||
m.material_spec,
|
||||
m.material_model,
|
||||
m.material_type_id
|
||||
m.material_type_id,
|
||||
class.class_name
|
||||
FROM
|
||||
`md_pd_groupbucket` mg
|
||||
LEFT JOIN st_ivt_structattr ss ON mg.bucket_code = ss.storagevehicle_code
|
||||
LEFT JOIN md_me_materialbase m ON m.material_id = mg.material_id
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = m.material_type_id
|
||||
WHERE IFNULL( ss.storagevehicle_code, '' ) <![CDATA[ <> ]]> ''
|
||||
<if test="material_id != null and material_id != ''">
|
||||
AND mg.material_id = #{material_id}
|
||||
|
||||
@@ -197,10 +197,23 @@ public class PdaCommonServiceImpl implements PdaCommonService {
|
||||
return PdaResponse.requestOk("组盘成功!");
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public PdaResponse inEmptyVehicle(JSONObject param) {
|
||||
log.info("手持请求空托盘入库:{}", param);
|
||||
vehicleInService.create(param);
|
||||
RLock lock = redissonClient.getLock("lock:inEmptyVehicle");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
vehicleInService.create(param);
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.nl.wms.pda.util.ThresholdChecker;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
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.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
@@ -109,6 +110,8 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
private IOStorInvDtlMapper ioStorInvDtlMapper;
|
||||
@Resource
|
||||
private ISysParamService paramService;
|
||||
@Resource
|
||||
private SecondaryPackagingService secondaryPackagingService;
|
||||
@Override
|
||||
public PdaResponse getGroupInfo(JSONObject param) {
|
||||
// search;
|
||||
@@ -168,7 +171,13 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("该点位已创建过任务!");
|
||||
}
|
||||
|
||||
// 如果是缠绕,调用ACS请求的方法创建任务
|
||||
if ("CRHCQ".equals(endPoint.getRegion_code())) {
|
||||
JSONObject crParam = new JSONObject();
|
||||
crParam.put("device_code", param.get("point_code"));
|
||||
secondaryPackagingService.wrappingCall(crParam);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
JSONObject row = param.getJSONObject("row");
|
||||
Structattr structattr = structattrService.getByCode(row.getString("struct_code"));
|
||||
param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("批料出库"));
|
||||
@@ -203,7 +212,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
|
||||
@Override
|
||||
public PdaResponse getPalletAssemblyOK(JSONObject param) {
|
||||
String search = param.getString("search");
|
||||
String search = param.getString("bag_code");
|
||||
if (ObjectUtil.isEmpty(search)) {
|
||||
throw new BadRequestException("请输入袋号编码!");
|
||||
}
|
||||
@@ -265,6 +274,10 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
throw new BadRequestException("请扫点位!");
|
||||
}
|
||||
point.setVehicle_code("");
|
||||
point.setMaterial_code("");
|
||||
point.setMaterial_name("");
|
||||
point.setMaterial_qty("");
|
||||
point.setIng_task_code("");
|
||||
point.setPoint_status(IOSEnum.POINT_STATUS.code("空位"));
|
||||
point.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
point.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
@@ -273,57 +286,73 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
return PdaResponse.requestOk("取载具成功!");
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse leftoverMaterialBack(JSONObject param) {
|
||||
// search, rows 按照托盘号原来的库区回去
|
||||
String search = param.getString("search");
|
||||
SchBasePoint startPoint = pointService.getByPointCode(search, false);
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("请扫点位!");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
|
||||
throw new BadRequestException("该点位没有载具信息!");
|
||||
}
|
||||
List<Structattr> points = structattrService.getByVehicleCode(startPoint.getVehicle_code()
|
||||
, IOSEnum.LOCK_TYPE.code("其他锁"), false);
|
||||
if (points.size() != 1) {
|
||||
throw new BadRequestException(points.size() > 1
|
||||
? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!"
|
||||
: "该托盘号未绑定到点位或者点位被禁用或者点位以上锁,请检查!");
|
||||
}
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(startPoint.getVehicle_code()
|
||||
, Arrays.asList("2"));
|
||||
if (res.size() > 0) {
|
||||
log.info("剩料回库");
|
||||
// 剩料回库
|
||||
param.put("rows", res);
|
||||
Structattr structattr = points.get(0);
|
||||
Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false);
|
||||
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("剩料回库"));
|
||||
// 1 创建入库单、明细、分配明细
|
||||
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr);
|
||||
invObj.put("nonChecked", "1");
|
||||
String invId = rawAssistIStorService.insertDtl(invObj);
|
||||
// 2 调用手动分配
|
||||
param.put("sect_code", structattr.getSect_code());
|
||||
param.put("sect_name", structattr.getSect_name());
|
||||
param.put("struct_id", structattr.getStruct_id());
|
||||
param.put("struct_name", structattr.getStruct_name());
|
||||
param.put("struct_code", structattr.getStruct_code());
|
||||
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, false);
|
||||
rawAssistIStorService.divStruct(divObj);
|
||||
// 3 创建任务
|
||||
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);
|
||||
rawAssistIStorService.divPoint(jsonMst);
|
||||
} else {
|
||||
log.info("空载具回库");
|
||||
// 空载具回库
|
||||
JSONObject vin = new JSONObject();
|
||||
vin.put("storagevehicle_code", startPoint.getVehicle_code());
|
||||
vin.put("sect_code", startPoint.getOut_sect());
|
||||
vin.put("point_code", startPoint.getPoint_code());
|
||||
vehicleInService.create(vin);
|
||||
RLock lock = redissonClient.getLock("lock:leftoverMaterialBack");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
String search = param.getString("search");
|
||||
SchBasePoint startPoint = pointService.getByPointCode(search, false);
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
startPoint = pointService.getByVehicleCodeOne(search, true);
|
||||
}
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("请扫点位!");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
|
||||
throw new BadRequestException("该点位没有载具信息!");
|
||||
}
|
||||
// 查找之前的任务
|
||||
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getVehicle_code, startPoint.getVehicle_code())
|
||||
.in(SchBaseTask::getConfig_code, "PalletOutTask")
|
||||
.orderByDesc(SchBaseTask::getTask_id));
|
||||
if (list.size() == 0) {
|
||||
throw new BadRequestException("找不到托盘原来的位置!");
|
||||
}
|
||||
SchBaseTask task = list.get(0);
|
||||
Structattr structattr = structattrService.getByCode(task.getPoint_code1());
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(startPoint.getVehicle_code()
|
||||
, Arrays.asList("2"));
|
||||
if (res.size() > 0) {
|
||||
log.info("剩料回库");
|
||||
// 剩料回库
|
||||
param.put("rows", res);
|
||||
Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false);
|
||||
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("剩料回库"));
|
||||
// 1 创建入库单、明细、分配明细
|
||||
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr);
|
||||
invObj.put("nonChecked", "1");
|
||||
String invId = rawAssistIStorService.insertDtl(invObj);
|
||||
// 2 调用手动分配
|
||||
param.put("sect_code", structattr.getSect_code());
|
||||
param.put("sect_name", structattr.getSect_name());
|
||||
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, false);
|
||||
rawAssistIStorService.divStruct(divObj);
|
||||
// 3 创建任务
|
||||
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);
|
||||
rawAssistIStorService.divPoint(jsonMst);
|
||||
} else {
|
||||
log.info("空载具回库");
|
||||
// 空载具回库
|
||||
JSONObject vin = new JSONObject();
|
||||
vin.put("storagevehicle_code", task.getVehicle_code());
|
||||
vin.put("sect_code", structattr.getSect_code());
|
||||
vin.put("point_code", startPoint.getPoint_code());
|
||||
vehicleInService.create(vin);
|
||||
}
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
@@ -347,7 +376,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(vehicleCode, Arrays.asList("1"));
|
||||
if (res.size() == 0) {
|
||||
throw new BadRequestException("当前托盘号不存在物料信息,请检查!");
|
||||
throw new BadRequestException("当前托盘号【" + vehicleCode + "】不存在物料信息,请检查!");
|
||||
}
|
||||
// 如果是仓位就需要走原辅料入库
|
||||
Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false);
|
||||
@@ -364,7 +393,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
@Override
|
||||
public PdaResponse takeFinish(JSONObject param) {
|
||||
// todo: 下发允许AGV通过
|
||||
return null;
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -382,29 +411,42 @@ public class PdaProductionServiceImpl implements PdaProductionService {
|
||||
* 2、压片下料组盘后,扫点位、载具点确认,系统分配中间站空货位入库;
|
||||
* 3、包衣下料组盘后,扫点位点呼叫AGV,系统呼叫AGV来取货;扫点位、载具点确认,系统分配中间站空货位入库;
|
||||
* 4、× 码垛完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存;
|
||||
* 5、缠膜完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存;
|
||||
* 5、× 缠膜完成后,扫点位、载具点确认,系统分配缓存点位搬运暂存;
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public PdaResponse productionLine(JSONObject param) {
|
||||
// point_code, vehicle_code
|
||||
// point_code, vehicle_code, is_wait
|
||||
log.info("手持下料:{}", param);
|
||||
assertNotBlankJson(param, "载具号不能为空!", "vehicle_code");
|
||||
assertNotBlankJson(param, "点位不能为空!", "point_code");
|
||||
String pointCode = param.getString("point_code");
|
||||
SchBasePoint point = pointService.getByPointCode(pointCode, false);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
throw new BadRequestException("点位[" + pointCode +"]不存在!");
|
||||
RLock lock = redissonClient.getLock("lock:inEmptyVehicle");
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
assertNotBlankJson(param, "载具号不能为空!", "vehicle_code");
|
||||
assertNotBlankJson(param, "点位不能为空!", "point_code");
|
||||
String pointCode = param.getString("point_code");
|
||||
SchBasePoint point = pointService.getByPointCode(pointCode, false);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
throw new BadRequestException("点位[" + pointCode +"]不存在!");
|
||||
}
|
||||
if (point.getRegion_code().startsWith("FSSQ") || point.getRegion_code().startsWith("CLS")) {
|
||||
// 粉碎室/称量室入库逻辑
|
||||
productionInStorage(param, point);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
// 压片/包衣下料
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code()));
|
||||
task.create(param);
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
if (point.getRegion_code().startsWith("FSSQ") || point.getRegion_code().startsWith("CLS")) {
|
||||
// 粉碎室/称量室入库逻辑
|
||||
productionInStorage(param, point);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
// 压片/包衣下料
|
||||
AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code()));
|
||||
task.create(param);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
|
||||
if (points.size() != 1) {
|
||||
throw new BadRequestException(points.size() > 1
|
||||
? "该托盘号绑定在多个点位" + points.stream().map(Structattr::getStruct_code).collect(Collectors.toList()) + ",请检查!"
|
||||
: "该托盘号未绑定到点位或者点位被禁用或者点位以上锁,请检查!");
|
||||
: "该托盘号未绑定到点位或者点位被禁用或者点位已上锁,请检查!");
|
||||
}
|
||||
startStruct = points.get(0);
|
||||
pointCode = startStruct.getStruct_code();
|
||||
|
||||
@@ -156,4 +156,5 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
*/
|
||||
List<SchBasePoint> getCRUsedDevice();
|
||||
|
||||
SchBasePoint getByVehicleCodeOne(String search, boolean flag);
|
||||
}
|
||||
|
||||
@@ -151,6 +151,9 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(PointStatusEnum.EMPTY_POINT.getCode())) {
|
||||
entity.setVehicle_type("");
|
||||
entity.setVehicle_code("");
|
||||
entity.setMaterial_name("");
|
||||
entity.setMaterial_code("");
|
||||
entity.setMaterial_qty("");
|
||||
}
|
||||
pointMapper.updateById(entity);
|
||||
}
|
||||
@@ -340,4 +343,21 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
public List<SchBasePoint> getCRUsedDevice() {
|
||||
return this.baseMapper.getCRUsedDevice();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SchBasePoint getByVehicleCodeOne(String search, boolean flag) {
|
||||
if (ObjectUtil.isEmpty(search)) {
|
||||
throw new BadRequestException("想要通过托盘号查找点位,托盘号不能为空!");
|
||||
}
|
||||
List<SchBasePoint> vehicleCode = getByVehicleCode(search);
|
||||
if (flag) {
|
||||
if (vehicleCode.size() == 0) {
|
||||
throw new BadRequestException("托盘号【" + search + "】没有绑定到点位上,请检查!");
|
||||
}
|
||||
if (vehicleCode.size() > 1) {
|
||||
throw new BadRequestException("托盘号【" + search + "】绑定到多个点位上,请检查!");
|
||||
}
|
||||
}
|
||||
return vehicleCode.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,9 +101,7 @@ public class PalletOutTask extends AbstractTask {
|
||||
|
||||
// 点位上锁
|
||||
structattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||
.set(Structattr::getLock_type, ObjectUtil.isNotEmpty(json.get("flag"))
|
||||
? IOSEnum.LOCK_TYPE.code("其他锁")
|
||||
: IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库锁"))
|
||||
.eq(Structattr::getStruct_code, task.getPoint_code1()));
|
||||
|
||||
// 下发任务
|
||||
@@ -198,7 +196,8 @@ public class PalletOutTask extends AbstractTask {
|
||||
JSONObject jsonObject = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
// 解锁、库存清空
|
||||
outBillService.taskFinish(taskObj);
|
||||
if (ObjectUtil.isNotEmpty(jsonObject.get("flag"))) {
|
||||
JSONObject ext = jsonObject.getJSONObject("ext");
|
||||
if (ObjectUtil.isNotEmpty(ext.get("flag"))) {
|
||||
this.taskConfirm(taskObj.getTask_code());
|
||||
} else {
|
||||
// 修改组盘信息
|
||||
|
||||
@@ -193,27 +193,26 @@
|
||||
m.material_model,
|
||||
m.material_type_id,
|
||||
s.supp_name,
|
||||
class.class_name,
|
||||
mg.vehicle_code AS storagevehicle_code,
|
||||
e.canuse_qty,
|
||||
e.frozen_qty,
|
||||
mg.qty AS plan_qty
|
||||
FROM
|
||||
`st_ivt_structattr` ss
|
||||
LEFT JOIN md_pb_groupplate mg ON mg.vehicle_code = ss.storagevehicle_code
|
||||
LEFT JOIN md_pb_groupplate mg ON mg.vehicle_code = ss.storagevehicle_code AND mg.`status` = '2'
|
||||
LEFT JOIN md_me_materialbase m ON m.material_id = mg.material_id
|
||||
LEFT JOIN md_cs_supplierbase s ON s.supp_code = mg.supp_code AND mg.`status` = '2'
|
||||
LEFT JOIN md_pb_storagevehicleext e ON ss.storagevehicle_code = e.storagevehicle_code
|
||||
LEFT JOIN md_cs_supplierbase s ON s.supp_code = mg.supp_code
|
||||
LEFT JOIN md_pb_classstandard class ON class.class_id = m.material_type_id
|
||||
WHERE
|
||||
IFNULL(ss.storagevehicle_code,'') <![CDATA[ <> ]]> ''
|
||||
AND IFNULL( mg.group_id, '' ) <![CDATA[ <> ]]> ''
|
||||
<if test="material_id != null and material_id != ''">
|
||||
AND
|
||||
mg.material_id = #{material_id}
|
||||
</if>
|
||||
<if test="pcsn != null and pcsn != ''">
|
||||
AND
|
||||
mg.pcsn = #{pcsn}
|
||||
</if>
|
||||
AND
|
||||
mg.material_id = #{material_id}
|
||||
</if>
|
||||
<if test="pcsn != null and pcsn != ''">
|
||||
AND
|
||||
mg.pcsn = #{pcsn}
|
||||
</if>
|
||||
</select>
|
||||
<select id="getDtLMaterialInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
|
||||
Reference in New Issue
Block a user