add:二楼出库流程
This commit is contained in:
@@ -68,6 +68,7 @@ public class TableDataInfo<T> implements Serializable {
|
||||
return rspData;
|
||||
}
|
||||
|
||||
|
||||
public static TableDataInfo<Map> buildByDivForm(IPage<Map> page,String json_field) {
|
||||
TableDataInfo<Map> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
|
||||
@@ -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")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20","outStorageTask","生产出库", "21","outStorageTask", "调拨出库", "22","outStorageTask","拣选出库", "23","conveyorOutStorageTask","盘点出库", "24","outStorageTask","出库拣选", "25","toPickPlatformTask","托盘出库", "40","outStorageTask","二楼CTU出库", "81","inStorageTask")),
|
||||
IOBILL_TYPE_OUT(ForkMap.of("销售出库", "20", "outStorageTask", "生产出库", "21", "outStorageTask", "调拨出库", "22", "outStorageTask", "拣选出库", "23", "conveyorOutStorageTask", "盘点出库", "24", "outStorageTask", "出库拣选", "25", "toPickPlatformTask", "托盘出库", "40", "outStorageTask", "二楼CTU出库", "81", "inStorageTask", "二楼出库AGV搬运", "82", "inStorageTask", "二楼空架AGV搬运", "83", "inStorageTask")),
|
||||
IOBILL_TYPE_MOVE(ForkMap.of("移库", "50", "moveStorageTask", "异常位移库", "51", "moveStorageTask")),
|
||||
EXT_TASK_TYPE(ForkMap.of("盘点", "60", "moveStorageTask")),
|
||||
OTHER_TASK_TYPE(ForkMap.of("转运", "70", "tranforTask")),
|
||||
@@ -51,7 +51,7 @@ public enum StatusEnum {
|
||||
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code, IOBILL_TYPE_OUT.code, IOBILL_TYPE_MOVE.code, EXT_TASK_TYPE.code, OTHER_TASK_TYPE.code)),
|
||||
|
||||
ACS_TYPE(ForkMap.of(
|
||||
"立库", "1", null, "AGV", "2", null, "CTU任务", "3", null
|
||||
"立库", "1", null, "AGV任务", "2", null, "CTU任务", "3", null
|
||||
)),
|
||||
ACS_SYSTEM_TYPE(ForkMap.of(
|
||||
"NDC", "1", null, "海柔CTU", "5", null, "海康CTU", "6", null
|
||||
@@ -63,9 +63,21 @@ public enum StatusEnum {
|
||||
LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null)),
|
||||
STRATEGY_TYPE(ForkMap.of("入库", "1", null, "出库", "2", null, "出入库", "3", null)),
|
||||
|
||||
PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)),
|
||||
;
|
||||
|
||||
PRODUCT_AREA(ForkMap.of("一层车间", "A1", null, "二层车间", "A2", null, "三层车间", "A3", null)),
|
||||
|
||||
|
||||
REGION_INFO(ForkMap.of("主存区拣选平台", "PICK01", null, "一楼出入库输送线", "IOConveyor", null, "二楼出入库输送线", "IOConveyor2", null, "拣选台秤重区", "WEIGH01", null,
|
||||
"二楼CTU货架对接位", "CTU_POSITION", null, "二楼AGV产线对接位", "AGV_POSITION", null)),
|
||||
|
||||
|
||||
STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null,
|
||||
"二楼货架缓存库", "HStockId", null)),
|
||||
|
||||
|
||||
SORT_TYPE(ForkMap.of(
|
||||
"升序", "1", null, "降序", "2", null
|
||||
));
|
||||
/**
|
||||
* L:label
|
||||
* M:编码
|
||||
|
||||
@@ -96,7 +96,7 @@ public class StIvtBsrealstorattrController {
|
||||
String pre = config.getString("pre");
|
||||
String now = DateUtil.now();
|
||||
ArrayList<StIvtStructattr> list = new ArrayList<>();
|
||||
for (int x = 6; x <= 排; x++) {
|
||||
for (int x = 12; x <= 排; x++) {
|
||||
for (int y = 1; y <= 列; y++) {
|
||||
for (int z = 1; z <= 层; z++) {
|
||||
StIvtStructattr attr = new StIvtStructattr();
|
||||
@@ -111,7 +111,7 @@ public class StIvtBsrealstorattrController {
|
||||
attr.setCreate_id("1");
|
||||
attr.setRow_num(x);
|
||||
attr.setCol_num(y);
|
||||
attr.setBlock_num(3);
|
||||
attr.setBlock_num(12);
|
||||
attr.setLayer_num(z);
|
||||
attr.setCreate_time(now);
|
||||
attr.setCreate_name("Admin");
|
||||
|
||||
@@ -148,7 +148,6 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
|
||||
|
||||
@Override
|
||||
public void changeActive(JSONObject json) {
|
||||
|
||||
BmVehicleInfo entity = json.toJavaObject(BmVehicleInfo.class);
|
||||
entity.setUpdate_time(DateUtil.now());
|
||||
entity.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
@@ -161,4 +160,5 @@ public class BmVehicleInfoServiceImpl extends ServiceImpl<BmVehicleInfoMapper, B
|
||||
json.put("value", CodeUtil.codeView(code));
|
||||
return json;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.wms.decision_manage.handler.decisioner.impl.base;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
@@ -61,6 +62,9 @@ public class SameBlockNumRuleHandler extends Decisioner<StIvtStructattr, JSONObj
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ObjectUtils.isEmpty(result)) {
|
||||
result.addAll(blockList);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
package org.nl.wms.dispatch_manage.point.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
@@ -18,6 +23,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -36,6 +42,7 @@ public class SchBasePointController {
|
||||
@Autowired
|
||||
private ISchBaseRegionService regionService;
|
||||
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<Object> query(SchBasePointQuery whereJson, PageQuery page) {
|
||||
return new ResponseEntity<>(TableDataInfo.build(pointService.page(page.build(SchBasePoint.class), whereJson.build())), HttpStatus.OK);
|
||||
@@ -73,5 +80,37 @@ public class SchBasePointController {
|
||||
public ResponseEntity<Object> getRegion() {
|
||||
return new ResponseEntity<>(regionService.list(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getPointStatus")
|
||||
@Log("获取点位状态")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> getPointStatus(@RequestBody JSONObject param) {
|
||||
if (param == null || StringUtils.isEmpty(param.getString("site_code"))) {
|
||||
throw new BadRequestException("请求参数不能为空");
|
||||
}
|
||||
List<SchBasePoint> pointList = pointService.list(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getCode, param.getString("site_code")).eq(SchBasePoint::getIs_used, true));
|
||||
if (ObjectUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
SchBasePoint point = pointList.get(0);
|
||||
point.setRemark("00".equals(point.getLock_type()) ? "未绑定货架" : "已绑定货架");
|
||||
return new ResponseEntity<>(point, HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二楼货架与地面站点绑定或解绑
|
||||
*/
|
||||
@PostMapping("bindOrUnbind")
|
||||
@Log("二楼货架与地面站点绑定或解绑")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo> bindOrUnbind(@RequestBody JSONObject param) {
|
||||
if (param == null || StringUtils.isEmpty(param.getString("site_code")) || StringUtils.isEmpty(param.getString("shelf_code")) || StringUtils.isEmpty(param.getString("mode"))) {
|
||||
throw new BadRequestException("请求参数不能为空");
|
||||
}
|
||||
pointService.bindOrUnbind(param.getString("site_code"),param.getString("shelf_code"), param.getString("mode"));
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.nl.wms.dispatch_manage.point.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 点位基础表 服务类
|
||||
@@ -13,4 +16,25 @@ import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
*/
|
||||
public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
|
||||
/**
|
||||
* 二楼货架与地面站点绑定或解绑
|
||||
* @param siteCode 点位
|
||||
* @param shelfCode 货架编号
|
||||
* @param mode 0解绑1绑定
|
||||
*/
|
||||
void bindOrUnbind(String siteCode,String shelfCode,String mode);
|
||||
|
||||
|
||||
/**
|
||||
* 查询没有搬运任务的空的目标点位
|
||||
*
|
||||
* @param regionCode 点位类型
|
||||
* @param getLockType 锁定状态
|
||||
* @param sortType 点位排序规则1:升序2:降序
|
||||
@param pointType 0空载具1满载具
|
||||
* @return List<SchBasePoint>
|
||||
*/
|
||||
List<SchBasePoint> checkEndPointTask(String regionCode, String getLockType,String sortType,String pointType);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,31 @@
|
||||
package org.nl.wms.dispatch_manage.point.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.external_system.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 点位基础表 服务实现类
|
||||
@@ -16,5 +36,108 @@ import org.springframework.stereotype.Service;
|
||||
*/
|
||||
@Service
|
||||
public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, SchBasePoint> implements ISchBasePointService {
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
|
||||
|
||||
/**
|
||||
* 二楼货架与地面站点绑定或解绑
|
||||
*
|
||||
* @param siteCode 点位
|
||||
* @param shelfCode 货架编号
|
||||
* @param mode 0解绑1绑定
|
||||
*/
|
||||
@Override
|
||||
public void bindOrUnbind(String siteCode, String shelfCode, String mode) {
|
||||
List<SchBasePoint> pointList = this.list(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getCode, siteCode).eq(SchBasePoint::getIs_used, true));
|
||||
if (ObjectUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
//检查是否为空架
|
||||
List<StIvtStructattr> stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper<StIvtStructattr>()
|
||||
.eq(StIvtStructattr::getIs_used, true)
|
||||
.eq(StIvtStructattr::getSect_code, shelfCode));
|
||||
List<StIvtStructattr> notEmptyList = stIvtStructattrList.stream().filter(r -> StringUtils.isNotBlank(r.getVehicle_code())).collect(Collectors.toList());
|
||||
if (ObjectUtils.isNotEmpty(notEmptyList)) {
|
||||
throw new BadRequestException("该货架的货位:" + notEmptyList.get(0).getStruct_code() + ",存在未出库的料箱:" + notEmptyList.get(0).getVehicle_code() + ",请检查!");
|
||||
}
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getCode, siteCode);
|
||||
if ("1".equals(mode)) {
|
||||
if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) {
|
||||
throw new BadRequestException("当前站点已绑定货架,货架编号:" + pointList.get(0).getVehicle_code() + ",请检查或解绑!");
|
||||
}
|
||||
wrapper.set(SchBasePoint::getVehicle_code, shelfCode)
|
||||
.set(SchBasePoint::getPoint_type, 0)
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"));
|
||||
} else if ("0".equals(mode)) {
|
||||
wrapper.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"));
|
||||
}
|
||||
wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName());
|
||||
this.update(wrapper);
|
||||
//绑定状态同步至ACS
|
||||
wmsToAcsService.bindPodAndBerth(siteCode, shelfCode, mode, "bindPodAndBerth");
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询没有搬运任务的空的目标点位
|
||||
*
|
||||
* @param regionCode 点位类型
|
||||
* @param getLockType 锁定状态
|
||||
* @param sortType 点位排序规则1:升序2:降序
|
||||
* @param pointType 0空载具1满载具
|
||||
* @return List<SchBasePoint>
|
||||
*/
|
||||
@Override
|
||||
public List<SchBasePoint> checkEndPointTask(String regionCode, String getLockType, String sortType, String
|
||||
pointType) {
|
||||
Set<String> pointSets;
|
||||
List<SchBaseTask> taskList;
|
||||
List<SchBasePoint> returList = new ArrayList<>();
|
||||
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
.eq(SchBasePoint::getRegion_code, regionCode);
|
||||
if (StringUtils.isNotEmpty(getLockType)) {
|
||||
queryWrapper.eq(SchBasePoint::getLock_type, getLockType);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(pointType)) {
|
||||
queryWrapper.eq(SchBasePoint::getPoint_type, pointType);
|
||||
}
|
||||
if (StatusEnum.SORT_TYPE.code("升序").equals(sortType)) {
|
||||
queryWrapper.orderByAsc(SchBasePoint::getCode);
|
||||
} else if (StatusEnum.SORT_TYPE.code("降序").equals(sortType)) {
|
||||
queryWrapper.orderByDesc(SchBasePoint::getCode);
|
||||
} else {
|
||||
queryWrapper.orderByAsc(SchBasePoint::getCode);
|
||||
}
|
||||
List<SchBasePoint> ivtList = this.list(queryWrapper);
|
||||
Set<String> pointIds = ivtList.stream()
|
||||
.map(SchBasePoint::getCode)
|
||||
.collect(Collectors.toSet());
|
||||
if (ObjectUtils.isEmpty(pointIds)) {
|
||||
return returList;
|
||||
}
|
||||
//点位任务
|
||||
taskList = iSchBaseTaskService.getTaskList(pointIds, pointIds, null, null);
|
||||
pointSets = taskList.stream()
|
||||
.flatMap(task -> Stream.of(
|
||||
task.getPoint_code1(),
|
||||
task.getPoint_code2()
|
||||
))
|
||||
.filter(point -> point != null && !point.trim().isEmpty())
|
||||
.collect(Collectors.toSet());
|
||||
//符合条件的库存点位过滤掉已存在任务的点位
|
||||
return ivtList.stream()
|
||||
.filter(p -> !pointSets.contains(p.getCode()) && p.getLock_type().equals(getLockType))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public class GroupDickInStorageTask extends AbstractTask {
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//跟新库存
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ public class InStorageTask extends AbstractTask {
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//跟新库存
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -105,8 +105,8 @@ public class MoveStorageTask extends AbstractTask {
|
||||
data.put("status",StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2());
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ public class OutStorageTask extends AbstractTask {
|
||||
data.put("status",StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -146,7 +146,7 @@ public class PalletInStorageTask extends AbstractTask {
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//跟新库存
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ public class PalletOutStorageTask extends AbstractTask {
|
||||
data.put("status",StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -94,7 +94,7 @@ public class PickStorageTask extends AbstractTask {
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//跟新库存
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.TRUE,schBaseTask.getPoint_code2());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.stor_manage.record.service.IStIvtStructivtflowService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author gbx
|
||||
* @Date 2025/2/17 13:30
|
||||
* 二楼出库AGV搬运
|
||||
*/
|
||||
@Service("secondFloorAgvTransfer")
|
||||
@Slf4j
|
||||
public class SecondFloorAgvTransferTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructivtflowService structIvtFlowService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
@Override
|
||||
public JSONObject createTask(JSONObject from) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setSource_form_id(from.getString("id"));
|
||||
task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间"));
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setAcs_type(StatusEnum.ACS_TYPE.code("AGV任务"));
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼出库AGV搬运"));
|
||||
task.setVehicle_code(from.getString("vehicleCode"));
|
||||
task.setPoint_code1(from.getString("pointCode1"));
|
||||
task.setPoint_code2(from.getString("pointCode2"));
|
||||
task.setPoint_code3(from.getString("pointCode3"));
|
||||
task.setGroup_code(from.getString("group_code"));
|
||||
iSchBaseTaskService.create(task);
|
||||
//更新任务号
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getTask_code, task.getTask_code())
|
||||
.set(MdPbVehicleMater::getRemark,"该料箱正在出库到产线站点"+from.getString("pointCode2")+"-"+from.getString("pointCode3"))
|
||||
.eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code())
|
||||
.eq(MdPbVehicleMater::getIs_delete, false));
|
||||
return (JSONObject) JSON.toJSON(task);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finish(JSONObject data) {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//起点位解锁
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.eq(SchBasePoint::getCode, schBaseTask.getPoint_code1()));
|
||||
//终点点位绑定货架,Point_type为满架
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getPoint_type, "1")
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("出库锁"))
|
||||
.set(SchBasePoint::getVehicle_code, schBaseTask.getPoint_code3())
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.eq(SchBasePoint::getCode, schBaseTask.getPoint_code2()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject data) {
|
||||
this.updateTask(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancel(JSONObject data) {
|
||||
try {
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iSchBaseTaskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.set(SchBaseTask::getTask_step, "1")
|
||||
.eq(SchBaseTask::getTask_type, StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库"))
|
||||
.in(SchBaseTask::getGroup_code, schBaseTask.getGroup_code()));
|
||||
this.updateTask(data);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.stor_manage.record.service.IStIvtStructivtflowService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author gbx
|
||||
* @Date 2025/2/17 13:30
|
||||
* 二楼空架AGV搬运任务
|
||||
*/
|
||||
@Service("secondFloorEmptyShelves")
|
||||
@Slf4j
|
||||
public class SecondFloorEmptyShelfTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructivtflowService structIvtFlowService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
@Override
|
||||
public JSONObject createTask(JSONObject from) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setSource_form_id(from.getString("id"));
|
||||
task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间"));
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setAcs_type(StatusEnum.ACS_TYPE.code("AGV任务"));
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼空架AGV搬运"));
|
||||
task.setVehicle_code(from.getString("vehicleCode"));
|
||||
task.setPoint_code1(from.getString("pointCode1"));
|
||||
task.setPoint_code2(from.getString("pointCode2"));
|
||||
task.setGroup_code(from.getString("group_code"));
|
||||
iSchBaseTaskService.create(task);
|
||||
//更新任务号
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getTask_code, task.getTask_code())
|
||||
.eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code())
|
||||
.eq(MdPbVehicleMater::getIs_delete, false));
|
||||
return (JSONObject) JSON.toJSON(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finish(JSONObject data) {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//起点解锁
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.eq(SchBasePoint::getCode, schBaseTask.getPoint_code1()));
|
||||
//货架绑定
|
||||
iSchBasePointService.bindOrUnbind(schBaseTask.getPoint_code2(), schBaseTask.getVehicle_code(), "1");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject data) {
|
||||
this.updateTask(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancel(JSONObject data) {
|
||||
try {
|
||||
this.updateTask(data);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -55,46 +55,32 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
@Autowired
|
||||
private IBmVehicleInfoService iBmVehicleInfoService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService vehicleMaterService;
|
||||
@Autowired
|
||||
private IStIvtStructivtflowService structivtflowService;
|
||||
private IStIvtStructivtflowService structIvtFlowService;
|
||||
|
||||
@Override
|
||||
//@Transactional
|
||||
public JSONObject createTask(JSONObject from) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
for (String vehicle_code : from.keySet()) {
|
||||
String start_point = from.getString(vehicle_code);
|
||||
if (StringUtils.isEmpty(start_point)) {
|
||||
for (String vehicleCode : from.keySet()) {
|
||||
String startPoint = from.getString(vehicleCode);
|
||||
if (StringUtils.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("申请任务失败:任务起点不能为空!");
|
||||
}
|
||||
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>()
|
||||
.eq("vehicle_code", vehicle_code));
|
||||
if (vehicleInfo == null) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "信息不存在");
|
||||
}
|
||||
List<MdPbVehicleMater> item = iMdPbVehicleMaterService.list(new LambdaQueryWrapper<MdPbVehicleMater>().eq(MdPbVehicleMater::getVehicle_code, vehicle_code));
|
||||
if (CollectionUtils.isEmpty(item)) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在");
|
||||
}
|
||||
String struct_code = getStructCode(vehicle_code);
|
||||
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
|
||||
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||
}
|
||||
task.setVehicle_type(checkVehicleInfo(vehicleCode));
|
||||
String endPoint = getEndPoint(vehicleCode);
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setSource_form_id(from.getString("id"));
|
||||
task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间"));
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setAcs_type(StatusEnum.ACS_TYPE.code("CTU任务"));
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU"));
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setTask_type(StatusEnum.IOBILL_TYPE_IN.code("二楼CTU入库"));
|
||||
task.setVehicle_code(vehicle_code);
|
||||
task.setPoint_code1(start_point);
|
||||
task.setPoint_code2(struct_code);
|
||||
task.setVehicle_code(vehicleCode);
|
||||
task.setPoint_code1(startPoint);
|
||||
task.setPoint_code2(endPoint);
|
||||
iSchBaseTaskService.create(task);
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getTask_code, task.getTask_code())
|
||||
@@ -104,12 +90,35 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
return (JSONObject) JSON.toJSON(task);
|
||||
}
|
||||
|
||||
// @Transactional(propagation= Propagation.REQUIRES_NEW)
|
||||
public String getStructCode(String vehicle_code) {
|
||||
/**
|
||||
* 载具信息校验
|
||||
*/
|
||||
protected String checkVehicleInfo(String vehicleCode) {
|
||||
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper<BmVehicleInfo>()
|
||||
.eq("vehicle_code", vehicleCode));
|
||||
if (vehicleInfo == null) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicleCode + "信息不存在");
|
||||
}
|
||||
if (vehicleInfo.getH() == null) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicleCode + "高度等级信息不能为空");
|
||||
}
|
||||
List<MdPbVehicleMater> item = iMdPbVehicleMaterService.list(new LambdaQueryWrapper<MdPbVehicleMater>().eq(MdPbVehicleMater::getVehicle_code, vehicleCode));
|
||||
if (CollectionUtils.isEmpty(item)) {
|
||||
throw new BadRequestException("申请任务失败:载具" + vehicleCode + "载具物料信息信息不存在");
|
||||
}
|
||||
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicleCode)
|
||||
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
|
||||
}
|
||||
return vehicleInfo.getH().toString();
|
||||
}
|
||||
|
||||
public String getEndPoint(String vehicle_code) {
|
||||
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
|
||||
.eq("is_used", true)
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.eq("stor_code", "CStockId");
|
||||
.eq("stor_code", StatusEnum.STOCK_INFO.code("二楼ctu缓存库"));
|
||||
query.isNull("vehicle_code");
|
||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||
List<StIvtStructattr> structList = sameBlockNumRuleHandler.handler(list, null);
|
||||
@@ -138,7 +147,7 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finish(JSONObject data) {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
@@ -152,7 +161,7 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
.eq("struct_code", schBaseTask.getPoint_code2());
|
||||
iStIvtStructattrService.update(wrapper);
|
||||
//更新出入库记录
|
||||
List<MdPbVehicleMater> vehicleMaterList = vehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
List<MdPbVehicleMater> vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
.eq("vehicle_code", schBaseTask.getVehicle_code())
|
||||
.eq("is_delete", false));
|
||||
if (ObjectUtil.isEmpty(vehicleMaterList)) {
|
||||
@@ -177,7 +186,7 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
record.setStor_code(attr.getStor_code());
|
||||
record.setVehicle_form_data(vehicleMater.getForm_data());
|
||||
record.setGrowth(true);
|
||||
structivtflowService.save(record);
|
||||
structIvtFlowService.save(record);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -186,7 +195,17 @@ public class SecondFloorInStorageTask extends AbstractTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancel(JSONObject data) {
|
||||
try {
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iStIvtStructattrService.update(new LambdaUpdateWrapper<StIvtStructattr>()
|
||||
.set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.set(StIvtStructattr::getVehicle_code, null)
|
||||
.eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code2()));
|
||||
this.updateTask(data);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
package org.nl.wms.dispatch_manage.task.handler.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.stor_manage.record.service.IStIvtStructivtflowService;
|
||||
import org.nl.wms.stor_manage.record.service.dao.StIvtStructivtflow;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author gbx
|
||||
* @Date 2025/2/12 13:30
|
||||
* 二楼出库任务
|
||||
*/
|
||||
@Service("secondFloorOutStorage")
|
||||
@Slf4j
|
||||
public class SecondFloorOutStorageTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructivtflowService structIvtFlowService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
|
||||
@Autowired
|
||||
private SecondFloorInStorageTask secondFloorInStorageTask;
|
||||
|
||||
@Override
|
||||
public JSONObject createTask(JSONObject from) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
task.setId(IdUtil.getStringId());
|
||||
task.setSource_form_id(from.getString("id"));
|
||||
task.setProduct_area(StatusEnum.PRODUCT_AREA.code("二层车间"));
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
task.setHandle_class(this.getClass().getName());
|
||||
task.setAcs_type(StatusEnum.ACS_TYPE.code("CTU任务"));
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU"));
|
||||
task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库"));
|
||||
task.setVehicle_code(from.getString("vehicleCode"));
|
||||
task.setPoint_code1(from.getString("pointCode1"));
|
||||
task.setPoint_code2(from.getString("pointCode2"));
|
||||
task.setPoint_code3(from.getString("pointCode3"));
|
||||
task.setPoint_code4(from.getString("pointCode4"));
|
||||
task.setGroup_code(from.getString("groupCode"));
|
||||
task.setVehicle_type(from.getString("vehicle_type"));
|
||||
task.setSource_form_id(from.getString("source_form_id"));
|
||||
iSchBaseTaskService.create(task);
|
||||
//更新任务号
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getTask_code, task.getTask_code())
|
||||
.set(MdPbVehicleMater::getRemark,"该料箱正在出库到站点"+from.getString("pointCode2")+"-"+from.getString("pointCode3"))
|
||||
.eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code())
|
||||
.eq(MdPbVehicleMater::getIs_delete, false));
|
||||
return (JSONObject) JSON.toJSON(task);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param billCode 单据编号
|
||||
* @param siteCode 产线站点编号
|
||||
* @param pointCode2 CTU站点编号
|
||||
* @param vehicleCode 载具编号
|
||||
* @param sourceFormId 载具物料ID
|
||||
* @param inStructCode 货架仓位
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject handleBills(String billCode, String siteCode, String pointCode2, String vehicleCode, String sourceFormId, String inStructCode) throws BadRequestException {
|
||||
try {
|
||||
// 创建任务
|
||||
JSONObject taskJsonObject = new JSONObject();
|
||||
//校验载具信息
|
||||
taskJsonObject.put("vehicle_type", secondFloorInStorageTask.checkVehicleInfo(vehicleCode));
|
||||
// 分配料架起点
|
||||
List<StructattrVechielDto> starIvtList = iStIvtStructattrService.getStructFromBillCode(Arrays.asList(billCode.split(",")), vehicleCode);
|
||||
if (ObjectUtils.isEmpty(starIvtList)) {
|
||||
log.error("CTU出库任务,该单据载具:{}的物料在CTU库查找不到仓位信息,请检查", vehicleCode);
|
||||
throw new BadRequestException("CTU出库任务,该单据载具:" + vehicleCode + "的物料在CTU库查找不到仓位信息,请检查");
|
||||
}
|
||||
StructattrVechielDto structattrVechielDto = starIvtList.get(0);
|
||||
if (StringUtils.isBlank(structattrVechielDto.getStruct_code()) || Objects.equals(structattrVechielDto.getQty(), BigDecimal.ZERO)) {
|
||||
return null;
|
||||
}
|
||||
//载具物料表更新物料状态正在出库
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty", structattrVechielDto.getQty())
|
||||
.eq("id", structattrVechielDto.getVm_id()));
|
||||
//出库仓位锁住
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("出库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.in("struct_code", structattrVechielDto.getStruct_code()));
|
||||
//入库仓位锁住
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("入库锁"))
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", inStructCode));
|
||||
taskJsonObject.put("pointCode1", structattrVechielDto.getStruct_code());
|
||||
taskJsonObject.put("pointCode2", pointCode2);
|
||||
taskJsonObject.put("pointCode3", inStructCode);
|
||||
taskJsonObject.put("pointCode4", siteCode);
|
||||
taskJsonObject.put("vehicleCode", vehicleCode);
|
||||
taskJsonObject.put("source_form_id", sourceFormId);
|
||||
return this.createTask(taskJsonObject);
|
||||
} catch (BadRequestException e) {
|
||||
log.error("CTU出库任务失败,载具号:{}", vehicleCode, e);
|
||||
throw new BadRequestException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finish(JSONObject data) {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//更新起点仓位
|
||||
String now = DateUtil.now();
|
||||
UpdateWrapper<StIvtStructattr> wrapper1 = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("update_time", now)
|
||||
.set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.set("vehicle_code", null)
|
||||
.eq("struct_code", schBaseTask.getPoint_code1());
|
||||
iStIvtStructattrService.update(wrapper1);
|
||||
//更新终点仓位
|
||||
UpdateWrapper<StIvtStructattr> wrapper2 = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("update_time", now)
|
||||
.set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.set("vehicle_code", schBaseTask.getVehicle_code())
|
||||
.eq("struct_code", schBaseTask.getPoint_code3());
|
||||
iStIvtStructattrService.update(wrapper2);
|
||||
//更新料架仓位
|
||||
// UpdateWrapper<StIvtStructattr> wrapper2 = new UpdateWrapper<StIvtStructattr>()
|
||||
// .set("update_time", now)
|
||||
// .set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
// .set("vehicle_code", schBaseTask.getVehicle_code())
|
||||
// .eq("struct_code", schBaseTask.getPoint_code3());
|
||||
// iStIvtStructattrService.update(wrapper2);
|
||||
//更新出入库记录
|
||||
List<MdPbVehicleMater> vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||
.eq("vehicle_code", schBaseTask.getVehicle_code())
|
||||
.eq("is_delete", false));
|
||||
if (ObjectUtil.isEmpty(vehicleMaterList)) {
|
||||
throw new BadRequestException("任务完成失败,到载具物料信息: " + schBaseTask.getVehicle_code());
|
||||
}
|
||||
//扣库存
|
||||
MdPbVehicleMater vehicleMater = vehicleMaterList.get(0);
|
||||
// iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
// .set(MdPbVehicleMater::getFrozen_qty, 0)
|
||||
// .set(MdPbVehicleMater::getIs_delete, true)
|
||||
// .set(MdPbVehicleMater::getQty, 0)
|
||||
// .eq(MdPbVehicleMater::getId, vehicleMater.getId()));
|
||||
StIvtStructattr attr = iStIvtStructattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", schBaseTask.getPoint_code1()).select("stor_code"));
|
||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||
record.setId(IdUtil.getStringId());
|
||||
record.setUpdate_time(now);
|
||||
record.setVehicle_code(schBaseTask.getVehicle_code());
|
||||
record.setMaterial_id(vehicleMater.getMaterial_id());
|
||||
record.setPcsn(vehicleMater.getPcsn());
|
||||
record.setQty(vehicleMater.getQty());
|
||||
record.setChange_qty(vehicleMater.getQty());
|
||||
record.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库"));
|
||||
record.setFrozen_qty(vehicleMater.getFrozen_qty());
|
||||
record.setSource_form_type(vehicleMater.getSource_form_type());
|
||||
record.setSource_form_id(vehicleMater.getSource_form_id());
|
||||
record.setUnit_id(vehicleMater.getUnit_id());
|
||||
record.setStruct_code(schBaseTask.getPoint_code2());
|
||||
record.setStor_code(attr.getStor_code());
|
||||
record.setVehicle_form_data(vehicleMater.getForm_data());
|
||||
record.setGrowth(true);
|
||||
structIvtFlowService.save(record);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(JSONObject data) {
|
||||
this.updateTask(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancel(JSONObject data) {
|
||||
try {
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
//起点解锁
|
||||
iStIvtStructattrService.update(new LambdaUpdateWrapper<StIvtStructattr>()
|
||||
.set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code1()));
|
||||
//终点解锁
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.eq(SchBasePoint::getCode, schBaseTask.getPoint_code2()));
|
||||
//入库仓位解锁
|
||||
iStIvtStructattrService.update(new UpdateWrapper<StIvtStructattr>()
|
||||
.set("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.set("vehicle_code", null)
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.eq("struct_code", schBaseTask.getPoint_code3()));
|
||||
//载具物料解锁
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getFrozen_qty, 0)
|
||||
.eq(MdPbVehicleMater::getId, schBaseTask.getSource_form_id()));
|
||||
this.updateTask(data);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -121,7 +121,7 @@ public class ToPickPlatformTask extends AbstractTask {
|
||||
data.put("status", StatusEnum.FORM_STATUS.code("完成"));
|
||||
this.updateTask(data);
|
||||
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_code", data.getString("task_code")));
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(),schBaseTask.getVehicle_code(),schBaseTask.getTask_type(), null,Boolean.FALSE,schBaseTask.getPoint_code2());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.dispatch_manage.task.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -64,7 +65,10 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
|
||||
|
||||
JSONObject errorTask(JSONObject param,String type);
|
||||
|
||||
JSONObject getIoSourceFormData(String vehicle_code, String pcsn);
|
||||
|
||||
List<Map> getIoSourceFormData(String vehicle_code, String pcsn);
|
||||
|
||||
/**
|
||||
* 获取点位任务数量
|
||||
*/
|
||||
List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4);
|
||||
}
|
||||
|
||||
@@ -142,6 +142,10 @@ public class SchBaseTask implements Serializable {
|
||||
/**
|
||||
* 自定义参数
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String agv_system_type;
|
||||
|
||||
/**
|
||||
* 载具高度类型
|
||||
*/
|
||||
private String vehicle_type;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.dispatch_manage.task.service.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -12,6 +13,7 @@ import java.util.List;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -26,5 +28,8 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
|
||||
|
||||
List<Map> getByVehicle(@Param("vehicles") List<String> vehicles);
|
||||
|
||||
JSONObject getIoSourceFormData(@Param("vehicle_code") String vehicle_code, @Param("pcsn") String pcsn);
|
||||
List<Map> getIoSourceFormData(@Param("vehicle_code") String vehicle_code, @Param("pcsn") String pcsn);
|
||||
|
||||
|
||||
List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</where>
|
||||
ORDER BY t.create_time DESC
|
||||
</select>
|
||||
<select id="getIoSourceFormData" resultType="com.alibaba.fastjson.JSONObject">
|
||||
<select id="getIoSourceFormData" resultType="java.util.Map">
|
||||
SELECT
|
||||
st_ivt_iostorinvdtl.source_form_data
|
||||
FROM
|
||||
@@ -75,4 +75,29 @@
|
||||
#{vehicle_id}
|
||||
</foreach>
|
||||
</select>
|
||||
<select id="getTaskList" resultType="org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask">
|
||||
SELECT task_type,id,point_code1, point_code2
|
||||
FROM SCH_BASE_TASK
|
||||
WHERE
|
||||
<trim prefix="(" suffix=")" prefixOverrides="OR">
|
||||
<if test="pointCodes1 != null and pointCodes1.size() > 0">
|
||||
OR point_code1 IN
|
||||
<foreach item="code" collection="pointCodes1" open="(" separator="," close=")"> #{code} </foreach>
|
||||
</if>
|
||||
<if test="pointCodes2 != null and pointCodes2.size() > 0">
|
||||
OR point_code2 IN
|
||||
<foreach item="code" collection="pointCodes2" open="(" separator="," close=")"> #{code} </foreach>
|
||||
</if>
|
||||
<if test="pointCodes3 != null and pointCodes3.size() > 0">
|
||||
OR point_code3 IN
|
||||
<foreach item="code" collection="pointCodes3" open="(" separator="," close=")"> #{code} </foreach>
|
||||
</if>
|
||||
<if test="pointCodes4 != null and pointCodes4.size() > 0">
|
||||
OR point_code4 IN
|
||||
<foreach item="code" collection="pointCodes4" open="(" separator="," close=")"> #{code} </foreach>
|
||||
</if>
|
||||
</trim>
|
||||
AND (status <![CDATA[ < ]]> '80')
|
||||
AND (is_delete = '0')
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -120,7 +120,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
Assert.notNull(entity.getStatus(), "任务状态不能为空!");
|
||||
|
||||
entity.setId(IdUtil.getStringId());
|
||||
entity.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
entity.setCreate_name(nickName);
|
||||
@@ -188,18 +187,22 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
|
||||
);
|
||||
if (ObjectUtils.isNotEmpty(vehicleMaterList)) {
|
||||
//查找未完成的出库单与明细
|
||||
JSONObject formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn());
|
||||
if (formData != null) {
|
||||
String formDataId = formData.getJSONObject("source_form_data").getString("id");
|
||||
String qty = formData.getJSONObject("source_form_data").getString("qty");
|
||||
if (StringUtils.isNotBlank(formDataId) && StringUtils.isNotBlank(qty)) {
|
||||
//查找非二楼任务的未完成的出库单与明细
|
||||
if (StringUtils.isBlank(vehicleMaterList.get(0).getPrd_ppbom_no())) {
|
||||
List<Map> formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn());
|
||||
if (ObjectUtils.isNotEmpty(formData)) {
|
||||
Map<String, JSONObject> formDataMap = formData.get(0);
|
||||
JSONObject formDataId = formDataMap.get("source_form_data");
|
||||
String id = formDataId.getString("id");
|
||||
String qty = formDataId.getString("qty");
|
||||
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(qty)) {
|
||||
iPmFormDataService.update(new LambdaUpdateWrapper<PmFormData>()
|
||||
.set(PmFormData::getQty, qty)
|
||||
.eq(PmFormData::getId, formDataId));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
handleFinishTask(param, task);
|
||||
} else {
|
||||
this.update(new UpdateWrapper<SchBaseTask>()
|
||||
@@ -277,7 +280,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
return null;
|
||||
}
|
||||
|
||||
public JSONObject getIoSourceFormData(String vehicle_code, String pcsn) {
|
||||
public List<Map> getIoSourceFormData(String vehicle_code, String pcsn) {
|
||||
return this.baseMapper.getIoSourceFormData(vehicle_code, pcsn);
|
||||
}
|
||||
|
||||
@@ -376,4 +379,13 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
|
||||
result.put("point_code2", new_struct_code);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取点位任务数量
|
||||
*/
|
||||
@Override
|
||||
public List<SchBaseTask> getTaskList(Set<String> pointCodes1, Set<String> pointCodes2, Set<String> pointCodes3, Set<String> pointCodes4) {
|
||||
return baseMapper.getTaskList(pointCodes1, pointCodes2, pointCodes3, pointCodes4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.wms.base_manage.vehicle.service.IBmVehicleInfoService;
|
||||
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
|
||||
import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorOutStorageTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.external_system.acs.service.AcsToWmsService;
|
||||
import org.nl.wms.external_system.dto.InteracteDto;
|
||||
|
||||
@@ -59,8 +59,17 @@ public class WmsToAcsService{
|
||||
.trace_id(MDC.get("trace_id"))
|
||||
.type(type)
|
||||
.data(arr).build();
|
||||
|
||||
TableDataInfo tableDataInfo = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto));
|
||||
return tableDataInfo;
|
||||
}
|
||||
|
||||
public TableDataInfo bindPodAndBerth(String podCode,String positionCode,String indBind,String type){
|
||||
InteracteDto dto = InteracteDto.builder().service("wmsToAcsService")
|
||||
.trace_id(MDC.get("trace_id"))
|
||||
.type(type)
|
||||
.data(MapOf.of("podCode", podCode, "positionCode", positionCode, "indBind", indBind))
|
||||
.build();
|
||||
TableDataInfo result = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package org.nl.wms.flow_manage.flow.service.classprocessimpl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.github.javaparser.utils.Log;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.process.classprocess.ClassProcess;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2024/5/6 14:34
|
||||
* 回传服务
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class CtuProcessHandler implements ClassProcess {
|
||||
|
||||
@Autowired
|
||||
IPmFormDataService iPmFormDataService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
|
||||
/**
|
||||
* 回执单回传
|
||||
*/
|
||||
@Override
|
||||
public JSONObject process(JSONObject from, JSONObject param) {
|
||||
JSONObject vehicleMater = from.getJSONObject("vehicleMater");
|
||||
JSONObject sourceFormData = from.getJSONObject("source_form_data");
|
||||
String billCode = sourceFormData.getString("code");
|
||||
try {
|
||||
//更新物料载具信息的出库单据号
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("prd_ppbom_no", billCode)
|
||||
.eq("id", vehicleMater.getString("id")));
|
||||
} catch (Exception ex) {
|
||||
LambdaUpdateWrapper<PmFormData> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(PmFormData::getId, sourceFormData.getString("id"));
|
||||
updateWrapper.set(PmFormData::getRemark, "更新物料载具信息的出库单据号失败,原因为:" + ex.getMessage());
|
||||
iPmFormDataService.update(updateWrapper);
|
||||
Log.error(ex.getMessage());
|
||||
}
|
||||
return from;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -77,10 +77,10 @@ public class StorageChangesProcessHandler implements ClassProcess {
|
||||
String end_struct_code = valueMap.get("end_struct_code");
|
||||
BigDecimal change_qty = StringUtils.isEmpty(valueMap.get("change_qty"))?null:new BigDecimal(valueMap.get("change_qty"));
|
||||
if (StringUtils.isNotEmpty(start_struct_code)){
|
||||
iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), change_qty,Boolean.FALSE);
|
||||
iStIvtStructattrService.changeStruct(start_struct_code,vehicle_code,param.getString("task_type"), change_qty,Boolean.FALSE,null);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(end_struct_code)){
|
||||
iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), change_qty,change_qty.intValue()<0?Boolean.FALSE:Boolean.TRUE);
|
||||
iStIvtStructattrService.changeStruct(end_struct_code,vehicle_code,param.getString("task_type"), change_qty,change_qty.intValue()<0?Boolean.FALSE:Boolean.TRUE,null);
|
||||
}
|
||||
}
|
||||
return from;
|
||||
|
||||
@@ -129,6 +129,10 @@ public class MdPbVehicleMater implements Serializable {
|
||||
* 流程实例
|
||||
*/
|
||||
private String proc_inst_id;
|
||||
/**
|
||||
* 用料单号
|
||||
*/
|
||||
private String prd_ppbom_no;
|
||||
/**
|
||||
* 是否需要拣选(针对托盘)
|
||||
*/
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
package org.nl.wms.md_manage.vehicleMater.service.impl;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.wms.base_manage.vehicle.service.dao.BmVehicleInfo;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.mapper.MdPbVehicleMaterMapper;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dto.MdPbVehicleMaterVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -42,6 +50,9 @@ public class MdPbVehicleMaterServiceImpl extends ServiceImpl<MdPbVehicleMaterMap
|
||||
return this.baseMapper.getVehicleMaters(vehicle_code);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, String> getVehicleCode2Id(String material_id,String... vehicle_code) {
|
||||
if (vehicle_code!=null){
|
||||
|
||||
@@ -6,7 +6,6 @@ import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
@@ -20,7 +19,6 @@ import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
|
||||
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
|
||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -73,7 +71,11 @@ public class IOStorageController {
|
||||
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
|
||||
.eq("vehicle_code", vehicle_code);
|
||||
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
|
||||
if (ObjectUtils.isNotEmpty(list)) {
|
||||
//todo 二楼出库调通后注释
|
||||
long storageCount = list.stream().filter(r -> r.getStor_code().equals(StatusEnum.STOCK_INFO.code("FStockPallet")) ||
|
||||
r.getStor_code().equals(StatusEnum.STOCK_INFO.code("料箱库")) ||
|
||||
r.getStor_code().equals(StatusEnum.STOCK_INFO.code("虚拟库"))).count();
|
||||
if (storageCount > 0) {
|
||||
throw new BadRequestException(String.format("出库确认失败:当前载具号在立库的库位中未出库:%s中,请核查库存记录!", list.get(0).getStruct_code()));
|
||||
}
|
||||
}, StatusEnum.STRATEGY_TYPE.code("出库") + vehicle_code, 5);
|
||||
|
||||
@@ -3,7 +3,8 @@ package org.nl.wms.pda_manage.iostorage;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
@@ -14,7 +15,6 @@ import org.nl.common.utils.ListOf;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
|
||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaMaterOutMst;
|
||||
import org.nl.wms.pda_manage.iostorage.sevice.PdaIOService;
|
||||
@@ -83,6 +83,32 @@ public class PdaOutController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iPmFormDataService.queryTree(query, page)), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("getCtuOrderList")
|
||||
@Log("查询二楼生产出库单据")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo<PmFormDataDto>> getCtuOrderList(FormDataQuery query, PageQuery page) {
|
||||
if (query == null || StringUtils.isBlank(query.getBill_code()) || StringUtils.isBlank(query.getSite_code())) {
|
||||
throw new BadRequestException("查询失败,产线编号或用料单据号有误,请检查!");
|
||||
}
|
||||
page.setPage(1);
|
||||
page.setSize(100);
|
||||
page.setPage(page.getPage() - 1);
|
||||
page.setSort("create_time,desc");
|
||||
//query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"),StatusEnum.FORM_STATUS.code("执行中")});
|
||||
Page<PmFormDataDto> list = iPmFormDataService.queryCtuOrderList(query, page);
|
||||
TableDataInfo<PmFormDataDto> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(String.valueOf(cn.hutool.http.HttpStatus.HTTP_OK));
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setContent(list.getRecords());
|
||||
//给前端作去重
|
||||
if (ObjectUtils.isNotEmpty(list.getRecords())) {
|
||||
rspData.setData(list.getRecords().get(0).getPrd_ppbom_no());
|
||||
}
|
||||
rspData.setTotalElements(list.getTotal());
|
||||
return new ResponseEntity<>(rspData, HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("orderConfirm")
|
||||
@Log("查询单据数据")
|
||||
@SaIgnore
|
||||
@@ -95,10 +121,10 @@ public class PdaOutController {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 一楼单据出库确认
|
||||
*/
|
||||
@PostMapping("confirm")
|
||||
@Log("出库确认")
|
||||
@Log("一楼单据出库确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo> confirm(@RequestBody PdaFormOutMst pdaFormOutMst) {
|
||||
RedissonUtils.lock(() -> {
|
||||
@@ -107,6 +133,38 @@ public class PdaOutController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二楼生产出库单据确认
|
||||
*/
|
||||
@PostMapping("ctuOutConfirm")
|
||||
@Log("二楼生产出库单据确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo> ctuOutConfirm(@RequestBody PdaFormOutMst pdaFormOutMst) {
|
||||
RedissonUtils.lock(() -> {
|
||||
pdaIOService.ctuOutConfirm(pdaFormOutMst);
|
||||
}, pdaFormOutMst.getBill_code(), null);
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二楼产线站点人工从货架取货确认
|
||||
*/
|
||||
@PostMapping("takeConfirm")
|
||||
@Log("二楼产线站点人工从货架取货出库确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo> takeConfirm(@RequestBody JSONObject param) {
|
||||
if (param == null || StringUtils.isEmpty(param.getString("site_code"))) {
|
||||
throw new BadRequestException("请求参数不能为空");
|
||||
}
|
||||
RedissonUtils.lock(() -> {
|
||||
pdaIOService.takeConfirm(param);
|
||||
}, "takeConfirm", null);
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("materConfirm")
|
||||
@Log("物料出库确认")
|
||||
@SaIgnore
|
||||
|
||||
@@ -133,6 +133,15 @@ public class PdaFormOutMst implements Serializable {
|
||||
*/
|
||||
private JSONObject form_data;
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
private String bill_code;
|
||||
|
||||
/**
|
||||
* 产线站点编号
|
||||
*/
|
||||
private String site_code;
|
||||
/**
|
||||
* 关联上级表单id
|
||||
*/
|
||||
|
||||
@@ -6,10 +6,13 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.*;
|
||||
@@ -19,8 +22,15 @@ import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.base_manage.material.service.impl.MdMeMaterialbaseServiceImpl;
|
||||
import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit;
|
||||
import org.nl.wms.base_manage.measure.service.impl.BmMeasureUnitServiceImpl;
|
||||
import org.nl.wms.base_manage.sect.service.IStIvtSectattrService;
|
||||
import org.nl.wms.base_manage.sect.service.dao.StIvtSectattr;
|
||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorOutStorageTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.external_system.erp.dto.ErpQuery;
|
||||
import org.nl.wms.external_system.erp.dto.ErpSec;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
@@ -42,6 +52,7 @@ import org.nl.wms.stor_manage.struct.service.dao.StructAssignQty;
|
||||
import org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping;
|
||||
import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl;
|
||||
import org.nl.wms.system_manage.service.quartz.task.ApplyShelfScheduleService;
|
||||
import org.nl.wms.system_manage.service.quartz.task.SyncErpBillsScheduleService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -49,15 +60,12 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class PdaIOService {
|
||||
|
||||
@Autowired
|
||||
@@ -84,17 +92,26 @@ public class PdaIOService {
|
||||
private StIvtBsrealstorattrServiceImpl stIvtBsrealstorattrServiceImpl;
|
||||
@Autowired
|
||||
private MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
|
||||
|
||||
@Resource
|
||||
@Autowired
|
||||
private PmFormDataMapper pmFormDataMapper;
|
||||
@Autowired
|
||||
private IPmFormDataService iPmFormDataService;
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Autowired
|
||||
private SecondFloorOutStorageTask secondFloorOutStorageTask;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ApplyShelfScheduleService applyShelfScheduleService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 手持物料出库不回传
|
||||
*
|
||||
* @param pdaFormOutMst
|
||||
*/
|
||||
public void PdaMaterOutStorage(PdaMaterOutMst pdaFormOutMst) {
|
||||
@@ -152,8 +169,161 @@ public class PdaIOService {
|
||||
iStIvtIostorinvService.save(mst);
|
||||
this.pdaTaskOpen(mst);
|
||||
}
|
||||
|
||||
/**
|
||||
* 二楼生产出库单据确认
|
||||
*/
|
||||
public void ctuOutConfirm(PdaFormOutMst pdaFormOutMst) {
|
||||
String billCode = pdaFormOutMst.getBill_code();
|
||||
String siteCode = pdaFormOutMst.getSite_code();
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
if (StringUtils.isBlank(billCode) || StringUtils.isBlank(siteCode) || ObjectUtils.isEmpty(pdaFormOutMst.getChildren())) {
|
||||
throw new BadRequestException("出库失败,请求参数不能为空");
|
||||
}
|
||||
// 可以用货架列表
|
||||
List<SchBasePoint> endPointList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
.eq(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.eq(SchBasePoint::getRegion_code, StatusEnum.REGION_INFO.code("二楼CTU货架对接位"))
|
||||
.isNotNull(SchBasePoint::getVehicle_code));
|
||||
if (ObjectUtils.isEmpty(endPointList)) {
|
||||
log.error("CTU出库任务,该单据{}出库时,地面货架站点暂无可用货架,请检查现场情况", billCode);
|
||||
throw new BadRequestException("地面货架站点暂无可用货架,请检查现场情况");
|
||||
}
|
||||
for (int i = 0; i < pdaFormOutMst.getChildren().size(); i++) {
|
||||
try {
|
||||
// 可以货架的库位
|
||||
List<StIvtStructattr> stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper<StIvtStructattr>()
|
||||
.eq(StIvtStructattr::getIs_used, true)
|
||||
.eq(StIvtStructattr::getSect_code, endPointList.get(0).getVehicle_code())
|
||||
.eq(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.eq(StIvtStructattr::getStor_code, StatusEnum.STOCK_INFO.code("二楼货架缓存库"))
|
||||
.isNull(StIvtStructattr::getVehicle_code)
|
||||
.orderByAsc(StIvtStructattr::getLayer_num));
|
||||
if (ObjectUtils.isEmpty(stIvtStructattrList)) {
|
||||
log.error("CTU出库任务,该单据{}出库时,地面货架站点货架的货位已放满,请检查现场情况", billCode);
|
||||
throw new BadRequestException("地面货架站点货架的货位已放满,请检查现场情况");
|
||||
}
|
||||
// CTU分配终点
|
||||
List<SchBasePoint> targetPointList = endPointList.stream().filter(r -> r.getVehicle_code().equals(stIvtStructattrList.get(0).getSect_code())).collect(Collectors.toList());
|
||||
if (targetPointList.size() > 1) {
|
||||
log.error("CTU出库任务,该单据{}出库时,地面货架站点货架的货位存在相同货架编号,请检查现场情况", billCode);
|
||||
throw new BadRequestException("地面货架站点货架的货位存在相同货架编号,请检查现场情况");
|
||||
}
|
||||
if (StringUtils.isBlank(pdaFormOutMst.getChildren().get(i).getVehicle_code())) {
|
||||
throw new BadRequestException("出库失败,料箱码不能为空");
|
||||
}
|
||||
JSONObject jsonObject = secondFloorOutStorageTask.handleBills(billCode, siteCode, targetPointList.get(0).getCode(), pdaFormOutMst.getChildren().get(i).getVehicle_code(), pdaFormOutMst.getChildren().get(i).getId(), stIvtStructattrList.get(0).getStruct_code());
|
||||
jsonArray.add(jsonObject);
|
||||
} catch (BadRequestException e) {
|
||||
log.error("单据号:{}的第{}行明细,物料号为:{},出库异常:", billCode, i, pdaFormOutMst.getChildren().get(i).getMaterial_code(), e);
|
||||
//载具物料表更新物料状态出库异常
|
||||
iMdPbVehicleMaterService.update(new LambdaUpdateWrapper<MdPbVehicleMater>()
|
||||
.set(MdPbVehicleMater::getRemark, "出库异常:" + e.getMessage())
|
||||
.eq(MdPbVehicleMater::getId, pdaFormOutMst.getChildren().get(i).getId()));
|
||||
}
|
||||
}
|
||||
if (ObjectUtils.isNotEmpty(jsonArray)) {
|
||||
//终点锁住
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("出库锁"))
|
||||
.eq(SchBasePoint::getCode, endPointList.get(0).getCode()));
|
||||
List<String> taskIdList = jsonArray.stream().map(r -> ((JSONObject) r).getString("id")).collect(Collectors.toList());
|
||||
//todo 终点货位锁定
|
||||
|
||||
|
||||
//任务分组
|
||||
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.set(SchBaseTask::getGroup_code, pdaFormOutMst.getSite_code() + "_" + IdUtil.getStringId() + "_" + jsonArray.size()).
|
||||
in(SchBaseTask::getId, taskIdList));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二楼产线站点人工从货架取货确认
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void takeConfirm(JSONObject param) {
|
||||
List<SchBasePoint> pointList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getIs_used, true)
|
||||
.eq(SchBasePoint::getCode, param.getString("site_code")));
|
||||
if (ObjectUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) {
|
||||
//货架解绑
|
||||
// iSchBasePointService.bindOrUnbind(param.getString("site_code"), pointList.get(0).getVehicle_code(), "0");
|
||||
List<StIvtStructattr> stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper<StIvtStructattr>()
|
||||
.eq(StIvtStructattr::getSect_code, pointList.get(0).getVehicle_code())
|
||||
.isNotNull(StIvtStructattr::getVehicle_code));
|
||||
List<String> vehicleCodeList = stIvtStructattrList.stream()
|
||||
.map(StIvtStructattr::getVehicle_code)
|
||||
.collect(Collectors.toList());
|
||||
//清除载具物料组盘信息
|
||||
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty",0)
|
||||
.set("qty",0)
|
||||
.set("remark","该料箱的物料已从产线取走")
|
||||
.in("vehicle_code",vehicleCodeList));
|
||||
//清除货架库位
|
||||
iStIvtStructattrService.update(new LambdaUpdateWrapper<StIvtStructattr>()
|
||||
.set(StIvtStructattr::getVehicle_code, null)
|
||||
.set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁"))
|
||||
.set(StIvtStructattr::getUpdate_name, DateUtil.now())
|
||||
.set(StIvtStructattr::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.eq(StIvtStructattr::getSect_code, pointList.get(0).getVehicle_code())
|
||||
.eq(StIvtStructattr::getStor_code, StatusEnum.STOCK_INFO.code("二楼货架缓存库")));
|
||||
//标记为空架
|
||||
iSchBasePointService.update(new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.set(SchBasePoint::getPoint_type, 0)
|
||||
.eq(SchBasePoint::getCode, pointList.get(0).getCode()));
|
||||
//生成补空架任务
|
||||
applyShelfScheduleService.taskPublish(param.getString("site_code"), null, pointList.get(0).getVehicle_code(), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二楼生产出库单据确认
|
||||
*/
|
||||
public void ctuOutConfirm1(PdaFormOutMst pdaFormOutMst) {
|
||||
// StIvtIostorinv mst = new StIvtIostorinv();
|
||||
// {
|
||||
// mst.setId(IdUtil.getStringId());
|
||||
// mst.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
// mst.setCreate_time(DateUtil.now());
|
||||
// mst.setCode(CodeUtil.getNewCode("IO_CODE"));
|
||||
// mst.setStatus(StatusEnum.FORM_STATUS.code("已分配"));
|
||||
// mst.setProduct_area("A2");
|
||||
// mst.setBill_type(StatusEnum.IOBILL_TYPE_OUT.code("生产出库"));
|
||||
// mst.setIn_storage(false);
|
||||
// mst.setProduct_area(pdaFormOutMst.getProduct_area());
|
||||
// mst.setForm_data(new JSONObject(MapOf.of("shipper", null, "product_area", pdaFormOutMst.getProduct_area())));
|
||||
// }
|
||||
// StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
|
||||
// {
|
||||
// ivtDtl.setMaterial_id(vechielDto.getMaterial_id());
|
||||
// ivtDtl.setForm_data(new JSONObject());
|
||||
// ivtDtl.setQty(structattrVechielDto.getQty());
|
||||
// ivtDtl.setPcsn(structattrVechielDto.getPcsn());
|
||||
// ivtDtl.setStor_code("HStockId");
|
||||
// ivtDtl.setId(IdUtil.getStringId());
|
||||
// ivtDtl.setVehicle_code(structattrVechielDto.getVehicle_code());
|
||||
// ivtDtl.setVehicle_id(vechielDto.getVm_id());
|
||||
// ivtDtl.setInv_id(mst.getId());
|
||||
// ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
// ivtDtl.setSource_form_data(new JSONObject());
|
||||
// }
|
||||
// iStIvtIostorinvdtlService.save(ivtDtl);
|
||||
// iStIvtIostorinvService.save(mst);
|
||||
//this.pdaTaskOpen(mst);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 手持单据出库
|
||||
*
|
||||
* @param pdaFormOutMst
|
||||
*/
|
||||
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) {
|
||||
|
||||
@@ -2,24 +2,26 @@ package org.nl.wms.pda_manage.palletio.controller;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
|
||||
import org.nl.wms.pda_manage.palletio.service.dto.LabelValueVo;
|
||||
import org.nl.wms.stor_manage.io.service.dto.StorInvQuery;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -43,9 +45,12 @@ public class PalletStIvtIostorinvController {
|
||||
, "二楼左侧靠托盘库", "2127", "三楼出库点", "3110");
|
||||
@Autowired
|
||||
private PalletIostorinvService palletIostorinvService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
/**
|
||||
* 手持托盘入库
|
||||
*
|
||||
* @param form
|
||||
* @return
|
||||
*/
|
||||
@@ -88,5 +93,32 @@ public class PalletStIvtIostorinvController {
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 二楼站点扫码
|
||||
*/
|
||||
@PostMapping("queryTargetPoint")
|
||||
@SaIgnore
|
||||
@Log("二楼站点扫码")
|
||||
public ResponseEntity<Object> queryTargetPoint(@RequestBody JSONObject form) {
|
||||
if (form == null || StringUtils.isEmpty(form.getString("site_code"))) {
|
||||
throw new BadRequestException("请求参数不能为空");
|
||||
}
|
||||
List<SchBasePoint> pointList = pointService.list(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getCode, form.getString("site_code")).eq(SchBasePoint::getIs_used, true));
|
||||
if (ObjectUtils.isEmpty(pointList)) {
|
||||
throw new BadRequestException("输入的站点编号有误或被禁用,请检查!");
|
||||
}
|
||||
SchBasePoint point = pointList.get(0);
|
||||
if (!StatusEnum.LOCK.code("无锁").equals(point.getLock_type())) {
|
||||
throw new BadRequestException("当前站点已绑定货架,请检查或解绑!");
|
||||
}
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("code", "200");
|
||||
result.put("status", "200");
|
||||
result.put("msg", "查询成功!");
|
||||
result.put("message", "查询成功!");
|
||||
result.put("site_code", point.getCode());
|
||||
return new ResponseEntity<>(result, HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ public interface IPmFormDataService extends IService<PmFormData> {
|
||||
|
||||
Page<PmFormDataDto> queryTree(FormDataQuery query, PageQuery page);
|
||||
|
||||
Page<PmFormDataDto> queryCtuOrderList(FormDataQuery query, PageQuery page);
|
||||
|
||||
/**
|
||||
* 查询ERP同步数据及库存
|
||||
* @param code
|
||||
|
||||
@@ -26,6 +26,8 @@ public interface PmFormDataMapper extends BaseMapper<PmFormData> {
|
||||
List<PmFormDataDto> queryTree(@Param("query")FormDataQuery query);
|
||||
|
||||
List<PmFormDataDto> queryTree2(@Param("query") FormDataQuery query);
|
||||
List<PmFormDataDto> queryCtuOrderList(@Param("query") FormDataQuery query);
|
||||
|
||||
|
||||
List<PmFormDataDto> selectChilds(List<String> parents);
|
||||
|
||||
|
||||
@@ -176,7 +176,28 @@
|
||||
#{parent_id}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="queryCtuOrderList" resultType="org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto">
|
||||
SELECT
|
||||
v.*,
|
||||
m.material_code,
|
||||
m.material_name,
|
||||
m.material_spec,
|
||||
m.single_weight,
|
||||
u.unit_name
|
||||
FROM
|
||||
md_pb_vehiclemater v
|
||||
LEFT JOIN
|
||||
md_me_materialbase m ON v.material_id = m.material_id
|
||||
LEFT JOIN
|
||||
bm_measure_unit u ON v.unit_id = u.unit_id
|
||||
<where>
|
||||
v.is_delete = '0'
|
||||
<if test="query.bill_code != null and query.bill_code != ''">
|
||||
AND v.prd_ppbom_no = #{query.bill_code}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY v.create_time DESC
|
||||
</select>
|
||||
<select id="queryOrderStockId" resultType="org.nl.wms.pda_manage.iostorage.server.dto.ReceiveBillData">
|
||||
SELECT d.unit_id,
|
||||
d.id AS dId,
|
||||
|
||||
@@ -16,6 +16,8 @@ import java.util.Map;
|
||||
public class FormDataQuery extends BaseQuery<PmFormData> {
|
||||
private String form_type;
|
||||
private String code;
|
||||
private String bill_code;
|
||||
private String site_code;
|
||||
private String search;
|
||||
private String parent_id;
|
||||
private String mater;
|
||||
|
||||
@@ -63,6 +63,11 @@ public class PmFormDataDto implements Serializable {
|
||||
* 业务单据状态
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 物料状态
|
||||
*/
|
||||
private String material_status;
|
||||
/**
|
||||
* 业务单据状态
|
||||
*/
|
||||
@@ -103,6 +108,11 @@ public class PmFormDataDto implements Serializable {
|
||||
* 数量
|
||||
*/
|
||||
private BigDecimal qty;
|
||||
/**
|
||||
* 冻结数量
|
||||
*/
|
||||
private BigDecimal frozen_qty;
|
||||
|
||||
/**
|
||||
* 库存数量
|
||||
*/
|
||||
@@ -141,7 +151,10 @@ public class PmFormDataDto implements Serializable {
|
||||
* 载具组盘id
|
||||
*/
|
||||
private String vehicle_id;
|
||||
|
||||
/**
|
||||
* 出库单据号
|
||||
*/
|
||||
private String prd_ppbom_no;
|
||||
|
||||
/**
|
||||
* 自定义表单字段
|
||||
|
||||
@@ -269,9 +269,9 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
public com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> queryTree(FormDataQuery query, PageQuery pageQuery) {
|
||||
Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
|
||||
page.setOrderBy("id DESC");
|
||||
List<PmFormDataDto> pmFormDataDtos = this.baseMapper.queryTree2(query);
|
||||
if (!CollectionUtils.isEmpty(pmFormDataDtos)) {
|
||||
handleFormDatas(pmFormDataDtos);
|
||||
List<PmFormDataDto> pmFormDataList = this.baseMapper.queryTree2(query);
|
||||
if (!CollectionUtils.isEmpty(pmFormDataList)) {
|
||||
handleFormDatas(pmFormDataList);
|
||||
} else {
|
||||
//根据单据编号查询Erp单据
|
||||
List<SyncFormMapping> list = iSyncFormMappingService.list(new LambdaQueryWrapper<SyncFormMapping>().eq(SyncFormMapping::getForm_type, query.getForm_type()));
|
||||
@@ -290,10 +290,33 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
}
|
||||
}
|
||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> dtoPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPages(), page.getPageSize(), page.getTotal());
|
||||
dtoPage.setRecords(pmFormDataDtos);
|
||||
dtoPage.setRecords(pmFormDataList);
|
||||
return dtoPage;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> queryCtuOrderList(FormDataQuery query, PageQuery pageQuery) {
|
||||
Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
|
||||
List<PmFormDataDto> pmFormDataList = this.baseMapper.queryCtuOrderList(query);
|
||||
pmFormDataList.forEach(r -> {
|
||||
if (r.getQty().compareTo(BigDecimal.ZERO)<=0) {
|
||||
r.setStatus("3");
|
||||
r.setMaterial_status("已出库");
|
||||
} else if (r.getFrozen_qty().compareTo(BigDecimal.ZERO) > 0) {
|
||||
r.setStatus("2");
|
||||
r.setMaterial_status("正在出库");
|
||||
} else {
|
||||
r.setStatus("1");
|
||||
r.setMaterial_status("未出库");
|
||||
}
|
||||
});
|
||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> dtoPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPages(), page.getPageSize(), page.getTotal());
|
||||
dtoPage.setRecords(pmFormDataList);
|
||||
return dtoPage;
|
||||
}
|
||||
|
||||
|
||||
private void handleFormDatas(List<PmFormDataDto> pmFormDataDtos) {
|
||||
List<String> parents = pmFormDataDtos.stream().map(PmFormDataDto::getId).collect(Collectors.toList());
|
||||
List<PmFormDataDto> childs = this.baseMapper.selectChilds(parents);
|
||||
|
||||
@@ -34,7 +34,7 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
|
||||
, String vehicle_code
|
||||
, String task_type
|
||||
, BigDecimal change_qty
|
||||
, Boolean growth);
|
||||
, Boolean growth,String point_code2);
|
||||
void deleteAll(Long[] ids);
|
||||
|
||||
Object pageQuery(StructattrQuery query, PageQuery page);
|
||||
@@ -53,7 +53,12 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
|
||||
|
||||
List<StructattrVechielDto> structVehicle(Map query);
|
||||
|
||||
List<StructattrVechielDto> getStructFromBillCode(List<String> billCodeList, String vehicleCode);
|
||||
|
||||
TableDataInfo<Map> getStructIvt(StructattrQuery query, PageQuery page);
|
||||
|
||||
List<StructAssignQty> getStructIvtAssign(List<String> materials, String stor_code);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
|
||||
List<StructattrVechielDto> collectVehicle(Map query);
|
||||
|
||||
List<StructattrVechielDto> structVehicle(Map query);
|
||||
List<StructattrVechielDto> getStructFromBillCode(List<String> billCodeList, String vehicleCode);
|
||||
|
||||
|
||||
List<Map> getStructIvt(@Param("query")StructattrQuery query, PageQuery pageQuery);
|
||||
|
||||
|
||||
@@ -97,6 +97,22 @@
|
||||
order by ${order_by}
|
||||
</if>
|
||||
</select>
|
||||
<select id="getStructFromBillCode" resultType="org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto">
|
||||
SELECT md_pb_vehicleMater.qty,
|
||||
md_pb_vehicleMater.frozen_qty,
|
||||
md_pb_vehicleMater.material_id,
|
||||
md_pb_vehicleMater.pcsn,
|
||||
md_pb_vehicleMater.id as vm_id,
|
||||
st_ivt_structattr.*
|
||||
FROM md_pb_vehicleMater
|
||||
LEFT JOIN st_ivt_structattr ON st_ivt_structattr.vehicle_code = md_pb_vehicleMater.vehicle_code
|
||||
WHERE md_pb_vehicleMater.vehicle_code = #{vehicleCode}
|
||||
and st_ivt_structattr.stor_code = 'CStockId'
|
||||
and md_pb_vehicleMater.prd_ppbom_no in
|
||||
<foreach collection="billCodeList" item="item" open="(" close=")" separator=",">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
<select id="structVehicle" resultType="org.nl.wms.stor_manage.struct.service.dto.StructattrVechielDto">
|
||||
SELECT md_pb_vehicleMater.qty,
|
||||
md_pb_vehicleMater.frozen_qty,
|
||||
|
||||
@@ -78,7 +78,7 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeStruct(String struct_code, String vehicle_code, String task_type, BigDecimal change_qty, Boolean growth) {
|
||||
public void changeStruct(String struct_code, String vehicle_code, String task_type, BigDecimal change_qty, Boolean growth, String point_code2) {
|
||||
String now = DateUtil.now();
|
||||
UpdateWrapper<StIvtStructattr> wrapper = new UpdateWrapper<StIvtStructattr>()
|
||||
.set("update_time", now)
|
||||
@@ -100,19 +100,19 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
List<StIvtStructivtflow> records = new ArrayList<>();
|
||||
StIvtStructattr attr = this.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", struct_code).select("stor_code"));
|
||||
//更新冻结数量
|
||||
|
||||
for (MdPbVehicleMater vehicleMater : vehicleMaters) {
|
||||
|
||||
String vehicleCode = vehicleMater.getVehicle_code();
|
||||
BigDecimal subtract = vehicleMater.getQty().subtract(vehicleMater.getFrozen_qty());
|
||||
//100-出50 = 50
|
||||
UpdateWrapper<MdPbVehicleMater> update = new UpdateWrapper<MdPbVehicleMater>()
|
||||
.set("frozen_qty", 0)
|
||||
.set("qty", subtract)//50
|
||||
.set("proc_inst_id", null)
|
||||
.set("update_time", now)
|
||||
.eq("id", vehicleMater.getId());
|
||||
if (vehicleCode.contains("T") && subtract.intValue()>0){
|
||||
//托盘和料箱拣选更新物料数量
|
||||
if (subtract.intValue() > 0) {
|
||||
//托盘拣选
|
||||
if (vehicleCode.contains("T")) {
|
||||
String groupId = vehicleMater.getGroup_id();
|
||||
MdGruopDick mst = iMdGruopDickService.getById(groupId);
|
||||
if (mst != null) {
|
||||
@@ -125,6 +125,13 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
update.set("need_pick", true);
|
||||
update.set("remark", "托盘" + vehicleMater.getVehicle_code() + "为人工拣选,请先拣选" + vehicleMater.getFrozen_qty() + ",在直接回库!");
|
||||
}
|
||||
update.set("qty", subtract);//50
|
||||
} else {
|
||||
//托盘整出需要扣库存,除了二楼料箱整出不扣库存,其他都扣库存
|
||||
if (!("2114").equals(point_code2)) {
|
||||
update.set("qty", subtract);
|
||||
}
|
||||
}
|
||||
vehicleMaterService.update(update);
|
||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||
record.setId(IdUtil.getStringId());
|
||||
@@ -144,7 +151,6 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
record.setVehicle_form_data(vehicleMater.getForm_data());
|
||||
record.setGrowth(growth);
|
||||
records.add(record);
|
||||
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(records)){
|
||||
structivtflowService.saveBatch(records);
|
||||
@@ -198,12 +204,14 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
return collectVehicle;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StructattrVechielDto> structVehicle(Map query) {
|
||||
List<StructattrVechielDto> structVehicle = this.baseMapper.structVehicle(query);
|
||||
return structVehicle;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TableDataInfo<Map> getStructIvt(StructattrQuery query, PageQuery pageQuery) {
|
||||
if (StringUtils.isNotBlank(query.getMaterial()) || StringUtils.isNotBlank(query.getPcsn())) {
|
||||
@@ -281,4 +289,9 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
|
||||
List<StructAssignQty> mst_detail = this.baseMapper.getStructIvtAssign(materials, stor_code);
|
||||
return mst_detail;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<StructattrVechielDto> getStructFromBillCode(List<String> billCodeList, String vehicleCode) {
|
||||
return this.baseMapper.getStructFromBillCode(billCodeList, vehicleCode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
package org.nl.wms.system_manage.service.quartz.task;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.BaseCode;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.config.lucene.LuceneAppender;
|
||||
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
|
||||
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorEmptyShelfTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.external_system.acs.service.WmsToAcsService;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2023/3/22 17:14
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ApplyShelfScheduleService {
|
||||
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
private SecondFloorEmptyShelfTask secondFloorEmptyShelfTask;
|
||||
private final String THIS_CLASS = ApplyShelfScheduleService.class.getName();
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
MDC.put("requestMethod", "TaskScheduleService#run");
|
||||
MDC.put("requestIp", "127.0.0.1");
|
||||
MDC.put("requestTime", DateUtil.now());
|
||||
LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId()));
|
||||
this.taskPublish(null, null, null, true);
|
||||
} finally {
|
||||
LuceneAppender.traceIdTL.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 空架搬运任务
|
||||
*
|
||||
* @param pointCode1 起点
|
||||
* @param pointCode2 终点
|
||||
* @param vehicleCode1 载具号
|
||||
* @param isAuto 是否自动生成
|
||||
*/
|
||||
@SneakyThrows
|
||||
public void taskPublish(String pointCode1, String pointCode2, String vehicleCode1, boolean isAuto) {
|
||||
RLock lock = redissonClient.getLock(THIS_CLASS);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
String startPointCode = pointCode1;
|
||||
String endPointCode = pointCode2;
|
||||
String vehicleCode = vehicleCode1;
|
||||
if (isAuto) {
|
||||
List<SchBasePoint> cxPointLists = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("二楼AGV产线对接位"),
|
||||
StatusEnum.LOCK.code("出库锁"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), "0");
|
||||
if (ObjectUtils.isNotEmpty(cxPointLists)) {
|
||||
startPointCode = cxPointLists.get(0).getCode();
|
||||
vehicleCode = cxPointLists.get(0).getVehicle_code();
|
||||
List<SchBasePoint> ctuPointList = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("二楼CTU货架对接位"),
|
||||
StatusEnum.LOCK.code("无锁"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), null
|
||||
);
|
||||
if (ObjectUtils.isNotEmpty(ctuPointList)) {
|
||||
endPointCode = ctuPointList.get(0).getCode();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
endPointCode = iSchBasePointService.checkEndPointTask(
|
||||
StatusEnum.REGION_INFO.code("二楼CTU货架对接位"),
|
||||
StatusEnum.LOCK.code("无锁"),
|
||||
StatusEnum.SORT_TYPE.code("升序"), null
|
||||
).get(0).getCode();
|
||||
}
|
||||
if (StringUtils.isNotBlank(startPointCode) && StringUtils.isNotBlank(endPointCode)) {
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("pointCode1", startPointCode);
|
||||
task.put("pointCode2", endPointCode);
|
||||
task.put("vehicleCode", vehicleCode);
|
||||
secondFloorEmptyShelfTask.createTask(task);
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error("定时任务执行异常:" + ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,10 +1,13 @@
|
||||
package org.nl.wms.system_manage.service.quartz.task;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
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 lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.TableDataInfo;
|
||||
@@ -12,6 +15,7 @@ import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.BaseCode;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.config.lucene.LuceneAppender;
|
||||
import org.nl.wms.dispatch_manage.task.handler.impl.SecondFloorAgvTransferTask;
|
||||
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.external_system.acs.service.WmsToAcsService;
|
||||
@@ -33,12 +37,15 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
public class TaskScheduleService {
|
||||
|
||||
|
||||
private ReentrantLock lock = new ReentrantLock();
|
||||
|
||||
@Autowired
|
||||
private ISchBaseTaskService iSchBaseTaskService;
|
||||
@Autowired
|
||||
private WmsToAcsService wmsToAcsService;
|
||||
@Autowired
|
||||
private SecondFloorAgvTransferTask secondFloorAgvTransferTask;
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
@@ -50,29 +57,22 @@ public class TaskScheduleService {
|
||||
} finally {
|
||||
LuceneAppender.traceIdTL.remove();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void taskPublish(){
|
||||
boolean islock = lock.tryLock();
|
||||
try {
|
||||
if (islock) {
|
||||
//定时任务,查询所有自动下发acs的任务
|
||||
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("is_send", true)
|
||||
.eq("status", StatusEnum.FORM_STATUS.code("生成")));
|
||||
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
//确认调度系统
|
||||
list.forEach(task -> {
|
||||
if (task.getAcs_type().equals(StatusEnum.ACS_TYPE.code("CTU任务"))) {
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("海康CTU"));
|
||||
} else {
|
||||
task.setAgv_system_type(StatusEnum.ACS_SYSTEM_TYPE.code("NDC"));
|
||||
}
|
||||
});
|
||||
List<String> taskCodes = list.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList());
|
||||
//定时任务,查询所有自动下发acs的任务与CTU出库完成的任务
|
||||
List<SchBaseTask> taskList = iSchBaseTaskService.list(
|
||||
new LambdaQueryWrapper<SchBaseTask>()
|
||||
.or(r -> r.eq(SchBaseTask::getIs_send, true).eq(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("生成")))
|
||||
.or(r -> r.eq(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("完成")).eq(SchBaseTask::getTask_step, "1")).eq(SchBaseTask::getTask_type, StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库")));
|
||||
List<SchBaseTask> createTaskList = taskList.stream().filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("生成"))).collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(createTaskList)) {
|
||||
List<String> taskCodes = createTaskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.toList());
|
||||
log.info("---执行定时222任务:-----taskPublish-----" + taskCodes);
|
||||
TableDataInfo response = wmsToAcsService.interationToExt(list, "createTask");
|
||||
TableDataInfo response = wmsToAcsService.interationToExt(createTaskList, "createTask");
|
||||
if (!response.getCode().equals(String.valueOf(HttpStatus.HTTP_OK))) {
|
||||
JSONArray results = (JSONArray) JSON.toJSON(response.getData());
|
||||
if (!CollectionUtils.isEmpty(results)) {
|
||||
@@ -92,6 +92,28 @@ public class TaskScheduleService {
|
||||
.in("task_code", taskCodes));
|
||||
}
|
||||
}
|
||||
List<SchBaseTask> finishTaskList = taskList.stream().filter(r -> r.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))).collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(finishTaskList)) {
|
||||
finishTaskList.stream().collect(Collectors.groupingBy(SchBaseTask::getGroup_code)).forEach((g, t) -> {
|
||||
String targetCode = g.split("_")[0];
|
||||
int targetSize = Integer.parseInt(g.substring(g.lastIndexOf("_") + 1));
|
||||
//任务组任务全部完成
|
||||
if (targetSize == t.size()) {
|
||||
//创建agv任务
|
||||
JSONObject taskJsonObject = new JSONObject();
|
||||
taskJsonObject.put("pointCode1", t.get(0).getPoint_code2());
|
||||
taskJsonObject.put("pointCode2", targetCode);
|
||||
taskJsonObject.put("pointCode3", t.get(0).getPoint_code3().substring(0, t.get(0).getPoint_code3().indexOf("-")));
|
||||
taskJsonObject.put("group_code", g);
|
||||
taskJsonObject.put("vehicleCode", t.stream().map(SchBaseTask::getVehicle_code).collect(Collectors.joining(",")));
|
||||
secondFloorAgvTransferTask.createTask(taskJsonObject);
|
||||
//更新agv任务已创建
|
||||
iSchBaseTaskService.update(new LambdaUpdateWrapper<SchBaseTask>()
|
||||
.set(SchBaseTask::getTask_step, "2")
|
||||
.in(SchBaseTask::getId, t.stream().map(SchBaseTask::getId).collect(Collectors.toList())));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}catch (Exception ex){
|
||||
log.error("定时任务执行异常:"+ex.getMessage());
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
style="width: 370px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.d_lock_type"
|
||||
v-for="item in statusEnum.LOCK"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
@@ -197,7 +197,11 @@
|
||||
<el-table-column prop="group_code" label="点位组编码" min-width="120" show-overflow-tooltip/>
|
||||
<el-table-column prop="point_location" label="位置" min-width="120" show-overflow-tooltip/>
|
||||
<el-table-column prop="point_type_name" label="点位类型"/>
|
||||
<el-table-column prop="lock_type_name" label="锁定类型"/>
|
||||
<el-table-column prop="lock_type" label="锁定类型" min-width="120" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
{{ statusEnum.label.LOCK[scope.row.lock_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="priority" label="优先级"/>
|
||||
<el-table-column prop="vehicle_code" label="载具编码" min-width="120" show-overflow-tooltip/>
|
||||
<el-table-column prop="form_data" label="表单数据" min-width="120" show-overflow-tooltip/>
|
||||
@@ -263,6 +267,7 @@ const defaultForm = {
|
||||
export default {
|
||||
name: 'Point',
|
||||
dicts: ['storagevehicle_type', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'point_location', 'product_area'],
|
||||
statusEnums: ['LOCK'],
|
||||
components: {pagination, crudOperation, rrOperation, udOperation},
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
cruds() {
|
||||
|
||||
@@ -9,24 +9,24 @@
|
||||
label-width="80px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item label="模型名称">
|
||||
<el-form-item label="物料或载具编号" label-width="120px">
|
||||
<el-input
|
||||
v-model="query.search"
|
||||
clearable
|
||||
style="width: 250px"
|
||||
size="mini"
|
||||
placeholder="请输入模型名称"
|
||||
placeholder="请输入物料或载具编号"
|
||||
prefix-icon="el-icon-search"
|
||||
class="filter-item"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="流程实例">
|
||||
<el-form-item label="流程ID">
|
||||
<el-input
|
||||
v-model="query.proc_inst_id"
|
||||
clearable
|
||||
style="width: 250px"
|
||||
size="mini"
|
||||
placeholder="请输入流程实例"
|
||||
placeholder="请输入流程实例ID"
|
||||
prefix-icon="el-icon-search"
|
||||
class="filter-item"
|
||||
/>
|
||||
@@ -42,6 +42,22 @@
|
||||
class="filter-item"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据状态" prop="status">
|
||||
<el-select
|
||||
v-model="query.status"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请选择"
|
||||
class="filter-item"
|
||||
style="width: 180px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in statusEnum.FLOW_STATUS"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<rrOperation />
|
||||
</el-form>
|
||||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<el-table-column prop="form_type" label="单据类型" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_id" label="物料id" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_name" label="物料名称" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_spec" label="物料规格" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_code" label="物料编号" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="pcsn" label="批次" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="qty" label="物料数量" show-overflow-tooltip />
|
||||
<el-table-column prop="assign_qty" label="拣选数量" show-overflow-tooltip />
|
||||
@@ -137,7 +137,7 @@
|
||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||
>
|
||||
<el-table-column prop="material_name" label="物料名称" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_spec" label="物料规格" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="material_code" label="物料编号" show-overflow-tooltip width="120" />
|
||||
<el-table-column prop="pcsn" label="批次" show-overflow-tooltip width="90" />
|
||||
<el-table-column prop="qty" label="物料数量" show-overflow-tooltip width="150" />
|
||||
<el-table-column show-overflow-tooltip prop="unit_id" label="单位" width="120">
|
||||
|
||||
@@ -11,21 +11,30 @@
|
||||
label-width="90px"
|
||||
label-suffix=":"
|
||||
>
|
||||
<el-form-item label="单据类型">
|
||||
<el-select
|
||||
v-model="query.form_type"
|
||||
filterable
|
||||
<el-form-item label="载具编号" label-width="120px">
|
||||
<el-input
|
||||
v-model="query.search"
|
||||
clearable
|
||||
style="width: 250px"
|
||||
size="mini"
|
||||
placeholder="请选择/搜索"
|
||||
placeholder="请输入载具编号"
|
||||
prefix-icon="el-icon-search"
|
||||
class="filter-item"
|
||||
disabled
|
||||
@change="crud.toQuery()"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单据状态" prop="status">
|
||||
<el-select
|
||||
v-model="query.status"
|
||||
clearable
|
||||
size="mini"
|
||||
placeholder="请选择"
|
||||
class="filter-item"
|
||||
style="width: 180px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in fromTypes"
|
||||
:key="item.value"
|
||||
:value="item.value"
|
||||
v-for="item in statusEnum.FORM_STATUS"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -195,7 +204,7 @@ const defaultForm = {
|
||||
biz_id: null,
|
||||
boz_code: null,
|
||||
biz_date: null,
|
||||
form_type: null,
|
||||
search: null,
|
||||
status: null,
|
||||
create_time: null,
|
||||
create_name: null,
|
||||
|
||||
Reference in New Issue
Block a user