no message
parent
da421426d0
commit
6d64ca5662
|
|
@ -2,6 +2,7 @@ package org.jeecg.config.mybatis;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.annotation.DbType;
|
import com.baomidou.mybatisplus.annotation.DbType;
|
||||||
|
import com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
|
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
|
||||||
|
|
@ -13,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import me.zhyd.oauth.log.Log;
|
import me.zhyd.oauth.log.Log;
|
||||||
import net.sf.jsqlparser.expression.Expression;
|
import net.sf.jsqlparser.expression.Expression;
|
||||||
import net.sf.jsqlparser.expression.LongValue;
|
import net.sf.jsqlparser.expression.LongValue;
|
||||||
|
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
||||||
import org.jeecg.common.config.TenantContext;
|
import org.jeecg.common.config.TenantContext;
|
||||||
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.CommonConstant;
|
||||||
import org.jeecg.common.constant.TenantConstant;
|
import org.jeecg.common.constant.TenantConstant;
|
||||||
|
|
@ -159,6 +161,9 @@ public class MybatisPlusSaasConfig {
|
||||||
private DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
|
private DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
|
||||||
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
|
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
|
||||||
dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
|
dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
|
||||||
|
/* if (sql.contains("FOR UPDATE")) {
|
||||||
|
return tableName;
|
||||||
|
}*/
|
||||||
//获取需要动态解析的表名
|
//获取需要动态解析的表名
|
||||||
String dynamicTableName = ThreadLocalDataHelper.get(CommonConstant.DYNAMIC_TABLE_NAME);
|
String dynamicTableName = ThreadLocalDataHelper.get(CommonConstant.DYNAMIC_TABLE_NAME);
|
||||||
//当dynamicTableName不为空时才走动态表名处理逻辑,否则返回原始表名
|
//当dynamicTableName不为空时才走动态表名处理逻辑,否则返回原始表名
|
||||||
|
|
|
||||||
|
|
@ -1,47 +1,20 @@
|
||||||
package org.cpte.modules.agvTask.controller;
|
package org.cpte.modules.agvTask.controller;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.URLDecoder;
|
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.cpte.modules.agvTask.mapper.AgvTaskMapper;
|
|
||||||
import org.cpte.modules.constant.enums.AgvStatusEnum;
|
|
||||||
import org.cpte.modules.constant.enums.AgvVendorEnum;
|
|
||||||
import org.cpte.modules.hikAgv.service.IHikAgvService;
|
|
||||||
import org.cpte.modules.shipping.entity.Task;
|
|
||||||
import org.cpte.modules.tesAgv.service.ITesAgvService;
|
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.common.system.query.QueryGenerator;
|
import org.jeecg.common.system.query.QueryGenerator;
|
||||||
import org.jeecg.common.system.query.QueryRuleEnum;
|
|
||||||
import org.jeecg.common.util.oConvertUtils;
|
|
||||||
import org.cpte.modules.agvTask.entity.AgvTask;
|
import org.cpte.modules.agvTask.entity.AgvTask;
|
||||||
import org.cpte.modules.agvTask.service.IAgvTaskService;
|
import org.cpte.modules.agvTask.service.IAgvTaskService;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.jeecg.config.shiro.IgnoreAuth;
|
|
||||||
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
|
||||||
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
|
||||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
|
||||||
import org.jeecgframework.poi.excel.entity.ImportParams;
|
|
||||||
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
|
||||||
import org.jeecg.common.system.base.controller.JeecgController;
|
import org.jeecg.common.system.base.controller.JeecgController;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import org.jeecg.common.aspect.annotation.AutoLog;
|
import org.jeecg.common.aspect.annotation.AutoLog;
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ public class InventoryLogServiceImpl extends ServiceImpl<InventoryLogMapper, Inv
|
||||||
//出库分配
|
//出库分配
|
||||||
inventoryLog.setLogType(InventoryLogEnum.ALLOC.getValue());
|
inventoryLog.setLogType(InventoryLogEnum.ALLOC.getValue());
|
||||||
//实际数量不变
|
//实际数量不变
|
||||||
inventoryLog.setBeforeAllocatedQty(BigDecimalUtil.subtract(inventory.getQueuedQty(), AllocatedQty, 0));
|
inventoryLog.setBeforeAllocatedQty(inventory.getQuantity());
|
||||||
inventoryLog.setAfterAllocatedQty(inventory.getQueuedQty());
|
inventoryLog.setAfterAllocatedQty(AllocatedQty);
|
||||||
addInventoryLog(inventoryLog);
|
addInventoryLog(inventoryLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,8 @@ public class AllocateJob implements Job {
|
||||||
|
|
||||||
//生成出库AGV出库任务
|
//生成出库AGV出库任务
|
||||||
long startTime2 = System.currentTimeMillis();
|
long startTime2 = System.currentTimeMillis();
|
||||||
List<Task> taskList = taskMapper.queryUnallocatedTask();
|
|
||||||
iTaskService.generateAgvTask(taskList);
|
iTaskService.generateAgvTask();
|
||||||
long endTime2 = System.currentTimeMillis();
|
long endTime2 = System.currentTimeMillis();
|
||||||
log.info("生成AGV出库任务耗时:{}ms", endTime2 - startTime2);
|
log.info("生成AGV出库任务耗时:{}ms", endTime2 - startTime2);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,7 @@ import java.util.Map;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
import org.cpte.modules.constant.GeneralConstant;
|
import org.cpte.modules.constant.GeneralConstant;
|
||||||
import org.cpte.modules.saiWms.request.InboundRequest;
|
|
||||||
import org.cpte.modules.serialNumber.PickSerialNumberRule;
|
import org.cpte.modules.serialNumber.PickSerialNumberRule;
|
||||||
import org.cpte.modules.shipping.entity.Task;
|
import org.cpte.modules.shipping.entity.Task;
|
||||||
import org.cpte.modules.shipping.mapper.PickMapper;
|
import org.cpte.modules.shipping.mapper.PickMapper;
|
||||||
|
|
@ -290,8 +288,7 @@ public class PickController {
|
||||||
public Result<String> allocatedPick() {
|
public Result<String> allocatedPick() {
|
||||||
List<Long> pickList = pickMapper.queryUnallocatedPick();
|
List<Long> pickList = pickMapper.queryUnallocatedPick();
|
||||||
pickService.allocatePick2(pickList);
|
pickService.allocatePick2(pickList);
|
||||||
List<Task> taskList = taskMapper.queryUnallocatedTask();
|
taskService.generateAgvTask();
|
||||||
taskService.generateAgvTask(taskList);
|
|
||||||
return Result.OK("操作成功!");
|
return Result.OK("操作成功!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import org.cpte.modules.shipping.entity.Pick;
|
||||||
import org.cpte.modules.shipping.entity.Task;
|
import org.cpte.modules.shipping.entity.Task;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
import javax.persistence.LockModeType;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -20,6 +21,6 @@ public interface TaskMapper extends BaseMapper<Task> {
|
||||||
*
|
*
|
||||||
* @return List<Pick>
|
* @return List<Pick>
|
||||||
*/
|
*/
|
||||||
@Select("select * from data_task where agv_task_id is null order by create_time")
|
@Select("SELECT t.* FROM data_task t WHERE t.agv_task_id IS NULL ORDER BY t.create_time ASC FOR UPDATE ")
|
||||||
List<Task> queryUnallocatedTask();
|
List<Task> queryUnallocatedTask();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="org.cpte.modules.shipping.mapper.TaskMapper">
|
<mapper namespace="org.cpte.modules.shipping.mapper.TaskMapper">
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -55,6 +55,6 @@ public interface ITaskService extends IService<Task> {
|
||||||
/**
|
/**
|
||||||
* 根据Task集合生成AGV出库任务
|
* 根据Task集合生成AGV出库任务
|
||||||
*/
|
*/
|
||||||
void generateAgvTask(List<Task> taskList);
|
void generateAgvTask();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package org.cpte.modules.shipping.service.impl;
|
package org.cpte.modules.shipping.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import org.cpte.modules.agvTask.entity.AgvTask;
|
import org.cpte.modules.agvTask.entity.AgvTask;
|
||||||
|
|
@ -31,8 +33,12 @@ import java.util.stream.Collectors;
|
||||||
* @Version: V1.0
|
* @Version: V1.0
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements ITaskService {
|
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements ITaskService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TaskMapper taskMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IAgvTaskService agvTaskService;
|
private IAgvTaskService agvTaskService;
|
||||||
|
|
||||||
|
|
@ -110,7 +116,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void generateAgvTask(List<Task> taskList) {
|
public void generateAgvTask() {
|
||||||
|
List<Task> taskList = taskMapper.queryUnallocatedTask();
|
||||||
if (CollectionUtils.isEmpty(taskList)) {
|
if (CollectionUtils.isEmpty(taskList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -128,10 +135,12 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
|
||||||
Map<TaskGroupKey, AgvTask> groupToAgvTaskMap = new HashMap<>();
|
Map<TaskGroupKey, AgvTask> groupToAgvTaskMap = new HashMap<>();
|
||||||
for (Map.Entry<TaskGroupKey, List<Task>> entry : taskGroupMap.entrySet()) {
|
for (Map.Entry<TaskGroupKey, List<Task>> entry : taskGroupMap.entrySet()) {
|
||||||
TaskGroupKey key = entry.getKey();
|
TaskGroupKey key = entry.getKey();
|
||||||
if(!groupToAgvTaskMap.containsKey(key)){
|
log.info("任务分组:{}", key);
|
||||||
|
if (!groupToAgvTaskMap.containsKey(key)) {
|
||||||
AgvTask agvTask = agvTaskService.bulidAgvTask(null, key.getStockCode(), key.getFromPointCode(), key.getToPointCode(), null, BusinessTypeEnum.OUTBOUND.getValue(), AgvVendorEnum.TES.getValue());
|
AgvTask agvTask = agvTaskService.bulidAgvTask(null, key.getStockCode(), key.getFromPointCode(), key.getToPointCode(), null, BusinessTypeEnum.OUTBOUND.getValue(), AgvVendorEnum.TES.getValue());
|
||||||
createToAgvTaskList.add(agvTask);
|
createToAgvTaskList.add(agvTask);
|
||||||
groupToAgvTaskMap.put(key, agvTask); // 建立映射
|
groupToAgvTaskMap.put(key, agvTask); // 建立映射
|
||||||
|
log.info("创建AGV任务:{}", agvTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(createToAgvTaskList)) {
|
if (CollectionUtils.isNotEmpty(createToAgvTaskList)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue