This commit is contained in:
zhengxuming
2025-08-05 17:58:36 +08:00
26 changed files with 555 additions and 325 deletions

View File

@@ -35,6 +35,10 @@
<!-- <version>1.1.7</version>--> <!-- <version>1.1.7</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<dependency> <dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency> <dependency>
<groupId>org.codehaus.groovy</groupId> <groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId> <artifactId>groovy-all</artifactId>
<version>3.0.13</version> <version>3.0.13</version>

View File

@@ -45,8 +45,8 @@ public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStorageve
public IPage<MdPbStoragevehicleinfo> queryAll(Map whereJson, PageQuery page) { public IPage<MdPbStoragevehicleinfo> queryAll(Map whereJson, PageQuery page) {
// 查询条件 // 查询条件
LambdaQueryWrapper<MdPbStoragevehicleinfo> queryWrapper = new QueryWrapper<MdPbStoragevehicleinfo>().lambda(); LambdaQueryWrapper<MdPbStoragevehicleinfo> queryWrapper = new QueryWrapper<MdPbStoragevehicleinfo>().lambda();
String search = MapUtil.getStr(whereJson, "storagevehicle_code"); String search = MapUtil.getStr(whereJson, "vehicle_code");
String storagevehicle_type = MapUtil.getStr(whereJson, "storagevehicle_type"); String storagevehicle_type = MapUtil.getStr(whereJson, "vehicle_type");
if (ObjectUtil.isNotEmpty(search)) { if (ObjectUtil.isNotEmpty(search)) {
queryWrapper.likeRight(MdPbStoragevehicleinfo::getStoragevehicle_code, search) queryWrapper.likeRight(MdPbStoragevehicleinfo::getStoragevehicle_code, search)

View File

@@ -148,7 +148,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
dto.setCreate_time(now); dto.setCreate_time(now);
Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<Sectattr>() Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<Sectattr>()
.eq(Sectattr::getSect_code, dto.getSect_id()) .eq(Sectattr::getSect_code, dto.getSect_code())
.eq(Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code(""))); .eq(Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("")));
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id()); BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id());
dto.setSect_id(sectattr.getSect_id()); dto.setSect_id(sectattr.getSect_id());

