feat: 子卷送到待检区任务
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
4. **验证先于完成** — 声称完成前必须运行验证命令
|
||||
5. **代码开发规则** — 遵守 `.Codex/skills/nl-java-style/SKILL.md` 技能的规范要求
|
||||
6. 不需要频繁提交代码,除非用户说允许测试,否则优先不做测试
|
||||
7. 如果用户说不需要使用 superpowers-zh 技能,就不需要使用 superpowers-zh 下的所有技能。
|
||||
|
||||
## 可用 Skills
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
4. **验证先于完成** — 声称完成前必须运行验证命令
|
||||
5. **代码开发规则** — 遵守 `.claude/skills/nl-java-style/SKILL.md` 技能的规范要求
|
||||
6. 不需要频繁提交代码,除非用户说允许测试,否则优先不做测试
|
||||
7. 如果用户说不需要使用 superpowers-zh 技能,就不需要使用 superpowers-zh 下的所有技能。
|
||||
|
||||
## 可用 Skills
|
||||
|
||||
|
||||
@@ -15,7 +15,8 @@ import java.util.Arrays;
|
||||
public enum UserTypeEnum implements ArrayValuable<Integer> {
|
||||
|
||||
MEMBER(1, "会员"), // 面向 c 端,普通用户
|
||||
ADMIN(2, "管理员"); // 面向 b 端,管理后台
|
||||
ADMIN(2, "管理员"), // 面向 b 端,管理后台
|
||||
;
|
||||
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values()).map(UserTypeEnum::getValue).toArray(Integer[]::new);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package cn.code.nl.framework.mybatis.core.handler;
|
||||
|
||||
import cn.code.nl.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.code.nl.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
|
||||
@@ -37,27 +38,33 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
|
||||
// 当前登录用户不为空,创建人为空,则当前登录用户为创建人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {
|
||||
baseDO.setCreator(userId.toString());
|
||||
} else {
|
||||
baseDO.setCreator("0");
|
||||
}
|
||||
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人
|
||||
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) {
|
||||
baseDO.setUpdater(userId.toString());
|
||||
} else {
|
||||
baseDO.setUpdater("0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFill(MetaObject metaObject) {
|
||||
// 更新时间为空,则以当前时间为更新时间
|
||||
Object modifyTime = getFieldValByName("updateTime", metaObject);
|
||||
if (Objects.isNull(modifyTime)) {
|
||||
// 以当前时间为更新时间
|
||||
setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
|
||||
}
|
||||
|
||||
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人
|
||||
Object modifier = getFieldValByName("updater", metaObject);
|
||||
Long userId = SecurityFrameworkUtils.getLoginUserId();
|
||||
if (Objects.nonNull(userId) && Objects.isNull(modifier)) {
|
||||
setFieldValByName("updater", userId.toString(), metaObject);
|
||||
Object updater = getFieldValByName("updater", metaObject);
|
||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||
|
||||
if (Objects.nonNull(loginUserId)) {
|
||||
// 优先使用当前登录用户
|
||||
setFieldValByName("updater", loginUserId.toString(), metaObject);
|
||||
} else if (ObjectUtil.isEmpty(updater)) {
|
||||
// 没有登录用户,并且实体也未设置更新人时,使用系统默认值
|
||||
setFieldValByName("updater", "0", metaObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package cn.code.nl.framework.operatelog.core.service;
|
||||
|
||||
import cn.code.nl.framework.common.biz.system.logger.OperateLogCommonApi;
|
||||
import cn.code.nl.framework.common.enums.UserTypeEnum;
|
||||
import cn.code.nl.framework.common.util.monitor.TracerUtils;
|
||||
import cn.code.nl.framework.common.util.servlet.ServletUtils;
|
||||
import cn.code.nl.framework.security.core.LoginUser;
|
||||
import cn.code.nl.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.code.nl.framework.common.biz.system.logger.dto.OperateLogCreateReqDTO;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.mzt.logapi.beans.LogRecord;
|
||||
import com.mzt.logapi.service.ILogRecordService;
|
||||
import jakarta.annotation.Resource;
|
||||
@@ -34,7 +36,7 @@ public class LogRecordServiceImpl implements ILogRecordService {
|
||||
try {
|
||||
reqDTO.setTraceId(TracerUtils.getTraceId());
|
||||
// 补充用户信息
|
||||
fillUserFields(reqDTO);
|
||||
fillUserFields(reqDTO, logRecord);
|
||||
// 补全模块信息
|
||||
fillModuleFields(reqDTO, logRecord);
|
||||
// 补全请求信息
|
||||
@@ -48,10 +50,14 @@ public class LogRecordServiceImpl implements ILogRecordService {
|
||||
}
|
||||
}
|
||||
|
||||
private static void fillUserFields(OperateLogCreateReqDTO reqDTO) {
|
||||
private static void fillUserFields(OperateLogCreateReqDTO reqDTO, LogRecord logRecord) {
|
||||
// 使用 SecurityFrameworkUtils。因为要考虑,rpc、mq、job,它其实不是 web;
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
if (ObjectUtil.isNotEmpty(logRecord.getOperator())) {
|
||||
reqDTO.setUserId(Long.valueOf(logRecord.getOperator()));
|
||||
reqDTO.setUserType(UserTypeEnum.ADMIN.getValue());
|
||||
}
|
||||
return;
|
||||
}
|
||||
reqDTO.setUserId(loginUser.getId());
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package cn.code.nl.module.lms.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
*
|
||||
* @Author: liyongde
|
||||
* @Date: 2026/8/13 10:17
|
||||
*/
|
||||
@Getter
|
||||
public enum PackageTaskTypeEnum {
|
||||
SUB_ROLL_DOWN_AGV("010601", "子卷->待检AGV任务"),
|
||||
;
|
||||
/**
|
||||
* 字典键值
|
||||
*/
|
||||
private final String code;
|
||||
/**
|
||||
* 字典标签
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
PackageTaskTypeEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据code获取对应枚举
|
||||
* @param code 编码
|
||||
* @return 匹配的枚举,未找到返回null
|
||||
*/
|
||||
public static PackageTaskTypeEnum getByCode(String code) {
|
||||
for (PackageTaskTypeEnum typeEnum : values()) {
|
||||
if (typeEnum.getCode().equals(code)) {
|
||||
return typeEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,19 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface PackagePointMapper extends BaseMapperX<PackagePointDO> {
|
||||
|
||||
/**
|
||||
* 根据点位编码查询点位
|
||||
*
|
||||
* @param pointCode 点位编码
|
||||
* @param flag 是否仅查询启用点位
|
||||
* @return 点位信息
|
||||
*/
|
||||
default PackagePointDO selectByPointCode(String pointCode, boolean flag) {
|
||||
return selectOne(new LambdaQueryWrapperX<PackagePointDO>()
|
||||
.eq(PackagePointDO::getPointCode, pointCode)
|
||||
.eq(flag, PackagePointDO::getIsUsed, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询可用点位
|
||||
*
|
||||
|
||||
@@ -4,6 +4,7 @@ import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO;
|
||||
import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper;
|
||||
import cn.code.nl.module.lms.enums.BoxPointStatusEnum;
|
||||
import cn.code.nl.module.lms.enums.BoxPointTypeEnum;
|
||||
import cn.code.nl.module.lms.enums.PackageTaskTypeEnum;
|
||||
import cn.code.nl.module.task.api.TransportTaskApi;
|
||||
import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO;
|
||||
import cn.code.nl.module.task.enums.TaskOwnerServiceEnum;
|
||||
@@ -95,6 +96,7 @@ public class PackageBoxBusinessServiceImpl implements PackageBoxBusinessService
|
||||
task.setOwnerService(TaskOwnerServiceEnum.LMS.name());
|
||||
task.setBizType(SUB_ROLL_DOWN_BIZ_TYPE);
|
||||
task.setBizId(sourcePoint.getContainerName());
|
||||
task.setTaskType(PackageTaskTypeEnum.SUB_ROLL_DOWN_AGV.getCode());
|
||||
task.setHandleCode(SUB_ROLL_DOWN_HANDLE_CODE);
|
||||
task.setAcsTaskType(ACS_MOVE_TASK_TYPE);
|
||||
task.setAgvSystemType(AGV_SYSTEM_TYPE);
|
||||
|
||||
@@ -59,4 +59,17 @@ public interface PackagePointService {
|
||||
*/
|
||||
PageResult<PackagePointDO> getPackagePointPage(PackagePointPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 根据点位编码获取点位信息
|
||||
* @param pointCode 点位编码
|
||||
* @param flag 是否判断禁用
|
||||
* @return
|
||||
*/
|
||||
PackagePointDO getPackagePointByCode(String pointCode, boolean flag);
|
||||
|
||||
/**
|
||||
* 批量更新
|
||||
* @param points
|
||||
*/
|
||||
void updatePackagePoints(List<PackagePointDO> points);
|
||||
}
|
||||
|
||||
@@ -77,4 +77,14 @@ public class PackagePointServiceImpl implements PackagePointService {
|
||||
return packagePointMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackagePointDO getPackagePointByCode(String pointCode, boolean flag) {
|
||||
return packagePointMapper.selectByPointCode(pointCode, flag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePackagePoints(List<PackagePointDO> points) {
|
||||
packagePointMapper.updateBatch(points);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,9 +2,17 @@ package cn.code.nl.module.lms.tasks.box;
|
||||
|
||||
import cn.code.nl.framework.execute.core.AbstractTask;
|
||||
import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO;
|
||||
import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO;
|
||||
import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper;
|
||||
import cn.code.nl.module.lms.enums.BoxPointStatusEnum;
|
||||
import cn.code.nl.module.task.api.TransportTaskApi;
|
||||
import cn.code.nl.module.task.dto.TaskInfoDTO;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 子卷下线AGV任务
|
||||
* @Author: liyongde
|
||||
@@ -13,18 +21,46 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component("subRollDownAgvTask")
|
||||
public class SubRollDownAgvTask extends AbstractTask {
|
||||
|
||||
@Resource
|
||||
private TransportTaskApi transportTaskApi;
|
||||
|
||||
@Resource
|
||||
private PackagePointMapper packagePointMapper;
|
||||
|
||||
@Override
|
||||
public void doHandleFinish(TaskExecuteDTO taskExecuteDTO) {
|
||||
|
||||
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
|
||||
PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false);
|
||||
endPoint.setVehicleCode(taskInfoDTO.getVehicleCode());
|
||||
endPoint.setContainerName(taskInfoDTO.getMaterialCode());
|
||||
endPoint.setPointStatus(BoxPointStatusEnum.HAS_SUB_ROLL.getCode());
|
||||
endPoint.setLockStatus("0");
|
||||
packagePointMapper.updateById(endPoint);
|
||||
log.info("任务{}执行完成,子卷已存入点位{}", taskExecuteDTO.getTaskId(), taskInfoDTO.getPointCode2());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doHandleCancel(TaskExecuteDTO taskExecuteDTO) {
|
||||
|
||||
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
|
||||
PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false);
|
||||
PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false);
|
||||
// 解锁
|
||||
startPoint.setLockStatus("0");
|
||||
endPoint.setLockStatus("0");
|
||||
packagePointMapper.updateBatch(List.of(startPoint, endPoint));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doHandlePicked(TaskExecuteDTO taskExecuteDTO) {
|
||||
// 取货完成,释放点位
|
||||
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
|
||||
PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false);
|
||||
startPoint.setLockStatus("0");
|
||||
startPoint.setPointStatus(BoxPointStatusEnum.EMPTY.getCode());
|
||||
startPoint.setVehicleCode("");
|
||||
startPoint.setContainerName("");
|
||||
packagePointMapper.updateById(startPoint);
|
||||
log.info("任务{}执行取货完成", taskExecuteDTO.getTaskId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,24 +4,7 @@
|
||||
|
||||
<select id="selectAvailablePointList"
|
||||
resultType="cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO">
|
||||
SELECT point_id,
|
||||
point_code,
|
||||
point_name,
|
||||
point_type,
|
||||
container_name,
|
||||
point_status,
|
||||
vehicle_code,
|
||||
block,
|
||||
point_location,
|
||||
sort_seq,
|
||||
is_used,
|
||||
remark,
|
||||
plan,
|
||||
row_num,
|
||||
col_num,
|
||||
depth,
|
||||
wait_point_type,
|
||||
lock_status
|
||||
SELECT *
|
||||
FROM lms_package_point
|
||||
WHERE point_type = #{pointType}
|
||||
AND point_status = #{pointStatus}
|
||||
|
||||
@@ -76,8 +76,9 @@ public class TransportTaskServiceImpl implements TransportTaskService {
|
||||
|
||||
@Override
|
||||
@LogRecord(type = TASK_INFO,
|
||||
operator = "2",
|
||||
subType = TASK_INFO_OPERATE_TYPE,
|
||||
bizNo = "{{_ret}}",
|
||||
bizNo = "{{#_ret}}",
|
||||
success = TASK_INFO_CREATE_BY_RPC)
|
||||
public Long createTransportTaskByRpc(TransportTaskCreateReqDTO reqDTO) {
|
||||
TransportTaskDO task = BeanUtils.toBean(reqDTO, TransportTaskDO.class);
|
||||
|
||||
Reference in New Issue
Block a user