add:新增手持功能
This commit is contained in:
@@ -32,13 +32,18 @@ public class TableDataInfo<T> implements Serializable {
|
||||
/**
|
||||
* 消息状态码
|
||||
*/
|
||||
private int code;
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 消息内容
|
||||
*/
|
||||
private String msg;
|
||||
|
||||
/**
|
||||
* 反馈数据
|
||||
*/
|
||||
private Object data;
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
@@ -52,7 +57,7 @@ public class TableDataInfo<T> implements Serializable {
|
||||
|
||||
public static <T> TableDataInfo<T> build(IPage<T> page) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setContent(page.getRecords());
|
||||
rspData.setTotalElements(page.getTotal());
|
||||
@@ -61,7 +66,7 @@ public class TableDataInfo<T> implements Serializable {
|
||||
|
||||
public static <T> TableDataInfo<T> build(List<T> list) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setContent(list);
|
||||
rspData.setTotalElements(list.size());
|
||||
@@ -70,9 +75,17 @@ public class TableDataInfo<T> implements Serializable {
|
||||
|
||||
public static <T> TableDataInfo<T> build() {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
rspData.setMsg("查询成功");
|
||||
return rspData;
|
||||
}
|
||||
|
||||
public static <T> TableDataInfo<T> buildJson(Object result) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
rspData.setData(result);
|
||||
rspData.setMsg("操作成功");
|
||||
return rspData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ public class RsaUtils {
|
||||
|
||||
private static final String SRC = "123456";
|
||||
|
||||
public static final String KEY = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
System.out.println("\n");
|
||||
RsaKeyPair keyPair = generateKeyPair();
|
||||
|
||||
@@ -10,7 +10,9 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.RsaUtils;
|
||||
import org.nl.common.utils.dto.CurrentUser;
|
||||
@@ -52,52 +54,32 @@ public class MobileAuthorizationController {
|
||||
|
||||
@PostMapping(value = "/login")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> login(@Validated @RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception {
|
||||
String salt = "salt";
|
||||
// 密码解密 - 前端的加密规则: encrypt(根据实际更改)
|
||||
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
|
||||
// 校验数据库
|
||||
// 根据用户名查询,在比对密码
|
||||
// 拿到多个已经抛出异常
|
||||
SysUser userInfo = userService.getOne(new LambdaQueryWrapper<SysUser>()
|
||||
.eq(SysUser::getUsername, authUser.getUsername()));
|
||||
if (ObjectUtil.isEmpty(userInfo) || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, salt))) {
|
||||
throw new BadRequestException(LangProcess.msg("login_pwd"));
|
||||
public ResponseEntity<Object> login(@RequestBody Map<String, String> whereJson) throws Exception {
|
||||
SysUser userInfo = userService.getOne(new QueryWrapper<SysUser>().eq("username", whereJson.get("username")));
|
||||
if (userInfo == null || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(RsaUtils.decryptByPrivateKey(RsaUtils.KEY, whereJson.get("password")), "salt"))) { // 这里需要密码加密
|
||||
throw new BadRequestException("账号或密码错误");
|
||||
}
|
||||
// 获取权限列表 - 登录查找权限
|
||||
List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
|
||||
|
||||
if (!userInfo.getIs_used()) {
|
||||
throw new BadRequestException(LangProcess.msg("login_account"));
|
||||
throw new BadRequestException("账号未激活");
|
||||
}
|
||||
|
||||
List<String> permissionList = roleService.getPermissionList((JSONObject) JSON.toJSON(userInfo));
|
||||
// 登录输入,登出删除
|
||||
CurrentUser user = new CurrentUser();
|
||||
user.setId(userInfo.getUser_id());
|
||||
user.setUsername(userInfo.getUsername());
|
||||
user.setPresonName(userInfo.getPerson_name());
|
||||
user.setPresonName((userInfo.getPerson_name()));
|
||||
user.setUser(userInfo);
|
||||
user.setPermissions(permissionList);
|
||||
|
||||
// SaLoginModel 配置登录相关参数
|
||||
/*
|
||||
* PE: 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
|
||||
* loginInfo: Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效)
|
||||
*/
|
||||
StpUtil.login(userInfo.getUser_id(), new SaLoginModel()
|
||||
.setDevice("PE")
|
||||
.setExtra("loginInfo", user)
|
||||
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
|
||||
.setExtra("loginInfo", JSONObject.toJSONString(user)) // Token挂载的扩展参数 (此方法只有在集成jwt插件时才会生效)
|
||||
);
|
||||
|
||||
// 返回 token 与 用户信息
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("user", userInfo);
|
||||
JSONObject authInfo = new JSONObject(2) {{
|
||||
put("token", "Bearer " + StpUtil.getTokenValue());
|
||||
put("user", jsonObject);
|
||||
}};
|
||||
|
||||
return ResponseEntity.ok(authInfo);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("token", StpUtil.getTokenValue());
|
||||
result.put("roles", permissionList);
|
||||
result.put("user", user);
|
||||
return new ResponseEntity<>(TableDataInfo.buildJson(result), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/authority")
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package org.nl.wms.basedata.material.service.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 物料基本信息表 Mapper 接口
|
||||
@@ -13,4 +17,5 @@ import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
*/
|
||||
public interface MdMeMaterialbaseMapper extends BaseMapper<MdMeMaterialbase> {
|
||||
|
||||
List<JSONObject> queryMaterials(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -2,4 +2,7 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.basedata.material.service.dao.mapper.MdMeMaterialbaseMapper">
|
||||
|
||||
<select id="queryMaterials" resultType="com.alibaba.fastjson.JSONObject">
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -18,6 +18,11 @@ public class MaterialQuery extends BaseQuery<MdMeMaterialbase> {
|
||||
* 物料编码名称
|
||||
*/
|
||||
private String search;
|
||||
|
||||
/**
|
||||
* 物料编码名称
|
||||
*/
|
||||
private String blurry;
|
||||
/**
|
||||
* 物料类型
|
||||
*/
|
||||
|
||||
@@ -146,7 +146,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
AbstractTask abstractTask = taskFactory.getTask(processingClass);
|
||||
// 更新任务
|
||||
try {
|
||||
abstractTask.updateTaskStatus(taskInfo, status);
|
||||
abstractTask.updateTaskStatus(taskInfo.getString("task_code"), status);
|
||||
} catch (Exception e) {
|
||||
log.error("任务状态更新失败: {}", message);
|
||||
return BaseResponse.responseError(requestNo, "任务:[" + taskInfo.getString("task_code") + "]状态更新失败," + message);
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
package org.nl.wms.pda.task.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.wms.pda.task.service.PdaTaskService;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/hand")
|
||||
@Slf4j
|
||||
@SaIgnore
|
||||
public class PdaTaskController {
|
||||
private final PdaTaskService pdaTaskService;
|
||||
|
||||
@PostMapping("/getRegionByPoint")
|
||||
@Log("根据点位获取区域")
|
||||
public ResponseEntity<Object> getRegionByPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.getRegionByPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getPointnByRegion")
|
||||
@Log("根据区域获取点位")
|
||||
public ResponseEntity<Object> getPointnByRegion(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.getPointnByRegion(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/selectMaterials")
|
||||
@Log("查询物料信息")
|
||||
public ResponseEntity<Object> selectMaterials(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.selectMaterials(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getRegions")
|
||||
@Log("获取所有区域")
|
||||
public ResponseEntity<Object> getRegions() {
|
||||
return new ResponseEntity<>(pdaTaskService.getRegions(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getPointInfo")
|
||||
@Log("获取点位信息")
|
||||
public ResponseEntity<Object> getPointInfo(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.getPointInfo(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getMaterialInfoByPoint")
|
||||
@Log("根据点位获取物料信息")
|
||||
public ResponseEntity<Object> getMaterialInfoByPoint(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.getMaterialInfoByPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/loading")
|
||||
@Log("产线上料")
|
||||
public ResponseEntity<PdaResponseVo> loading(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.loading(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/blanking")
|
||||
@Log("产线下料")
|
||||
public ResponseEntity<PdaResponseVo> blanking(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.blanking(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/materialBinding")
|
||||
@Log("人工放货-物料绑定")
|
||||
public ResponseEntity<Object> materialBinding(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.materialBinding(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/vehicleBinding")
|
||||
@Log("人工放货-空载具绑定")
|
||||
public ResponseEntity<Object> vehicleBinding(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.vehicleBinding(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/comfirmGetting")
|
||||
@Log("确认取货")
|
||||
public ResponseEntity<PdaResponseVo> comfirmGetting(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.comfirmGetting(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/lock")
|
||||
@Log("锁定")
|
||||
public ResponseEntity<PdaResponseVo> lock(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.lock(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/unlock")
|
||||
@Log("解锁")
|
||||
public ResponseEntity<PdaResponseVo> unlock(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.unlock(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/sendPointTask")
|
||||
@Log("下发定点任务")
|
||||
public ResponseEntity<Object> sendPointTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.sendPointTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/queryTask")
|
||||
@Log("查询未完成的任务")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.queryTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/againTask")
|
||||
@Log("重新下发")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> againTask(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.againTask(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/forceConfirm")
|
||||
@Log("强制确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> forceConfirm(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaTaskService.forceConfirm(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package org.nl.wms.pda.task.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MoveDto;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.wms.sch.region.service.dao.SchBaseRegion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PdaTaskService {
|
||||
/**
|
||||
* 产线叫料
|
||||
* @param whereJson
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo loading(JSONObject whereJson);
|
||||
|
||||
JSONObject getRegionByPoint(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo blanking(JSONObject whereJson);
|
||||
|
||||
JSONObject getRegions();
|
||||
|
||||
JSONObject getPointnByRegion(JSONObject whereJson);
|
||||
|
||||
JSONObject selectMaterials(JSONObject whereJson);
|
||||
|
||||
JSONObject getMaterialInfoByPoint(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo forceConfirm(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo againTask(JSONObject whereJson);
|
||||
|
||||
JSONObject queryTask(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo sendPointTask(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo unlock(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo lock(JSONObject whereJson);
|
||||
|
||||
PdaResponseVo comfirmGetting(JSONObject whereJson);
|
||||
|
||||
JSONObject vehicleBinding(JSONObject whereJson);
|
||||
|
||||
JSONObject materialBinding(JSONObject whereJson);
|
||||
|
||||
List<JSONObject> getPointInfo(JSONObject whereJson);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.nl.wms.pda.task.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MoveDto {
|
||||
|
||||
private String point_code;
|
||||
/**
|
||||
* 点位
|
||||
*/
|
||||
private String region;
|
||||
/**
|
||||
* 区域
|
||||
*/
|
||||
private String material_code;
|
||||
|
||||
/**
|
||||
* 托盘数
|
||||
*/
|
||||
private String num;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.nl.wms.pda.task.service.dao.mapper;
|
||||
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PdaMapper {
|
||||
List<SchBasePoint> getPointsByRegion(String region);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.nl.wms.pda.task.service.dao.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PdaResponseVo {
|
||||
|
||||
/**
|
||||
* 先提供一个message
|
||||
*/
|
||||
private String message;
|
||||
|
||||
public static PdaResponseVo pdaResultOk(String message) {
|
||||
PdaResponseVo vo = new PdaResponseVo();
|
||||
vo.setMessage(message);
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,434 @@
|
||||
package org.nl.wms.pda.task.service.impl;
|
||||
|
||||
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 cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.basedata.material.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.basedata.material.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.basedata.material.service.dao.mapper.MdMeMaterialbaseMapper;
|
||||
import org.nl.wms.basedata.material.service.dto.MaterialQuery;
|
||||
import org.nl.wms.pda.task.service.PdaTaskService;
|
||||
import org.nl.wms.pda.task.service.dao.dto.MoveDto;
|
||||
import org.nl.wms.pda.task.service.dao.mapper.PdaMapper;
|
||||
import org.nl.wms.pda.task.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
import org.nl.wms.sch.group.service.dao.GroupPlate;
|
||||
import org.nl.wms.sch.group.service.dao.mapper.MdPbGroupplateMapper;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch.region.service.dao.SchBaseRegion;
|
||||
import org.nl.wms.sch.region.service.dao.mapper.SchBaseRegionMapper;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.tasks.PdaPointTask;
|
||||
import org.nl.wms.sch.tasks.netsl.NETSLTask;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class PdaTaskServiceImpl implements PdaTaskService {
|
||||
|
||||
@Autowired
|
||||
private SchBasePointMapper pointMapper;
|
||||
@Autowired
|
||||
private PdaMapper pdaMapper;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private SchBaseRegionMapper regionMapper;
|
||||
@Autowired
|
||||
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
|
||||
@Autowired
|
||||
private PdaPointTask pdaPointTask;
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper groupplateMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponseVo loading(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
String region_code = whereJson.getString("region_code");
|
||||
String material_code = whereJson.getString("material_code");
|
||||
String num = whereJson.getString("num");
|
||||
if (ObjectUtil.isEmpty(region_code)) {
|
||||
throw new BadRequestException("区域不能为空");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(material_code)) {
|
||||
throw new BadRequestException("物料编码不能为空");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(num)) {
|
||||
throw new BadRequestException("托盘数不能为空");
|
||||
}
|
||||
int num1 = Integer.parseInt(num);
|
||||
if ("N1".equals(region_code) || "N3".equals(region_code)) {
|
||||
if (num1 > 2) {
|
||||
throw new BadRequestException("N1、N3区域托盘数不能大于2");
|
||||
}
|
||||
//找终点 查询该区域所有空闲点位
|
||||
List<SchBasePoint> points = pointMapper.selectListByRegion(region_code);
|
||||
if (points.size() == 0) {
|
||||
throw new BadRequestException(region_code + "区域无空闲点位");
|
||||
}
|
||||
//根据托盘数
|
||||
for (int i = 0; i < num1; i++) {
|
||||
SchBasePoint point = points.get(i);
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", point.getPoint_code());
|
||||
param.put("material_code", material_code);
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("material_code", material_code);
|
||||
param.put("config_code", "NETSLTask");
|
||||
param.put("vehicle_qty", "1");
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
}
|
||||
} else if ("L1".equals(region_code) || "L2".equals(region_code)) {
|
||||
SchBasePoint schBasePoint = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
for (int i = 0; i < num1; i++) {
|
||||
//确定终点
|
||||
SchBasePoint point = checkNextPoint(schBasePoint, region_code);
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", point.getPoint_code());
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("material_code", material_code);
|
||||
param.put("config_code", "THSLTask");
|
||||
param.put("vehicle_qty", "1");
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
}
|
||||
} else {
|
||||
throw new BadRequestException("当前区域" + region_code + "错误!");
|
||||
}
|
||||
return PdaResponseVo.pdaResultOk("任务创建成功");
|
||||
}
|
||||
|
||||
private SchBasePoint checkNextPoint(SchBasePoint schBasePoint, String region_code) {
|
||||
//如果是MB物料的上料点 需要下发二次分配点位
|
||||
if ("MB".equals(schBasePoint.getPoint_code())) {
|
||||
if ("L1".equals(region_code)) {
|
||||
return getWaitPoint(region_code);
|
||||
} else {
|
||||
return getWaitPoint(region_code);
|
||||
}
|
||||
} else {
|
||||
//查找该区域空闲的点位
|
||||
List<SchBasePoint> list = pointMapper.selectList(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, region_code)
|
||||
.eq(SchBasePoint::getPoint_type, "1")
|
||||
.eq(SchBasePoint::getIs_used, "1")
|
||||
.eq(SchBasePoint::getLock_type, "0")
|
||||
.isNull(SchBasePoint::getIng_task_code)
|
||||
.orderByAsc(SchBasePoint::getIn_order_seq));
|
||||
if (list.size() == 0) {
|
||||
throw new BadRequestException(region_code + "区域无空闲点位");
|
||||
}
|
||||
return list.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private SchBasePoint getWaitPoint(String region_code) {
|
||||
//查找该区域空闲的等待点
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getRegion_code, region_code)
|
||||
.eq(SchBasePoint::getPoint_status, "0")
|
||||
.eq(SchBasePoint::getIs_used, "1")
|
||||
.eq(SchBasePoint::getLock_type, "0")
|
||||
.eq(SchBasePoint::getPoint_type, "4")
|
||||
.isNull(SchBasePoint::getIng_task_code));
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
if ("L1".equals(region_code)) {
|
||||
throw new BadRequestException("L1区域无空闲的等待点位");
|
||||
} else {
|
||||
throw new BadRequestException("L2区域无空闲的等待点位");
|
||||
}
|
||||
}
|
||||
return point;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getRegionByPoint(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
if (ObjectUtil.isEmpty(point_code)) {
|
||||
throw new BadRequestException("点位不能为空");
|
||||
}
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
throw new BadRequestException("点位" + point_code + "不存在!");
|
||||
}
|
||||
String region_code = point.getRegion_code();
|
||||
String region_name = point.getRegion_name();
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("region_code", region_code);
|
||||
jo.put("region_name", region_name);
|
||||
return jo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo blanking(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
String region_code = whereJson.getString("region_code");
|
||||
JSONArray data = whereJson.getJSONArray("data");
|
||||
if (ObjectUtil.isEmpty(point_code)) {
|
||||
throw new BadRequestException("点位不能为空");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(region_code)) {
|
||||
throw new BadRequestException("区域不能为空");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(data)) {
|
||||
throw new BadRequestException("物料信息不能为空");
|
||||
}
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
throw new BadRequestException("点位" + point_code + "不存在!");
|
||||
}
|
||||
JSONObject jo = data.getJSONObject(0);
|
||||
String material_name = jo.getString("material_name");
|
||||
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_name, material_name));
|
||||
if (mdMeMaterialbase == null) {
|
||||
throw new BadRequestException("当前物料不存在【"+material_name+"】");
|
||||
}
|
||||
String vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", point.getPoint_code());
|
||||
param.put("material_code", mdMeMaterialbase.getMaterial_code());
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
if ("N1".equals(point.getRegion_code())||"N2".equals(point.getRegion_code())) {
|
||||
param.put("config_code", "NETXLTask");
|
||||
} else if ("L1".equals(point.getRegion_code())||"L2".equals(point.getRegion_code())){
|
||||
param.put("config_code", "THXLTask");
|
||||
}
|
||||
param.put("vehicle_code", vehicleCode);
|
||||
param.put("vehicle_qty", "1");
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
//维护物料信息
|
||||
packageData(data,point_code);
|
||||
return PdaResponseVo.pdaResultOk("任务创建成功");
|
||||
}
|
||||
|
||||
private void packageData(JSONArray data,String point_code) {
|
||||
JSONObject jo = data.getJSONObject(0);
|
||||
String material_name = jo.getString("material_name");
|
||||
MdMeMaterialbase mdMeMaterialbase = mdMeMaterialbaseMapper.selectOne(new LambdaQueryWrapper<MdMeMaterialbase>().eq(MdMeMaterialbase::getMaterial_name, material_name));
|
||||
if (mdMeMaterialbase == null) {
|
||||
throw new BadRequestException("当前物料不存在【"+material_name+"】");
|
||||
}
|
||||
String pscn = jo.getString("pscn");
|
||||
String measure_unit_id = jo.getString("measure_unit_id");
|
||||
List<String> list = new ArrayList<>();
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
JSONObject jsonObject = data.getJSONObject(i);
|
||||
String container_code = jsonObject.getString("container_code");
|
||||
list.add(container_code);
|
||||
}
|
||||
String ext_code = String.join(",", list);
|
||||
String vehicleCode = "TP" + TaskUtils.getDateTime("yyMMddHHmmss") + CodeUtil.getNewCode("VEHICLE_CODE");
|
||||
|
||||
GroupPlate.GroupPlateBuilder groupPlateBuilder = GroupPlate.builder()
|
||||
.group_id(org.nl.common.utils.IdUtil.getStringId())
|
||||
.material_code(mdMeMaterialbase.getMaterial_code())
|
||||
.pcsn(pscn)
|
||||
.measure_unit_id(measure_unit_id)
|
||||
.storagevehicle_code(vehicleCode)
|
||||
.ext_code(ext_code)
|
||||
.create_id(SecurityUtils.getCurrentUserId())
|
||||
.create_name(SecurityUtils.getCurrentNickName())
|
||||
.create_time(DateUtil.now());
|
||||
groupplateMapper.insert(groupPlateBuilder.build());
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
point.setStoragevehicle_code(vehicleCode);
|
||||
point.setMaterial_code(mdMeMaterialbase.getMaterial_code());
|
||||
point.setPoint_status("2");
|
||||
pointMapper.updateById(point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getRegions() {
|
||||
List<SchBaseRegion> list = regionMapper.selectList(new LambdaQueryWrapper<SchBaseRegion>());
|
||||
List<JSONObject> ja = new ArrayList<>();
|
||||
list.forEach(region -> {
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("region_code", region.getRegion_code());
|
||||
jo.put("region_name", region.getRegion_name());
|
||||
ja.add(jo);
|
||||
});
|
||||
JSONObject ret = new JSONObject();
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
ret.put("code", String.valueOf(HttpStatus.HTTP_OK));
|
||||
ret.put("message", "查询成功");
|
||||
ret.put("data", ja);
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getPointnByRegion(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public TableDataInfo<MdMeMaterialbase> selectMaterials(JSONObject whereJson) {
|
||||
// PageQuery pageQuery = new PageQuery();
|
||||
// pageQuery.setPage(whereJson.getInteger("page") - 1);
|
||||
// pageQuery.setSize(whereJson.getInteger("size"));
|
||||
// MaterialQuery materialQuery = new MaterialQuery();
|
||||
// if (StringUtils.isNotBlank(whereJson.getString("blurry"))) {
|
||||
// materialQuery.setSearch(whereJson.getString("blurry").trim().toUpperCase());
|
||||
// }
|
||||
// Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build());
|
||||
// return PdaResponse.build(mapPage);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public JSONObject selectMaterials(JSONObject whereJson) {
|
||||
List<MdMeMaterialbase> list = mdMeMaterialbaseMapper.selectList(
|
||||
new LambdaQueryWrapper<MdMeMaterialbase>().eq(ObjectUtil.isNotEmpty(whereJson.getString("blurry")), MdMeMaterialbase::getMaterial_id, whereJson.getString("blurry"))
|
||||
.or()
|
||||
.eq(ObjectUtil.isNotEmpty(whereJson.getString("blurry")), MdMeMaterialbase::getMaterial_code, whereJson.getString("blurry"))
|
||||
);
|
||||
JSONObject ret = new JSONObject();
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
ret.put("code", String.valueOf(HttpStatus.HTTP_OK));
|
||||
ret.put("message", "查询成功");
|
||||
ret.put("data", list);
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getMaterialInfoByPoint(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo forceConfirm(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo againTask(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject queryTask(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo sendPointTask(JSONObject whereJson) {
|
||||
// 校验数据
|
||||
checkPoint(whereJson);
|
||||
// 创建任务
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("config_code", "PointTask");
|
||||
task.put("point_code1", whereJson.getString("start_point_code"));
|
||||
task.put("point_code2", whereJson.getString("end_point_code"));
|
||||
task.put("Priority", "1");
|
||||
pdaPointTask.apply(task);
|
||||
return PdaResponseVo.pdaResultOk("下发成功!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo unlock(JSONObject whereJson) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo lock(JSONObject whereJson) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo comfirmGetting(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
|
||||
return PdaResponseVo.pdaResultOk("取货完成");
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject vehicleBinding(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
point.setPoint_status("1");
|
||||
pointMapper.updateById(point);
|
||||
JSONObject ret = new JSONObject();
|
||||
ret.put("status", String.valueOf(HttpStatus.HTTP_OK));
|
||||
ret.put("message","托盘绑定成功");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public JSONObject materialBinding(JSONObject whereJson) {
|
||||
String point_code = whereJson.getString("point_code");
|
||||
JSONArray data = whereJson.getJSONArray("data");
|
||||
if (ObjectUtil.isEmpty(point_code)){
|
||||
throw new BadRequestException("点位不能为空");
|
||||
}
|
||||
if (ObjectUtil.isEmpty(data)){
|
||||
throw new BadRequestException("物料数据不能为空");
|
||||
}
|
||||
packageData(data,point_code);
|
||||
JSONObject ret = new JSONObject();
|
||||
ret.put("status", String.valueOf(HttpStatus.HTTP_OK));
|
||||
ret.put("message","物料绑定成功");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JSONObject> getPointInfo(JSONObject whereJson) {
|
||||
List<JSONObject> list = pointMapper.queryPointInfo(whereJson);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验起点终点载具
|
||||
* @param whereJson {
|
||||
* start_point_code:起点点位
|
||||
* end_point_code:终点点位
|
||||
* storagevehicle_code:终点点位
|
||||
* }
|
||||
*/
|
||||
private void checkPoint(JSONObject whereJson) {
|
||||
String start_point_code = whereJson.getString("start_point_code");
|
||||
String end_point_code = whereJson.getString("end_point_code");
|
||||
// 校验起点
|
||||
SchBasePoint pointStartDao = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, start_point_code));
|
||||
pointStartDao.setPoint_status("2");
|
||||
pointMapper.updateById(pointStartDao);
|
||||
|
||||
// 校验终点
|
||||
SchBasePoint pointNextDao = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, end_point_code));
|
||||
pointNextDao.setPoint_status("1");
|
||||
pointMapper.updateById(pointStartDao);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package org.nl.wms.pda.util;
|
||||
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class PdaResponse<T> {
|
||||
/**
|
||||
* 信息
|
||||
*/
|
||||
private String message;
|
||||
|
||||
/**
|
||||
* 返回数据
|
||||
*/
|
||||
private T data;
|
||||
|
||||
/**
|
||||
* 不带数据反馈
|
||||
* @return ErpResponse
|
||||
*/
|
||||
public static PdaResponse requestOk() {
|
||||
return PdaResponse.builder()
|
||||
.message("操作成功!")
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 带数据反馈
|
||||
* @return ErpResponse
|
||||
*/
|
||||
public static <T> PdaResponse requestParamOk(T data) {
|
||||
return PdaResponse.builder()
|
||||
.message("操作成功!")
|
||||
.data(data)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
public static <T> TableDataInfo<T> build(IPage<T> page) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(String.valueOf(HttpStatus.HTTP_OK));
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setContent(page.getRecords());
|
||||
rspData.setTotalElements(page.getTotal());
|
||||
return rspData;
|
||||
}
|
||||
}
|
||||
@@ -47,7 +47,7 @@ public class SchBasePointController {
|
||||
@Log("修改点位管理")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody SchBasePoint entity){
|
||||
schBasePointService.update(entity);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log("删除点位管理")
|
||||
|
||||
@@ -77,4 +77,6 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
* 区域点位库存查看
|
||||
* */
|
||||
TableDataInfo<RegionStructIvtVo> queryStruct(RegionStructQuery query, PageQuery pageQuery);
|
||||
|
||||
SchBasePoint findByCode(String point_code);
|
||||
}
|
||||
|
||||
@@ -120,6 +120,8 @@ public class SchBasePoint implements Serializable {
|
||||
|
||||
private String update_id;
|
||||
|
||||
private String material_code;
|
||||
|
||||
|
||||
private String update_name;
|
||||
|
||||
@@ -128,6 +130,8 @@ public class SchBasePoint implements Serializable {
|
||||
private String source_id;
|
||||
/** 位置 */
|
||||
private String point_location;
|
||||
/** 锁定类型 */
|
||||
private String lock_type;
|
||||
|
||||
|
||||
@TableField(exist = false)
|
||||
@@ -145,6 +149,7 @@ public class SchBasePoint implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String group_id;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String device_code;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.point.service.dao.mapper;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -34,4 +35,8 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
IPage<SchBasePoint> selectPageLeftJoin(IPage<SchBasePoint> pages, SchBasePointQuery whereJson);
|
||||
|
||||
List<RegionStructIvtVo> queryStruct(@Param("query") RegionStructQuery query);
|
||||
|
||||
List<SchBasePoint> selectListByRegion(String region);
|
||||
|
||||
List<JSONObject> queryPointInfo(@Param("param") JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -15,49 +15,40 @@
|
||||
<select id="selectPageLeftJoin" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"
|
||||
parameterType="org.nl.wms.sch.point.service.dto.SchBasePointQuery">
|
||||
SELECT
|
||||
p.*,
|
||||
IF(LENGTH(vg.material_qty)>0,vg.material_qty,0) AS material_qty,
|
||||
IF(LENGTH(mm.material_code)>0,mm.material_code,'-') AS material_code,
|
||||
IF(LENGTH(mm.material_name)>0,mm.material_name,'-') AS material_name,
|
||||
IF(LENGTH(mm.material_spec)>0,mm.material_spec,'-') AS material_spec,
|
||||
IF(LENGTH(mm.material_model)>0,mm.material_model,'-') AS material_model,
|
||||
IF(LENGTH(mm.raw_material_code)>0,mm.raw_material_code,'-') AS raw_material_code
|
||||
*
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
LEFT JOIN sch_base_vehiclematerialgroup vg ON vg.vehicle_code = p.vehicle_code
|
||||
AND vg.vehicle_type = p.vehicle_type AND vg.group_bind_material_status = '2'
|
||||
LEFT JOIN md_base_material mm ON mm.material_id = vg.material_id
|
||||
`sch_base_point`
|
||||
<where>
|
||||
<if test="whereJson.workshop_code != null and whereJson.workshop_code != ''">
|
||||
p.workshop_code = #{whereJson.workshop_code}
|
||||
workshop_code = #{whereJson.workshop_code}
|
||||
</if>
|
||||
<if test="whereJson.blurry != null">
|
||||
AND (p.point_code LIKE '%${whereJson.blurry}%' OR p.point_name LIKE '%${whereJson.blurry}%')
|
||||
AND (point_code LIKE '%${whereJson.blurry}%' OR point_name LIKE '%${whereJson.blurry}%')
|
||||
</if>
|
||||
<if test="whereJson.region_code != null">
|
||||
AND p.region_code = #{whereJson.region_code}
|
||||
AND region_code = #{whereJson.region_code}
|
||||
</if>
|
||||
<if test="whereJson.point_type != null">
|
||||
AND p.point_type = #{whereJson.point_type}
|
||||
AND point_type = #{whereJson.point_type}
|
||||
</if>
|
||||
<if test="whereJson.point_status != null">
|
||||
AND p.point_status = #{whereJson.point_status}
|
||||
AND point_status = #{whereJson.point_status}
|
||||
</if>
|
||||
<if test="whereJson.is_used != null">
|
||||
AND p.is_used = #{whereJson.is_used}
|
||||
AND is_used = #{whereJson.is_used}
|
||||
</if>
|
||||
<choose>
|
||||
<!-- Case: whereJson.lock_type is true -->
|
||||
<when test="whereJson.lock_type">
|
||||
AND (p.ing_task_code IS NOT NULL AND p.ing_task_code <![CDATA[<>]]> '')
|
||||
AND (ing_task_code IS NOT NULL AND ing_task_code <![CDATA[<>]]> '')
|
||||
</when>
|
||||
<!-- Case: whereJson.lock_type is false -->
|
||||
<otherwise>
|
||||
AND (p.ing_task_code IS NULL OR p.ing_task_code = '')
|
||||
AND (ing_task_code IS NULL OR ing_task_code = '')
|
||||
</otherwise>
|
||||
</choose>
|
||||
</where>
|
||||
ORDER BY p.region_code, p.point_code, p.point_type
|
||||
ORDER BY region_code, point_code, point_type
|
||||
</select>
|
||||
<select id="queryStruct" resultType="org.nl.wms.pdm.structivt.service.dto.RegionStructIvtVo">
|
||||
select sch_base_point.point_code,
|
||||
@@ -91,4 +82,50 @@
|
||||
</if>
|
||||
|
||||
</select>
|
||||
<select id="selectListByRegion" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"
|
||||
parameterType="java.lang.String">
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
WHERE
|
||||
region_code = #{region_code}
|
||||
AND 0 = (
|
||||
SELECT COUNT(*)
|
||||
FROM sch_base_task
|
||||
WHERE (point_code1 = p.point_code
|
||||
OR point_code2 = p.point_code)
|
||||
AND task_status <![CDATA[<]]> '5'
|
||||
AND is_delete = '0'
|
||||
)
|
||||
AND point_type = '1'
|
||||
AND is_used = 1
|
||||
</select>
|
||||
<select id="queryPointInfo" resultType="com.alibaba.fastjson.JSONObject"
|
||||
parameterType="com.alibaba.fastjson.JSONObject">
|
||||
SELECT
|
||||
plate.group_id,
|
||||
plate.storagevehicle_code,
|
||||
plate.qty_unit_name AS unit_code,
|
||||
plate.qty,
|
||||
plate.frozen_qty,
|
||||
mater.material_code,
|
||||
mater.material_name
|
||||
FROM
|
||||
md_pb_groupplate plate
|
||||
LEFT JOIN md_me_materialbase mater ON mater.material_id = plate.material_id
|
||||
LEFT JOIN st_ivt_structattr struct ON struct.storagevehicle_code = plate.storagevehicle_code
|
||||
WHERE
|
||||
1 =1
|
||||
and plate.status='02'
|
||||
and plate.qty > 0
|
||||
<if test="param.struct_code != null and param.struct_code != ''">
|
||||
AND
|
||||
struct.struct_code = #{param.struct_code}
|
||||
</if>
|
||||
<if test="param.vehicle_code != null and param.vehicle_code != ''">
|
||||
AND
|
||||
plate.storagevehicle_code = #{param.vehicle_code}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -42,7 +42,7 @@ public class SchBasePointDto implements Serializable {
|
||||
private String vehicle_type;
|
||||
|
||||
/** 载具编码 */
|
||||
private String vehicle_code;
|
||||
private String storagevehicle_code;
|
||||
|
||||
/** 载具数量 */
|
||||
private Integer vehicle_qty;
|
||||
@@ -112,4 +112,14 @@ public class SchBasePointDto implements Serializable {
|
||||
|
||||
/** 修改时间 */
|
||||
private String update_time;
|
||||
|
||||
private String material_code;
|
||||
|
||||
private String source_id;
|
||||
/** 位置 */
|
||||
private String point_location;
|
||||
/** 锁定类型 */
|
||||
private String lock_type;
|
||||
|
||||
private String pcsn;
|
||||
}
|
||||
|
||||
@@ -57,26 +57,26 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
IPage<SchBasePoint> pages = new Page<>(page.getPage() + 1, page.getSize());
|
||||
pages = pointMapper.selectPageLeftJoin(pages, whereJson);
|
||||
// 可以存放的载具类型
|
||||
pages.getRecords().forEach(point -> {
|
||||
if (ObjectUtil.isNotEmpty(point.getCan_vehicle_type())) {
|
||||
point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(",")));
|
||||
}
|
||||
String pointStatus = point.getPoint_status(); // 点位状态
|
||||
String pointType = point.getPoint_type(); // 点位类型
|
||||
SchBaseRegion regionObj = regionMapper.selectById(point.getRegion_code());
|
||||
if (ObjectUtil.isNotEmpty(regionObj)) {
|
||||
if (ObjectUtil.isNotEmpty(pointStatus) && ObjectUtil.isNotEmpty(regionObj.getPoint_status_explain())) {
|
||||
// 设置
|
||||
point.setPoint_status_name(PointUtils.getStatusOrTypeName(
|
||||
regionObj.getPoint_status_explain(), pointStatus));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(pointType) && ObjectUtil.isNotEmpty(regionObj.getPoint_type_explain())) {
|
||||
// 设置
|
||||
point.setPoint_type_name(PointUtils.getStatusOrTypeName(
|
||||
regionObj.getPoint_type_explain(), pointType));
|
||||
}
|
||||
}
|
||||
});
|
||||
// pages.getRecords().forEach(point -> {
|
||||
// if (ObjectUtil.isNotEmpty(point.getCan_vehicle_type())) {
|
||||
// point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(",")));
|
||||
// }
|
||||
// String pointStatus = point.getPoint_status(); // 点位状态
|
||||
// String pointType = point.getPoint_type(); // 点位类型
|
||||
// SchBaseRegion regionObj = regionMapper.selectById(point.getRegion_code());
|
||||
// if (ObjectUtil.isNotEmpty(regionObj)) {
|
||||
// if (ObjectUtil.isNotEmpty(pointStatus) && ObjectUtil.isNotEmpty(regionObj.getPoint_status_explain())) {
|
||||
// // 设置
|
||||
// point.setPoint_status_name(PointUtils.getStatusOrTypeName(
|
||||
// regionObj.getPoint_status_explain(), pointStatus));
|
||||
// }
|
||||
// if (ObjectUtil.isNotEmpty(pointType) && ObjectUtil.isNotEmpty(regionObj.getPoint_type_explain())) {
|
||||
// // 设置
|
||||
// point.setPoint_type_name(PointUtils.getStatusOrTypeName(
|
||||
// regionObj.getPoint_type_explain(), pointType));
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
return pages;
|
||||
}
|
||||
|
||||
@@ -198,4 +198,10 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
build.setTotalElements(page.getTotal());
|
||||
return build;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SchBasePoint findByCode(String point_code) {
|
||||
SchBasePoint point = pointMapper.selectOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, point_code));
|
||||
return point;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class SchBaseRegionController {
|
||||
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody SchBaseRegion entity){
|
||||
regionService.update(entity);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log("删除区域管理")
|
||||
|
||||
@@ -29,9 +29,6 @@ public class SchBaseTask implements Serializable {
|
||||
/** 任务编码 */
|
||||
private String task_code;
|
||||
|
||||
/** 任务类型 */
|
||||
private String task_type;
|
||||
|
||||
/** 任务状态 */
|
||||
private String task_status;
|
||||
|
||||
@@ -96,7 +93,11 @@ public class SchBaseTask implements Serializable {
|
||||
/** 更新时间 */
|
||||
private String update_time;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String task_type;
|
||||
|
||||
/** 配置表 -> 优先级 (默认会将配置表设置进来,如果需要自行更改则可在业务中设置) */
|
||||
@TableField(exist = false)
|
||||
private String priority;
|
||||
|
||||
/** 配置表 -> acs任务类型 */
|
||||
|
||||
@@ -57,6 +57,17 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl<SchBaseTaskconfigM
|
||||
if (classstandard == null) {
|
||||
throw new BadRequestException(LangProcess.msg("error_isNull", entity.getTask_type()));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(entity.getStart_region_strs())) {
|
||||
// 起点区域配置
|
||||
String startRegion = String.join(",", entity.getStart_region_strs());
|
||||
entity.setStart_region_str(startRegion);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(entity.getNext_region_strs())) {
|
||||
// 终点区域配置
|
||||
String nextRegion = String.join(",", entity.getNext_region_strs());
|
||||
entity.setNext_region_str(nextRegion);
|
||||
}
|
||||
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
@@ -83,6 +94,17 @@ public class SchBaseTaskconfigServiceImpl extends ServiceImpl<SchBaseTaskconfigM
|
||||
if (classstandard == null) {
|
||||
throw new BadRequestException(LangProcess.msg("error_isNull", entity.getTask_type()));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(entity.getStart_region_strs())) {
|
||||
// 起点区域配置
|
||||
String startRegion = String.join(",", entity.getStart_region_strs());
|
||||
entity.setStart_region_str(startRegion);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(entity.getNext_region_strs())) {
|
||||
// 终点区域配置
|
||||
String nextRegion = String.join(",", entity.getNext_region_strs());
|
||||
entity.setNext_region_str(nextRegion);
|
||||
}
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
@@ -175,11 +175,11 @@ AbstractTask {
|
||||
|
||||
/**
|
||||
* 更新任务状态,暴露给外围使用
|
||||
* @param taskObj 任务信息
|
||||
* @param taskCode 任务信息
|
||||
* @param status 状态
|
||||
*/
|
||||
public void updateTaskStatus(JSONObject taskObj, TaskStatus status) {
|
||||
this.updateStatus(taskObj, status);
|
||||
public void updateTaskStatus(String taskCode, TaskStatus status) {
|
||||
this.updateStatus(taskCode, status);
|
||||
}
|
||||
|
||||
|
||||
@@ -194,10 +194,10 @@ AbstractTask {
|
||||
* 修改状态
|
||||
* 以下改为public会出现自动注入类出现问题
|
||||
*
|
||||
* @param taskObj 任务信息
|
||||
* @param task_code 任务信息
|
||||
* @param status 状态
|
||||
*/
|
||||
public abstract void updateStatus(JSONObject taskObj, TaskStatus status);
|
||||
public abstract void updateStatus(String task_code,TaskStatus status);
|
||||
|
||||
|
||||
/**
|
||||
@@ -265,29 +265,31 @@ AbstractTask {
|
||||
String applyPointCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
String configCode = param.getString("config_code");
|
||||
String material_code = param.getString("material_code");
|
||||
String isFlag = ObjectUtil.isNotEmpty(param.getString("sss")) ? param.getString("sss") : "0";
|
||||
|
||||
// 1、校验数据
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, configCode));
|
||||
Assert.notNull(taskConfig, LangProcess.msg("common_configTip", configCode));
|
||||
// Assert.notNull(taskConfig, LangProcess.msg("common_configTip", configCode));
|
||||
|
||||
// 最大任务数
|
||||
Integer tcmn = taskConfig.getTask_create_max_num();
|
||||
|
||||
// 获取执行中的任务(由配置文件设置,一般是最大值)
|
||||
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
|
||||
taskConfig.getConfig_code(), taskConfig.getTask_direction());
|
||||
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, LangProcess.msg("common_maxTaskTip", applyPointCode));
|
||||
// List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
|
||||
// taskConfig.getConfig_code(), taskConfig.getTask_direction());
|
||||
// Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, LangProcess.msg("common_maxTaskTip", applyPointCode));
|
||||
|
||||
// 校验同个点位,同种任务是否多次请求创建任务(固定只能1个任务)
|
||||
List<SchBaseTask> applyPointTask = taskService.findUnFinishTasksByTaskConfig(
|
||||
taskConfig.getConfig_code(), applyPointCode, taskConfig.getTask_direction());
|
||||
if (applyPointTask.size() == 1) {
|
||||
if (applyPointTask.size() == 1 && "1".equals(isFlag)) {
|
||||
throw new BadRequestException(LangProcess.msg("common_taskCreatedTip", applyPointCode));
|
||||
}
|
||||
|
||||
String vehicleType = param.getString("vehicle_type");
|
||||
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
|
||||
String vehicleCode = param.getString("vehicle_code");
|
||||
AbstractTask bean = SpringContextHolder.getBean(this.getClass());
|
||||
|
||||
// 2、创建申请任务
|
||||
@@ -296,10 +298,11 @@ AbstractTask {
|
||||
task.setConfig_code(configCode);
|
||||
task.setVehicle_code(vehicleCode);
|
||||
task.setVehicle_type(vehicleType);
|
||||
task.setMaterial_code(material_code);
|
||||
task.setTask_status(TaskStatus.APPLY.getCode());
|
||||
// 将所有参数存到表中,后续需要可以提取
|
||||
TaskUtils.setCreateByAcsOrPda(task, param);
|
||||
|
||||
setTaskPoint(taskConfig, task, param.getString("device_code"));
|
||||
// 3、判断是否直接找点下发
|
||||
// 立即创建吧组盘放到具体位置,免得重复创建
|
||||
if (taskConfig.getIs_immediate_create()) {
|
||||
@@ -307,7 +310,7 @@ AbstractTask {
|
||||
} else {
|
||||
// 不需要立即创建
|
||||
// 设置组盘 - 需要的话由子类自行实现
|
||||
task.setGroup_id(bean.setGroupPlate(param));
|
||||
task.setGroup_data(bean.setGroupPlate(param));
|
||||
// 创建一条单点任务。
|
||||
taskService.save(task);
|
||||
bean.create();
|
||||
|
||||
@@ -15,33 +15,24 @@ import java.util.List;
|
||||
* @Date: 2023/5/25
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum TaskDirectionEnum {
|
||||
|
||||
/**
|
||||
* 送货
|
||||
* 送货 1 //起点确认
|
||||
*/
|
||||
SEND,
|
||||
SEND("1", "送货"),
|
||||
/**
|
||||
* 取货
|
||||
* 取货 2 //终点确认
|
||||
*/
|
||||
CALL,
|
||||
CALL("1", "取货"),
|
||||
/**
|
||||
* 移货
|
||||
* 移货 3
|
||||
*/
|
||||
MOVE;
|
||||
MOVE("1", "移货");
|
||||
|
||||
private String value;
|
||||
private String label;
|
||||
|
||||
static {
|
||||
SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
|
||||
List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
|
||||
.eq(Dict::getCode, "task_direction")
|
||||
.orderByAsc(Dict::getDict_sort));
|
||||
TaskDirectionEnum[] values = TaskDirectionEnum.values();
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
values[i].value = taskDirection.get(i).getValue();
|
||||
values[i].label = taskDirection.get(i).getLabel();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
package org.nl.wms.sch.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component(value = "PdaPointTask")
|
||||
@TaskType("PdaPointTask")
|
||||
public class PdaPointTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "NETXLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper NETXLMapper;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
// 消息通知
|
||||
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
continue;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setRemark("");
|
||||
taskService.updateById(task);
|
||||
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("货架暂无托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
// 钢托盘缓存区域的空盘是1 状态不同
|
||||
List<SchBasePoint> points = NETXLMapper.findPointForNETXL(startRegionStr);
|
||||
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY);
|
||||
// endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
package org.nl.wms.sch.tasks.netsl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dto.SchBasePointDto;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.netsl.mapper.NETSLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
// NET加工区上料任务
|
||||
@Component(value = "NETSLTask")
|
||||
@TaskType("NETSLTask")
|
||||
public class NETSLTask extends AbstractTask {
|
||||
|
||||
private static final String TASK_CONFIG_CODE = "NETSLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private NETSLMapper netslMapper;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findStartPoint(startRegionStr,task.getMaterial_code());
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
// 消息通知
|
||||
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
continue;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setVehicle_code(point.getStoragevehicle_code());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setRemark("");
|
||||
taskService.updateById(task);
|
||||
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr,task.getMaterial_code());
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("找不到可用的MB制布区点位!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("找不到可用的MB制布区点位!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setVehicle_code(point.getStoragevehicle_code());
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr,String material_code) {
|
||||
// 查询该物料所存放的位置
|
||||
List<SchBasePointDto> points = netslMapper.findPointForNETSL(startRegionStr, material_code);
|
||||
//找到最小PCSN的点位
|
||||
SchBasePointDto schBasePointDto = points.stream()
|
||||
.min(Comparator.comparing(SchBasePointDto::getPcsn)).orElse( null);
|
||||
return ObjectUtil.isNotEmpty(schBasePointDto) ? Convert.convert(SchBasePoint.class, schBasePointDto) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
endPointObj.setStoragevehicle_code(taskObj.getVehicle_code());
|
||||
// endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.nl.wms.sch.tasks.netsl.mapper;
|
||||
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dto.SchBasePointDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface NETSLMapper {
|
||||
|
||||
List<SchBasePointDto> findPointForNETSL(List<String> startRegionStr, String material_code);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.netsl.mapper.NETSLMapper">
|
||||
<select id="findPointForNETSL" resultType="org.nl.wms.sch.point.service.dto.SchBasePointDto">
|
||||
SELECT p.*,
|
||||
g.pcsn
|
||||
FROM `sch_base_point` p
|
||||
inner join md_pb_groupplate g on p.storagevehicle_code = g.storagevehicle_code
|
||||
left join md_me_materialbase m on g.material_code = m.material_code
|
||||
WHERE (
|
||||
(p.point_type = '1' AND p.region_code = #{startRegionStr[0]})
|
||||
)
|
||||
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
|
||||
AND g.material_code = #{material_code}
|
||||
AND p.point_status = '2'
|
||||
AND p.is_used = 1
|
||||
AND p.region_code IN
|
||||
<foreach collection="startRegionStr" item="code" separator="," open="(" close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
ORDER BY
|
||||
g.inbound_time ASC
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,200 @@
|
||||
package org.nl.wms.sch.tasks.netxl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// NET加工区下料任务
|
||||
@Component(value = "NETXLTask")
|
||||
@TaskType("NETXLTask")
|
||||
public class NETXLTask extends AbstractTask {
|
||||
|
||||
private static final String TASK_CONFIG_CODE = "NETXLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private NETXLMapper NETXLMapper;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
// 消息通知
|
||||
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
continue;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setRemark("");
|
||||
taskService.updateById(task);
|
||||
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("货架暂无托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
// 钢托盘缓存区域的空盘是1 状态不同
|
||||
List<SchBasePoint> points = NETXLMapper.findPointForNETXL(startRegionStr);
|
||||
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY);
|
||||
// endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.nl.wms.sch.tasks.netxl.mapper;
|
||||
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface NETXLMapper {
|
||||
List<SchBasePoint> findPointForNETXL(List<String> startRegionStr);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper">
|
||||
<select id="findPointForNETXL" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
|
||||
SELECT p.*
|
||||
FROM `sch_base_point` p
|
||||
WHERE (
|
||||
(p.point_type = '1' AND p.region_code = #{regionCode[0]})
|
||||
)
|
||||
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
|
||||
AND p.point_status = '2'
|
||||
AND p.is_used = 1
|
||||
AND p.region_code IN
|
||||
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
ORDER BY
|
||||
p.out_empty_seq ASC
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,233 @@
|
||||
package org.nl.wms.sch.tasks.thsl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch.point.service.dto.SchBasePointDto;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper;
|
||||
import org.nl.wms.sch.tasks.thsl.mapper.THSLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import oshi.driver.mac.net.NetStat;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// 贴合区上料任务
|
||||
@Component(value = "THSLTask")
|
||||
@TaskType("THSLTask")
|
||||
public class THSLTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "THSLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private THSLMapper thslMapper;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr, task.getMaterial_code());
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
// 消息通知
|
||||
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
continue;
|
||||
}
|
||||
// 设置终起点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setVehicle_code(point.getStoragevehicle_code());
|
||||
task.setRemark("");
|
||||
taskService.updateById(task);
|
||||
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr, task.getMaterial_code());
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("货架暂无托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setVehicle_code(point.getStoragevehicle_code());
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr, String material_code) {
|
||||
|
||||
// 钢托盘缓存区域的空盘是1 状态不同
|
||||
List<SchBasePointDto> points = thslMapper.findPointForTHSL(startRegionStr, material_code);
|
||||
//找到最小PCSN的点位
|
||||
SchBasePointDto schBasePointDto = points.stream()
|
||||
.min(Comparator.comparing(SchBasePointDto::getPcsn)).orElse(null);
|
||||
if (schBasePointDto == null) {
|
||||
throw new BadRequestException("未找到物料编码为【" + material_code + "】所需点位!");
|
||||
}
|
||||
String region_code = schBasePointDto.getRegion_code();
|
||||
String point_code = schBasePointDto.getPoint_code();
|
||||
if ("E2".equals(region_code)) {
|
||||
return getWaitPoint(point_code);
|
||||
} else if ("H1".equals(schBasePointDto.getRegion_code())) {
|
||||
return getWaitPoint(point_code);
|
||||
} else if ("H2".equals(schBasePointDto.getRegion_code())) {
|
||||
return getWaitPoint(point_code);
|
||||
}else {
|
||||
return ObjectUtil.isNotEmpty(schBasePointDto) ? Convert.convert(SchBasePoint.class, schBasePointDto) : null;
|
||||
}
|
||||
}
|
||||
|
||||
private SchBasePoint getWaitPoint(String point_code) {
|
||||
//查找该区域空闲的等待点
|
||||
SchBasePoint point = pointService.findByCode(point_code.substring(0, point_code.length() - 2) + "00");
|
||||
if (ObjectUtil.isEmpty(point)){
|
||||
throw new BadRequestException("未找到点位编码为【" + point_code + "】所需的等待点位!");
|
||||
}
|
||||
return point;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY);
|
||||
// endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.nl.wms.sch.tasks.thsl.mapper;
|
||||
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.point.service.dto.SchBasePointDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface THSLMapper {
|
||||
List<SchBasePointDto> findPointForTHSL(List<String> startRegionStr, String material_code);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.sch.tasks.thsl.mapper.THSLMapper">
|
||||
<select id="findPointForTHSL" resultType="org.nl.wms.sch.point.service.dto.SchBasePointDto">
|
||||
SELECT p.*
|
||||
g.pcsn
|
||||
FROM `sch_base_point` p
|
||||
inner join md_pb_groupplate g on p.storagevehicle_code = g.storagevehicle_code
|
||||
left join md_me_materialbase m on g.material_code = m.material_code
|
||||
WHERE (
|
||||
(p.point_type = '1' AND p.region_code = #{startRegionStr[0]})
|
||||
)
|
||||
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
|
||||
AND g.material_code = #{material_code}
|
||||
AND p.point_status = '2'
|
||||
AND p.is_used = 1
|
||||
AND p.region_code IN
|
||||
<foreach collection="startRegionStr" item="code" separator="," open="(" close=")">
|
||||
#{code}
|
||||
</foreach>
|
||||
ORDER BY
|
||||
g.inbound_time ASC
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,199 @@
|
||||
package org.nl.wms.sch.tasks.thxl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.sch.tasks.netxl.mapper.NETXLMapper;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
//// 贴合区下料任务
|
||||
@Component(value = "THXLTask")
|
||||
@TaskType("THXLTask")
|
||||
public class THXLTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "THXLTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private NETXLMapper NETXLMapper;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
// 获取任务
|
||||
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
for (SchBaseTask task : tasks) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
task.setRemark("未找到所需点位!");
|
||||
taskService.updateById(task);
|
||||
// 消息通知
|
||||
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getPoint_code1(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
continue;
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
task.setRemark("");
|
||||
taskService.updateById(task);
|
||||
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("货架暂无托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("货架暂无托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
// 钢托盘缓存区域的空盘是1 状态不同
|
||||
List<SchBasePoint> points = NETXLMapper.findPointForNETXL(startRegionStr);
|
||||
return ObjectUtil.isNotEmpty(points) ? points.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
// endPointObj.setVehicle_type(GeneralDefinition.STEEL_TRAY);
|
||||
// endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
// taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -70,6 +72,20 @@ public class TaskUtils {
|
||||
taskObj.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定格式的日期时间
|
||||
* @param format 格式
|
||||
* @return 字符串
|
||||
*/
|
||||
public static String getDateTime(String format) {
|
||||
// 获取当前日期和时间
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 定义日期时间格式
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
|
||||
// 格式化日期时间
|
||||
return now.format(formatter);
|
||||
}
|
||||
|
||||
|
||||
public static void setUpdateAuto(SchBaseTask taskObj) {
|
||||
String currentUserId = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId())
|
||||
@@ -164,7 +180,7 @@ public class TaskUtils {
|
||||
if (ObjectUtil.isEmpty(acsVehicleCode) || acsVehicleCode.equals(GeneralDefinition.NO)) {
|
||||
return null;
|
||||
}
|
||||
return String.format("%04d", Integer.parseInt(acsVehicleCode));
|
||||
return String.format("%04d", Integer.parseInt(acsVehicleCode.trim()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user