Browse Source

rev:代码优化

master
涂强 1 month ago
parent
commit
fa98960659
  1. 4
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java
  2. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java
  3. 22
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java
  4. 40
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java
  5. 8
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java
  6. 43
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/sch/task/service/impl/WorkServiceImpl.java
  7. 13
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
  8. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java
  9. 13
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java
  10. 5
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java
  11. 3
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java
  12. 84
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml
  13. 2
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java
  14. 164
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java
  15. 16
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java
  16. 1
      acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java
  17. 2
      acs/nladmin-ui/src/views/acs/material/index.vue
  18. 2
      acs/nladmin-ui/src/views/acs/point/index.vue
  19. 37
      acs/nladmin-ui/src/views/acs/task/index.vue
  20. 2
      acs/nladmin-ui/src/views/acs/work/index.vue
  21. 14
      acs/nladmin-ui/src/views/system/param/index.vue

4
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java

@ -143,4 +143,8 @@ public interface AcsConfig {
* 选择A点还是B点
*/
String CHOOSE = "choose";
/**
* 标准桶重
*/
String WEIGHT = "weight";
}

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java

@ -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;

22
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java

@ -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())

40
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java

@ -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();

8
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java

@ -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();

43
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/sch/task/service/impl/WorkServiceImpl.java

@ -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

13
acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java

@ -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;
}

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java

@ -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);

13
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java

@ -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("查询所有点位")

5
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java

@ -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);
}

3
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java

@ -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();
}

84
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml

@ -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
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 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 != ''">
work.mfg_order_name = #{mfg_order_name}
w.mfg_order_name = #{mfg_order_name}
</if>
AND status != '2'
AND o.status = '1'
</where>
ORDER BY work.mfg_order_name asc ,work.seq_no asc
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 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.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
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 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>

2
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java

@ -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());

164
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java

@ -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("更新成功");
}
}

16
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java

@ -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;//是否启用
}

1
acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java

@ -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;

2
acs/nladmin-ui/src/views/acs/material/index.vue

@ -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

2
acs/nladmin-ui/src/views/acs/point/index.vue

@ -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>

37
acs/nladmin-ui/src/views/acs/task/index.vue

@ -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 => {

2
acs/nladmin-ui/src/views/acs/work/index.vue

@ -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,'物料重量')" />

14
acs/nladmin-ui/src/views/system/param/index.vue

@ -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,

Loading…
Cancel
Save