View File

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil; import org.nl.common.utils.CodeUtil;
@@ -29,9 +30,13 @@ import org.nl.wms.pm_manage.service.IPdmBdWorkorderService;
import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder; import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
import org.nl.wms.record_manage.service.IMdPbRegionMemberService; import org.nl.wms.record_manage.service.IMdPbRegionMemberService;
import org.nl.wms.record_manage.service.dao.MdPbRegionMember; import org.nl.wms.record_manage.service.dao.MdPbRegionMember;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.tasks.jb.JbUpAgvTask; import org.nl.wms.sch_manage.service.util.tasks.jb.JbUpAgvTask;
import org.nl.wms.system_manage.enums.TagNameEnum;
import org.nl.wms.system_manage.service.dict.ISysDictService; import org.nl.wms.system_manage.service.dict.ISysDictService;
import org.nl.wms.system_manage.service.dict.dao.Dict; import org.nl.wms.system_manage.service.dict.dao.Dict;
import org.nl.wms.system_manage.service.param.ISysParamService; import org.nl.wms.system_manage.service.param.ISysParamService;
@@ -47,6 +52,9 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMappe
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate; import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +62,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/** /**
* @Author: lyd * @Author: lyd
@@ -100,6 +110,10 @@ public class PdaJBServiceImpl implements PdaJBService {
private ISysParamService sysParamService; private ISysParamService sysParamService;
@Resource @Resource
private IMdPbRegionMemberService regionMemberService; private IMdPbRegionMemberService regionMemberService;
@Resource
private RedissonClient redissonClient;
@Resource
private ISchBaseTaskService taskService;
@Override @Override
public PdaResponse getOrderList(JSONObject whereJson) { public PdaResponse getOrderList(JSONObject whereJson) {
String flag = whereJson.getString("flag"); String flag = whereJson.getString("flag");
@@ -109,117 +123,129 @@ public class PdaJBServiceImpl implements PdaJBService {
return PdaResponse.requestParamOk(workorders); return PdaResponse.requestParamOk(workorders);
} }
@SneakyThrows
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PdaResponse callMaterial(JSONObject whereJson) { public PdaResponse callMaterial(JSONObject whereJson) {
log.info("解包叫料,请求参数:{}", whereJson); log.info("解包叫料,请求参数:{}", whereJson);
// workorder_id、area、point_code // workorder_id、area、point_code
String pointCode = whereJson.getString("point_code"); String pointCode = whereJson.getString("point_code");
String workorderId = whereJson.getString("workorder_id"); RLock lock = redissonClient.getLock(pointCode);
PdmBdWorkorder workorder = workorderService.getById(workorderId); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
if (ObjectUtil.isEmpty(workorder)) { try {
throw new BadRequestException("工单不存在!"); if (tryLock) {
} String workorderId = whereJson.getString("workorder_id");
if (!"1".equals(workorder.getWorkorder_status())) { PdmBdWorkorder workorder = workorderService.getById(workorderId);
throw new BadRequestException("该工单不是未生产,无法开工!"); if (ObjectUtil.isEmpty(workorder)) {
} throw new BadRequestException("工单不存在!");
// 出库的仓位 }
Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code()); if (!"1".equals(workorder.getWorkorder_status())) {
if (ObjectUtil.isEmpty(outStructAttr)) { throw new BadRequestException("该工单不是未生产,无法开工!");
throw new BadRequestException("仓位【" + workorder.getStruct_code() + "】不存在!"); }
} // 出库的仓位
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id()); Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code());
if (ObjectUtil.isEmpty(materialbase)) { if (ObjectUtil.isEmpty(outStructAttr)) {
throw new BadRequestException("物料" + workorder.getMaterial_id() + "】不存在!"); throw new BadRequestException("仓位" + workorder.getStruct_code() + "】不存在!");
} }
GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper<GroupPlate>() MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
.eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code()) if (ObjectUtil.isEmpty(materialbase)) {
.eq(GroupPlate::getStatus, "02")); throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
if (ObjectUtil.isEmpty(groupPlate)) { }
throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!"); GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
} .eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code())
// 1、创建出库单、明细、分配明细 .eq(GroupPlate::getStatus, "02"));
JSONObject insertInvObj = new JSONObject(); if (ObjectUtil.isEmpty(groupPlate)) {
JSONArray tableData = new JSONArray(); throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!");
JSONObject table = new JSONObject(); }
tableData.add(table); // 1、创建出库单、明细、分配明细
insertInvObj.put("stor_id", outStructAttr.getStor_id()); JSONObject insertInvObj = new JSONObject();
insertInvObj.put("stor_code", outStructAttr.getStor_code()); JSONArray tableData = new JSONArray();
insertInvObj.put("bill_status", "10"); JSONObject table = new JSONObject();
insertInvObj.put("total_qty", workorder.getPlan_weight()); tableData.add(table);
insertInvObj.put("detail_count", 1); insertInvObj.put("stor_id", outStructAttr.getStor_id());
insertInvObj.put("bill_type", "1012"); insertInvObj.put("stor_code", outStructAttr.getStor_code());
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd")); insertInvObj.put("bill_status", "10");
insertInvObj.put("tableData", tableData); insertInvObj.put("total_qty", workorder.getPlan_weight());
table.put("turnout_struct_code", outStructAttr.getStruct_code()); insertInvObj.put("detail_count", 1);
table.put("turnout_sect_code", outStructAttr.getSect_code()); insertInvObj.put("bill_type", "1012");
table.put("turnout_sect_name", outStructAttr.getSect_name()); insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
table.put("sect_id", outStructAttr.getSect_id()); insertInvObj.put("tableData", tableData);
table.put("struct_id", outStructAttr.getStruct_id()); table.put("turnout_struct_code", outStructAttr.getStruct_code());
table.put("group_id", groupPlate.getGroup_id()); table.put("turnout_sect_code", outStructAttr.getSect_code());
table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code()); table.put("turnout_sect_name", outStructAttr.getSect_name());
table.put("storagevehicle_type", workorder.getVehicle_type()); table.put("sect_id", outStructAttr.getSect_id());
table.put("material_id", materialbase.getMaterial_id()); table.put("struct_id", outStructAttr.getStruct_id());
table.put("pcsn", groupPlate.getPcsn()); table.put("group_id", groupPlate.getGroup_id());
table.put("qty", groupPlate.getQty()); table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
table.put("qty_unit_id", groupPlate.getQty_unit_id()); table.put("storagevehicle_type", workorder.getVehicle_type());
table.put("qty_unit_name", groupPlate.getQty_unit_name()); table.put("material_id", materialbase.getMaterial_id());
table.put("fronzen_qty", 0); table.put("pcsn", groupPlate.getPcsn());
table.put("status", "01"); table.put("qty", groupPlate.getQty());
table.put("material_code", materialbase.getMaterial_code()); table.put("qty_unit_id", groupPlate.getQty_unit_id());
table.put("material_name", materialbase.getMaterial_name()); table.put("qty_unit_name", groupPlate.getQty_unit_name());
table.put("material_spec", materialbase.getMaterial_spec()); table.put("fronzen_qty", 0);
String invId = outBillService.insertDtl(insertInvObj); table.put("status", "01");
// 调用手工分配 table.put("material_code", materialbase.getMaterial_code());
JSONObject param = new JSONObject(); table.put("material_name", materialbase.getMaterial_name());
JSONObject row = new JSONObject(); table.put("material_spec", materialbase.getMaterial_spec());
JSONArray rows = new JSONArray(); String invId = outBillService.insertDtl(insertInvObj);
rows.add(row); // 调用手工分配
param.put("rows", rows); JSONObject param = new JSONObject();
IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper<IOStorInvDtl>() JSONObject row = new JSONObject();
.eq(IOStorInvDtl::getIostorinv_id, invId)); JSONArray rows = new JSONArray();
param.put("row", dtl); rows.add(row);
row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code()); param.put("rows", rows);
row.put("pcsn", groupPlate.getPcsn()); IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper<IOStorInvDtl>()
row.put("qty", groupPlate.getQty()); .eq(IOStorInvDtl::getIostorinv_id, invId));
row.put("qty_unit_name", groupPlate.getQty_unit_name()); param.put("row", dtl);
row.put("frozen_qty", groupPlate.getFrozen_qty()); row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
row.put("struct_id", outStructAttr.getStruct_id()); row.put("pcsn", groupPlate.getPcsn());
row.put("struct_code", outStructAttr.getStruct_code()); row.put("qty", groupPlate.getQty());
row.put("struct_name", outStructAttr.getStruct_name()); row.put("qty_unit_name", groupPlate.getQty_unit_name());
row.put("sect_id", outStructAttr.getSect_id()); row.put("frozen_qty", groupPlate.getFrozen_qty());
row.put("sect_code", outStructAttr.getSect_code()); row.put("struct_id", outStructAttr.getStruct_id());
row.put("sect_name", outStructAttr.getSect_name()); row.put("struct_code", outStructAttr.getStruct_code());
row.put("material_code", groupPlate.getMaterial_code()); row.put("struct_name", outStructAttr.getStruct_name());
row.put("material_name", groupPlate.getMaterial_name()); row.put("sect_id", outStructAttr.getSect_id());
row.put("edit", true); row.put("sect_code", outStructAttr.getSect_code());
outBillService.manualDiv(param); row.put("sect_name", outStructAttr.getSect_name());
row.put("material_code", groupPlate.getMaterial_code());
row.put("material_name", groupPlate.getMaterial_name());
row.put("edit", true);
outBillService.manualDiv(param);
// 创建任务 // 创建任务
SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getParent_point_code, pointCode) .eq(SchBasePoint::getParent_point_code, pointCode)
.eq(SchBasePoint::getRegion_code, "CKQ")); .eq(SchBasePoint::getRegion_code, "CKQ"));
JSONObject taskParam = new JSONObject(); JSONObject taskParam = new JSONObject();
taskParam.put("order_id", workorderId); taskParam.put("order_id", workorderId);
taskParam.put("iostorinv_id", invId); taskParam.put("iostorinv_id", invId);
taskParam.put("point_code", outPoint.getPoint_code()); taskParam.put("point_code", outPoint.getPoint_code());
outBillService.allSetPoint(taskParam); outBillService.allSetPoint(taskParam);
// 3、工单状态修改设置实际开始时间 // 3、工单状态修改设置实际开始时间
workorder.setWorkorder_status("3"); workorder.setWorkorder_status("3");
workorder.setOperator(SecurityUtils.getCurrentNickName()); workorder.setOperator(SecurityUtils.getCurrentNickName());
workorder.setReal_weight(workorder.getPlan_weight()); workorder.setReal_weight(workorder.getPlan_weight());
workorder.setRealproducestart_date(DateUtil.now()); workorder.setRealproducestart_date(DateUtil.now());
workorder.setUpdate_time(DateUtil.now()); workorder.setUpdate_time(DateUtil.now());
workorder.setUpdate_id(SecurityUtils.getCurrentUserId()); workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
workorder.setUpdate_name(SecurityUtils.getCurrentNickName()); workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
workorderService.updateById(workorder); workorderService.updateById(workorder);
} else {
throw new BadRequestException("速度太快啦,稍后再试...");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return PdaResponse.requestOk(); return PdaResponse.requestOk();
} }
@Override @Override
public PdaResponse getWeight(JSONObject whereJson) { public PdaResponse getWeight(JSONObject whereJson) {
// todo: 调用acs获取
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String pointCode = whereJson.getString("point_code"); String pointCode = whereJson.getString("point_code");
String workorder_id = whereJson.getString("workorder_id"); String workorder_id = whereJson.getString("workorder_id");
@@ -227,6 +253,7 @@ public class PdaJBServiceImpl implements PdaJBService {
if (ObjectUtil.isEmpty(param)) { if (ObjectUtil.isEmpty(param)) {
throw new BadRequestException("请先定义 " + JB_STANDARD_ERROR + " 系统参数!"); throw new BadRequestException("请先定义 " + JB_STANDARD_ERROR + " 系统参数!");
} }
// todo: 调用acs获取
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
res.put("weight", "999.99"); res.put("weight", "999.99");
res.put("flag", "1"); res.put("flag", "1");
@@ -242,10 +269,12 @@ public class PdaJBServiceImpl implements PdaJBService {
return PdaResponse.requestParamOk(res); return PdaResponse.requestParamOk(res);
} }
@SneakyThrows
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public PdaResponse downMaterial(JSONObject whereJson) { public PdaResponse downMaterial(JSONObject whereJson) {
// 用任务组的方式下发任务3条任务 // 用任务组的方式下发任务3条任务
MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.PDA_JB_DOWN_MATERIAL.getTag());
log.info("解包下料,请求参数:{}", whereJson); log.info("解包下料,请求参数:{}", whereJson);
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
@@ -254,57 +283,79 @@ public class PdaJBServiceImpl implements PdaJBService {
String area = whereJson.getString("area"); String area = whereJson.getString("area");
// 设备 // 设备
String pointCode = whereJson.getString("point_code"); String pointCode = whereJson.getString("point_code");
BigDecimal weight = whereJson.getBigDecimal("weight"); RLock lock = redissonClient.getLock(pointCode);
String tpCode = whereJson.getString("tp_code"); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
String ltCode = whereJson.getString("lt_code"); try {
String workorderId = whereJson.getString("workorder_id"); if (tryLock) {
BigDecimal weight = whereJson.getBigDecimal("weight");
String tpCode = whereJson.getString("tp_code");
String ltCode = whereJson.getString("lt_code");
String workorderId = whereJson.getString("workorder_id");
// 存在任务就不继续
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, false)
.and(ll -> ll.like(SchBaseTask::getPoint_code1, pointCode).or()
.like(SchBaseTask::getPoint_code2, pointCode).or()
.like(SchBaseTask::getPoint_code3, pointCode).or()
.like(SchBaseTask::getPoint_code4, pointCode).or()));
if (list.size() > 0) {
throw new BadRequestException(pointCode + " 该点位已存在任务!");
}
PdmBdWorkorder workorder = workorderService.getById(workorderId);
if (ObjectUtil.isEmpty(workorder)) {
throw new BadRequestException("工单不存在!");
}
// 物料
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
if (ObjectUtil.isEmpty(materialbase)) {
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
}
// 0、创建组盘
GroupPlate groupPlate = new GroupPlate();
groupPlate.setGroup_id(IdUtil.getStringId());
groupPlate.setStoragevehicle_code(ltCode);
// 料桶类型根据工单,工单是根据点位
groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
groupPlate.setMaterial_id(materialbase.getMaterial_id());
groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
groupPlate.setQty(weight);
groupPlate.setQty_unit_id("11");
groupPlate.setQty_unit_name("kg");
groupPlate.setFrozen_qty(BigDecimal.ZERO);
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
groupPlate.setCreate_id(currentUserId);
groupPlate.setCreate_name(nickName);
groupPlate.setCreate_time(now);
groupplateService.save(groupPlate);
PdmBdWorkorder workorder = workorderService.getById(workorderId); Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
if (ObjectUtil.isEmpty(workorder)) { Sectattr sect = sectattrService.findByCode(dict.getPara1());
throw new BadRequestException("工单不存在!"); // 组装插入主表明细表的数据
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
String invId = inBillService.insertDtl(insertInvObj);
// 组织数据,调用分配货位
JSONObject divObj = buildDivStructData(sect, invId);
inBillService.divStruct(divObj);
// 一键设置,创建任务
// 组建参数
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
inBillService.divPoint(jsonMst);
// 工单完成
workorder.setWorkorder_status("5");
workorder.setRealproduceend_date(DateUtil.now());
workorderService.updateById(workorder);
}
} finally {
if (tryLock) {
lock.unlock();
} else {
throw new BadRequestException("速度太快啦,稍后再试...");
}
} }
// 物料
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
if (ObjectUtil.isEmpty(materialbase)) {
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
}
// 0、创建组盘
GroupPlate groupPlate = new GroupPlate();
groupPlate.setGroup_id(IdUtil.getStringId());
groupPlate.setStoragevehicle_code(ltCode);
// 料桶类型根据工单,工单是根据点位
groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
groupPlate.setMaterial_id(materialbase.getMaterial_id());
groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
groupPlate.setQty(weight);
groupPlate.setQty_unit_id("11");
groupPlate.setQty_unit_name("kg");
groupPlate.setFrozen_qty(BigDecimal.ZERO);
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
groupPlate.setCreate_id(currentUserId);
groupPlate.setCreate_name(nickName);
groupPlate.setCreate_time(now);
groupplateService.save(groupPlate);
Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
Sectattr sect = sectattrService.findByCode(dict.getPara1());
// 组装插入主表明细表的数据
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
String invId = inBillService.insertDtl(insertInvObj);
// 组织数据,调用分配货位
JSONObject divObj = buildDivStructData(sect, invId);
inBillService.divStruct(divObj);
// 一键设置,创建任务
// 组建参数
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
inBillService.divPoint(jsonMst);
// 工单完成
workorder.setWorkorder_status("5");
workorder.setRealproduceend_date(DateUtil.now());
workorderService.updateById(workorder);
return PdaResponse.requestOk(); return PdaResponse.requestOk();
} }

View File

@@ -76,6 +76,11 @@ public class SchBasePointController {
public ResponseEntity<Object> getPointList(@RequestBody(required = false) SchBasePoint region) { public ResponseEntity<Object> getPointList(@RequestBody(required = false) SchBasePoint region) {
return new ResponseEntity<>(schBasePointService.getPointList(region), HttpStatus.OK); return new ResponseEntity<>(schBasePointService.getPointList(region), HttpStatus.OK);
} }
@PostMapping("/getPointsByCode")
@Log("获取区域下拉框")
public ResponseEntity<Object> getPointsByCode(@RequestBody(required = false) String region) {
return new ResponseEntity<>(schBasePointService.getPointsByCode(region), HttpStatus.OK);
}
@PostMapping("/getPointList2") @PostMapping("/getPointList2")
@Log("获取区域下拉框") @Log("获取区域下拉框")
public ResponseEntity<Object> getPointList2(@RequestBody(required = false) SchBasePoint region) { public ResponseEntity<Object> getPointList2(@RequestBody(required = false) SchBasePoint region) {

View File

@@ -0,0 +1,30 @@
package org.nl.wms.sch_manage.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Author: lyd
* @Description: 任务完成枚举
* @Date: 2023/6/13
*/
@Getter
@AllArgsConstructor
public enum TaskFinishedTypeEnum {
/**
* ACS自动完成
*/
AUTO_ACS("1", "ACS自动完成"),
/**
* PC手动完成
*/
MANUAL_PC("2", "PC手动完成"),
/**
* PDA手持
*/
MANUAL_PDA("3", "PDA手持");
private final String code;
private final String description;
}

View File

@@ -133,4 +133,6 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus); List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus);
List<SchBasePoint> getPointList2(SchBasePoint region); List<SchBasePoint> getPointList2(SchBasePoint region);
List<SchBasePoint> getPointsByCode(String regions);
} }

View File

@@ -54,5 +54,5 @@ public interface ISchBaseTaskconfigService extends IService<SchBaseTaskconfig> {
List<SchBaseTaskconfig> getTaskConfigList(); List<SchBaseTaskconfig> getTaskConfigList();
SchBaseTaskconfig getTaskByConfigCode(String code);
} }

View File

@@ -185,10 +185,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
return this.list(); return this.list();
} }
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>() return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getRegion_code, region.getRegion_code()) .eq(SchBasePoint::getRegion_code, region.getRegion_code()));
//点位类型,根据传入的值是否为空增加判断
.eq(StringUtils.isNotBlank(region.getPoint_type()), SchBasePoint::getPoint_type, region.getPoint_type())
.eq(SchBasePoint::getIs_has_workder, true));
} }
@Override @Override
@@ -332,4 +329,14 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
.eq(SchBasePoint::getIs_has_workder, true)); .eq(SchBasePoint::getIs_has_workder, true));
} }
@Override
public List<SchBasePoint> getPointsByCode(String regions) {
if (ObjectUtil.isEmpty(regions)) {
return this.list();
}
List<String> collect = Arrays.stream(regions.split(",")).collect(Collectors.toList());
return pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>()
.in(SchBasePoint::getRegion_code, collect));
}
} }

