add:成品出库分配页面新增一键设置功能

This commit is contained in:
2023-08-10 19:13:06 +08:00
parent ef78cef7d8
commit 77795095ba
5 changed files with 143 additions and 0 deletions

View File

@@ -97,6 +97,14 @@ public class IStivtlostorivnCpOutController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/setPointAll")
@Log("一键设置")
//("设置站点")
public ResponseEntity<Object> setPointAll(@RequestBody JSONObject whereJson){
iStIvtIostorinvCpOutService.setPointAll(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/confirm")
@Log("强制确认")
//("强制确认")

View File

@@ -118,6 +118,15 @@ public interface IStIvtIostorinvCpOutService extends IService<StIvtIostorinvCp>
*/
void setPoint(JSONObject whereJson);
/**
* 一键设置
* @param whereJson
* {
* mst : 出入库主表
* }
*/
void setPointAll(JSONObject whereJson);
/**
* 强制确认
* @param whereJson
@@ -196,4 +205,5 @@ public interface IStIvtIostorinvCpOutService extends IService<StIvtIostorinvCp>
* }
*/
JSONArray queryStructAll(Map whereJson);
}

View File

@@ -47,6 +47,7 @@ import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinv
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdtlCpService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvCpMapper;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery;
@@ -494,6 +495,99 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
}
@Override
@Transactional(rollbackFor = Exception.class)
public void setPointAll(JSONObject whereJson) {
/*
* 1.校验明细是否都为分配完
* 2.找出库点位
* 3.生成任务
* 4.下发任务
* 5.更新分配状态
*/
// 1.校验明细是否都为分配完
List<StIvtIostorinvdtlCp> dtlDao = iostorinvdtlCpService.list(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
boolean is_true = dtlDao.stream()
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")));
if (!is_true) throw new BadRequestException("请先分配完所有明细!");
// 2.找出库点
// 根据托盘进行分组
Map<String, List<StIvtIostorinvdisCp>> disMapList = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
.and(qr -> qr.eq(StIvtIostorinvdisCp::getPoint_id,"")
.or().isNull(StIvtIostorinvdisCp::getPoint_id)
)
).stream()
.collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStruct_code));
// 出库点位集合
List<SchBasePoint> pointList = iSchBasePointService.list(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getIs_delete, IOSEnum.IS_USED.code(""))
.eq(SchBasePoint::getIs_used, IOSEnum.IS_USED.code(""))
.eq(SchBasePoint::getRegion_code, PDAEnum.REGION_CODE.code("发货区域"))
.orderByAsc(SchBasePoint::getPoint_code)
);
for (String struct_code : disMapList.keySet()) {
StIvtIostorinvdisCp disDao = disMapList.get(struct_code).get(0);
for (SchBasePoint dao : pointList) {
// 校验此点位是否有未完成的任务
SchBaseTask taskDao = iSchBaseTaskService.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getPoint_code3, dao.getPoint_code())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_USED.code(""))
.notIn(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode(), TaskStatusEnum.CANCEL.getCode())
, false
);
if (ObjectUtil.isEmpty(taskDao)) {
// 3.生成任务
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_CP_OUT)
.acs_task_type("8")
.task_group_id(IdUtil.getStringId())
.point_code1(struct_code)
.point_code3(dao.getPoint_code())
.vehicle_code(disDao.getStoragevehicle_code())
.product_area("A1") // 暂时写死
.callback((Consumer<String>) disDao::setTask_id)
.build();
BussEventMulticaster.Publish(event);
// 4.下发任务
whereJson.put("task_id", disDao.getTask_id());
sendTask(whereJson);
// 5.更新分配状态
iostorinvdisCpService.update(
new UpdateWrapper<StIvtIostorinvdisCp>().lambda()
.set(StIvtIostorinvdisCp::getPoint_id, dao.getPoint_id())
.set(StIvtIostorinvdisCp::getPoint_code, dao.getPoint_code())
.set(StIvtIostorinvdisCp::getPoint_name, dao.getPoint_name())
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成"))
.set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id())
.eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id())
.eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code())
);
break;
}
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void confirm(JSONObject whereJson) {