代码更新
This commit is contained in:
parent
cfbc2a202d
commit
812558df92
9
pom.xml
9
pom.xml
|
|
@ -182,17 +182,22 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
<finalName>wms-server</finalName>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
|
||||||
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>16</source>
|
<source>17</source>
|
||||||
<target>16</target>
|
<target>17</target>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ public class ExcelController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
public String uploadStocks(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
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();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
try {
|
||||||
// 导入excel
|
// 导入excel
|
||||||
|
|
@ -102,7 +102,7 @@ public class ExcelController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
public String uploadDbs(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
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();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
try {
|
||||||
// 先移除之前last表中的内容
|
// 先移除之前last表中的内容
|
||||||
|
|
@ -138,7 +138,7 @@ public class ExcelController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
public String uploadKateOrders(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) {
|
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();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
try {
|
||||||
// 导入excel
|
// 导入excel
|
||||||
|
|
@ -168,8 +168,8 @@ public class ExcelController {
|
||||||
public void downloadStockExcel(@RequestBody StockQuery stockQuery, HttpServletResponse response) throws IOException {
|
public void downloadStockExcel(@RequestBody StockQuery stockQuery, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出库存记录,筛选参数:{},请求ip:{}", convertJsonString(stockQuery), getIpAddr(servletRequest));
|
logger.info("导出库存记录,筛选参数:{},请求ip:{}", convertJsonString(stockQuery), getIpAddr(servletRequest));
|
||||||
//设置响应格式
|
//设置响应格式
|
||||||
// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||||
response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
// response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式
|
||||||
response.setCharacterEncoding("utf-8");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("库存报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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 {
|
public void downloadInRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出入库记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
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");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("入库记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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 {
|
public void downloadOutRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出出库记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
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");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("出库记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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 {
|
public void downloadInventoryRecordExcel(@RequestBody TaskRecordQuery query, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出盘点记录,筛选参数:{},请求ip:{}", convertJsonString(query), getIpAddr(servletRequest));
|
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");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("盘点记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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 {
|
public void downloadVehicleExcel(@RequestBody VehicleQuery vehicleQuery, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出料箱报表,筛选参数:{},请求ip:{}", convertJsonString(vehicleQuery), getIpAddr(servletRequest));
|
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");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("盘点记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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 {
|
public void downloadLocationsExcel(@RequestBody LocationQuery locationQuery, HttpServletResponse response) throws IOException {
|
||||||
logger.info("导出库位报表,筛选参数:{},请求ip:{}", convertJsonString(locationQuery), getIpAddr(servletRequest));
|
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");
|
response.setCharacterEncoding("utf-8");
|
||||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||||
String fileName = URLEncoder.encode("库位报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
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().setRemainNum(existStock.getGoodsRelated().getRemainNum().add(inTask.getGoodsRelated().getOpNum()));
|
||||||
existStock.getGoodsRelated().setTotalNum(existStock.getGoodsRelated().getTotalNum().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()));
|
stockService.update(existStock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, existStock.getStockId()));
|
||||||
} else {
|
} else {
|
||||||
Stock newStock = new Stock();
|
Stock newStock = new Stock();
|
||||||
newStock.setStockId(generateId("ST_"));
|
newStock.setStockId(generateId("ST_"));
|
||||||
newStock.setVehicleId(inTask.getVehicleId());
|
newStock.setVehicleId(inTask.getVehicleId());
|
||||||
newStock.setLocationId(inTask.getDestination());
|
|
||||||
newStock.setNoUseDays(0);
|
newStock.setNoUseDays(0);
|
||||||
newStock.setIsInventory(0);
|
newStock.setIsInventory(0);
|
||||||
newStock.setCreateTime(LocalDateTime.now());
|
newStock.setCreateTime(LocalDateTime.now());
|
||||||
newStock.setWeight(inTask.getWeight());
|
newStock.setWeight(inTask.getWeight());
|
||||||
newStock.setLastUpdateUser(inTask.getUserName());
|
|
||||||
StockDetailInfo detailInfo = new StockDetailInfo();
|
StockDetailInfo detailInfo = new StockDetailInfo();
|
||||||
detailInfo.setGoodsId(inTask.getGoodsRelated().getGoodsId());
|
detailInfo.setGoodsId(inTask.getGoodsRelated().getGoodsId());
|
||||||
detailInfo.setGoodsName(inTask.getGoodsRelated().getGoodsName());
|
detailInfo.setGoodsName(inTask.getGoodsRelated().getGoodsName());
|
||||||
|
|
@ -335,7 +330,8 @@ public class TaskController {
|
||||||
}
|
}
|
||||||
// 更新库存状态
|
// 更新库存状态
|
||||||
List<Stock> backStocks = stockService.list(new LambdaQueryWrapper<Stock>()
|
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 -> {
|
backStocks.forEach(stock -> {
|
||||||
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) {
|
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) {
|
||||||
// 库存数量为0时要删除当前库存
|
// 库存数量为0时要删除当前库存
|
||||||
|
|
@ -348,6 +344,7 @@ public class TaskController {
|
||||||
// 后续没有移库
|
// 后续没有移库
|
||||||
stock.setStockStatus(StockStatus.OK.getCode());
|
stock.setStockStatus(StockStatus.OK.getCode());
|
||||||
}
|
}
|
||||||
|
stock.setLocationId(inTask.getDestination());
|
||||||
stock.setLastUpdateTime(LocalDateTime.now());
|
stock.setLastUpdateTime(LocalDateTime.now());
|
||||||
stock.setLastUpdateUser(inTask.getUserName());
|
stock.setLastUpdateUser(inTask.getUserName());
|
||||||
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
|
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
|
||||||
|
|
@ -1806,6 +1803,20 @@ public class TaskController {
|
||||||
.eq(Task::getTaskType, TaskType.IN.getCode())
|
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||||
.likeRight(Task::getTaskId, "HK_"));
|
.likeRight(Task::getTaskId, "HK_"));
|
||||||
if (!hasBackTask) {
|
if (!hasBackTask) {
|
||||||
|
// 判断当前载具是否有入库任务
|
||||||
|
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 = "";
|
String nextLocationId = "";
|
||||||
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
|
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
|
||||||
|
|
@ -1868,6 +1879,7 @@ public class TaskController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
response.setCode(ResponseCode.OK.getCode());
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
response.setMessage("可以回库。");
|
response.setMessage("可以回库。");
|
||||||
|
|
@ -1881,4 +1893,308 @@ public class TaskController {
|
||||||
return convertJsonString(response);
|
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.setMessage("登录成功");
|
||||||
// 返回用户数据
|
// 返回用户数据
|
||||||
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
||||||
return JSON.toJSONString(rsp);
|
return convertJsonString(rsp);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
|
|
@ -106,7 +106,7 @@ public class UserController {
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("登录异常");
|
rsp.setMessage("登录异常");
|
||||||
return JSON.toJSONString(rsp);
|
return convertJsonString(rsp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -147,7 +147,7 @@ public class UserController {
|
||||||
rsp.setMessage("登录成功");
|
rsp.setMessage("登录成功");
|
||||||
// 返回用户数据
|
// 返回用户数据
|
||||||
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
rsp.setReturnData(generateUserInfo(validatedUser, HttpUtils.getIpAddr(servletRequest)));
|
||||||
return JSON.toJSONString(rsp);
|
return convertJsonString(rsp);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||||
|
|
@ -155,7 +155,7 @@ public class UserController {
|
||||||
// 返回其他异常
|
// 返回其他异常
|
||||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||||
rsp.setMessage("登录异常");
|
rsp.setMessage("登录异常");
|
||||||
return JSON.toJSONString(rsp);
|
return convertJsonString(rsp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ public class KateDBS {
|
||||||
*/
|
*/
|
||||||
@TableField("work_sequence")
|
@TableField("work_sequence")
|
||||||
private Integer workSequence;
|
private Integer workSequence;
|
||||||
|
/**
|
||||||
|
* 机器序列号
|
||||||
|
*/
|
||||||
|
@TableField("machine_no")
|
||||||
|
private String machineNo;
|
||||||
/**
|
/**
|
||||||
* 工单
|
* 工单
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ public class KateDBSHistory {
|
||||||
*/
|
*/
|
||||||
@TableField("work_sequence")
|
@TableField("work_sequence")
|
||||||
private Integer workSequence;
|
private Integer workSequence;
|
||||||
|
/**
|
||||||
|
* 机器序列号
|
||||||
|
*/
|
||||||
|
@TableField("machine_no")
|
||||||
|
private String machineNo;
|
||||||
/**
|
/**
|
||||||
* 工单
|
* 工单
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ public class KateDBSLast {
|
||||||
*/
|
*/
|
||||||
@TableField("work_sequence")
|
@TableField("work_sequence")
|
||||||
private Integer workSequence;
|
private Integer workSequence;
|
||||||
|
/**
|
||||||
|
* 机器序列号
|
||||||
|
*/
|
||||||
|
@TableField("machine_no")
|
||||||
|
private String machineNo;
|
||||||
/**
|
/**
|
||||||
* 工单
|
* 工单
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -398,6 +398,7 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
tempOutTask.setDestination("");
|
tempOutTask.setDestination("");
|
||||||
tempOutTask.setCreateTime(LocalDateTime.now());
|
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||||
tempOutTask.setIsPicking(1);
|
tempOutTask.setIsPicking(1);
|
||||||
|
tempOutTask.setPickStand(workStation);
|
||||||
outTasks.add(tempOutTask);
|
outTasks.add(tempOutTask);
|
||||||
// 添加载具列表
|
// 添加载具列表
|
||||||
vehicleIds.add(tempStock.getVehicleId());
|
vehicleIds.add(tempStock.getVehicleId());
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||||
public class StandServiceImplements extends ServiceImpl<StandMapper, Stand> implements StandService {
|
public class StandServiceImplements extends ServiceImpl<StandMapper, Stand> implements StandService {
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,10 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
||||||
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
|
||||||
*/
|
*/
|
||||||
private static final int BATCH_COUNT = 100;
|
private static final int BATCH_COUNT = 100;
|
||||||
|
/**
|
||||||
|
* 保存数据总数
|
||||||
|
*/
|
||||||
|
private int SAVE_COUNT = 0;
|
||||||
private List<KateDbsExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
private List<KateDbsExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
private final KateDBSService kateDBSService;// Dbs服务
|
private final KateDBSService kateDBSService;// Dbs服务
|
||||||
private final KateDBSLastService kateDBSLastService;// DbsLast服务
|
private final KateDBSLastService kateDBSLastService;// DbsLast服务
|
||||||
|
|
@ -70,6 +74,7 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
||||||
@Override
|
@Override
|
||||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||||
saveData();
|
saveData();
|
||||||
|
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -111,5 +116,6 @@ public class UploadDbsListener implements ReadListener<KateDbsExcelVo> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kateDBSService.saveOrUpdateBatch(kateDbsList);
|
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.read.listener.ReadListener;
|
||||||
import com.alibaba.excel.util.ListUtils;
|
import com.alibaba.excel.util.ListUtils;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.app.dto.extend.StockDetailInfo;
|
||||||
import com.wms.entity.table.*;
|
import com.wms.entity.table.*;
|
||||||
import com.wms.service.*;
|
import com.wms.service.*;
|
||||||
|
import com.wms.utils.StringUtils;
|
||||||
import com.wms.utils.excel.vo.KateDbsExcelVo;
|
import com.wms.utils.excel.vo.KateDbsExcelVo;
|
||||||
import com.wms.utils.excel.vo.KateOrdersExcelVo;
|
import com.wms.utils.excel.vo.KateOrdersExcelVo;
|
||||||
import com.wms.utils.excel.vo.StockExcelVo;
|
import com.wms.utils.excel.vo.StockExcelVo;
|
||||||
|
|
@ -16,7 +18,9 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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.StringUtils.convertJsonString;
|
||||||
import static com.wms.utils.WmsUtils.generateId;
|
import static com.wms.utils.WmsUtils.generateId;
|
||||||
|
|
||||||
|
|
@ -26,9 +30,13 @@ import static com.wms.utils.WmsUtils.generateId;
|
||||||
public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo> {
|
public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo> {
|
||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
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 List<KateOrdersExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
private final KateOrdersService kateOrdersService;// Dbs服务
|
private final KateOrdersService kateOrdersService;// Dbs服务
|
||||||
private final KateOrdersLastService kateOrdersLastService;// DbsLast服务
|
private final KateOrdersLastService kateOrdersLastService;// DbsLast服务
|
||||||
|
|
@ -53,7 +61,11 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void invoke(KateOrdersExcelVo kateOrdersExcelVo, AnalysisContext analysisContext) {
|
public void invoke(KateOrdersExcelVo kateOrdersExcelVo, AnalysisContext analysisContext) {
|
||||||
|
String slocFilterString = configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey());
|
||||||
|
if (StringUtils.isNotEmpty(slocFilterString) && Objects.equals(kateOrdersExcelVo.getSLoc(), slocFilterString)) {
|
||||||
|
// 符合筛选条件的才能添加
|
||||||
cachedDataList.add(kateOrdersExcelVo);
|
cachedDataList.add(kateOrdersExcelVo);
|
||||||
|
}
|
||||||
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||||
if (cachedDataList.size() >= BATCH_COUNT) {
|
if (cachedDataList.size() >= BATCH_COUNT) {
|
||||||
logger.info("已经导入{}条数据,开始存储数据库!", cachedDataList.size());
|
logger.info("已经导入{}条数据,开始存储数据库!", cachedDataList.size());
|
||||||
|
|
@ -71,6 +83,7 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
||||||
@Override
|
@Override
|
||||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||||
saveData();
|
saveData();
|
||||||
|
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -134,5 +147,6 @@ public class UploadKateOrdersListener implements ReadListener<KateOrdersExcelVo>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kateOrdersService.saveOrUpdateBatch(kateOrdersList);
|
kateOrdersService.saveOrUpdateBatch(kateOrdersList);
|
||||||
|
SAVE_COUNT += kateOrdersList.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,13 @@ import static com.wms.utils.WmsUtils.generateId;
|
||||||
public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
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 List<StockExcelVo> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
|
||||||
private final StockService stockService;
|
private final StockService stockService;
|
||||||
public UploadStocksListener(StockService stockService) {
|
public UploadStocksListener(StockService stockService) {
|
||||||
|
|
@ -64,6 +68,7 @@ public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
||||||
@Override
|
@Override
|
||||||
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
||||||
saveData();
|
saveData();
|
||||||
|
logger.info("此次共保存{}条数据。", SAVE_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -103,5 +108,6 @@ public class UploadStocksListener implements ReadListener<StockExcelVo> {
|
||||||
stockList.add(stock);
|
stockList.add(stock);
|
||||||
}
|
}
|
||||||
stockService.saveBatch(stockList);
|
stockService.saveBatch(stockList);
|
||||||
|
SAVE_COUNT += stockList.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@ public class KateDbsExcelVo {
|
||||||
*/
|
*/
|
||||||
@ExcelProperty("序号")
|
@ExcelProperty("序号")
|
||||||
private Integer workSequence;
|
private Integer workSequence;
|
||||||
|
/**
|
||||||
|
* 机器序列号
|
||||||
|
*/
|
||||||
|
@ExcelProperty("机器序列号")
|
||||||
|
private String machineNo;
|
||||||
/**
|
/**
|
||||||
* 工单
|
* 工单
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -7,27 +7,27 @@ spring:
|
||||||
datasource:
|
datasource:
|
||||||
# 主库
|
# 主库
|
||||||
master:
|
master:
|
||||||
# 宝开服务器--外网
|
# 卡特数据库服务器
|
||||||
# url: jdbc:mysql://112.4.208.194:3001/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: coder
|
# username: developer
|
||||||
# password: coder
|
# password: developer
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# 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
|
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: coder
|
# username: coder
|
||||||
# password: coder
|
# password: coder
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# 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
|
url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
username: developer
|
username: developer
|
||||||
password: developer
|
password: developer
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 从库
|
# 从库
|
||||||
slave_1:
|
# slave_1:
|
||||||
url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
username: developer
|
# username: developer
|
||||||
password: developer
|
# password: developer
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
profiles:
|
profiles:
|
||||||
active: online
|
active: online
|
||||||
servlet:
|
servlet:
|
||||||
|
|
@ -67,7 +67,9 @@ mybatis-plus:
|
||||||
update-strategy: not_null
|
update-strategy: not_null
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
config: classpath:logback-spring.xml
|
config: classpath:logback.xml
|
||||||
|
# file:
|
||||||
|
# encoding: UTF-8
|
||||||
|
|
||||||
#mybatis 分页插件
|
#mybatis 分页插件
|
||||||
#pagehelper:
|
#pagehelper:
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<!--日志文件输出的目录及文件名-->
|
<!--日志文件输出的目录及文件名-->
|
||||||
<FileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
<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>
|
<maxFileSize>10MB</maxFileSize>
|
||||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||||
<!--日志文件保留天数-->
|
<!--日志文件保留天数-->
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>INFO</level>
|
<level>INFO</level>
|
||||||
|
|
@ -34,7 +35,7 @@
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<!--日志文件输出的目录及文件名-->
|
<!--日志文件输出的目录及文件名-->
|
||||||
<FileNamePattern>${LOG_HOME}/warning/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
<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>
|
<maxFileSize>10MB</maxFileSize>
|
||||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||||
<!--日志文件保留天数-->
|
<!--日志文件保留天数-->
|
||||||
|
|
@ -43,6 +44,7 @@
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>WARNING</level>
|
<level>WARNING</level>
|
||||||
|
|
@ -54,7 +56,7 @@
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<!--日志文件输出的目录及文件名-->
|
<!--日志文件输出的目录及文件名-->
|
||||||
<FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
<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>
|
<maxFileSize>10MB</maxFileSize>
|
||||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||||
<!--日志文件保留天数-->
|
<!--日志文件保留天数-->
|
||||||
|
|
@ -63,6 +65,7 @@
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>ERROR</level>
|
<level>ERROR</level>
|
||||||
|
|
@ -74,7 +77,7 @@
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
<!--日志文件输出的目录及文件名-->
|
<!--日志文件输出的目录及文件名-->
|
||||||
<FileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
|
<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>
|
<maxFileSize>10MB</maxFileSize>
|
||||||
</TimeBasedFileNamingAndTriggeringPolicy>
|
</TimeBasedFileNamingAndTriggeringPolicy>
|
||||||
<!--日志文件保留天数-->
|
<!--日志文件保留天数-->
|
||||||
|
|
@ -83,6 +86,7 @@
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||||
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
<level>DEBUG</level>
|
<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