View File

@@ -138,4 +138,10 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl<SchBaseTaskconfigM
return this.list(); return this.list();
} }
@Override
public SchBaseTaskconfig getTaskByConfigCode(String code) {
return getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, code));
}
} }

View File

@@ -70,7 +70,9 @@ public abstract class AbstractTask {
// 查询未执行下发的任务 // 查询未执行下发的任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())); .eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode())
.orderByAsc(SchBaseTask::getTask_group_id)
.orderByAsc(SchBaseTask::getTask_group_seq));
if (ObjectUtil.isEmpty(taskList)) { if (ObjectUtil.isEmpty(taskList)) {
return; return;
} }

View File

@@ -2,6 +2,7 @@ package org.nl.wms.sch_manage.service.util;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.Map; import java.util.Map;
/** /**
@@ -124,4 +125,10 @@ public class AcsTaskDto {
* 扩展属性 * 扩展属性
*/ */
Map<String, String> params; Map<String, String> params;
private String task_group_id;
private BigDecimal task_group_seq;
} }

View File

@@ -5,32 +5,35 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.system_manage.enums.TagNameEnum; import org.nl.wms.system_manage.enums.TagNameEnum;
import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.reflections.Reflections;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List; import java.util.List;
import java.util.Set;
@Slf4j @Slf4j
@Component @Component
@Order(value = 1)
public class AutoTask { public class AutoTask {
/** private static Set<Class<? extends AbstractTask>> subTypes;
* 任务服务
*/
@Autowired
private ISchBaseTaskService taskService;
/** // 类加载时候执行扫描
* 任务工厂服务 static {
*/ Reflections reflections = new Reflections("org.nl.wms.sch_manage.service.util.tasks");
@Autowired subTypes = reflections.getSubTypesOf(AbstractTask.class);
private TaskFactory taskFactory; }
@SneakyThrows @SneakyThrows
public void run() { public void run() {
@@ -44,17 +47,19 @@ public class AutoTask {
* 定时下发任务 * 定时下发任务
*/ */
private void sendTask() { private void sendTask() {
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() subTypes.forEach(clz -> {
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) // 调用AbstractAcsTask类的每个子类的schedule()方法
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()) try {
.orderByAsc(SchBaseTask::getTask_group_seq)); Object obj = SpringContextHolder.getBean(clz);
if (ObjectUtil.isEmpty(taskList)) { Method m = obj.getClass().getMethod("schedule");
return; m.invoke(obj);
} } catch (InvocationTargetException e) {
// 整理下发acs参数 e.printStackTrace();
for (SchBaseTask taskDao : taskList) { log.info("定时器执行失败:{}", e.getTargetException().getMessage());
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code()); } catch (Exception e) {
task.sendTaskOne(taskDao.getTask_id()); e.printStackTrace();
} log.info("定时器执行失败:{}", e.getMessage());
}
});
} }
} }

