代码更新
This commit is contained in:
parent
cfbc2a202d
commit
812558df92
9
pom.xml
9
pom.xml
|
|
@ -182,17 +182,22 @@
|
|||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>wms-server</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>16</source>
|
||||
<target>16</target>
|
||||
<source>17</source>
|
||||
<target>17</target>
|
||||
<encoding>UTF-8</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public class ExcelController {
|
|||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
public String uploadStocks(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
||||
logger.info("导入库存,请求ip:{}", getIpAddr(servletRequest));
|
||||
logger.info("导入库存,请求ip:{},文件详情:{}", getIpAddr(servletRequest), convertJsonString(fileVo));
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 导入excel
|
||||
|
|
@ -102,7 +102,7 @@ public class ExcelController {
|
|||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
public String uploadDbs(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
||||
logger.info("导入DBS,请求ip:{}", getIpAddr(servletRequest));
|
||||
logger.info("导入DBS,请求ip:{},文件详情:{}", getIpAddr(servletRequest), convertJsonString(fileVo));
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 先移除之前last表中的内容
|
||||
|
|
@ -138,7 +138,7 @@ public class ExcelController {
|
|||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
public String uploadKateOrders(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
||||
logger.info("导入工单,请求ip:{}", getIpAddr(servletRequest));
|
||||
logger.info("导入工单,请求ip:{},文件详情:{}", getIpAddr(servletRequest), convertJsonString(fileVo));
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 导入excel
|
||||
|
|
@ -168,8 +168,8 @@ public class ExcelController {
|
|||
public void downloadStockExcel(@RequestBody StockQuery stockQuery, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出库存记录,筛选参数:{},请求ip:{}", convertJsonString(stockQuery), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
// response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("库存报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
@ -200,7 +200,7 @@ public class ExcelController {
|
|||
public void downloadInRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出入库记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("入库记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
@ -226,7 +226,7 @@ public class ExcelController {
|
|||
public void downloadOutRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出出库记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("出库记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
@ -252,7 +252,7 @@ public class ExcelController {
|
|||
public void downloadInventoryRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出盘点记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("盘点记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
@ -278,7 +278,7 @@ public class ExcelController {
|
|||
public void downloadVehicleExcel(@RequestBody VehicleQuery vehicleQuery, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出料箱报表,筛选参数:{},请求ip:{}", convertJsonString(vehicleQuery), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("盘点记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
@ -308,7 +308,7 @@ public class ExcelController {
|
|||
public void downloadLocationsExcel(@RequestBody LocationQuery locationQuery, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出库位报表,筛选参数:{},请求ip:{}", convertJsonString(locationQuery), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("库位报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
|
|
|
|||
|
|
@ -308,20 +308,15 @@ public class TaskController {
|
|||
// 已有库存,直接更新数量
|
||||
existStock.getGoodsRelated().setRemainNum(existStock.getGoodsRelated().getRemainNum().add(inTask.getGoodsRelated().getOpNum()));
|
||||
existStock.getGoodsRelated().setTotalNum(existStock.getGoodsRelated().getTotalNum().add(inTask.getGoodsRelated().getOpNum()));
|
||||
existStock.setLastUpdateTime(LocalDateTime.now());
|
||||
existStock.setLastUpdateUser(inTask.getUserName());
|
||||
existStock.setLocationId(inTask.getDestination());
|
||||
stockService.update(existStock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, existStock.getStockId()));
|
||||
} else {
|
||||
Stock newStock = new Stock();
|
||||
newStock.setStockId(generateId("ST_"));
|
||||
newStock.setVehicleId(inTask.getVehicleId());
|
||||
newStock.setLocationId(inTask.getDestination());
|
||||
newStock.setNoUseDays(0);
|
||||
newStock.setIsInventory(0);
|
||||
newStock.setCreateTime(LocalDateTime.now());
|
||||
newStock.setWeight(inTask.getWeight());
|
||||
newStock.setLastUpdateUser(inTask.getUserName());
|
||||
StockDetailInfo detailInfo = new StockDetailInfo();
|
||||
detailInfo.setGoodsId(inTask.getGoodsRelated().getGoodsId());
|
||||
detailInfo.setGoodsName(inTask.getGoodsRelated().getGoodsName());
|
||||
|
|
@ -335,7 +330,8 @@ public class TaskController {
|
|||
}
|
||||
// 更新库存状态
|
||||
List<Stock> backStocks = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||
.eq(Stock::getVehicleId, inTask.getVehicleId()));
|
||||
.eq(Stock::getVehicleId, inTask.getVehicleId())
|
||||
.ne(Stock::getStockStatus, StockStatus.OK.getCode()));
|
||||
backStocks.forEach(stock -> {
|
||||
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) {
|
||||
// 库存数量为0时要删除当前库存
|
||||
|
|
@ -348,6 +344,7 @@ public class TaskController {
|
|||
// 后续没有移库
|
||||
stock.setStockStatus(StockStatus.OK.getCode());
|
||||
}
|
||||
stock.setLocationId(inTask.getDestination());
|
||||
stock.setLastUpdateTime(LocalDateTime.now());
|
||||
stock.setLastUpdateUser(inTask.getUserName());
|
||||
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
|
||||
|
|
@ -1806,65 +1803,80 @@ public class TaskController {
|
|||
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||
.likeRight(Task::getTaskId, "HK_"));
|
||||
if (!hasBackTask) {
|
||||
// 寻找库位
|
||||
String nextLocationId = "";
|
||||
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
|
||||
Map<String, String> resultMap = locationService.getOneLocation("", "");
|
||||
if (resultMap.isEmpty() || !resultMap.containsKey("nextLocationId")) {
|
||||
// 判断当前载具是否有入库任务
|
||||
boolean hasInTask = taskService.exists(new LambdaQueryWrapper<Task>()
|
||||
.eq(Task::getVehicleId, requestBackQuery.getVehicleId())
|
||||
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||
.eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode())
|
||||
.likeRight(Task::getTaskId, "RK_"));
|
||||
if (hasInTask) {
|
||||
taskService.update(new LambdaUpdateWrapper<Task>()
|
||||
.set(Task::getTaskStatus, WmsTaskStatus.NEW.getCode())
|
||||
.eq(Task::getVehicleId, requestBackQuery.getVehicleId())
|
||||
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||
.eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode())
|
||||
.likeRight(Task::getTaskId, "RK_"));
|
||||
} else {
|
||||
// 寻找库位
|
||||
String nextLocationId = "";
|
||||
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
|
||||
Map<String, String> resultMap = locationService.getOneLocation("", "");
|
||||
if (resultMap.isEmpty() || !resultMap.containsKey("nextLocationId")) {
|
||||
logger.error("暂无可用库位");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("暂无可用库位!");
|
||||
return convertJsonString(response);
|
||||
} else {
|
||||
Location nextLocation = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, resultMap.get("nextLocationId")));
|
||||
LambdaUpdateWrapper<Location> updateLocationWrapper = new LambdaUpdateWrapper<Location>()
|
||||
.set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode())
|
||||
.set(Location::getVehicleId, requestBackQuery.getVehicleId())
|
||||
.eq(Location::getLocationId, nextLocation.getLocationId())
|
||||
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
|
||||
if (locationService.update(updateLocationWrapper)) {
|
||||
nextLocationId = resultMap.get("nextLocationId");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Objects.equals(nextLocationId, "")) {
|
||||
logger.error("暂无可用库位");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("暂无可用库位!");
|
||||
return convertJsonString(response);
|
||||
} else {
|
||||
Location nextLocation = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, resultMap.get("nextLocationId")));
|
||||
LambdaUpdateWrapper<Location> updateLocationWrapper = new LambdaUpdateWrapper<Location>()
|
||||
.set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode())
|
||||
.set(Location::getVehicleId, requestBackQuery.getVehicleId())
|
||||
.eq(Location::getLocationId, nextLocation.getLocationId())
|
||||
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
|
||||
if (locationService.update(updateLocationWrapper)) {
|
||||
nextLocationId = resultMap.get("nextLocationId");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Objects.equals(nextLocationId, "")) {
|
||||
logger.error("暂无可用库位");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("暂无可用库位!");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
// 生成回库任务
|
||||
Task backTask = new Task();
|
||||
backTask.setTaskId(generateId("HK_"));
|
||||
backTask.setTaskGroup(generateId(""));
|
||||
backTask.setTaskType(TaskType.IN.getCode());
|
||||
backTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||
backTask.setVehicleId(requestBackQuery.getVehicleId());
|
||||
backTask.setDestination(nextLocationId);
|
||||
backTask.setVehicleSize(1);
|
||||
backTask.setWeight(BigDecimal.ZERO);
|
||||
backTask.setTaskPriority(1);
|
||||
backTask.setUserName("WMS");
|
||||
backTask.setCreateTime(LocalDateTime.now());
|
||||
if (taskService.save(backTask)) {
|
||||
// 删除outsideVehicle表
|
||||
outsideVehiclesService.remove(new LambdaQueryWrapper<OutsideVehicles>().eq(OutsideVehicles::getVehicleId, requestBackQuery.getVehicleId()));
|
||||
// 设置库存状态为回库中
|
||||
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||
.set(Stock::getStockStatus, StockStatus.BACK.getCode())
|
||||
.eq(Stock::getVehicleId, requestBackQuery.getVehicleId()));
|
||||
} else {
|
||||
// 回退库位锁定
|
||||
locationService.update(new LambdaUpdateWrapper<Location>()
|
||||
.set(Location::getLocationStatus, LocationStatus.EMPTY.getCode())
|
||||
.set(Location::getVehicleId, "")
|
||||
.eq(Location::getLocationId, nextLocationId)
|
||||
.eq(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()));
|
||||
logger.error("生成回库任务失败,箱号:{}", requestBackQuery.getVehicleId());
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("生成回库任务失败。");
|
||||
return convertJsonString(response);
|
||||
// 生成回库任务
|
||||
Task backTask = new Task();
|
||||
backTask.setTaskId(generateId("HK_"));
|
||||
backTask.setTaskGroup(generateId(""));
|
||||
backTask.setTaskType(TaskType.IN.getCode());
|
||||
backTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||
backTask.setVehicleId(requestBackQuery.getVehicleId());
|
||||
backTask.setDestination(nextLocationId);
|
||||
backTask.setVehicleSize(1);
|
||||
backTask.setWeight(BigDecimal.ZERO);
|
||||
backTask.setTaskPriority(1);
|
||||
backTask.setUserName("WMS");
|
||||
backTask.setCreateTime(LocalDateTime.now());
|
||||
if (taskService.save(backTask)) {
|
||||
// 删除outsideVehicle表
|
||||
outsideVehiclesService.remove(new LambdaQueryWrapper<OutsideVehicles>().eq(OutsideVehicles::getVehicleId, requestBackQuery.getVehicleId()));
|
||||
// 设置库存状态为回库中
|
||||
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||
.set(Stock::getStockStatus, StockStatus.BACK.getCode())
|
||||
.eq(Stock::getVehicleId, requestBackQuery.getVehicleId()));
|
||||
} else {
|
||||
// 回退库位锁定
|
||||
locationService.update(new LambdaUpdateWrapper<Location>()
|
||||
.set(Location::getLocationStatus, LocationStatus.EMPTY.getCode())
|
||||
.set(Location::getVehicleId, "")
|
||||
.eq(Location::getLocationId, nextLocationId)
|
||||
.eq(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()));
|
||||
logger.error("生成回库任务失败,箱号:{}", requestBackQuery.getVehicleId());
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("生成回库任务失败。");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1881,4 +1893,308 @@ public class TaskController {
|
|||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 特殊用法---请求拣选
|
||||
*
|
||||
* @param taskOutRequest 出库任务
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/requestPickTest")
|
||||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
@MyLog(logTitle = "特殊用法---请求拣选", logMethod = "requestPickTest")
|
||||
public String requestPickTest(@RequestBody TaskOutRequest taskOutRequest) {
|
||||
logger.info("接收到特殊用法---请求拣选:{},ip地址:{}", convertJsonString(taskOutRequest), HttpUtils.getIpAddr(servletRequest));
|
||||
// 创建响应信息
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 获取站台号
|
||||
String standId = "";
|
||||
if (StringUtils.isNotEmpty(taskOutRequest.getPickStand())) {
|
||||
// 站台号从请求参数中获取
|
||||
standId = taskOutRequest.getPickStand();
|
||||
} else {
|
||||
// 站台号从ip获取
|
||||
Stand standOfIp = standService.getOne(new LambdaQueryWrapper<Stand>()
|
||||
.eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest))
|
||||
.eq(Stand::getStandType, 2));
|
||||
if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) {
|
||||
standId = standOfIp.getStandId();
|
||||
}
|
||||
}
|
||||
if (StringUtils.isEmpty(standId)) {
|
||||
logger.error("请求参数缺少站台号。");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("请求参数缺少站台号。");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(taskOutRequest.getGoodsId())) {
|
||||
// 根据物料请求拣选
|
||||
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||
.eq(Stock::getStockStatus, StockStatus.OK.getCode())
|
||||
.apply("goods_related ->> '$.goodsId' = {0}", taskOutRequest.getGoodsId())
|
||||
.eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Stock::getVehicleId, taskOutRequest.getVehicleId()));
|
||||
BigDecimal needNum = taskOutRequest.getGoodsNum();
|
||||
if (stockList != null && !stockList.isEmpty()) {
|
||||
List<Stock> waitForOutStockList = new ArrayList<>();
|
||||
// 尝试生成出库任务
|
||||
for (Stock tempStock : stockList) {
|
||||
if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0
|
||||
break;
|
||||
}
|
||||
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
||||
// 当前箱子剩余物料数量多于需求数量
|
||||
needNum = BigDecimal.ZERO;
|
||||
// 设置剩余数量
|
||||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
break;
|
||||
} else {
|
||||
// 当前箱子物料剩余数量少于需求数量
|
||||
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||
// 设置剩余数量
|
||||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(BigDecimal.ZERO);
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
}
|
||||
}
|
||||
// 出库任务列表
|
||||
List<Task> outTasks = new ArrayList<>();
|
||||
// 载具列表
|
||||
List<String> vehicleIds = new ArrayList<>();
|
||||
for (Stock tempStock : waitForOutStockList) {
|
||||
if (vehicleIds.contains(tempStock.getVehicleId())) {
|
||||
continue;
|
||||
}
|
||||
// 创建出库任务
|
||||
Task tempOutTask = new Task();
|
||||
tempOutTask.setTaskId(generateId("CK_"));
|
||||
tempOutTask.setTaskType(TaskType.OUT.getCode());
|
||||
tempOutTask.setTaskGroup(generateId(""));
|
||||
tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||
tempOutTask.setTaskPriority(1);
|
||||
tempOutTask.setVehicleId(tempStock.getVehicleId());
|
||||
tempOutTask.setUserName("WMS_AUTO");
|
||||
tempOutTask.setOrigin(tempStock.getLocationId());
|
||||
tempOutTask.setDestination("");
|
||||
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||
tempOutTask.setIsPicking(1);
|
||||
tempOutTask.setPickStand(standId);
|
||||
outTasks.add(tempOutTask);
|
||||
// 添加载具列表
|
||||
vehicleIds.add(tempStock.getVehicleId());
|
||||
}
|
||||
// 保存出库任务至任务表
|
||||
taskService.saveBatch(outTasks);
|
||||
// 更新载具信息
|
||||
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
||||
.in(Vehicle::getVehicleId, vehicleIds)
|
||||
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode()));
|
||||
// 更新库存信息
|
||||
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||
.set(Stock::getStockStatus, StockStatus.OUT.getCode())
|
||||
.in(Stock::getVehicleId, vehicleIds)
|
||||
.eq(Stock::getStockStatus, StockStatus.OK.getCode()));
|
||||
// 保存拣选任务至拣选任务表
|
||||
createPickTasks(vehicleIds, standId, PickTaskStatusEnum.TEMP.getCode());
|
||||
}
|
||||
} else {
|
||||
List<Vehicle> vehicles = vehicleService.list(new LambdaQueryWrapper<Vehicle>()
|
||||
.eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Vehicle::getVehicleId, taskOutRequest.getVehicleId()));
|
||||
BigDecimal needNum = taskOutRequest.getGoodsNum();
|
||||
// 出库任务列表
|
||||
List<Task> outTasks = new ArrayList<>();
|
||||
// 载具列表
|
||||
List<String> vehicleIds = new ArrayList<>();
|
||||
for (Vehicle vehicle : vehicles) {
|
||||
if (vehicleIds.contains(vehicle.getVehicleId())) {
|
||||
continue;
|
||||
}
|
||||
// 创建出库任务
|
||||
Task tempOutTask = new Task();
|
||||
tempOutTask.setTaskId(generateId("CK_"));
|
||||
tempOutTask.setTaskType(TaskType.OUT.getCode());
|
||||
tempOutTask.setTaskGroup(generateId(""));
|
||||
tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||
tempOutTask.setTaskPriority(1);
|
||||
tempOutTask.setVehicleId(vehicle.getVehicleId());
|
||||
tempOutTask.setUserName("WMS_AUTO");
|
||||
tempOutTask.setOrigin(vehicle.getCurrentLocation());
|
||||
tempOutTask.setDestination("");
|
||||
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||
tempOutTask.setIsPicking(1);
|
||||
tempOutTask.setPickStand(standId);
|
||||
outTasks.add(tempOutTask);
|
||||
// 添加载具列表
|
||||
vehicleIds.add(vehicle.getVehicleId());
|
||||
}
|
||||
// 保存出库任务至任务表
|
||||
taskService.saveBatch(outTasks);
|
||||
// 更新载具信息
|
||||
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
||||
.in(Vehicle::getVehicleId, vehicleIds)
|
||||
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode()));
|
||||
// 更新库存信息
|
||||
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||
.set(Stock::getStockStatus, StockStatus.OUT.getCode())
|
||||
.in(Stock::getVehicleId, vehicleIds)
|
||||
.eq(Stock::getStockStatus, StockStatus.OK.getCode()));
|
||||
// 保存拣选任务至拣选任务表
|
||||
createPickTasks(vehicleIds, standId, PickTaskStatusEnum.TEMP.getCode());
|
||||
}
|
||||
|
||||
logger.info("请求拣选成功!");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("请求拣选成功!");
|
||||
return convertJsonString(response);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
logger.error("发生异常:{}", convertJsonString(e));
|
||||
// 返回其他异常
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("发生异常");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
|
||||
public void createPickTasks(List<String> vehicleIds, String workStation, Integer pickStatus) {
|
||||
if (!Objects.equals(pickStatus, PickTaskStatusEnum.TEMP.getCode()) && !Objects.equals(pickStatus, PickTaskStatusEnum.NEW.getCode())) {
|
||||
return;
|
||||
}
|
||||
// 拣选任务暂存列表
|
||||
List<PickTask> pickTasks = new ArrayList<>();
|
||||
vehicleIds.forEach(vehicleId -> {
|
||||
// 暂存拣选任务
|
||||
PickTask tempPickTask = new PickTask();
|
||||
tempPickTask.setPickTaskId(generateId("PICK_"));
|
||||
tempPickTask.setVehicleId(vehicleId);
|
||||
tempPickTask.setStandId(workStation);
|
||||
tempPickTask.setPickStatus(pickStatus);
|
||||
tempPickTask.setLastUpdateTime(LocalDateTime.now());
|
||||
pickTasks.add(tempPickTask);
|
||||
});
|
||||
// 添加数据库
|
||||
pickTaskService.saveBatch(pickTasks);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 特殊用法---请求回库
|
||||
*
|
||||
* @param taskOutRequest 出库任务
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/requestBackTest")
|
||||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
@MyLog(logTitle = "特殊用法---请求回库", logMethod = "requestBackTest")
|
||||
public String requestBackTest(@RequestBody TaskOutRequest taskOutRequest) {
|
||||
logger.info("接收到特殊用法---请求回库:{},ip地址:{}", convertJsonString(taskOutRequest), HttpUtils.getIpAddr(servletRequest));
|
||||
// 创建响应信息
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 获取站台号
|
||||
String standId = "";
|
||||
if (StringUtils.isNotEmpty(taskOutRequest.getPickStand())) {
|
||||
// 站台号从请求参数中获取
|
||||
standId = taskOutRequest.getPickStand();
|
||||
} else {
|
||||
// 站台号从ip获取
|
||||
Stand standOfIp = standService.getOne(new LambdaQueryWrapper<Stand>()
|
||||
.eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest))
|
||||
.eq(Stand::getStandType, 2));
|
||||
if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) {
|
||||
standId = standOfIp.getStandId();
|
||||
}
|
||||
}
|
||||
if (StringUtils.isEmpty(standId)) {
|
||||
logger.error("请求参数缺少站台号。");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("请求参数缺少站台号。");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
// 查询当前站台的拣货任务
|
||||
PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper<PickTask>()
|
||||
.eq(PickTask::getStandId, standId)
|
||||
.eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()));
|
||||
if (pickTask != null) {
|
||||
// 存储拣选记录
|
||||
PickTaskRecord pickTaskRecord = BeanUtil.copyProperties(pickTask, PickTaskRecord.class);
|
||||
pickTaskRecord.setLastUpdateTime(LocalDateTime.now());
|
||||
pickTaskRecordService.save(pickTaskRecord);
|
||||
// 删除当前拣选任务
|
||||
pickTaskService.removeById(pickTask);
|
||||
if (StringUtils.isNotEmpty(taskOutRequest.getGoodsId())) {
|
||||
if (taskOutRequest.getGoodsNum() == null) {
|
||||
logger.error("输入物料号时,请输入数量");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("输入物料号时,请输入数量");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
// 判断添加库存还是删除库存
|
||||
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
|
||||
.apply("goods_related -> '$.goodsId' = {0}", taskOutRequest.getGoodsId())
|
||||
.eq(Stock::getVehicleId, pickTask.getVehicleId()));
|
||||
if (existStock != null) {
|
||||
// 更新库存
|
||||
StockDetailInfo goodsRelated = existStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(taskOutRequest.getGoodsNum());
|
||||
existStock.setGoodsRelated(goodsRelated);
|
||||
stockService.updateById(existStock);
|
||||
} else {
|
||||
if (StringUtils.isNotEmpty(taskOutRequest.getGoodsId())) {
|
||||
// 生成库存
|
||||
Stock newStock = new Stock();
|
||||
newStock.setStockId(generateId("ST_"));
|
||||
newStock.setVehicleId(pickTask.getVehicleId());
|
||||
newStock.setNoUseDays(0);
|
||||
newStock.setIsInventory(0);
|
||||
newStock.setCreateTime(LocalDateTime.now());
|
||||
newStock.setWeight(BigDecimal.ONE);
|
||||
newStock.setLastUpdateUser(taskOutRequest.getUserName());
|
||||
StockDetailInfo detailInfo = new StockDetailInfo();
|
||||
detailInfo.setGoodsId(taskOutRequest.getGoodsId());
|
||||
detailInfo.setGoodsName(taskOutRequest.getGoodsId());
|
||||
detailInfo.setGoodsStatus(GoodsStatus.OK.getCode());
|
||||
detailInfo.setRemainNum(taskOutRequest.getGoodsNum());
|
||||
detailInfo.setTotalNum(taskOutRequest.getGoodsNum());
|
||||
newStock.setGoodsRelated(detailInfo);
|
||||
stockService.save(newStock);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 调用Wcs的放行接口
|
||||
wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(standId, null));
|
||||
// 更新站台信息
|
||||
standService.update(new LambdaUpdateWrapper<Stand>()
|
||||
.set(Stand::getLastUseTime, LocalDateTime.now())
|
||||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "")
|
||||
.eq(Stand::getStandId, standId));
|
||||
|
||||
logger.info("请求回库成功!");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("请求回库成功");
|
||||
return convertJsonString(response);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
logger.error("发生异常:{}", convertJsonString(e));
|
||||
// 返回其他异常
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("发生异常");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ public class UserController {
|
|||
rsp.setMessage("登录成功");
|
||||
// 返回用户数据
|
||||
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
||||
return JSON.toJSONString(rsp);
|
||||
return convertJsonString(rsp);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
|
|
@ -106,7 +106,7 @@ public class UserController {
|
|||
// 返回其他异常
|
||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||
rsp.setMessage("登录异常");
|
||||
return JSON.toJSONString(rsp);
|
||||
return convertJsonString(rsp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ public class UserController {
|
|||
rsp.setMessage("登录成功");
|
||||
// 返回用户数据
|
||||
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
||||
return JSON.toJSONString(rsp);
|
||||
return convertJsonString(rsp);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
|
|
@ -155,7 +155,7 @@ public class UserController {
|
|||
// 返回其他异常
|
||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||
rsp.setMessage("登录异常");
|
||||
return JSON.toJSONString(rsp);
|
||||
return convertJsonString(rsp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ public class KateDBS {
|
|||
*/
|
||||
@TableField("work_sequence")
|
||||
private Integer workSequence;
|
||||
/**
|
||||
* 机器序列号
|
||||
*/
|
||||
@TableField("machine_no")
|
||||
private String machineNo;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ public class KateDBSHistory {
|
|||
*/
|
||||
@TableField("work_sequence")
|
||||
private Integer workSequence;
|
||||
/**
|
||||
* 机器序列号
|
||||
*/
|
||||
@TableField("machine_no")
|
||||
private String machineNo;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ public class KateDBSLast {
|
|||
*/
|
||||
@TableField("work_sequence")
|
||||
private Integer workSequence;
|
||||
/**
|
||||
* 机器序列号
|
||||
*/
|
||||
@TableField("machine_no")
|
||||
private String machineNo;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -398,6 +398,7 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
|||
tempOutTask.setDestination("");
|
||||
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||
tempOutTask.setIsPicking(1);
|
||||
tempOutTask.setPickStand(workStation);
|
||||
outTasks.add(tempOutTask);
|
||||
// 添加载具列表
|
||||
vehicleIds.add(tempStock.getVehicleId());
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ import lombok.RequiredArgsConstructor;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class StandServiceImplements extends ServiceImpl<StandMapper, Stand> implements StandService {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,10 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
|||
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
||||
*/
|
||||
private static final int BATCH_COUNT = 100;
|
||||
/**
|
||||
* 保存数据总数
|
||||
*/
|
||||
private int SAVE_COUNT = 0;
|
||||
private List<KateDbsExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||
private final KateDBSService kateDBSService;// Dbs服务
|
||||
private final KateDBSLastService kateDBSLastService;// DbsLast服务
|
||||
|
|
@ -70,6 +74,7 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
|||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||
saveData();
|
||||
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -111,5 +116,6 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
|||
}
|
||||
}
|
||||
kateDBSService.saveOrUpdateBatch(kateDbsList);
|
||||
SAVE_COUNT += kateDbsList.size();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ import com.alibaba.excel.context.AnalysisContext;
|
|||
import com.alibaba.excel.read.listener.ReadListener;
|
||||
import com.alibaba.excel.util.ListUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.wms.constants.enums.ConfigMapKeyEnum;
|
||||
import com.wms.entity.app.dto.extend.StockDetailInfo;
|
||||
import com.wms.entity.table.*;
|
||||
import com.wms.service.*;
|
||||
import com.wms.utils.StringUtils;
|
||||
import com.wms.utils.excel.vo.KateDbsExcelVo;
|
||||
import com.wms.utils.excel.vo.KateOrdersExcelVo;
|
||||
import com.wms.utils.excel.vo.StockExcelVo;
|
||||
|
|
@ -16,7 +18,9 @@ import org.slf4j.LoggerFactory;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.wms.config.InitLocalConfig.configMap;
|
||||
import static com.wms.utils.StringUtils.convertJsonString;
|
||||
import static com.wms.utils.WmsUtils.generateId;
|
||||
|
||||
|
|
@ -26,9 +30,13 @@ import static com.wms.utils.WmsUtils.generateId;
|
|||
public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo> {
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
/**
|
||||
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
||||
* 每隔5条存储数据库,实际使用中可以1000条,然后清理list ,方便内存回收
|
||||
*/
|
||||
private static final int BATCH_COUNT = 100;
|
||||
private static final int BATCH_COUNT = 1000;
|
||||
/**
|
||||
* 保存数据总数
|
||||
*/
|
||||
private int SAVE_COUNT = 0;
|
||||
private List<KateOrdersExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||
private final KateOrdersService kateOrdersService;// Dbs服务
|
||||
private final KateOrdersLastService kateOrdersLastService;// DbsLast服务
|
||||
|
|
@ -53,7 +61,11 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
|||
*/
|
||||
@Override
|
||||
public void invoke(KateOrdersExcelVo kateOrdersExcelVo, AnalysisContext analysisContext) {
|
||||
cachedDataList.add(kateOrdersExcelVo);
|
||||
String slocFilterString = configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey());
|
||||
if (StringUtils.isNotEmpty(slocFilterString) && Objects.equals(kateOrdersExcelVo.getSLoc(), slocFilterString)) {
|
||||
// 符合筛选条件的才能添加
|
||||
cachedDataList.add(kateOrdersExcelVo);
|
||||
}
|
||||
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||
if (cachedDataList.size() >= BATCH_COUNT) {
|
||||
logger.info("已经导入{}条数据,开始存储数据库!", cachedDataList.size());
|
||||
|
|
@ -71,6 +83,7 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
|||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||
saveData();
|
||||
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -134,5 +147,6 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
|||
}
|
||||
}
|
||||
kateOrdersService.saveOrUpdateBatch(kateOrdersList);
|
||||
SAVE_COUNT += kateOrdersList.size();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,13 @@ import static com.wms.utils.WmsUtils.generateId;
|
|||
public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
/**
|
||||
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
||||
* 每隔5条存储数据库,实际使用中可以1000条,然后清理list ,方便内存回收
|
||||
*/
|
||||
private static final int BATCH_COUNT = 100;
|
||||
private static final int BATCH_COUNT = 1000;
|
||||
/**
|
||||
* 保存数据总数
|
||||
*/
|
||||
private int SAVE_COUNT = 0;
|
||||
private List<StockExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||
private final StockService stockService;
|
||||
public UploadStocksListener(StockService stockService) {
|
||||
|
|
@ -64,6 +68,7 @@ public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
|||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||
saveData();
|
||||
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -103,5 +108,6 @@ public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
|||
stockList.add(stock);
|
||||
}
|
||||
stockService.saveBatch(stockList);
|
||||
SAVE_COUNT += stockList.size();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@ public class KateDbsExcelVo {
|
|||
*/
|
||||
@ExcelProperty("序号")
|
||||
private Integer workSequence;
|
||||
/**
|
||||
* 机器序列号
|
||||
*/
|
||||
@ExcelProperty("机器序列号")
|
||||
private String machineNo;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -7,27 +7,27 @@ spring:
|
|||
datasource:
|
||||
# 主库
|
||||
master:
|
||||
# 宝开服务器--外网
|
||||
# url: jdbc:mysql://112.4.208.194:3001/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: coder
|
||||
# password: coder
|
||||
# 卡特数据库服务器
|
||||
# url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: developer
|
||||
# password: developer
|
||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# 宝开服务器--内网
|
||||
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: coder
|
||||
# password: coder
|
||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# 上线环境
|
||||
# 本地环境
|
||||
url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
username: developer
|
||||
password: developer
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# 从库
|
||||
slave_1:
|
||||
url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
username: developer
|
||||
password: developer
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
# slave_1:
|
||||
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||
# username: developer
|
||||
# password: developer
|
||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
profiles:
|
||||
active: online
|
||||
servlet:
|
||||
|
|
@ -67,7 +67,9 @@ mybatis-plus:
|
|||
update-strategy: not_null
|
||||
|
||||
logging:
|
||||
config: classpath:logback-spring.xml
|
||||
config: classpath:logback.xml
|
||||
# file:
|
||||
# encoding: UTF-8
|
||||
|
||||
#mybatis 分页插件
|
||||
#pagehelper:
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
|
|
@ -34,7 +35,7 @@
|
|||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/warning/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
|
|
@ -43,6 +44,7 @@
|
|||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>WARNING</level>
|
||||
|
|
@ -54,7 +56,7 @@
|
|||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
|
|
@ -63,6 +65,7 @@
|
|||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
|
|
@ -74,7 +77,7 @@
|
|||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
|
|
@ -83,6 +86,7 @@
|
|||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>DEBUG</level>
|
||||
114
src/main/resources/logback.xml
Normal file
114
src/main/resources/logback.xml
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration debug="false">
|
||||
<!--定义日志文件的存储地址, 这里设置为项目的根目录-->
|
||||
<property name="LOG_HOME" value="log" />
|
||||
<!--日志文件名称:这里spring.application.name表示工程名称-->
|
||||
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
|
||||
<!--默认配置-->
|
||||
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
|
||||
<!--配置控制台(Console)-->
|
||||
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
|
||||
|
||||
<!-- 按照每天生成日志文件 -->
|
||||
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!--日志文件保留天数-->
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender name="WARNING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/warning/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!--日志文件保留天数-->
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>WARNING</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!--日志文件保留天数-->
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!--日志文件输出的目录及文件名-->
|
||||
<FileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!--日志文件保留天数-->
|
||||
<MaxHistory>30</MaxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>DEBUG</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 多环境配置 按照active profile选择分支 -->
|
||||
<springProfile name="local">
|
||||
<!--root节点 全局日志级别,用来指定最基础的日志输出级别-->
|
||||
<root level="INFO">
|
||||
<!-- 将日志输出到文件-->
|
||||
<appender-ref ref="INFO_FILE" />
|
||||
<!-- 将日志输出到控制台-->
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</root>
|
||||
<!-- 子节点向上级传递 局部(包级)日志级别-->
|
||||
<logger level="WARN" name="org.springframework"/>
|
||||
<logger level="WARN" name="com.netflix"/>
|
||||
<logger level="DEBUG" name="org.hibernate.SQL"/>
|
||||
<logger level="INFO" name="com.wms"/>
|
||||
</springProfile>
|
||||
|
||||
<springProfile name="online">
|
||||
<root level="INFO">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</root>
|
||||
<logger level="INFO" name="com.wms" addtivity="false">
|
||||
<!-- 将日志输出到文件-->
|
||||
<appender-ref ref="INFO_FILE" />
|
||||
<appender-ref ref="WARNING_FILE" />
|
||||
<appender-ref ref="ERROR_FILE" />
|
||||
<appender-ref ref="DEBUG_FILE" />
|
||||
</logger>
|
||||
</springProfile>
|
||||
</configuration>
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user