add:验箱流程

This commit is contained in:
zhangzq
2025-01-08 21:53:58 +08:00
parent fb505db114
commit f36cd6f920
7 changed files with 230 additions and 122 deletions

View File

@@ -155,21 +155,29 @@ public class PdmBiSubpackagerelationController {
} }
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@PostMapping("/zjInBound") @PostMapping("/zjInBound")
@SaIgnore @SaIgnore
@Log("子卷装箱查询")
//@SaCheckPermission("@el.check(updateEntityList)")
public ResponseEntity<Object> zjInBound(@RequestBody JSONObject whereJson) {
List list = pdmBiSubpackagerelationService.zjInBound(whereJson);
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
@PostMapping("/zjInBoundConfirm")
@SaIgnore
@Log("子卷装箱入库") @Log("子卷装箱入库")
//@SaCheckPermission("@el.check(updateEntityList)") //@SaCheckPermission("@el.check(updateEntityList)")
public ResponseEntity<Object> zjInBound(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> zjInBoundConfirm(@RequestBody JSONObject whereJson) {
RLock lock = redissonClient.getLock("updateEntityList"); RLock lock = redissonClient.getLock("zjInBound");
boolean tryLock = false; boolean tryLock = false;
try { try {
tryLock = lock.tryLock(0, TimeUnit.SECONDS); tryLock = lock.tryLock(0, TimeUnit.SECONDS);
if (tryLock) { if (tryLock) {
pdmBiSubpackagerelationService.updateEntityList(whereJson); pdmBiSubpackagerelationService.zjInBoundConfirm(whereJson);
} else { } else {
log.info("子卷装箱操作正在执行被锁住。"); log.info("子卷装箱入库操作正在执行被锁住。");
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
@@ -178,7 +186,7 @@ public class PdmBiSubpackagerelationController {
lock.unlock(); lock.unlock();
} }
} }
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
} }

View File

@@ -71,6 +71,13 @@ public interface IpdmBiSubpackagerelationService extends IService<PdmBiSubpackag
*/ */
void zjInBoundConfirm(JSONObject whereJson); void zjInBoundConfirm(JSONObject whereJson);
/**
* 子卷装箱
* @param whereJson
* @return
*/
List zjInBound(JSONObject whereJson);
/** /**
* 传输子卷包装关系至LMS * 传输子卷包装关系至LMS

View File

@@ -33,24 +33,29 @@ import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.dto.SchBaseTaskDto; import org.nl.b_lms.sch.task.dto.SchBaseTaskDto;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.TwoOutBoxTask;
import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue; import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueue;
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxinfo;
import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper; import org.nl.b_lms.storage_manage.database.service.dao.mapper.BstIvtBoxinfoMapper;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.impl.OutBoxManageServiceImpl;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
import org.nl.common.TableDataInfo; import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.TaskStatusEnum;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -76,29 +81,26 @@ import java.util.stream.Collectors;
@Log4j @Log4j
public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpackagerelationMapper, PdmBiSubpackagerelation> implements IpdmBiSubpackagerelationService { public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpackagerelationMapper, PdmBiSubpackagerelation> implements IpdmBiSubpackagerelationService {
@Autowired
@Resource
private RedissonClient redissonClient;
@Resource
private IschBaseTaskService taskService; private IschBaseTaskService taskService;
@Resource @Autowired
private ZxqTask zxqTask; private ZxqTask zxqTask;
@Resource @Autowired
private IBstIvtBoxinfoService iBstIvtBoxinfoService; private IBstIvtBoxinfoService iBstIvtBoxinfoService;
@Resource @Autowired
private LmsToMesServiceImpl lmsToMesServiceImpl; private LmsToMesServiceImpl lmsToMesServiceImpl;
@Resource @Autowired
private IPdmBiSlittingproductionplanService iPdmBiSlittingproductionplanService; private IPdmBiSlittingproductionplanService iPdmBiSlittingproductionplanService;
@Resource @Autowired
private IPdmBiOrderbominfoService iPdmBiOrderbominfoService; private IPdmBiOrderbominfoService iPdmBiOrderbominfoService;
@Resource @Autowired
private OutBoxManageService outBoxManageService; private OutBoxManageService outBoxManageService;
@Resource @Autowired
private IbstIvtPackageinfoivtService packageinfoivtService; private IbstIvtPackageinfoivtService packageinfoivtService;
@Resource @Resource
@@ -241,22 +243,12 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateEntityList(JSONObject whereJson) { public void updateEntityList(JSONObject whereJson) {
String deviceCode = "ZXQ_1_1";
List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class);
//子卷信息校验 //子卷信息校验
checkEntityList(whereJson, packagerelationList); checkEntityList(whereJson, packagerelationList);
//均衡获取木箱出库装箱区对接位 //均衡获取木箱出库装箱区对接位
//= getPointCode(packagerelationList.size()); //= getPointCode(packagerelationList.size());
String deviceCode = "ZXQ_1_1";
int count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010908")
.eq("is_delete", "0")
.lt("task_status", TaskStatusEnum.FINISHED.getCode()));
int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
.eq("point_status",PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
.eq("ivt_status",PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
if (count+count2>8){
throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
}
List<String> workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() List<String> workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream()
.map(PdmBiSubpackagerelation::getWorkorder_id) .map(PdmBiSubpackagerelation::getWorkorder_id)
.map(String::valueOf) .map(String::valueOf)
@@ -296,100 +288,132 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
} }
@Override @Override
public List zjInBound(JSONObject whereJson) {
String containerName = whereJson.getString("container_name");
if (StringUtils.isEmpty(containerName)){
throw new BadRequestException("子卷编码不能为空");
}
String[] split = containerName.split(",");
List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
.eq("status", "0")
.in("container_name", split));
if (CollectionUtils.isEmpty(subList)){
throw new BadRequestException("当前子卷还为组盘");
}
if (subList.size() != split.length){
throw new BadRequestException("子卷包装信息与子卷不相符合");
}
return subList;
}
@Override
@Transactional
public void zjInBoundConfirm(JSONObject param) { public void zjInBoundConfirm(JSONObject param) {
// String containerName = param.getString("container_name"); String containerName = param.getString("search");
// if (StringUtils.isEmpty(containerName)){ if (StringUtils.isEmpty(containerName)){
// throw new BadRequestException("子卷编码不能为空"); throw new BadRequestException("子卷编码不能为空");
// } }
// String[] split = containerName.split(","); String deviceCode = "ZXQ_1_1";
// //理论毛重 int count = taskService.count(new QueryWrapper<SchBaseTask>()
// List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>() .eq("task_type", "010908")
// .eq("status", "0") .eq("is_delete", "0")
// .in("container_name", split)); .lt("task_status", TaskStatusEnum.FINISHED.getCode()));
// if (subList.size() != containerName.length()){ int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>()
// throw new BadRequestException("子卷包装信息与子卷不相符合"); .eq("point_status",PackageInfoIvtEnum.POINT_STATUS.code("装箱区"))
// } .eq("ivt_status",PackageInfoIvtEnum.IVT_STATUS.code("合格品")));
// Set<String> collect = subList.stream().map(PdmBiSubpackagerelation::getPackage_box_sn).collect(Collectors.toSet()); if (count+count2>8){
// if (collect.size()>1){ throw new BadRequestException("当前装箱区木箱任务已满,稍后再试");
// throw new BadRequestException("当前子卷不属于同一组"+ collect); }
// }
// if (subList.get(0).getQuanlity_in_box().intValue()!= split.length){ String[] split = containerName.split(",");
// throw new BadRequestException("当前木箱"+subList.get(0).getQuanlity_in_box()+"要装箱的子卷"+split.length+"未装完"); //理论毛重
// } List<PdmBiSubpackagerelation> subList = this.list(new QueryWrapper<PdmBiSubpackagerelation>()
// String boxSn = subList.get(0).getPackage_box_sn(); .eq("status", "0")
// updateWrapper.set("box_weight", NumberUtil.round(totalWeight, 2).toString()); .in("container_name", split));
// updateWrapper.set("package_box_sn", boxDao.getBox_no()); if (subList.size() != split.length){
// updateWrapper.set("quanlity_in_box", workIdList.size()); throw new BadRequestException("子卷包装信息与子卷不相符合");
// updateWrapper.set("box_type", boxDao.getMaterial_code()); }
// updateWrapper.set("box_length", boxDao.getBox_length()); Set<String> collect = subList.stream().map(PdmBiSubpackagerelation::getPackage_box_sn).collect(Collectors.toSet());
// updateWrapper.set("box_width", boxDao.getBox_width()); Set<String> containers = subList.stream().map(PdmBiSubpackagerelation::getContainer_name).collect(Collectors.toSet());
// updateWrapper.set("box_high", boxDao.getBox_high()); if (collect.size() == 0){
// updateWrapper.set("box_group", maxBoxGroup); throw new BadRequestException("当前子卷还未进行装箱组盘操作");
// updateWrapper.set("status", "0"); }
// updateWrapper.in("workorder_id", workIdList); if (collect.size()>1){
// pdmBiSubpackagerelationMapper.update(null, updateWrapper); throw new BadRequestException("当前子卷不属于同一组"+ collect);
// List<PdmBiSubpackagerelation> packagerelationList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class); }
// //子卷信息校验 if (subList.get(0).getQuanlity_in_box().intValue()!= split.length){
// checkEntityList(whereJson, packagerelationList); throw new BadRequestException("当前木箱"+subList.get(0).getQuanlity_in_box()+"要装箱的子卷"+split.length+"未装完");
// //均衡获取木箱出库装箱区对接位 }
// //= getPointCode(packagerelationList.size()); String boxSn = subList.get(0).getPackage_box_sn();
// String deviceCode = "ZXQ_1_1"; // 查询木箱对应的托盘号
// int count = taskService.count(new QueryWrapper<SchBaseTask>() JSONObject jsonVeExt = WQLObject.getWQLObject("md_pb_storagevehicleext").query("pcsn = '" + boxSn + "'")
// .eq("task_type", "010908") .uniqueResult(0);
// .eq("is_delete", "0") if (ObjectUtil.isEmpty(jsonVeExt)) {
// .lt("task_status", TaskStatusEnum.FINISHED.getCode())); throw new BadRequestException("此木箱没有绑定托盘号!"+boxSn);
// int count2 = packageinfoivtService.count(new QueryWrapper<BstIvtPackageinfoivt>() }
// .eq("point_status",PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) //查询木箱所在货位
// .eq("ivt_status",PackageInfoIvtEnum.IVT_STATUS.code("合格品"))); WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// if (count+count2>8){ JSONArray boxAttrs = attrTab.query("storagevehicle_code = '" + boxSn + "' and sect_id = '1748219897940414464'").getResultJSONArray(0);
// throw new BadRequestException("当前装箱区木箱任务已满,稍后再试"); if (boxAttrs.size() == 0){
// } throw new BadRequestException("当前木箱"+boxSn+"库存信息查询不到,请确认");
// List<String> workIdList = JSONObject.parseArray(whereJson.getJSONArray("tableMater").toJSONString(), PdmBiSubpackagerelation.class).stream() }
// .map(PdmBiSubpackagerelation::getWorkorder_id) JSONObject boxAttr = boxAttrs.getJSONObject(0);
// .map(String::valueOf) String task_group_id = null;
// .collect(Collectors.toList()); if (boxAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
// //根据分切计划获取子卷重量计算理论毛重 JSONObject 浅Attr = attrTab
// Set<String> containerNameList = packagerelationList.stream() .query("zdepth = '1' and row_num = '"+boxAttr.getString("row_num")+"' and col_num = '" + boxAttr.getString("col_num") + "' and layer_num = '"+boxAttr.getString("layer_num")+"'")
// .map(PdmBiSubpackagerelation::getContainer_name) .uniqueResult(0);
// .collect(Collectors.toSet()); // 判断浅货位是否有木箱
// List<PdmBiSlittingproductionplan> planList = iPdmBiSlittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>() if (!ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) {
// .in(PdmBiSlittingproductionplan::getContainer_name, containerNameList) // 判断是否被锁定
// .eq(PdmBiSlittingproductionplan::getIs_delete,IOSEnum.IS_NOTANDYES.code("否")) if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
// ); // 判断浅货位木箱和深货位木箱是否相同规格
// task_group_id = outBoxManageService.createBoxMove(浅Attr);
// if (ObjectUtils.isEmpty(planList)) { } else {
// throw new BadRequestException("子卷查询不到分切计划,请检查!"); // 判断是否是空木箱出库锁
// } throw new BadRequestException("当前木箱所在货位"+boxAttr.getString("struct_code")+"对应浅货位存在任务"+浅Attr.getString("task_code"));
// BigDecimal totalWeight; }
// totalWeight = planList.stream() }
// .map(PdmBiSlittingproductionplan::getWeight) }
// .filter(p -> p != null && !p.trim().isEmpty()) int moveTask = taskService.count(new QueryWrapper<SchBaseTask>()
// .filter(r -> !r.isEmpty()) .eq("task_type", "010704")
// .map(BigDecimal::new) .eq("is_delete", "0")
// .reduce(BigDecimal.ZERO, BigDecimal::add); .eq("point_code1", boxAttr.getString("struct_code"))
// if (totalWeight.compareTo(new BigDecimal(0)) == 0) { .lt("task_status", TaskStatusEnum.FINISHED.getCode()));
// throw new BadRequestException("分切计划的子卷重量不能为0"); if (moveTask>0){
// } throw new BadRequestException("当前子卷已经装箱入库");
// //获取子卷组号 }
// List<PdmBiSubpackagerelation> pdmBiSubpackagerelationList = pdmBiSubpackagerelationMapper // 生成任务
// .selectList(new LambdaQueryWrapper<PdmBiSubpackagerelation>().eq(PdmBiSubpackagerelation::getSale_order_name, packagerelationList.get(0).getSale_order_name())); JSONObject jsonTaskParam = new JSONObject();
// Integer maxBoxGroup = pdmBiSubpackagerelationList.stream() jsonTaskParam.put("task_type", "010704");
// .map(PdmBiSubpackagerelation::getBox_group) jsonTaskParam.put("start_device_code", boxAttr.getString("struct_code"));
// .filter(r -> r != null && !r.trim().isEmpty()) jsonTaskParam.put("next_device_code", deviceCode);
// .map(Integer::parseInt) jsonTaskParam.put("vehicle_code", boxAttr.getString("storagevehicle_code"));
// .max(Integer::compareTo) jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
// .orElse(0) + 1; jsonTaskParam.put("task_group_id", task_group_id);
// outBox(workIdList, containerNameList, deviceCode, maxBoxGroup, whereJson, totalWeight); JSONObject request_param = new JSONObject();
request_param.put("containerType", boxAttr.getString("storagevehicle_type"));
jsonTaskParam.put("request_param", request_param.toString());
TwoOutBoxTask taskBean = new TwoOutBoxTask();
taskBean.createTask(jsonTaskParam);
//子卷到装箱区
agvTransfer(containers, deviceCode, boxSn);
taskBean.immediateNotifyAcs(null);
} }
private void checkEntityList(JSONObject whereJson, List<PdmBiSubpackagerelation> packagerelationList) { private void checkEntityList(JSONObject whereJson, List<PdmBiSubpackagerelation> packagerelationList) {
JSONArray jsonArray = whereJson.getJSONArray("tableMater"); JSONArray jsonArray = whereJson.getJSONArray("tableMater");
if (jsonArray == null || jsonArray.size() == 0) { if (jsonArray == null || jsonArray.size() == 0) {
throw new BadRequestException("无选中子卷信息"); throw new BadRequestException("无选中子卷信息");
} if (jsonArray == null || jsonArray.size() == 0) {
throw new BadRequestException("无选中子卷信息");
} }
if (ObjectUtils.isEmpty(packagerelationList)) { if (ObjectUtils.isEmpty(packagerelationList)) {
throw new BadRequestException("无选中子卷信息"); throw new BadRequestException("无选中子卷信息");
} }
if (!packagerelationList.get(0).getBox_type().equals(whereJson.getString("checked"))){
throw new BadRequestException("子卷订单bom的木箱规格与所选木箱规格不一致,请重新操作");
}
//检查是否存在已分配规格的子卷号 //检查是否存在已分配规格的子卷号
if (packagerelationList.stream() if (packagerelationList.stream()
.anyMatch(r -> !r.getStatus().equals("99"))) { .anyMatch(r -> !r.getStatus().equals("99"))) {
@@ -448,10 +472,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
updateWrapper.set("status", "0"); updateWrapper.set("status", "0");
updateWrapper.in("workorder_id", workIdList); updateWrapper.in("workorder_id", workIdList);
pdmBiSubpackagerelationMapper.update(null, updateWrapper); pdmBiSubpackagerelationMapper.update(null, updateWrapper);
// agvTransfer(containerNameList, deviceCode, boxSn);
//给MES传输子卷包装关系 //给MES传输子卷包装关系
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
try { try {
log.error("----回传子卷包装关系----");
String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue(); String isConnect2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_MES2").getValue();
if ("1".equals(isConnect2)) { if ("1".equals(isConnect2)) {
transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal); transferBoxPackageToMes(false, whereJson, containerNameList, boxSn, weightTotal);
@@ -462,8 +486,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl<PdmBiSubpack
}, pool); }, pool);
} }
/** /**
* 传输子卷包装关系至LMS * 传输子卷包装关系至LMS
*/ */

View File

@@ -54,6 +54,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -1607,6 +1608,10 @@ public class SlitterServiceImpl implements SlitterService {
String paperWeight = param.getString("paper_weight"); String paperWeight = param.getString("paper_weight");
PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName); PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName);
if (ObjectUtil.isNotEmpty(rollWeight)) { if (ObjectUtil.isNotEmpty(rollWeight)) {
BigDecimal bigDecimal = new BigDecimal(rollWeight);
if (bigDecimal.intValue()<50){
throw new BadRequestException("子卷重量异常,不能小于50");
}
plan.setWeight(rollWeight); plan.setWeight(rollWeight);
} }
if (ObjectUtil.isNotEmpty(paperWeight)) { if (ObjectUtil.isNotEmpty(paperWeight)) {

View File

@@ -268,6 +268,9 @@ public class InBoxManageServiceImpl implements InBoxManageService {
apply_jo.put("container_type", vehicle_type); apply_jo.put("container_type", vehicle_type);
acsToWmsService.applyTwo(apply_jo); acsToWmsService.applyTwo(apply_jo);
} else { } else {
if (split.length>data.getIntValue("qty")){
throw new BadRequestException("当前拆叠盘托盘不足"+split.length+"");
}
if (!data.getString("container_type").equals(vehicle_type)) { if (!data.getString("container_type").equals(vehicle_type)) {
if (data.getString("container_type").equals("0")) { if (data.getString("container_type").equals("0")) {
throw new BadRequestException("当前电气反馈的托盘类型为0请检查"); throw new BadRequestException("当前电气反馈的托盘类型为0请检查");

View File

@@ -139,15 +139,70 @@ public class OutBoxManageServiceImpl implements OutBoxManageService {
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
whereJson.put("stor_id", IOSEnum.STOR_ID.code("二期")); whereJson.put("stor_id", IOSEnum.STOR_ID.code("二期"));
whereJson.put("sect_id", RegionTypeEnum.TWO_BZC01.getId()); whereJson.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
/*
* 判断是否有相同规格的木箱
* 判断条件:库区、仓库、是否启用、是否删除、未锁定、有载具、相同规格的木箱
*/
String block_num = whereJson.getString("move_block_num");
if (ObjectUtil.isEmpty(block_num)) {
whereJson.put("flag", "6");
} else {
whereJson.put("flag", "7");
}
JSONArray structArray = WQL.getWO("BST_OUTBOX").addParamMap(whereJson).process().getResultJSONArray(0);
if (ObjectUtil.isEmpty(structArray)) {
notOutRowList.clear();
notOutBlockList.clear();
if (ObjectUtil.isNotEmpty(block_num)) {
throw new BadRequestException(block_num+"号巷道没有相同规格的木箱!木箱料号:"+whereJson.getString("material_code"));
} else {
throw new BadRequestException("没有相同规格的木箱!");
}
JSONObject jsonAttr = getStruct(whereJson); }
// 确定巷道:找相同规格木箱的最多的巷道
if (ObjectUtil.isEmpty(block_num)) {
block_num = getMaxBlock(whereJson);
}
// 确定排:找某一巷道规格木箱的最多排
whereJson.put("block_num", block_num);
String row_num = getMaxRow(whereJson);
// 确定仓位
whereJson.put("row_num", row_num);
whereJson.put("notMove",true);
JSONObject jsonAttr = getBox(whereJson);
// 为空则新找巷道
if (ObjectUtil.isEmpty(jsonAttr)) {
whereJson.put("flag", "1");
notOutBlockList.add(whereJson.getString("block_num"));
String join = "('" + String.join("','", notOutBlockList) + "')";
whereJson.put("not_block_id", join);
List<JSONObject> blockList = WQL.getWO("BST_OUTBOX").addParamMap(whereJson)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
for (int i = 0; i < blockList.size(); i++) {
JSONObject json = blockList.get(i);
json.put("stor_id", whereJson.getString("stor_id"));
json.put("sect_id", whereJson.getString("sect_id"));
json.put("box_length", whereJson.getString("box_length"));
json.put("box_width", whereJson.getString("box_width"));
json.put("box_high", whereJson.getString("box_high"));
json.put("num", whereJson.getString("num"));
String row_num_2 = getMaxRow(json);
json.put("row_num", row_num_2);
JSONObject jsonAttr_2 = getBox(json);
if (ObjectUtil.isNotEmpty(jsonAttr_2)) {
jsonAttr = jsonAttr_2;
break;
} else {
continue;
}
}
}
if (ObjectUtil.isEmpty(jsonAttr)) { if (ObjectUtil.isEmpty(jsonAttr)) {
notOutRowList.clear(); notOutRowList.clear();
notOutBlockList.clear(); notOutBlockList.clear();
throw new BadRequestException("没有符合规格的木箱!"); throw new BadRequestException("没有符合规格的木箱!");
} }
// 查询木箱对应的托盘号 // 查询木箱对应的托盘号
JSONObject jsonVeExt = veExtTab.query("pcsn = '" + jsonAttr.getString("storagevehicle_code") + "'") JSONObject jsonVeExt = veExtTab.query("pcsn = '" + jsonAttr.getString("storagevehicle_code") + "'")
.uniqueResult(0); .uniqueResult(0);
@@ -571,9 +626,10 @@ public class OutBoxManageServiceImpl implements OutBoxManageService {
break; break;
} else { } else {
// 创建木箱移库单 // 创建木箱移库单
String task_group_id = createBoxMove(lowAttr.get(0)); if (whereJson.getBoolean("notMove") ==null){
String task_group_id = createBoxMove(lowAttr.get(0));
json.put("task_group_id", task_group_id); json.put("task_group_id", task_group_id);
}
jsonAttr = json; jsonAttr = json;
break; break;
} }
@@ -630,7 +686,7 @@ public class OutBoxManageServiceImpl implements OutBoxManageService {
* @param jsonObject 需要移库的仓位对象 * @param jsonObject 需要移库的仓位对象
* @return String 任务组标识 * @return String 任务组标识
*/ */
private String createBoxMove(JSONObject jsonObject) { public String createBoxMove(JSONObject jsonObject) {
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// 载具扩展属性表 // 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext"); WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");

View File

@@ -45,4 +45,11 @@ public interface OutBoxManageService {
*/ */
String taskExceptionalOut(JSONObject jsonObject); String taskExceptionalOut(JSONObject jsonObject);
/**
* 木箱移库
* @param jsonObject
* @return
*/
public String createBoxMove(JSONObject jsonObject);
} }