View File

@@ -3,15 +3,22 @@ package org.nl.wms.sch_manage.service.util.tasks.jb;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil; import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -26,8 +33,22 @@ import javax.annotation.Resource;
public class JbBackAgvTask extends AbstractTask { public class JbBackAgvTask extends AbstractTask {
@Resource @Resource
private ISchBaseTaskService taskService; private ISchBaseTaskService taskService;
@Resource
private ISchBaseTaskconfigService taskconfigService;
@Resource
private IInBillService inBillService;
@Resource
private IOStorInvDisMapper ioStorInvDisMapper;
@Override @Override
public String create(JSONObject json) { public String create(JSONObject json) {
// 获取任务配置的优先级
String priority= "1";
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(json.getString("task_type"));
if (ObjectUtil.isNotEmpty(json.getString("Priority"))) {
priority = json.getString("Priority");
} else if (ObjectUtil.isNotEmpty(taskconfig)){
priority = taskconfig.getPriority();
}
SchBaseTask task = new SchBaseTask(); SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId()); task.setTask_id(IdUtil.getStringId());
task.setTask_code(json.getString("TaskCode")); task.setTask_code(json.getString("TaskCode"));
@@ -41,7 +62,7 @@ public class JbBackAgvTask extends AbstractTask {
task.setVehicle_code2(json.getString("vehicle_code2")); task.setVehicle_code2(json.getString("vehicle_code2"));
task.setGroup_id(json.getString("group_id")); task.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString()); task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority")); task.setPriority(priority);
task.setCreate_id(SecurityUtils.getCurrentUserId()); task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now()); task.setCreate_time(DateUtil.now());
@@ -51,7 +72,23 @@ public class JbBackAgvTask extends AbstractTask {
@Override @Override
public AcsTaskDto sendAcsParam(String taskId) { public AcsTaskDto sendAcsParam(String taskId) {
return null; SchBaseTask taskDao = taskService.getById(taskId);
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
acsTaskDto.setTask_type(taskconfig.getTask_type());
acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
return acsTaskDto;
} }
@Override @Override
@@ -87,10 +124,6 @@ public class JbBackAgvTask extends AbstractTask {
this.finishTask(taskObj); this.finishTask(taskObj);
} }
private void finishTask(SchBaseTask taskObj) {
}
@Override @Override
public void cancel(String task_code) { public void cancel(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code); SchBaseTask taskObj = taskService.getByCode(task_code);
@@ -103,8 +136,29 @@ public class JbBackAgvTask extends AbstractTask {
this.cancelTask(taskObj); this.cancelTask(taskObj);
} }
private void cancelTask(SchBaseTask taskObj) { private void finishTask(SchBaseTask taskObj) {
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
inBillService.taskFinish(taskObj);
}
private void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode())
.set(SchBaseTask::getRemark, "已取消")
.eq(SchBaseTask::getTask_id, taskObj.getTask_id())
);
//分配表清除任务
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
.set(IOStorInvDis::getTask_id,null)
.set(IOStorInvDis::getPoint_code,null)
.set(IOStorInvDis::getIs_issued,0)
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
.eq(IOStorInvDis::getTask_id,taskObj.getTask_id())
);
} }
@Override @Override

View File

