后台代码错误解决完成

This commit is contained in:
梁州 2024-07-01 10:50:52 +08:00
parent c110325a11
commit 409df1ac81
15 changed files with 204 additions and 191 deletions

27
pom.xml
View File

@ -38,7 +38,7 @@
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
@ -88,22 +88,15 @@
<version>4.5.13</version>
</dependency>
<!-- MAP工具 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.0-android</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.4</version>
<version>4.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
@ -116,7 +109,7 @@
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
<version>5.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
@ -132,7 +125,7 @@
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>1.0.1</version>
<version>1.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
@ -144,12 +137,18 @@
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
<version>3.0.0</version>
</dependency>
<!-- MAP工具 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.0-android</version>
</dependency>
<!-- aop切面 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->

View File

@ -1,6 +1,5 @@
package com.wms;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -9,10 +8,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@SpringBootApplication()
@EnableScheduling
@EnableTransactionManagement
@MapperScan("com.wms.mapper")
@EnableAsync
public class WmsApplication {
/**

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* mp配置类

View File

@ -5,8 +5,6 @@ import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wms.annotation.MyLog;
import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity;
@ -14,8 +12,6 @@ import com.wms.entity.app.dto.GoodsDto;
import com.wms.entity.app.dto.PageDto;
import com.wms.entity.app.request.GoodsQuery;
import com.wms.entity.app.vo.GoodsVo;
import com.wms.entity.page.PageDomain;
import com.wms.entity.page.TableResponse;
import com.wms.entity.table.Goods;
import com.wms.service.GoodsService;
import com.wms.utils.HttpUtils;
@ -111,9 +107,11 @@ public class GoodsController {
if (goodsService.update(BeanUtil.copyProperties(goods, Goods.class),
new LambdaUpdateWrapper<Goods>().eq(Goods::getGoodsId, goods.getGoodsId()))) {
// 返回成功
logger.info("更新物料信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新物料信息成功");
} else {
logger.error("更新物料信息失败");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("更新物料信息失败");
}
@ -121,10 +119,10 @@ public class GoodsController {
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("查询物料发生异常:{}", convertJsonString(e));
logger.error("更新物料信息发生异常:{}", convertJsonString(e));
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("查询物料发生异常");
rsp.setMessage("更新物料信息发生异常");
return convertJsonString(rsp);
}
}
@ -222,14 +220,13 @@ public class GoodsController {
logger.info("删除物料信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("删除物料信息成功");
return convertJsonString(rsp);
} else {
// 返回其他异常
logger.error("删除物料信息成功");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("删除物料信息失败");
return convertJsonString(rsp);
}
return convertJsonString(rsp);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

View File

@ -1,21 +1,13 @@
package com.wms.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.dto.PageDto;
import com.wms.entity.app.request.GoodsQuery;
import com.wms.entity.app.request.TaskRecordQuery;
import com.wms.entity.app.vo.GoodsVo;
import com.wms.entity.app.vo.TaskRecordVO;
import com.wms.entity.page.PageDomain;
import com.wms.entity.page.TableResponse;
import com.wms.entity.table.Goods;
import com.wms.entity.table.TaskRecord;
import com.wms.service.TaskRecordService;
import com.wms.utils.HttpUtils;
@ -32,15 +24,12 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.wms.utils.StringUtils.convertJsonString;
/**
* WMS记录控制类
*
* @author 梁州
* @date 2023/2/14
*/
@Controller
@CrossOrigin

View File

@ -1,24 +1,17 @@
package com.wms.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wms.annotation.MyLog;
import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.dto.GoodsDto;
import com.wms.entity.app.dto.PageDto;
import com.wms.entity.app.request.GoodsQuery;
import com.wms.entity.app.dto.StandDto;
import com.wms.entity.app.request.StandQuery;
import com.wms.entity.app.vo.GoodsVo;
import com.wms.entity.page.PageDomain;
import com.wms.entity.page.TableResponse;
import com.wms.entity.table.Goods;
import com.wms.entity.app.vo.StandVo;
import com.wms.entity.table.Stand;
import com.wms.service.StandService;
import com.wms.utils.HttpUtils;
import com.wms.utils.StringUtils;
@ -34,8 +27,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.wms.utils.StringUtils.convertJsonString;
/**
@ -63,67 +54,79 @@ public class StandController {
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getStandsByPage(@RequestBody StandQuery standQuery){
logger.info("接收到查询物料数据请求:{}请求ip{}", convertJsonString(standQuery), HttpUtils.getIpAddr(servletRequest));
logger.info("接收到查询站台信息请求:{}请求ip{}", convertJsonString(standQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity();
try {
Page<Goods> page = goodsQuery.toMpPage();
Page<Goods> goodsPage = goodsService.page(page, new LambdaQueryWrapper<Goods>()
.like(StringUtils.isNotEmpty(goodsQuery.getGoodsId()), Goods::getGoodsId, goodsQuery.getGoodsId())
.like(StringUtils.isNotEmpty(goodsQuery.getGoodsName()), Goods::getGoodsName, goodsQuery.getGoodsName()));
Page<Stand> page = standQuery.toMpPage();
LambdaQueryWrapper<Stand> lambdaQueryWrapper = new LambdaQueryWrapper<Stand>()
.like(StringUtils.isNotEmpty(standQuery.getStandId()), Stand::getStandId, standQuery.getStandId())
.eq(standQuery.getStandStatus() != null, Stand::getStandStatus, standQuery.getStandStatus())
.eq(standQuery.getIsLock() != null, Stand::getIsLock, standQuery.getIsLock())
.eq(standQuery.getEquipmentType() != null, Stand::getStandType, standQuery.getEquipmentType());
if (standQuery.getStandType() != null) {
if (standQuery.getStandType() == 1) {// 入库
lambdaQueryWrapper.eq(Stand::getAllowIn, 1);// 入库
} else if (standQuery.getStandType() == 2) {// 出库
lambdaQueryWrapper.eq(Stand::getAllowOut, 1);// 出库
}
}
Page<Stand> standPage = standService.page(page, lambdaQueryWrapper);
PageDto<GoodsVo> pageDto = PageDto.of(goodsPage, goods -> BeanUtil.copyProperties(goods, GoodsVo.class));
PageDto<StandVo> pageDto = PageDto.of(standPage, stand -> BeanUtil.copyProperties(stand, StandVo.class));
response.setCode(ResponseCode.OK.getCode());
response.setMessage("查询成功");
response.setMessage("查询站台成功");
response.setReturnData(pageDto);
return convertJsonString(response);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("查询物料信息发生异常");
logger.error("查询站台发生异常:{}", convertJsonString(e));
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("查询物料发生异常");
response.setMessage("查询站台发生异常");
return convertJsonString(response);
}
}
/**
* 更新物料信息
* 更新站台信息
*
* @param goods 物料信息
* @param stand 站台信息
* @return 结果
*/
@PostMapping("/updateGoodsInfo")
@PostMapping("/updateStandInfo")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "更新物料信息", logMethod = "updateGoodsInfo")
public String updateGoodsInfo(@RequestBody GoodsDto goods) {
logger.info("接收到更新物料信息请求:{}请求ip{}", convertJsonString(goods), HttpUtils.getIpAddr(servletRequest));
@MyLog(logTitle = "更新站台信息", logMethod = "updateStandInfo")
public String updateGoodsInfo(@RequestBody StandDto stand) {
logger.info("接收到更新站台信息请求:{}请求ip{}", convertJsonString(stand), HttpUtils.getIpAddr(servletRequest));
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
try {
if (StringUtils.isEmpty(goods.getGoodsId())) {// 物料编码为空不执行
logger.error("请求更新的物料编号为空");
if (StringUtils.isEmpty(stand.getStandId())) {// 站台id为空不允许更新
logger.error("请求更新的站台id为空");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求更新的物料编号为空");
rsp.setMessage("请求更新的站台id为空");
return convertJsonString(rsp);
}
if (goodsService.update(BeanUtil.copyProperties(goods, Goods.class),
new LambdaUpdateWrapper<Goods>().eq(Goods::getGoodsId, goods.getGoodsId()))) {
if (standService.update(BeanUtil.copyProperties(stand, Stand.class),
new LambdaUpdateWrapper<Stand>().eq(Stand::getStandId, stand.getStandId()))) {
// 返回成功
logger.info("更新站台信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新物料信息成功");
rsp.setMessage("更新站台信息成功");
} else {
logger.error("更新站台信息失败");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("更新物料信息失败");
rsp.setMessage("更新站台信息失败");
}
return convertJsonString(rsp);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("查询物料发生异常:{}", convertJsonString(e));
logger.error("更新站台信息发生异常:{}", convertJsonString(e));
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("查询物料发生异常");
rsp.setMessage("更新站台信息发生异常");
return convertJsonString(rsp);
}
}

View File

@ -1,14 +1,17 @@
package com.wms.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wms.annotation.MyLog;
import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity;
import com.wms.entity.page.PageDomain;
import com.wms.entity.page.TableRequest;
import com.wms.entity.page.TableResponse;
import com.wms.entity.table.StockDto;
import com.wms.entity.app.dto.PageDto;
import com.wms.entity.app.dto.StockDto;
import com.wms.entity.app.request.StockQuery;
import com.wms.entity.app.vo.StockVo;
import com.wms.entity.table.Stock;
import com.wms.service.StockService;
import com.wms.utils.HttpUtils;
import com.wms.utils.StringUtils;
@ -25,11 +28,13 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.math.BigDecimal;
import static com.wms.utils.StringUtils.convertJsonString;
/**
* WMS库存控制类
*
* @author 梁州
* &#064;date 2023/2/14
*/
@ -50,44 +55,39 @@ public class StockController {
private final HttpServletRequest servletRequest;
/**
* 查找所有库存
* 查找所有物料
*/
@PostMapping("/getAllStocks")
@ResponseBody
public String getAllStocks(@RequestBody TableRequest<String, String> tableRequest){
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到查询库存请求:{}", JSON.toJSONString(tableRequest));
TableResponse tblResp = new TableResponse();
// 解析请求数据
if (tableRequest == null || tableRequest.getPage() == null) {
tblResp.setCode(ResponseCode.ERROR.getCode());
tblResp.setMessage("请求数据为空,无法处理!");
logger.error("请求数据为空,无法处理!");
return JSON.toJSONString(tblResp);
}
// 处理分页信息
PageDomain pageRequest = tableRequest.getPage();
String[] orderByArr = {"location_id", "vehicle_id", "goods_id", "batch_no", "remain_num", "expiration_date", "create_time"};
String orderByStr;
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getAllStocks(@RequestBody StockQuery stockQuery) {
logger.info("接收到查询库存数据请求:{}请求ip{}", convertJsonString(stockQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity();
try {
Page<Stock> page = stockQuery.toMpPage();
Page<Stock> stockPage = stockService.page(page, new LambdaQueryWrapper<Stock>()
.like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId())
.eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId())
.eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus())
.apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", stockQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", stockQuery.getGoodsName()));
if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) {
orderByStr = pageRequest.getOrderBy();
} else {
// 默认排序
orderByStr = "expiration_date desc";
PageDto<StockVo> pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class));
response.setCode(ResponseCode.OK.getCode());
response.setMessage("查询库存成功");
response.setReturnData(pageDto);
return convertJsonString(response);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("查询库存发生异常:{}", convertJsonString(e));
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("查询库存发生异常");
return convertJsonString(response);
}
PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr);
List<StockDto> stocks = stockService.selStocksFront(tableRequest.getParam());
PageInfo<StockDto> stockPageInfo = new PageInfo<>(stocks);
tblResp.setCode(ResponseCode.OK.getCode());
tblResp.setMessage("查询库存成功!");
tblResp.setRows(stockPageInfo.getList());
tblResp.setTotal(stockPageInfo.getTotal());
logger.info("查询库存成功,总数:{},当前页:{},当前页数量:{}", stockPageInfo.getTotal(), stockPageInfo.getPageNum(), stockPageInfo.getPageSize());
return JSON.toJSONString(tblResp);
}
/**
* 更新库存信息
*
@ -97,8 +97,9 @@ public class StockController {
@PostMapping("/updateStockInfo")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "更新库存信息", logMethod = "updateStockInfo")
public String updateStockInfo(@RequestBody StockDto stock) {
logger.info("接收到更新库存信息请求:{}ip地址{}", JSON.toJSONString(stock), HttpUtils.getIpAddr(servletRequest));
logger.info("接收到更新库存信息请求:{}请求ip{}", convertJsonString(stock), HttpUtils.getIpAddr(servletRequest));
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
try {
@ -106,26 +107,45 @@ public class StockController {
logger.error("请求的库存编号为空,不允许修改");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求的库存编号为空,不允许修改");
return JSON.toJSONString(rsp);
return convertJsonString(rsp);
}
if (stock.getRealNum() == 0) {
stockService.deleteStock(stock.getStockId());
LambdaQueryWrapper<Stock> stockLambdaQueryWrapper = new LambdaQueryWrapper<Stock>().eq(Stock::getStockId, stock.getStockId());
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) <= 0) {
if (stockService.remove(stockLambdaQueryWrapper)) {
// 返回成功
logger.info("数量为0删除库存成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("数量为0删除库存成功");
} else {
// 返回失败
logger.error("数量为0删除库存失败");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("数量为0删除库存失败");
}
} else {
stockService.modifyStock(stock);
if (stockService.update(BeanUtil.copyProperties(stock, Stock.class), stockLambdaQueryWrapper)) {
// 返回成功
logger.info("更新库存信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新库存信息成功");
return JSON.toJSONString(rsp);
} else {
// 返回失败
logger.error("更新库存信息失败");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("更新库存信息失败");
}
}
return convertJsonString(rsp);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("发生异常:{}", e.getMessage());
logger.info("更新库存信息发生异常:{}", convertJsonString(e));
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp);
rsp.setMessage("更新库存信息发生异常");
return convertJsonString(rsp);
}
// 返回成功
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新库存信息成功");
return JSON.toJSONString(rsp);
}
/**
@ -137,16 +157,26 @@ public class StockController {
@PostMapping("/addNewStock")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "添加库存信息", logMethod = "addNewStock")
public String addNewStock(@RequestBody StockDto stock) {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到人工添加库存:{}", JSON.toJSONString(stock));
logger.info("接收到添加信息请求:{}请求ip{}", convertJsonString(stock), HttpUtils.getIpAddr(servletRequest));
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
try {
StockDto tempStock = new StockDto();
tempStock.setStockId(WmsUtils.generateId("ST"));
if (stockService.save(BeanUtil.copyProperties(stock, Stock.class))) {
// 返回成功
logger.info("添加库存信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("添加库存信息成功");
} else {
// 返回失败
logger.error("添加库存信息失败");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("添加库存信息失败");
}
return JSON.toJSONString(rsp);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -156,9 +186,5 @@ public class StockController {
rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp);
}
// 返回成功
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("添加库存信息成功");
return JSON.toJSONString(rsp);
}
}

View File

@ -10,7 +10,6 @@ import com.wms.entity.app.*;
import com.wms.entity.app.dto.TaskDto;
import com.wms.entity.app.dto.extend.StockDetailInfo;
import com.wms.entity.app.dto.extend.TaskDetailInfo;
import com.wms.entity.app.dto.extend.VehicleDetailInfo;
import com.wms.entity.app.request.GoodsInRequest;
import com.wms.entity.app.request.TaskInRequest;
import com.wms.entity.app.request.TaskOutRequest;
@ -19,12 +18,12 @@ import com.wms.entity.table.*;
import com.wms.service.*;
import com.wms.utils.HttpUtils;
import com.wms.utils.StringUtils;
import com.wms.utils.WmsUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Isolation;
@ -51,6 +50,7 @@ import static com.wms.utils.WmsUtils.generateId;
@CrossOrigin
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RequestMapping(value = "/wms/task")
@Api(value = "WMS任务控制类")
public class TaskController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
@ -85,10 +85,6 @@ public class TaskController {
* 请求头部信息
*/
private final HttpServletRequest servletRequest;
/**
* 日志服务
*/
private final LogService logService;
/**
* 接收入库任务请求
@ -100,6 +96,7 @@ public class TaskController {
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "入库请求", logMethod = "requestIn")
@ApiOperation(value = "请求入库")
public String receiveTaskInRequest(@RequestBody TaskInRequest taskInRequest) {
logger.info("接收到入库请求:{}ip地址{}", JSON.toJSONString(taskInRequest), HttpUtils.getIpAddr(servletRequest));
// 创建响应信息
@ -142,7 +139,7 @@ public class TaskController {
return convertJsonString(response);
}
// 生成入库任务
String saveTaskResult = "";
String saveTaskResult;
if (taskInRequest.getGoodsList().isEmpty()) {// 空托入库
saveTaskResult = genEmptyInTask(taskInRequest, nextLocationMap.get("nextLocationId"), nextLocationMap.get("preTaskId"));
} else {// 带料入库
@ -274,10 +271,8 @@ public class TaskController {
}
// 验证载具号是否重复入库
if (vehicleService.exists(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, taskInRequest.getVehicleId())
.and(wrapper -> {
wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())
.or().eq(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode());
}))) {
.and(wrapper -> wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())
.or().eq(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode())))) {
return TaskInValidationEnum.DUPLICATE_VEHICLE_ID.getErrorMessage();
}
// 验证当前载具是否已经有入库任务
@ -337,6 +332,7 @@ public class TaskController {
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "出库请求", logMethod = "requestOut")
@ApiOperation(value = "请求入库")
public String receiveTaskOutRequest(@RequestBody TaskOutRequest taskOutRequest) {
logger.info("接收到出库请求:{}ip地址{}", JSON.toJSONString(taskOutRequest), HttpUtils.getIpAddr(servletRequest));
// 创建响应信息
@ -351,22 +347,17 @@ public class TaskController {
return convertJsonString(response);
}
// 没有物料单纯载具或者库位出库
String genResult;
if (StringUtils.isEmpty(taskOutRequest.getGoodsId())) {
String genResult = genVehicleLocationOutTask(taskOutRequest);
if (!genResult.equals("")) {
logger.error("出库错误!{}", genResult);
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("出库错误:" + genResult);
return convertJsonString(response);
}
genResult = genVehicleLocationOutTask(taskOutRequest);
} else {
String genResult = genGoodsOutTask(taskOutRequest);
if (!genResult.equals("")) {
logger.error("出库错误!{}", genResult);
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("出库错误:" + genResult);
return convertJsonString(response);
}
genResult = genGoodsOutTask(taskOutRequest);
}
if (!genResult.equals("")) {
logger.error("出库错误!{}", genResult);
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("出库错误:" + genResult);
return convertJsonString(response);
}
logger.info("处理出库请求成功!");
@ -880,8 +871,12 @@ public class TaskController {
taskService.remove(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, moveTask.getTaskId()));
}
}
} else if (taskStatus == WcsTaskStatus.RUN.getCode()) {// 任务完成
// TODO
} else if (taskStatus == WcsTaskStatus.RUN.getCode()) {// 任务开始运行
// 更新任务状态为正在运行
for (Task task : feedBackTasks) {
task.setTaskStatus(WmsTaskStatus.RUN.getCode());
}
taskService.updateBatchById(feedBackTasks);
}

View File

@ -1,6 +1,7 @@
package com.wms.entity.app.vo;
import com.wms.entity.table.LocationDto;
import com.wms.entity.app.dto.LocationDto;
import java.util.List;

View File

@ -1,10 +1,11 @@
package com.wms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wms.entity.table.Config;
import java.util.List;
public interface ConfigService {
public interface ConfigService extends IService<Config> {
List<Config> selectConfigs(String configKey);
int updateConfig(Config config);

View File

@ -3,8 +3,6 @@ package com.wms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wms.entity.table.WmsLog;
import java.util.List;
public interface LogService extends IService<WmsLog> {
/**
* 定期删除日志记录30天清一次

View File

@ -1,6 +1,7 @@
package com.wms.service.serviceImplements;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wms.entity.table.Config;
import com.wms.mapper.ConfigMapper;
import com.wms.service.ConfigService;
@ -13,7 +14,7 @@ import java.util.List;
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ConfigServiceImplement implements ConfigService {
public class ConfigServiceImplement extends ServiceImpl<ConfigMapper, Config> implements ConfigService {
private final ConfigMapper configMapper;
@Override

View File

@ -8,10 +8,10 @@ import com.wms.entity.table.Stand;
import com.wms.entity.table.Stock;
import com.wms.entity.table.Task;
import com.wms.mapper.LocationMapper;
import com.wms.mapper.StandMapper;
import com.wms.mapper.StockMapper;
import com.wms.mapper.TaskMapper;
import com.wms.service.LocationService;
import com.wms.service.StandService;
import com.wms.service.StockService;
import com.wms.service.TaskService;
import com.wms.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,15 +29,15 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
/**
* 任务
*/
private final TaskService taskService;
private final TaskMapper taskMapper;
/**
* 站台
*/
private final StandService standService;
private final StandMapper standMapper;
/**
* 库存
*/
private final StockService stockService;
private final StockMapper stockMapper;
/**
* 查找一个可用库位
@ -62,7 +62,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
LambdaQueryWrapper<Stand> standQueryWrapper = new LambdaQueryWrapper<Stand>()
.select(Stand::getStandId, Stand::getEquipmentId)
.eq(Stand::getStandId, inPoint);
Stand queryStand = standService.getOne(standQueryWrapper);
Stand queryStand = standMapper.selectOne(standQueryWrapper);
if (queryStand != null && queryStand.getEquipmentId() != null) {
equipmentId = queryStand.getEquipmentId();
}
@ -78,7 +78,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
.eq(Stand::getIsLock, 0)
.eq(Stand::getStandType, 3)
.orderByAsc(Stand::getLastUseTime);
List<Stand> LRUStands = standService.list(LRUStandQueryWrapper);
List<Stand> LRUStands = standMapper.selectList(LRUStandQueryWrapper);
if (LRUStands.isEmpty()) {
return resultMap;
} else {
@ -129,7 +129,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
LambdaQueryWrapper<Task> taskQueryWrapper = new LambdaQueryWrapper<Task>()
.select(Task::getTaskId)
.eq(Task::getOrigin, havaTaskLocation.getLocationId());
if (taskService.count(taskQueryWrapper) > 0) {
if (taskMapper.selectCount(taskQueryWrapper) > 0) {
hasTasksFlag = true;
break;
}
@ -151,7 +151,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
LambdaQueryWrapper<Task> taskQueryWrapper = new LambdaQueryWrapper<Task>()
.select(Task::getTaskId)
.eq(Task::getDestination, plusOneDepthLocation.getLocationId());
Task plusOneDepthTask = taskService.getOne(taskQueryWrapper);
Task plusOneDepthTask = taskMapper.selectOne(taskQueryWrapper);
if (plusOneDepthTask != null) {
resultMap.put("nextLocationId", oneAvailableLocation.getLocationId());
resultMap.put("preTaskId", plusOneDepthTask.getTaskId());
@ -171,7 +171,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
private int selectEquipmentByLRUAndGoods(List<Stand> LRUStands, String goodsId) {
int equipmentId = -1;
List<Integer> equipmentIds = new ArrayList<>();
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
List<Task> tasks = taskMapper.selectList(new LambdaQueryWrapper<Task>()
.select(Task::getDestination)
.apply("goods_related -> '$.goods_id' = {0}", goodsId)
.eq(Task::getTaskType, 1));
@ -181,7 +181,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
equipmentIds.add(tempLocation.getEquipmentId());
}
}
List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>()
List<Stock> stocks = stockMapper.selectList(new LambdaQueryWrapper<Stock>()
.select(Stock::getLocationId)
.apply("goods_related -> '$.goods_id' = {0}", goodsId)
.eq(Stock::getStockStatus, StockStatus.OK.getCode()));

View File

@ -9,11 +9,11 @@ import com.wms.entity.table.Location;
import com.wms.entity.table.Stock;
import com.wms.entity.table.Task;
import com.wms.entity.table.Vehicle;
import com.wms.mapper.LocationMapper;
import com.wms.mapper.StockMapper;
import com.wms.mapper.TaskMapper;
import com.wms.service.LocationService;
import com.wms.service.StockService;
import com.wms.mapper.VehicleMapper;
import com.wms.service.TaskService;
import com.wms.service.VehicleService;
import com.wms.utils.StringUtils;
import com.wms.utils.WmsUtils;
import lombok.RequiredArgsConstructor;
@ -37,26 +37,26 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
/**
* 库位服务
*/
private final LocationService locationService;
private final LocationMapper locationMapper;
/**
* 库存服务
*/
private final StockService stockService;
private final StockMapper stockMapper;
/**
* 载具服务
*/
private final VehicleService vehicleService;
private final VehicleMapper vehicleMapper;
@Override
public TaskDto genMoveTask(String locationId) {
Location outLocation = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, locationId));
Location outLocation = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, locationId));
if (outLocation != null) {
if (outLocation.getWDepth() == 1) {
return null;
} else {
// 生成当前深度-1的库位的移库任务
TaskDto depthMinus1MoveTask = new TaskDto();
Location depthMinus1Location = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, outLocation.getLocationId()));
Location depthMinus1Location = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, outLocation.getLocationId()));
if (depthMinus1Location.getIsLock() == 1) {// 外层库位锁定
depthMinus1MoveTask.setTaskId("LOCKED");
return depthMinus1MoveTask;
@ -73,11 +73,11 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
moveTask.setPreTask(depthMinusIn1Task.getTaskId());
taskMapper.insert(moveTask);
// 对应载具所有库存上锁
stockService.update(new LambdaUpdateWrapper<Stock>()
stockMapper.update(new LambdaUpdateWrapper<Stock>()
.set(Stock::getStockStatus, StockStatus.MOVE.getCode())
.eq(Stock::getLocationId, depthMinus1Location.getLocationId()));
// 对应载具状态设置
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
vehicleMapper.update(new LambdaUpdateWrapper<Vehicle>()
.set(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode())
.eq(Vehicle::getCurrentLocation, depthMinus1Location.getLocationId()));
depthMinus1MoveTask.setTaskId(moveTask.getTaskId());
@ -100,11 +100,11 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
moveTask.setPreTask(depthMinus2MoveTask.getTaskId());
taskMapper.insert(moveTask);
// 对应载具所有库存上锁
stockService.update(new LambdaUpdateWrapper<Stock>()
stockMapper.update(new LambdaUpdateWrapper<Stock>()
.set(Stock::getStockStatus, StockStatus.MOVE.getCode())
.eq(Stock::getLocationId, depthMinus1Location.getLocationId()));
// 对应载具状态设置
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
vehicleMapper.update(new LambdaUpdateWrapper<Vehicle>()
.set(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode())
.eq(Vehicle::getCurrentLocation, depthMinus1Location.getLocationId()));
depthMinus1MoveTask.setTaskId(moveTask.getTaskId());
@ -130,7 +130,7 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
Task moveTask = new Task();
// 先找一个新库位同一个设备号但是不同的排列层
Location newLocation = new Location();
List<Location> availableLocations = locationService.list(new LambdaQueryWrapper<Location>()
List<Location> availableLocations = locationMapper.selectList(new LambdaQueryWrapper<Location>()
.eq(Location::getEquipmentId, originLocation.getEquipmentId())
.eq(Location::getLocationType, originLocation.getLocationType())
.eq(Location::getIsLock, 0)
@ -144,7 +144,7 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
.eq(Location::getWRow, oneAvailableLocation.getWRow())
.eq(Location::getWCol, oneAvailableLocation.getWCol())
.eq(Location::getWLayer, oneAvailableLocation.getWLayer());
List<Location> haveTaskLocations = locationService.list(haveTaskQueryWrapper);
List<Location> haveTaskLocations = locationMapper.selectList(haveTaskQueryWrapper);
// 判断当前排列层的库位是否有出库或者移库任务
boolean hasTasksFlag = false;
for (Location havaTaskLocation : haveTaskLocations) {
@ -166,7 +166,7 @@ public class TaskServiceImplements extends ServiceImpl<TaskMapper, Task> impleme
.set(Location::getVehicleId, originLocation.getVehicleId())
.eq(Location::getLocationId, oneAvailableLocation.getLocationId())
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
if (locationService.update(updateLocationWrapper)) {
if (locationMapper.update(updateLocationWrapper) > 0) {
newLocation = oneAvailableLocation;
break;
}

View File

@ -11,19 +11,23 @@ spring:
url: jdbc:mysql://112.4.208.194:3001/wms_miniload_bk7?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
username: coder
password: coder
driver-class-name: com.mysql.cj.jdbc.Driver
# 宝开服务器--内网
# url: jdbc:mysql://192.168.3.254:3306/wms_miniload_bk7?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
# username: coder
# password: coder
# driver-class-name: com.mysql.jdbc.Driver
# 上线环境
# 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.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
profiles:
active: online
server: