rev:代码优化
This commit is contained in:
@@ -143,4 +143,8 @@ public interface AcsConfig {
|
||||
* 选择A点还是B点
|
||||
*/
|
||||
String CHOOSE = "choose";
|
||||
/**
|
||||
* 标准桶重
|
||||
*/
|
||||
String WEIGHT = "weight";
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ import org.nl.acs.instruction.service.InstructionService;
|
||||
import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
|
||||
import org.nl.acs.log.service.DeviceExecuteLogService;
|
||||
import org.nl.acs.opc.DeviceAppService;
|
||||
import org.nl.acs.point.domain.AcsPoint;
|
||||
import org.nl.acs.point.service.IAcsPointService;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
@@ -29,6 +29,8 @@ import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
|
||||
import org.nl.acs.log.service.DeviceExecuteLogService;
|
||||
import org.nl.acs.monitor.DeviceStageMonitor;
|
||||
import org.nl.acs.opc.DeviceAppService;
|
||||
import org.nl.acs.point.domain.AcsPoint;
|
||||
import org.nl.acs.point.service.IAcsPointService;
|
||||
import org.nl.acs.task.service.TaskService;
|
||||
import org.nl.acs.task.service.dto.TaskDto;
|
||||
import org.nl.acs.task.service.impl.TaskServiceImpl;
|
||||
@@ -36,6 +38,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -58,6 +61,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
|
||||
DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class);
|
||||
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
|
||||
LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class);
|
||||
IAcsPointService acsPointService = SpringContextHolder.getBean(IAcsPointService.class);
|
||||
TwoAgvPhase twoAgvPhase = new TwoAgvPhase();
|
||||
|
||||
String error_code = "0";
|
||||
@@ -283,6 +287,15 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
|
||||
|
||||
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
|
||||
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
|
||||
if (ObjectUtil.isNotEmpty(inst)) {
|
||||
AcsPoint point = acsPointService.findByCode(inst.getStart_device_code());
|
||||
if (ObjectUtil.isNotEmpty(point)) {
|
||||
point.setPoint_status("0");
|
||||
acsPointService.update(point);
|
||||
} else {
|
||||
log.info("未找到指令号{}对应的终点设备", ikey);
|
||||
}
|
||||
}
|
||||
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code(this.getDeviceCode())
|
||||
@@ -407,6 +420,15 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
|
||||
}
|
||||
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
|
||||
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
|
||||
if (ObjectUtil.isNotEmpty(inst)) {
|
||||
AcsPoint point = acsPointService.findByCode(inst.getNext_device_code());
|
||||
if (ObjectUtil.isNotEmpty(point)) {
|
||||
point.setPoint_status("1");
|
||||
acsPointService.update(point);
|
||||
} else {
|
||||
log.info("未找到指令号{}对应的终点设备", ikey);
|
||||
}
|
||||
}
|
||||
data = ndcAgvService.sendAgvOneModeInst(phase, index, 0);
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code(this.getDeviceCode())
|
||||
|
||||
@@ -7,6 +7,10 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.AcsConfig;
|
||||
import org.nl.acs.data.domain.Materialbase;
|
||||
import org.nl.acs.data.service.IMaterialbaseService;
|
||||
import org.nl.acs.data.service.impl.MaterialbaseServiceImpl;
|
||||
import org.nl.acs.ext.wms.service.SpxToAcsService;
|
||||
import org.nl.acs.order.mapper.OrderMapper;
|
||||
import org.nl.acs.order.service.OrderDetailService;
|
||||
@@ -19,6 +23,7 @@ import org.nl.acs.product.service.IProductdtlService;
|
||||
import org.nl.acs.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -41,6 +46,12 @@ public class SpxToAcsServiceImpl implements SpxToAcsService {
|
||||
|
||||
@Autowired
|
||||
private OrderDetailService orderDetailService;
|
||||
@Autowired
|
||||
private IMaterialbaseService materialbaseService;
|
||||
@Autowired
|
||||
ISysParamService paramService;
|
||||
@Autowired
|
||||
private OrderService orderService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -77,6 +88,17 @@ public class SpxToAcsServiceImpl implements SpxToAcsService {
|
||||
return;
|
||||
}
|
||||
String productionNr = jsonObject.getString("ProductionNr");
|
||||
List<OrderDto> orderDtos = orderService.lambdaQuery()
|
||||
.eq(OrderDto::getMfg_order_name, productionNr)
|
||||
.list();
|
||||
if (orderDtos.size() > 0) {
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("ID", id);
|
||||
jo.put("message", "已存在对应工单");
|
||||
errArr.add(jo);
|
||||
return;
|
||||
}
|
||||
|
||||
String recipeName = jsonObject.getString("RecipeName");
|
||||
String recipeCode = jsonObject.getString("RecipeCode");
|
||||
Float quantity = jsonObject.getFloatValue("Quantity");
|
||||
@@ -87,9 +109,12 @@ public class SpxToAcsServiceImpl implements SpxToAcsService {
|
||||
if (lineID == null) {
|
||||
lineID = 0;
|
||||
}
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String startTime = jsonObject.getString("StartTime");
|
||||
JSONArray components = Optional.ofNullable(jsonObject.getJSONArray("Components")).orElse(new JSONArray());
|
||||
List<OrderDetailDto> list = new ArrayList<>();
|
||||
List<Materialbase> materiallist = new ArrayList<>();
|
||||
String weight = paramService.findByCode(AcsConfig.WEIGHT).getValue();
|
||||
// 工单明细表插入
|
||||
for (int j = 0; j < components.size(); j++) {
|
||||
JSONObject jo = components.getJSONObject(j);
|
||||
@@ -101,6 +126,20 @@ public class SpxToAcsServiceImpl implements SpxToAcsService {
|
||||
}
|
||||
String unit = jo.getString("Unit");
|
||||
OrderDetailDto orderDetailDto = new OrderDetailDto();
|
||||
Materialbase code = materialbaseService.findByCode(product_code);
|
||||
if (code == null) {
|
||||
Materialbase materialbase = new Materialbase();
|
||||
materialbase.setMaterial_code(product_code)
|
||||
.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId() + "")
|
||||
.setMaterial_name(componentName)
|
||||
.setBase_unit_id(unit)
|
||||
.setQty(Float.parseFloat(weight))
|
||||
.setCreate_id(Long.getLong(currentUserId))
|
||||
.setCreate_name(currentNickName)
|
||||
.setCreate_time(currentTime);
|
||||
|
||||
materiallist.add(materialbase);
|
||||
}
|
||||
orderDetailDto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId() + "")
|
||||
.setSeq_no(j + 1)
|
||||
.setMaterial_code(product_code)
|
||||
@@ -113,6 +152,7 @@ public class SpxToAcsServiceImpl implements SpxToAcsService {
|
||||
.setCreate_time(currentTime);
|
||||
list.add(orderDetailDto);
|
||||
}
|
||||
materialbaseService.saveBatch(materiallist);
|
||||
orderDetailService.saveBatch(list);
|
||||
// 插入工单表
|
||||
OrderDto dto = new OrderDto();
|
||||
|
||||
@@ -1176,8 +1176,12 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
//
|
||||
// } else
|
||||
//1=XZ 2=NDC
|
||||
ndcAgvService.deleteAgvInstToNDC(BeanUtil.copyProperties(entity, Instruction.class));
|
||||
flag = true;
|
||||
if (!StrUtil.isEmpty(entity.getAgv_jobno())) {
|
||||
ndcAgvService.deleteAgvInstToNDC(BeanUtil.copyProperties(entity, Instruction.class));
|
||||
flag = true;
|
||||
} else {
|
||||
flag = true;
|
||||
}
|
||||
if (flag) {
|
||||
String currentUsername = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.acs.sch.task.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -22,6 +23,7 @@ import org.nl.acs.sch.task.service.dao.Work;
|
||||
import org.nl.acs.sch.task.service.dao.mapper.WorkMapper;
|
||||
import org.nl.acs.sch.task.service.dto.WorkQuery;
|
||||
import org.nl.acs.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.acs.task.domain.Task;
|
||||
import org.nl.acs.task.service.TaskService;
|
||||
import org.nl.acs.task.service.dto.TaskDto;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
@@ -40,6 +42,7 @@ import java.util.stream.Collectors;
|
||||
@Slf4j
|
||||
@Service
|
||||
public class WorkServiceImpl extends ServiceImpl<WorkMapper, Work> implements WorkService {
|
||||
private static final List<String> VALID_STATUS = Arrays.asList("0", "1");
|
||||
@Autowired
|
||||
private WorkMapper workMapper;
|
||||
@Autowired
|
||||
@@ -160,6 +163,13 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper, Work> implements Wo
|
||||
if (StrUtil.equals(CommonFinalParam.FINISHED, work.getStatus())) {
|
||||
throw new BadRequestException("该配料任务已完成!");
|
||||
}
|
||||
List<Task> list = taskService.lambdaQuery()
|
||||
.in(Task::getTask_status, VALID_STATUS)
|
||||
.list();
|
||||
if (list.size()>0) {
|
||||
throw new BadRequestException("已存在正在执行中或者就绪的AGV任务!");
|
||||
}
|
||||
|
||||
String mfg_order_name = work.getMfg_order_name();
|
||||
OrderDto dto = orderService.findByCode(mfg_order_name);
|
||||
if (ObjectUtil.isEmpty(dto)){
|
||||
@@ -176,6 +186,25 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper, Work> implements Wo
|
||||
throw new BadRequestException("工单起点和终点未确认!");
|
||||
}
|
||||
|
||||
AcsPoint startPoint = acsPointService.lambdaQuery()
|
||||
.eq(AcsPoint::getPoint_code, "QZJYTW2")
|
||||
.one();
|
||||
AcsPoint nextPoint = acsPointService.lambdaQuery()
|
||||
.eq(AcsPoint::getPoint_code,taskDto.getNext_device_code())
|
||||
.one();
|
||||
if (ObjectUtil.isEmpty(nextPoint)) {
|
||||
throw new BadRequestException("终点设备不存在");
|
||||
}
|
||||
if (!nextPoint.getIs_used().booleanValue() || nextPoint.getPoint_status().equals(CommonFinalParam.ONE)) {
|
||||
throw new BadRequestException("下发任务失败的原因是:终点点位被禁用或者终点点位有货,请检查起点点位"+nextPoint.getPoint_code()+"的状态!");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("起点设备不存在");
|
||||
}
|
||||
if (!startPoint.getIs_used().booleanValue() || startPoint.getPoint_status().equals(CommonFinalParam.ZERO)) {
|
||||
throw new BadRequestException("下发任务失败的原因是:起点点位被禁用或者起点点位无货,请检查起点点位"+startPoint.getPoint_code()+"的状态!");
|
||||
}
|
||||
|
||||
taskDto.setStart_device_code("QZJYTW2");
|
||||
taskDto.setTask_type(CommonFinalParam.ONE);
|
||||
taskDto.setAgv_system_type(CommonFinalParam.TWO);
|
||||
@@ -194,16 +223,16 @@ public class WorkServiceImpl extends ServiceImpl<WorkMapper, Work> implements Wo
|
||||
}
|
||||
work.setRemain_num(work.getRemain_num() - 1);
|
||||
//当前数量为0,则修改状态为已完成
|
||||
if (work.getRemain_num() == 0) {
|
||||
work.setStatus(TaskStatus.FINISHED.getCode());
|
||||
}
|
||||
// if (work.getRemain_num() == 0) {
|
||||
// work.setStatus(TaskStatus.FINISHED.getCode());
|
||||
// }
|
||||
workMapper.updateById(work);
|
||||
List<Work> works = workMapper.selectList(Wrappers.lambdaQuery(Work.class).eq(Work::getMfg_order_name, mfg_order_name).eq(Work::getStatus, TaskStatus.FINISHED.getCode()));
|
||||
// 工单所有配料任务都完成,则工单状态改为已完成
|
||||
if (works.size() == dto.getDetail_count()) {
|
||||
dto.setStatus(CommonFinalParam.FINISHED);
|
||||
orderService.update(dto);
|
||||
}
|
||||
// if (works.size() == dto.getDetail_count()) {
|
||||
// dto.setStatus(CommonFinalParam.FINISHED);
|
||||
// orderService.update(dto);
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -783,7 +783,6 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finish(TaskIdAndStatusDTO taskIdAndStatus) {
|
||||
TaskDto entity = this.findById(taskIdAndStatus.getTask_id());
|
||||
TaskDto updateTask = this.findById(taskIdAndStatus.getTask_id());
|
||||
if (entity == null) {
|
||||
throw new BadRequestException(LangProcess.msg("error_sysAuth"));
|
||||
}
|
||||
@@ -802,14 +801,6 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
taskMapper.updateById(task);
|
||||
//移除任务缓存信息
|
||||
this.removeByCodeFromCache(entity.getTask_code());
|
||||
if (!TaskStatusEnum.FINISHED.getIndex().equals(updateTask.getTask_status())) {
|
||||
//反馈上位系统任务状态
|
||||
this.feedWmsTaskStatus(entity);
|
||||
//关闭仙工运单序列
|
||||
if (StrUtil.equals(task.getTask_type(), TaskTypeEnum.Standard_AGV_Task.getCode())) {
|
||||
this.markComplete(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -985,8 +976,8 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
log.info("未找到对应的AGV指令类型,任务号:" + acsTask.getTask_code() + ",task_type:" + acsTask.getTask_type());
|
||||
}
|
||||
instructionservice.create2(instdto);
|
||||
// acsTask.setTask_status(CommonFinalParam.ONE);
|
||||
// this.update(acsTask);
|
||||
acsTask.setTask_status(CommonFinalParam.ONE);
|
||||
this.update(acsTask);
|
||||
return instdto;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public class HandController {
|
||||
return new ResponseEntity<>(handService.confirm(whereJson),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log("确认配料作业")
|
||||
@Log("确认终点设备")
|
||||
@PostMapping(value = "/confirmZZDevice")
|
||||
public ResponseEntity<Object> confirmZZDevice(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(handService.confirmZZDevice(whereJson),HttpStatus.OK);
|
||||
|
||||
@@ -44,6 +44,19 @@ public class PdaController {
|
||||
return new ResponseEntity<>(pdaService.queryWorks(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryPoints")
|
||||
@Log("点位查询")
|
||||
public ResponseEntity<Object> queryPoints() {
|
||||
return new ResponseEntity<>(pdaService.queryPoints(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/operation")
|
||||
@Log("更新点位状态")
|
||||
public ResponseEntity<Object> operation(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaService.operation(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/queryDevices")
|
||||
@Log("查询所有点位")
|
||||
@ApiOperation("查询所有点位")
|
||||
|
||||
@@ -6,6 +6,7 @@ import org.nl.acs.sch.task.service.dao.Work;
|
||||
import org.nl.hand.service.dao.dto.PdaDto;
|
||||
import org.nl.hand.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.hand.service.vo.OrderVo;
|
||||
import org.nl.hand.service.vo.PointVo;
|
||||
import org.nl.hand.service.vo.WorkVo;
|
||||
|
||||
import java.util.List;
|
||||
@@ -27,6 +28,8 @@ public interface PdaService {
|
||||
|
||||
List<WorkVo> queryWorks(JSONObject whereJson);
|
||||
|
||||
List<PointVo> queryPoints();
|
||||
|
||||
List<WorkVo> getExcWorks();
|
||||
|
||||
PdaResponseVo sendWork(JSONObject whereJson);
|
||||
@@ -41,4 +44,6 @@ public interface PdaService {
|
||||
|
||||
PdaResponseVo pause(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo operation(JSONObject whereJson);
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.hand.service.dao.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.hand.service.vo.OrderVo;
|
||||
import org.nl.hand.service.vo.PointVo;
|
||||
import org.nl.hand.service.vo.WorkVo;
|
||||
|
||||
import java.util.List;
|
||||
@@ -13,4 +14,6 @@ public interface PdaMapper {
|
||||
List<WorkVo> getWorks(@Param("mfg_order_name") String mfg_order_name);
|
||||
|
||||
List<WorkVo> getExcWorks();
|
||||
|
||||
List<PointVo> getPoints();
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
Case status
|
||||
WHEN '0' THEN '就绪'
|
||||
WHEN '1' THEN '执行中'
|
||||
WHEN '4' THEN '暂停'
|
||||
ELSE ''
|
||||
END AS status,
|
||||
realstart_time,
|
||||
@@ -21,47 +22,68 @@
|
||||
order by realstart_time ASC
|
||||
</select>
|
||||
<select id="getWorks" resultType="org.nl.hand.service.vo.WorkVo">
|
||||
SELECT seq_no,
|
||||
work_code,
|
||||
mfg_order_name,
|
||||
material_code,
|
||||
material_name,
|
||||
qty,
|
||||
next_device_code,
|
||||
require_num,
|
||||
remain_num,
|
||||
Case status
|
||||
WHEN '0' THEN '就绪'
|
||||
WHEN '1' THEN '执行中'
|
||||
WHEN '2' THEN '完成'
|
||||
ELSE ''
|
||||
END AS status
|
||||
FROM work
|
||||
<where>
|
||||
<if test="mfg_order_name != null and mfg_order_name != ''">
|
||||
work.mfg_order_name = #{mfg_order_name}
|
||||
</if>
|
||||
AND status != '2'
|
||||
</where>
|
||||
ORDER BY work.mfg_order_name asc ,work.seq_no asc
|
||||
</select>
|
||||
<select id="getExcWorks" resultType="org.nl.hand.service.vo.WorkVo">
|
||||
SELECT seq_no,
|
||||
mfg_order_name,
|
||||
work_code,
|
||||
material_code,
|
||||
material_name,
|
||||
qty,
|
||||
next_device_code,
|
||||
require_num,
|
||||
remain_num,
|
||||
Case status
|
||||
SELECT w.seq_no,
|
||||
w.work_code,
|
||||
w.mfg_order_name,
|
||||
w.material_code,
|
||||
w.material_name,
|
||||
w.qty,
|
||||
w.resource_name,
|
||||
w.next_device_code,
|
||||
w.require_num,
|
||||
w.remain_num,
|
||||
Case w.status
|
||||
WHEN '0' THEN '就绪'
|
||||
WHEN '1' THEN '执行中'
|
||||
WHEN '2' THEN '完成'
|
||||
WHEN '4' THEN '暂停'
|
||||
ELSE ''
|
||||
END AS status
|
||||
FROM work
|
||||
where status = '1' ORDER BY work.mfg_order_name asc ,work.seq_no asc
|
||||
FROM work w
|
||||
LEFT JOIN acs_workorder o ON o.mfg_order_name = w.mfg_order_name
|
||||
<where>
|
||||
<if test="mfg_order_name != null and mfg_order_name != ''">
|
||||
w.mfg_order_name = #{mfg_order_name}
|
||||
</if>
|
||||
AND o.status = '1'
|
||||
</where>
|
||||
ORDER BY w.create_time desc,w.mfg_order_name asc ,w.seq_no asc
|
||||
</select>
|
||||
<select id="getExcWorks" resultType="org.nl.hand.service.vo.WorkVo">
|
||||
SELECT w.seq_no,
|
||||
w.mfg_order_name,
|
||||
w.work_code,
|
||||
w.material_code,
|
||||
w.material_name,
|
||||
w.qty,
|
||||
w.next_device_code,
|
||||
w.require_num,
|
||||
w.remain_num,
|
||||
Case w.status
|
||||
WHEN '0' THEN '就绪'
|
||||
WHEN '1' THEN '执行中'
|
||||
WHEN '2' THEN '完成'
|
||||
WHEN '4' THEN '暂停'
|
||||
ELSE ''
|
||||
END AS status
|
||||
FROM work w
|
||||
LEFT JOIN acs_workorder o ON o.mfg_order_name = w.mfg_order_name
|
||||
WHERE o.status = '1'
|
||||
ORDER BY w.mfg_order_name asc ,w.seq_no asc
|
||||
</select>
|
||||
<select id="getPoints" resultType="org.nl.hand.service.vo.PointVo">
|
||||
SELECT point_code,
|
||||
point_name,
|
||||
CASE point_status
|
||||
WHEN '0' THEN '无货'
|
||||
WHEN '1' THEN '有货'
|
||||
ELSE ''
|
||||
END AS point_status,
|
||||
CASE is_used
|
||||
WHEN '0' THEN '否'
|
||||
WHEN '1' THEN '是'
|
||||
ELSE ''
|
||||
END AS is_used
|
||||
FROM acs_point
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -44,7 +44,7 @@ public class HandServiceImpl implements HandService {
|
||||
@Override
|
||||
public PdaResponseVo confirm(JSONObject whereJson) {
|
||||
Work work = workService.findByCode(whereJson.getString("work_code"));
|
||||
if (work != null){
|
||||
if (work == null){
|
||||
return PdaResponseVo.pdaResultOk("配料作业不存在");
|
||||
}
|
||||
workService.confirm(work.getWork_id());
|
||||
|
||||
@@ -2,22 +2,35 @@ package org.nl.hand.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.common.base.CommonFinalParam;
|
||||
import org.nl.acs.data.domain.Materialbase;
|
||||
import org.nl.acs.data.service.IMaterialbaseService;
|
||||
import org.nl.acs.device.domain.Device;
|
||||
import org.nl.acs.device.service.DeviceService;
|
||||
import org.nl.acs.order.mapper.OrderDetailMapper;
|
||||
import org.nl.acs.order.mapper.OrderMapper;
|
||||
import org.nl.acs.order.service.OrderService;
|
||||
import org.nl.acs.order.service.dto.OrderDetailDto;
|
||||
import org.nl.acs.order.service.dto.OrderDto;
|
||||
import org.nl.acs.point.domain.AcsPoint;
|
||||
import org.nl.acs.point.service.IAcsPointService;
|
||||
import org.nl.acs.sch.task.service.WorkService;
|
||||
import org.nl.acs.sch.task.service.dao.Work;
|
||||
import org.nl.acs.sch.task.service.dao.mapper.WorkMapper;
|
||||
import org.nl.acs.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.acs.task.domain.Task;
|
||||
import org.nl.acs.task.service.TaskService;
|
||||
import org.nl.acs.task.service.dto.TaskDto;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.language.LangProcess;
|
||||
import org.nl.hand.service.PdaService;
|
||||
@@ -25,16 +38,25 @@ import org.nl.hand.service.dao.dto.PdaDto;
|
||||
import org.nl.hand.service.dao.mapper.PdaMapper;
|
||||
import org.nl.hand.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.hand.service.vo.OrderVo;
|
||||
import org.nl.hand.service.vo.PointVo;
|
||||
import org.nl.hand.service.vo.WorkVo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PdaServiceImpl implements PdaService {
|
||||
|
||||
private static final List<String> VALID_REGIONS = Arrays.asList("1", "2");
|
||||
private static final List<String> VALID_STATUS = Arrays.asList("0", "1");
|
||||
|
||||
@Autowired
|
||||
private OrderMapper orderMapper;
|
||||
@Autowired
|
||||
private OrderDetailMapper orderDetailMapper;
|
||||
@Autowired
|
||||
private PdaMapper pdaMapper;
|
||||
@Autowired
|
||||
@@ -45,6 +67,14 @@ public class PdaServiceImpl implements PdaService {
|
||||
private DeviceService deviceService;
|
||||
@Autowired
|
||||
private TaskService taskserver;
|
||||
@Autowired
|
||||
private IMaterialbaseService materialbaseService;
|
||||
@Autowired
|
||||
private WorkMapper workMapper;
|
||||
@Autowired
|
||||
private TaskService taskService;
|
||||
@Autowired
|
||||
private IAcsPointService acsPointService;
|
||||
|
||||
@Override
|
||||
public List<OrderVo> queryOrders() {
|
||||
@@ -54,22 +84,54 @@ public class PdaServiceImpl implements PdaService {
|
||||
@Override
|
||||
public PdaResponseVo startOrder(JSONObject whereJson) {
|
||||
String mfg_order_name = whereJson.getString("mfg_order_name");
|
||||
if (StrUtil.isEmpty(mfg_order_name)){
|
||||
return PdaResponseVo.pdaResultOk("工单号为空!");
|
||||
}
|
||||
OrderDto dto = orderService.findByCode(mfg_order_name);
|
||||
if (ObjectUtil.isNull(dto)){
|
||||
return PdaResponseVo.pdaResultOk("工单不存在");
|
||||
}
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||
dto.setStatus("1");
|
||||
dto.setRealstart_time(DateUtil.now());
|
||||
dto.setUpdate_optid(currentUserId);
|
||||
dto.setUpdate_optname(currentUsername);
|
||||
dto.setUpdate_time(DateUtil.now());
|
||||
orderService.updateById(dto);
|
||||
return PdaResponseVo.pdaResultOk("工单:[" + dto.getMfg_order_name() + "]已开始");
|
||||
OrderDto orderDto = orderService.findByCode(mfg_order_name);
|
||||
if (ObjectUtil.isNull(orderDto)&& "0".equals(orderDto.getStatus())) {
|
||||
throw new BadRequestException("工单状态不为开始");
|
||||
}
|
||||
orderDto.setStatus("1");
|
||||
orderDto.setRealstart_time(DateUtil.now());
|
||||
orderDto.setUpdate_optid(currentUserId);
|
||||
orderDto.setUpdate_optname(currentUsername);
|
||||
orderDto.setUpdate_time(DateUtil.now());
|
||||
//生成配料任务
|
||||
List<OrderDetailDto> list = orderDetailMapper.selectList(Wrappers.lambdaQuery(OrderDetailDto.class).eq(OrderDetailDto::getWorkorder_id, orderDto.getWorkorder_id()));
|
||||
Set<String> materialCodes = list.stream().map(OrderDetailDto::getMaterial_code).collect(Collectors.toSet());
|
||||
Map<String, Materialbase> materialbaseMap = materialbaseService.findByCodes(materialCodes);
|
||||
List<Work> works = new ArrayList<>();
|
||||
for (OrderDetailDto orderDetailDto : list) {
|
||||
String material_code = orderDetailDto.getMaterial_code();
|
||||
if (material_code == null) {
|
||||
throw new BadRequestException("物料编码不能为空");
|
||||
}
|
||||
Materialbase materialbase = materialbaseMap.get(material_code);
|
||||
if (materialbase == null) {
|
||||
throw new BadRequestException("不存在物料编码为" + material_code + "的物料!");
|
||||
}
|
||||
|
||||
int count = (int) Math.ceil((double) orderDetailDto.getProductin_qty() / materialbase.getQty());
|
||||
Work work = new Work();
|
||||
work.setWork_id(IdUtil.getSnowflake(1, 1).nextId() + "")
|
||||
.setWork_code(CodeUtil.getNewCode("WORK_CODE"))
|
||||
.setStatus("0")
|
||||
.setSeq_no(orderDetailDto.getSeq_no())
|
||||
.setMfg_order_name(orderDetailDto.getMfg_order_name())
|
||||
.setMaterial_code(orderDetailDto.getMaterial_code())
|
||||
.setMaterial_name(orderDetailDto.getMaterial_name())
|
||||
.setResource_name(orderDto.getResource_name())
|
||||
.setRequire_num(count)
|
||||
.setRemain_num(count)
|
||||
.setQty(orderDetailDto.getProductin_qty())
|
||||
.setCreate_by(currentUsername)
|
||||
.setCreate_time(DateUtil.now())
|
||||
.setUpdate_by(currentUsername)
|
||||
.setUpdate_time(DateUtil.now());
|
||||
works.add(work);
|
||||
}
|
||||
workService.saveBatch(works);
|
||||
orderMapper.updateById(orderDto);
|
||||
return PdaResponseVo.pdaResultOk("工单:[" + orderDto.getMfg_order_name() + "]已开始");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -131,6 +193,10 @@ public class PdaServiceImpl implements PdaService {
|
||||
}
|
||||
return pdaMapper.getWorks(whereJson.getString("mfg_order_name"));
|
||||
}
|
||||
@Override
|
||||
public List<PointVo> queryPoints() {
|
||||
return pdaMapper.getPoints();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WorkVo> getExcWorks() {
|
||||
@@ -177,6 +243,13 @@ public class PdaServiceImpl implements PdaService {
|
||||
}
|
||||
work.setStatus(TaskStatus.FINISHED.getCode());
|
||||
workService.updateById(work);
|
||||
OrderDto dto = orderService.findByCode(work.getMfg_order_name());
|
||||
List<Work> works = workMapper.selectList(Wrappers.lambdaQuery(Work.class).eq(Work::getMfg_order_name, work.getMfg_order_name()).eq(Work::getStatus, TaskStatus.FINISHED.getCode()));
|
||||
// 工单所有配料任务都完成,则工单状态改为已完成
|
||||
if (works.size() == dto.getDetail_count()) {
|
||||
dto.setStatus(CommonFinalParam.FINISHED);
|
||||
orderService.update(dto);
|
||||
}
|
||||
return PdaResponseVo.pdaResultOk("完成配料作业成功");
|
||||
}
|
||||
|
||||
@@ -184,9 +257,10 @@ public class PdaServiceImpl implements PdaService {
|
||||
public JSONArray queryAllPoints() {
|
||||
//查询所有设备
|
||||
List<Device> list = deviceService.lambdaQuery()
|
||||
.in(Device::getRegion, VALID_REGIONS)
|
||||
.list();
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
throw new BadRequestException(LangProcess.msg("error_no_regional"));
|
||||
throw new BadRequestException("未查询到设备!");
|
||||
}
|
||||
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(list));
|
||||
JSONArray result = new JSONArray();
|
||||
@@ -204,19 +278,41 @@ public class PdaServiceImpl implements PdaService {
|
||||
public Map<String, Object> callTask(PdaDto dto) {
|
||||
JSONArray errArr = new JSONArray();
|
||||
String start_device_code = dto.getStart_device_code();
|
||||
String next_device_code = dto.getNext_device_code();
|
||||
|
||||
if (StrUtil.isEmpty(start_device_code)) {
|
||||
throw new BadRequestException("起点不能为空");
|
||||
}
|
||||
if (StrUtil.isEmpty(next_device_code)) {
|
||||
throw new BadRequestException("终点不能为空");
|
||||
List<Task> list = taskService.lambdaQuery()
|
||||
.in(Task::getTask_status, VALID_STATUS)
|
||||
.list();
|
||||
if (list.size()>0) {
|
||||
throw new BadRequestException("已存在正在执行中或者就绪的AGV任务!");
|
||||
}
|
||||
|
||||
AcsPoint startPoint = acsPointService.lambdaQuery()
|
||||
.eq(AcsPoint::getPoint_code, start_device_code)
|
||||
.one();
|
||||
AcsPoint nextPoint = acsPointService.lambdaQuery()
|
||||
.eq(AcsPoint::getPoint_code,"QZJYTW1")
|
||||
.one();
|
||||
if (ObjectUtil.isEmpty(nextPoint)) {
|
||||
throw new BadRequestException("终点设备不存在");
|
||||
}
|
||||
if (!nextPoint.getIs_used().booleanValue() || nextPoint.getPoint_status().equals(CommonFinalParam.ONE)) {
|
||||
throw new BadRequestException("下发任务失败的原因是:终点点位被禁用或者终点点位有货,请检查起点点位"+nextPoint.getPoint_code()+"的状态!");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(startPoint)) {
|
||||
throw new BadRequestException("起点设备不存在");
|
||||
}
|
||||
if (!startPoint.getIs_used().booleanValue() || startPoint.getPoint_status().equals(CommonFinalParam.ZERO)) {
|
||||
throw new BadRequestException("下发任务失败的原因是:起点点位被禁用或者起点点位无货,请检查起点点位"+startPoint.getPoint_code()+"的状态!");
|
||||
}
|
||||
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("start_device_code", start_device_code);
|
||||
jo.put("next_device_code", next_device_code);
|
||||
jo.put("next_device_code", "QZJYTW1");
|
||||
jo.put("start_point_code", start_device_code);
|
||||
jo.put("next_point_code", next_device_code);
|
||||
jo.put("next_point_code", "QZJYTW1");
|
||||
jo.put("task_type", "1");
|
||||
jo.put("priority", "1");
|
||||
|
||||
@@ -251,4 +347,28 @@ public class PdaServiceImpl implements PdaService {
|
||||
workService.pause(work.getWork_id());
|
||||
return PdaResponseVo.pdaResultOk("暂停成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo operation(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
String type = whereJson.getString("type");//1:点位状态修改有货,0:点位状态修改无货
|
||||
if (StrUtil.isEmpty(point_code)) {
|
||||
return PdaResponseVo.pdaResultOk("点位为空");
|
||||
}
|
||||
if (StrUtil.isEmpty(type)) {
|
||||
return PdaResponseVo.pdaResultOk("类型为空");
|
||||
}
|
||||
AcsPoint point = acsPointService.findByCode(point_code);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
return PdaResponseVo.pdaResultOk("点位不存在");
|
||||
}
|
||||
if (type.equals("1")) {
|
||||
point.setPoint_status("1");
|
||||
}
|
||||
if (type.equals("0")) {
|
||||
point.setPoint_status("0");
|
||||
}
|
||||
acsPointService.updateById(point);
|
||||
return PdaResponseVo.pdaResultOk("更新成功");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.hand.service.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: tq
|
||||
* @Description: 点位查询
|
||||
* @Date: 2024/10/15
|
||||
*/
|
||||
@Data
|
||||
public class PointVo {
|
||||
private String point_code;//点位编码
|
||||
private String point_name;//点位名称
|
||||
private String point_status;//点位状态
|
||||
private String is_used;//是否启用
|
||||
}
|
||||
@@ -14,6 +14,7 @@ public class WorkVo {
|
||||
private String mfg_order_name;
|
||||
private String material_code;
|
||||
private String material_name;
|
||||
private String resource_name;
|
||||
private float qty;
|
||||
private String next_device_code;
|
||||
private int require_num;
|
||||
|
||||
@@ -120,6 +120,8 @@
|
||||
<!-- />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="create_name" label="创建人" />
|
||||
<el-table-column prop="create_time" label="创建时间" />
|
||||
<el-table-column prop="update_optname" label="修改人" />
|
||||
<el-table-column prop="update_time" label="修改时间" width="135" />
|
||||
<el-table-column
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
type="primary"
|
||||
icon="el-icon-circle-close"
|
||||
:disabled="crud.selections.length === 0"
|
||||
@click="changeUsed(crud.selections, false)"
|
||||
@click="changeUsed(crud.selections, true)"
|
||||
>
|
||||
禁用
|
||||
</el-button>
|
||||
|
||||
@@ -267,7 +267,6 @@
|
||||
<el-table-column type="selection" width="25" />
|
||||
<el-table-column v-if="false" prop="task_id" label="任务标识" />
|
||||
<el-table-column prop="task_code" label="任务号" />
|
||||
<el-table-column prop="vehicle_code" label="载具号" />
|
||||
<el-table-column prop="task_status" label="任务状态">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.task_status==='0' ">就绪</span>
|
||||
@@ -280,22 +279,24 @@
|
||||
<!-- <el-table-column prop="start_parent_code" label="父起点点位" min-width="100" show-overflow-tooltip />-->
|
||||
<el-table-column prop="next_point_code" label="终点" min-width="100" show-overflow-tooltip />
|
||||
<!-- <el-table-column prop="next_parent_code" label="父终点点位" min-width="100" show-overflow-tooltip />-->
|
||||
<el-table-column prop="start_point_code2" label="起点2" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="next_point_code2" label="终点2" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="put_device_code" label="放货位" min-width="100" show-overflow-tooltip />
|
||||
<!-- <el-table-column prop="start_point_code2" label="起点2" min-width="100" show-overflow-tooltip />-->
|
||||
<!-- <el-table-column prop="next_point_code2" label="终点2" min-width="100" show-overflow-tooltip />-->
|
||||
<!-- <el-table-column prop="put_device_code" label="放货位" min-width="100" show-overflow-tooltip />-->
|
||||
|
||||
<el-table-column prop="compound_task" label="复合任务">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.compound_task==='0' ">否</span>
|
||||
<span v-if="scope.row.compound_task==='1' ">是</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="compound_task_data" width="200" label="复合路线" />
|
||||
<el-table-column prop="matarial" label="物料" />
|
||||
<el-table-column prop="quantity" label="数量" />
|
||||
<!-- <el-table-column prop="compound_task" label="复合任务">-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <span v-if="scope.row.compound_task==='0' ">否</span>-->
|
||||
<!-- <span v-if="scope.row.compound_task==='1' ">是</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column prop="compound_task_data" width="200" label="复合路线" />-->
|
||||
<!-- <el-table-column prop="matarial" label="物料" />-->
|
||||
<!-- <el-table-column prop="quantity" label="数量" />-->
|
||||
<el-table-column prop="remark" label="备注" />
|
||||
<el-table-column prop="create_by" label="创建者" />
|
||||
<el-table-column prop="create_by" label="创建人" />
|
||||
<el-table-column prop="create_time" label="创建时间" width="135" />
|
||||
<el-table-column prop="update_by" label="更新人" width="135" />
|
||||
<el-table-column prop="update_time" label="更新时间" width="135" />
|
||||
<el-table-column v-permission="['admin','task:edit','task:del']" fixed="left" label="操作" width="80px" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown trigger="click" @command="handleCommand">
|
||||
@@ -428,6 +429,10 @@ export default {
|
||||
to_y: null,
|
||||
to_z: null
|
||||
},
|
||||
taskStatus: {
|
||||
task_status: '',
|
||||
task_id: null
|
||||
},
|
||||
rules: {
|
||||
start_point_code: [
|
||||
{ required: true, message: '起点不能为空', trigger: 'change' }
|
||||
@@ -474,7 +479,9 @@ export default {
|
||||
return true
|
||||
},
|
||||
finish(index, row) {
|
||||
crudTask.finish(row.task_id).then(res => {
|
||||
this.taskStatus.task_id = row.task_id
|
||||
this.taskStatus.task_status = index
|
||||
crudTask.finish(this.taskStatus).then(res => {
|
||||
this.crud.toQuery()
|
||||
this.crud.notify('完成成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
}).catch(err => {
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<el-table-column prop="seq_no" label="序号" :min-width="flexWidth('seq_no',crud.data,'序号')" />
|
||||
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
|
||||
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
|
||||
<el-table-column prop="next_device_code" label="站点编号" :min-width="flexWidth('next_device_code',crud.data,'终点编号')" />
|
||||
<el-table-column prop="next_device_code" label="终点编号" :min-width="flexWidth('next_device_code',crud.data,'终点编号')" />
|
||||
<el-table-column prop="require_num" label="配料桶数" :min-width="flexWidth('require_num',crud.data,'配料桶数')" />
|
||||
<el-table-column prop="remain_num" label="剩余桶数" :min-width="flexWidth('remain_num',crud.data,'剩余桶数')" />
|
||||
<el-table-column prop="qty" label="物料重量" :min-width="flexWidth('qty',crud.data,'物料重量')" />
|
||||
|
||||
@@ -19,6 +19,15 @@
|
||||
<el-form-item :label="$t('SysParam.table.name')" prop="name">
|
||||
<el-input v-model="form.name" style="width: 370px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="中文标题" prop="zh_name">
|
||||
<el-input v-model="form.zh_name" style="width: 370px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="英文标题" prop="en_name">
|
||||
<el-input v-model="form.en_name" style="width: 370px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="印尼标题" prop="in_name">
|
||||
<el-input v-model="form.in_name" style="width: 370px;" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('SysParam.table.values')" prop="value">
|
||||
<el-input v-model="form.value" style="width: 370px;" />
|
||||
</el-form-item>
|
||||
@@ -72,6 +81,9 @@ const defaultForm = {
|
||||
id: null,
|
||||
code: null,
|
||||
name: null,
|
||||
zh_name: null,
|
||||
in_name: null,
|
||||
en_name: null,
|
||||
value: null,
|
||||
remark: null,
|
||||
is_active: true
|
||||
@@ -81,7 +93,7 @@ export default {
|
||||
components: { pagination, crudOperation, udOperation },
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
cruds() {
|
||||
return CRUD({ title: 'menu.table_title.SystemParam', url: 'api/param', idField: 'id', sort: 'id,desc', crudMethod: { ...crudParam },
|
||||
return CRUD({ title: '系統参数', url: 'api/param', idField: 'id', sort: 'id,desc', crudMethod: { ...crudParam },
|
||||
optShow: {
|
||||
add: true,
|
||||
edit: true,
|
||||
|
||||
Reference in New Issue
Block a user