@@ -14,8 +14,10 @@ import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.enums.IOSEnum;
@@ -45,6 +47,8 @@ public class JbDownAgvTask extends AbstractTask {
private IOStorInvDisMapper ioStorInvDisMapper; private IOStorInvDisMapper ioStorInvDisMapper;
@Resource @Resource
private ISchBasePointService pointService; private ISchBasePointService pointService;
@Resource
private ISchBaseTaskconfigService taskconfigService;
@Override @Override
public String create(JSONObject param) { public String create(JSONObject param) {
// 改造:多条任务 // 改造:多条任务
@@ -80,7 +84,23 @@ public class JbDownAgvTask extends AbstractTask {
@Override @Override
public AcsTaskDto sendAcsParam(String taskId) { public AcsTaskDto sendAcsParam(String taskId) {
return null; SchBaseTask taskDao = taskService.getById(taskId);
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
acsTaskDto.setTask_type(taskconfig.getTask_type());
return acsTaskDto;
} }
@Override @Override
@@ -126,7 +146,7 @@ public class JbDownAgvTask extends AbstractTask {
private void finishTask(SchBaseTask taskObj) { private void finishTask(SchBaseTask taskObj) {
// 任务完成 // 任务完成
taskObj.setRemark("等待最后一条任务完成"); taskObj.setRemark("该任务已完成,等待最后一条任务完成后全部完成!");
if ("1".equals(taskObj.getTask_group_seq().toString())) { if ("1".equals(taskObj.getTask_group_seq().toString())) {
// 开盖设置成有盖 // 开盖设置成有盖
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2()); SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
@@ -142,9 +162,9 @@ public class JbDownAgvTask extends AbstractTask {
pointService.updateById(jbjPoint); pointService.updateById(jbjPoint);
} }
if ("3".equals(taskObj.getTask_group_seq().toString())) { if ("3".equals(taskObj.getTask_group_seq().toString())) {
// 开盖设置成有盖 // 开盖设置成空位
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2()); SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
khgPoint.setPoint_status("2"); khgPoint.setPoint_status("1");
khgPoint.setUpdate_time(DateUtil.now()); khgPoint.setUpdate_time(DateUtil.now());
pointService.updateById(khgPoint); pointService.updateById(khgPoint);
SchBaseTask task = new SchBaseTask(); SchBaseTask task = new SchBaseTask();

View File

@@ -14,8 +14,10 @@ import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint; import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch_manage.service.util.AbstractTask; import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto; import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.enums.IOSEnum;
@@ -50,6 +52,8 @@ public class JbUpAgvTask extends AbstractTask {
private IMdPbGroupplateService groupplateService; private IMdPbGroupplateService groupplateService;
@Resource @Resource
private IStructattrService structattrService; private IStructattrService structattrService;
@Resource
private ISchBaseTaskconfigService taskconfigService;
@Override @Override
public String create(JSONObject json) { public String create(JSONObject json) {
@@ -76,7 +80,21 @@ public class JbUpAgvTask extends AbstractTask {
@Override @Override
public AcsTaskDto sendAcsParam(String taskId) { public AcsTaskDto sendAcsParam(String taskId) {
return null; SchBaseTask taskDao = taskService.getById(taskId);
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
acsTaskDto.setExt_task_uuid(taskDao.getTask_id());
acsTaskDto.setTask_code(taskDao.getTask_code());
acsTaskDto.setStart_device_code(taskDao.getPoint_code1());
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
acsTaskDto.setTask_type(taskconfig.getTask_type());
return acsTaskDto;
} }
@Override @Override
@@ -160,6 +178,11 @@ public class JbUpAgvTask extends AbstractTask {
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code2()) .set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code2())
.set(Structattr::getOccupancy_state, 2) .set(Structattr::getOccupancy_state, 2)
.eq(Structattr::getStruct_code, taskObj.getPoint_code4())); .eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
} else {
// 仓位设置空
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getOccupancy_state, 1)
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
} }
} }

View File

@@ -21,12 +21,12 @@ public class SysParamConstant {
* ACS系统IP * ACS系统IP
*/ */
public final static String ACS_URL = "acs_url"; public final static String ACS_URL = "acs_url";
public final static String MES_URL = "mes_url";
/** /**
* ERP系统IP * ERP系统IP
*/ */
public final static String ERP_URL = "erp_url"; public final static String ERP_URL = "erp_url";
public final static String MES_URL = "mes_url";
} }

View File

@@ -19,7 +19,14 @@ public enum TagNameEnum {
* LMS系统 * LMS系统
*/ */
LMS("LMS系统"), LMS("LMS系统"),
/***
* 自动下发任务到ACS
*/
AUTO_TASK_SEND("自动下发任务到ACS"), AUTO_TASK_SEND("自动下发任务到ACS"),
/**
* 解包手持下料
*/
PDA_JB_DOWN_MATERIAL("解包手持下料"),
/** /**
* 标记符号 * 标记符号
*/ */

View File

@@ -769,6 +769,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
task.put("point_code2", emptyPoint.getPoint_code()); task.put("point_code2", emptyPoint.getPoint_code());
task.put("point_code3", fullPoint.getPoint_code()); task.put("point_code3", fullPoint.getPoint_code());
task.put("point_code4", structCode); task.put("point_code4", structCode);
task.put("vehicle_code", fullPoint.getVehicle_code());
task.put("vehicle_code2", emptyPoint.getStoragevehicle_code());
jbBackAgvTask.create(task); jbBackAgvTask.create(task);
} else if (StatusEnum.IOBILL_TYPE_IN.code("来料入库").equals(invObj.getBill_type())) { } else if (StatusEnum.IOBILL_TYPE_IN.code("来料入库").equals(invObj.getBill_type())) {
// 获取组盘信息 // 获取组盘信息

View File

@@ -980,6 +980,9 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) { if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) {
throw new BadRequestException("解包机输送线点位不存在或者存在任务!"); throw new BadRequestException("解包机输送线点位不存在或者存在任务!");
} }
if (!"1".equals(inPoint.getPoint_status())) {
throw new BadRequestException("原料进对接位状态不为空位,请检查确认!");
}
JSONObject task_form = new JSONObject(); JSONObject task_form = new JSONObject();
task_form.put("task_type", "JbUpAgvTask"); task_form.put("task_type", "JbUpAgvTask");
task_form.put("order_id", whereJson.getString("order_id")); task_form.put("order_id", whereJson.getString("order_id"));

View File

@@ -103,9 +103,9 @@
<logger name="org.hibernate" level="ERROR" additivity="true"> <logger name="org.hibernate" level="ERROR" additivity="true">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
</logger> </logger>
<logger name="org.quartz" level="ERROR" additivity="true"> <!-- <logger name="org.quartz" level="ERROR" additivity="true">-->
<appender-ref ref="asyncFileAppender"/> <!-- <appender-ref ref="asyncFileAppender"/>-->
</logger> <!-- </logger>-->
<logger name="com.google" level="ERROR" additivity="true"> <logger name="com.google" level="ERROR" additivity="true">
<appender-ref ref="asyncFileAppender"/> <appender-ref ref="asyncFileAppender"/>
</logger> </logger>

View File

@@ -133,7 +133,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="归属库区" prop="sect_id"> <el-form-item label="归属库区" prop="sect_code">
<el-cascader <el-cascader
v-model="form.cascader" v-model="form.cascader"
style="width: 200px;" style="width: 200px;"
@@ -308,7 +308,7 @@
<el-table-column prop="inv_code" label="锁定单据编码" width="150" /> <el-table-column prop="inv_code" label="锁定单据编码" width="150" />
<el-table-column prop="inv_type" label="锁定单据类型" width="150" :formatter="invtypeFormat" /> <el-table-column prop="inv_type" label="锁定单据类型" width="150" :formatter="invtypeFormat" />
<el-table-column prop="remark" label="备注" show-overflow-tooltip /> <el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column prop="occupancy_state" label="占用状态" show-overflow-tooltip > <el-table-column prop="occupancy_state" label="占用状态" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
{{ dict.label.occupancy_state[scope.row.occupancy_state] }} {{ dict.label.occupancy_state[scope.row.occupancy_state] }}
</template> </template>

View File

@@ -39,6 +39,13 @@ export function getPointList(data) {
data data
}) })
} }
export function getPointsByCode(data) {
return request({
url: 'api/schBasePoint/getPointsByCode',
method: 'post',
data
})
}
export function getPointList2(data) { export function getPointList2(data) {
return request({ return request({
url: 'api/schBasePoint/getPointList2', url: 'api/schBasePoint/getPointList2',
@@ -55,4 +62,4 @@ export function changeLock(data) {
}) })
} }
export default { add, edit, del, changeUsed, getPointList, getPointList2, changeLock } export default { add, edit, del, changeUsed, getPointList, getPointsByCode, getPointList2, changeLock }

View File

@@ -136,6 +136,20 @@
style="width: 240px;" style="width: 240px;"
/> />
</el-form-item> </el-form-item>
<el-form-item label="任务方向" prop="task_direction">
<el-select
v-model="form.task_direction"
size="mini"
placeholder="任务方向"
style="width: 240px;"
>
<el-option
v-for="item in dict.task_direction"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="起点区域"> <el-form-item label="起点区域">
<el-select v-model="form.start_region_strs" multiple placeholder="请选择" style="width: 240px;"> <el-select v-model="form.start_region_strs" multiple placeholder="请选择" style="width: 240px;">
<el-option <el-option
@@ -162,68 +176,54 @@
<el-form-item label="终点前缀"> <el-form-item label="终点前缀">
<el-input v-model="form.next_region_pre" style="width: 240px;" /> <el-input v-model="form.next_region_pre" style="width: 240px;" />
</el-form-item> </el-form-item>
<el-form-item label="任务方向" prop="task_direction"> <!-- <el-form-item label="是否校验工单">-->
<el-select <!-- <el-radio-group v-model="form.is_check_workorder" style="width: 240px">-->
v-model="form.task_direction" <!-- <el-radio :label="true">是</el-radio>-->
size="mini" <!-- <el-radio :label="false">否</el-radio>-->
placeholder="任务方向" <!-- </el-radio-group>-->
style="width: 240px;" <!-- </el-form-item>-->
> <!-- <el-form-item label="是否判断起点锁">-->
<el-option <!-- <el-radio-group v-model="form.is_check_start_lock" style="width: 240px">-->
v-for="item in dict.task_direction" <!-- <el-radio :label="true">是</el-radio>-->
:label="item.label" <!-- <el-radio :label="false">否</el-radio>-->
:value="item.value" <!-- </el-radio-group>-->
/> <!-- </el-form-item>-->
</el-select> <!-- <el-form-item label="是否立即创建">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_immediate_create" style="width: 240px">-->
<el-form-item label="是否校验工单"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_check_workorder" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group> <!-- <el-form-item label="是否判断终点锁">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_check_next_lock" style="width: 240px">-->
<el-form-item label="是否判断起点锁"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_check_start_lock" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group> <!-- <el-form-item label="是否起点自动">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_start_auto" style="width: 240px">-->
<el-form-item label="是否立即创建"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_immediate_create" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group> <!-- <el-form-item label="是否终点自动">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_next_auto" style="width: 240px">-->
<el-form-item label="是否判断终点锁"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_check_next_lock" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group> <!-- <el-form-item label="是否锁定起点">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_lock_start" style="width: 240px">-->
<el-form-item label="是否起点自动"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_start_auto" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group> <!-- <el-form-item label="是否锁定终点">-->
</el-form-item> <!-- <el-radio-group v-model="form.is_lock_next" style="width: 240px">-->
<el-form-item label="是否终点自动"> <!-- <el-radio :label="true">是</el-radio>-->
<el-radio-group v-model="form.is_next_auto" style="width: 240px"> <!-- <el-radio :label="false">否</el-radio>-->
<el-radio :label="true">是</el-radio> <!-- </el-radio-group>-->
<el-radio :label="false">否</el-radio> <!-- </el-form-item>-->
</el-radio-group>
</el-form-item>
<el-form-item label="是否锁定起点">
<el-radio-group v-model="form.is_lock_start" style="width: 240px">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否锁定终点">
<el-radio-group v-model="form.is_lock_next" style="width: 240px">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="false" label="生成任务的请求参数"> <el-form-item v-if="false" label="生成任务的请求参数">
<el-input v-model="form.request_param" style="width: 240px;" /> <el-input v-model="form.request_param" style="width: 240px;" />
</el-form-item> </el-form-item>
@@ -236,17 +236,17 @@
<el-radio :label="false">否</el-radio> <el-radio :label="false">否</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="路由编码" prop="route_plan_code"> <!-- <el-form-item label="路由编码" prop="route_plan_code">-->
<el-input v-model="form.route_plan_code" style="width: 240px;" /> <!-- <el-input v-model="form.route_plan_code" style="width: 240px;" />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="未完成通知时间" prop="unfinish_notify_time"> <!-- <el-form-item label="未完成通知时间" prop="unfinish_notify_time">-->
<el-input-number <!-- <el-input-number-->
v-model.number="form.unfinish_notify_time" <!-- v-model.number="form.unfinish_notify_time"-->
:min="0" <!-- :min="0"-->
:max="999" <!-- :max="999"-->
style="width: 240px;" <!-- style="width: 240px;"-->
/> <!-- />-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item v-if="false" label="sql配置"> <el-form-item v-if="false" label="sql配置">
<el-input v-model="form.sql_param" style="width: 240px;" /> <el-input v-model="form.sql_param" style="width: 240px;" />
</el-form-item> </el-form-item>
@@ -279,7 +279,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="task_name" label="任务名字" :min-width="flexWidth('task_name',crud.data,'任务名字')" /> <el-table-column prop="task_name" label="任务名字" :min-width="flexWidth('task_name',crud.data,'任务名字')" />
<!-- <el-table-column prop="task_type" label="任务类型" :min-width="flexWidth('task_type',crud.data,'任务类型', 20)" > <!-- <el-table-column prop="task_type" label="任务类型" :min-width="flexWidth('task_type',crud.data,'任务类型', 20)" >
<template slot-scope="scope"> <template slot-scope="scope">
{{ dict.label.task_type[scope.row.task_type] }} {{ dict.label.task_type[scope.row.task_type] }}
</template> </template>
@@ -305,51 +305,51 @@
<el-table-column prop="start_point_pre" label="起点前缀" :min-width="flexWidth('start_point_pre',crud.data,'起点前缀')" /> <el-table-column prop="start_point_pre" label="起点前缀" :min-width="flexWidth('start_point_pre',crud.data,'起点前缀')" />
<el-table-column prop="next_region_pre" label="终点前缀" :min-width="flexWidth('next_region_pre',crud.data,'终点前缀')" /> <el-table-column prop="next_region_pre" label="终点前缀" :min-width="flexWidth('next_region_pre',crud.data,'终点前缀')" />
<el-table-column prop="route_plan_code" label="路由编码" :min-width="flexWidth('route_plan_code',crud.data,'终点前缀')" /> <el-table-column prop="route_plan_code" label="路由编码" :min-width="flexWidth('route_plan_code',crud.data,'终点前缀')" />
<el-table-column prop="task_direction" label="任务方向" :min-width="flexWidth('task_direction',crud.data,'终点前缀')" > <el-table-column prop="task_direction" label="任务方向" :min-width="flexWidth('task_direction',crud.data,'终点前缀')">
<template slot-scope="scope"> <template slot-scope="scope">
{{ dict.label.task_direction[scope.row.task_direction] }} {{ dict.label.task_direction[scope.row.task_direction] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="is_check_workorder" label="是否校验工单" :min-width="flexWidth('is_check_workorder',crud.data,'是否校验工单')"> <!-- <el-table-column prop="is_check_workorder" label="是否校验工单" :min-width="flexWidth('is_check_workorder',crud.data,'是否校验工单')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_check_workorder?'是':'否' }} <!-- {{ scope.row.is_check_workorder?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_check_start_lock" label="是否判断起点锁" :min-width="flexWidth('is_check_start_lock',crud.data,'是否判断起点锁')"> <!-- <el-table-column prop="is_check_start_lock" label="是否判断起点锁" :min-width="flexWidth('is_check_start_lock',crud.data,'是否判断起点锁')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_check_start_lock?'是':'否' }} <!-- {{ scope.row.is_check_start_lock?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_immediate_create" label="是否立即创建" :min-width="flexWidth('is_immediate_create',crud.data,'是否立即创建')"> <!-- <el-table-column prop="is_immediate_create" label="是否立即创建" :min-width="flexWidth('is_immediate_create',crud.data,'是否立即创建')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_immediate_create?'是':'否' }} <!-- {{ scope.row.is_immediate_create?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_check_next_lock" label="是否判断终点锁" :min-width="flexWidth('is_check_next_lock',crud.data,'是否判断终点锁')"> <!-- <el-table-column prop="is_check_next_lock" label="是否判断终点锁" :min-width="flexWidth('is_check_next_lock',crud.data,'是否判断终点锁')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_check_next_lock?'是':'否' }} <!-- {{ scope.row.is_check_next_lock?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_start_auto" label="是否起点自动" :min-width="flexWidth('is_start_auto',crud.data,'是否起点自动')"> <!-- <el-table-column prop="is_start_auto" label="是否起点自动" :min-width="flexWidth('is_start_auto',crud.data,'是否起点自动')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_start_auto?'是':'否' }} <!-- {{ scope.row.is_start_auto?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_next_auto" label="是否终点自动" :min-width="flexWidth('is_next_auto',crud.data,'是否终点自动')"> <!-- <el-table-column prop="is_next_auto" label="是否终点自动" :min-width="flexWidth('is_next_auto',crud.data,'是否终点自动')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_next_auto?'是':'否' }} <!-- {{ scope.row.is_next_auto?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_lock_start" label="是否锁定起点" :min-width="flexWidth('is_lock_start',crud.data,'是否锁定起点')"> <!-- <el-table-column prop="is_lock_start" label="是否锁定起点" :min-width="flexWidth('is_lock_start',crud.data,'是否锁定起点')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_lock_start?'是':'否' }} <!-- {{ scope.row.is_lock_start?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="is_lock_next" label="是否锁定终点" :min-width="flexWidth('is_lock_next',crud.data,'是否锁定终点')"> <!-- <el-table-column prop="is_lock_next" label="是否锁定终点" :min-width="flexWidth('is_lock_next',crud.data,'是否锁定终点')">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
{{ scope.row.is_lock_next?'是':'否' }} <!-- {{ scope.row.is_lock_next?'是':'否' }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column v-if="false" prop="request_param" label="生成任务的请求参数" :min-width="flexWidth('request_param',crud.data,'生成任务的请求参数')" /> <el-table-column v-if="false" prop="request_param" label="生成任务的请求参数" :min-width="flexWidth('request_param',crud.data,'生成任务的请求参数')" />
<el-table-column v-if="false" prop="response_param" label="下发任务的请求参数" :min-width="flexWidth('response_param',crud.data,'下发任务的请求参数')" /> <el-table-column v-if="false" prop="response_param" label="下发任务的请求参数" :min-width="flexWidth('response_param',crud.data,'下发任务的请求参数')" />
<el-table-column v-if="false" prop="is_group_congrol_issue_seq" label="是否按组控制下发顺序" :min-width="flexWidth('is_group_congrol_issue_seq',crud.data,'是否按组控制下发顺序')"> <el-table-column v-if="false" prop="is_group_congrol_issue_seq" label="是否按组控制下发顺序" :min-width="flexWidth('is_group_congrol_issue_seq',crud.data,'是否按组控制下发顺序')">

View File

@@ -259,13 +259,9 @@ export default {
this.sects = res.content this.sects = res.content
}) })
const area_type = 'YLXCQ' const area_type = 'RKQ,YLXCQ'
crudPoint.getPointsByCode(area_type).then(res => {
// 点位类型,因为卸货区的点位类型(出库区、入库区)会变动,因需要增加点位类型字段进行判断 this.pointList = res
// 1-入库区2-出库区
const region_type = '1'
crudPoint.getPointList({ 'region_code': area_type, 'region_type': region_type }).then(res => {
this.pointlist = res
}) })
}, },
toDelete(data) { toDelete(data) {

View File

@@ -161,6 +161,7 @@
<el-select <el-select
v-model="form2.point_code" v-model="form2.point_code"
clearable clearable
filterable
placeholder="请选择" placeholder="请选择"
class="filter-item" class="filter-item"
style="width: 150px;" style="width: 150px;"
@@ -323,12 +324,10 @@ export default {
crudSectattr.getSect({ 'stor_id': this.storId }).then(res => { crudSectattr.getSect({ 'stor_id': this.storId }).then(res => {
this.sects = res.content this.sects = res.content
}) })
const area_type = 'YLXCQ'
// 点位类型,因为卸货区的点位类型(出库区、入库区)会变动,因需要增加点位类型字段进行判断 const area_type = 'CKQ,YLXCQ'
// 1-入库区2-出库区 crudPoint.getPointsByCode(area_type).then(res => {
const region_type = '2' this.pointList = res
crudPoint.getPointList({ 'region_code': area_type, 'region_type': region_type }).then(res => {
this.pointlist = res
}) })
}, },
close() { close() {