diff --git a/pom.xml b/pom.xml index 092fa33..f5523fa 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ com.baomidou - dynamic-datasource-spring-boot-starter + dynamic-datasource-spring-boot3-starter 4.3.0 @@ -88,22 +88,15 @@ 4.5.13 - - - com.google.guava - guava - 32.0.0-android - - com.github.pagehelper pagehelper - 5.3.1 + 6.1.0 com.github.jsqlparser jsqlparser - 4.4 + 4.9 @@ -116,7 +109,7 @@ org.apache.poi poi-ooxml - 5.2.3 + 5.2.5 org.apache.poi @@ -132,7 +125,7 @@ org.apache.oltu.oauth2 org.apache.oltu.oauth2.client - 1.0.1 + 1.0.2 @@ -144,12 +137,18 @@ io.springfox springfox-swagger2 - 2.9.2 + 3.0.0 io.springfox springfox-swagger-ui - 2.9.2 + 3.0.0 + + + + com.google.guava + guava + 32.0.0-android diff --git a/src/main/java/com/wms/WmsApplication.java b/src/main/java/com/wms/WmsApplication.java index f650d98..0370a6e 100644 --- a/src/main/java/com/wms/WmsApplication.java +++ b/src/main/java/com/wms/WmsApplication.java @@ -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 { /** diff --git a/src/main/java/com/wms/config/MybatisPlusConfig.java b/src/main/java/com/wms/config/MybatisPlusConfig.java index 518335d..f655d99 100644 --- a/src/main/java/com/wms/config/MybatisPlusConfig.java +++ b/src/main/java/com/wms/config/MybatisPlusConfig.java @@ -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配置类 diff --git a/src/main/java/com/wms/controller/GoodsController.java b/src/main/java/com/wms/controller/GoodsController.java index 27f3f16..3d7e34b 100644 --- a/src/main/java/com/wms/controller/GoodsController.java +++ b/src/main/java/com/wms/controller/GoodsController.java @@ -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().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(); diff --git a/src/main/java/com/wms/controller/RecordController.java b/src/main/java/com/wms/controller/RecordController.java index 06f4249..cba98fe 100644 --- a/src/main/java/com/wms/controller/RecordController.java +++ b/src/main/java/com/wms/controller/RecordController.java @@ -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 diff --git a/src/main/java/com/wms/controller/StandController.java b/src/main/java/com/wms/controller/StandController.java index 003cf8a..0f19e2c 100644 --- a/src/main/java/com/wms/controller/StandController.java +++ b/src/main/java/com/wms/controller/StandController.java @@ -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 page = goodsQuery.toMpPage(); - Page goodsPage = goodsService.page(page, new LambdaQueryWrapper() - .like(StringUtils.isNotEmpty(goodsQuery.getGoodsId()), Goods::getGoodsId, goodsQuery.getGoodsId()) - .like(StringUtils.isNotEmpty(goodsQuery.getGoodsName()), Goods::getGoodsName, goodsQuery.getGoodsName())); + Page page = standQuery.toMpPage(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .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 standPage = standService.page(page, lambdaQueryWrapper); - PageDto pageDto = PageDto.of(goodsPage, goods -> BeanUtil.copyProperties(goods, GoodsVo.class)); + PageDto 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().eq(Goods::getGoodsId, goods.getGoodsId()))) { + if (standService.update(BeanUtil.copyProperties(stand, Stand.class), + new LambdaUpdateWrapper().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); } } diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java index 6084672..4ed3e91 100644 --- a/src/main/java/com/wms/controller/StockController.java +++ b/src/main/java/com/wms/controller/StockController.java @@ -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 梁州 * @date 2023/2/14 */ @@ -50,44 +55,39 @@ public class StockController { private final HttpServletRequest servletRequest; /** - * 查找所有库存 + * 查找所有物料 */ @PostMapping("/getAllStocks") @ResponseBody - public String getAllStocks(@RequestBody TableRequest 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 page = stockQuery.toMpPage(); + Page stockPage = stockService.page(page, new LambdaQueryWrapper() + .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 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 stocks = stockService.selStocksFront(tableRequest.getParam()); - PageInfo 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 stockLambdaQueryWrapper = new LambdaQueryWrapper().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); } } \ No newline at end of file diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index f4a8f2f..c05280e 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -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().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().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); } diff --git a/src/main/java/com/wms/entity/app/vo/LayerLocation.java b/src/main/java/com/wms/entity/app/vo/LayerLocation.java index e37a602..ab711e4 100644 --- a/src/main/java/com/wms/entity/app/vo/LayerLocation.java +++ b/src/main/java/com/wms/entity/app/vo/LayerLocation.java @@ -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; diff --git a/src/main/java/com/wms/service/ConfigService.java b/src/main/java/com/wms/service/ConfigService.java index b47f9e9..94f5989 100644 --- a/src/main/java/com/wms/service/ConfigService.java +++ b/src/main/java/com/wms/service/ConfigService.java @@ -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 { List selectConfigs(String configKey); int updateConfig(Config config); diff --git a/src/main/java/com/wms/service/LogService.java b/src/main/java/com/wms/service/LogService.java index f6575ed..8bbf436 100644 --- a/src/main/java/com/wms/service/LogService.java +++ b/src/main/java/com/wms/service/LogService.java @@ -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 { /** * 定期删除日志记录(30天清一次) diff --git a/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java b/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java index 250a141..eb27e2b 100644 --- a/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java +++ b/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java @@ -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 implements ConfigService { private final ConfigMapper configMapper; @Override diff --git a/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java index 3e723af..f25b8b0 100644 --- a/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java @@ -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 standQueryWrapper = new LambdaQueryWrapper() .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 LRUStands = standService.list(LRUStandQueryWrapper); + List LRUStands = standMapper.selectList(LRUStandQueryWrapper); if (LRUStands.isEmpty()) { return resultMap; } else { @@ -129,7 +129,7 @@ public class LocationServiceImplements extends ServiceImpl taskQueryWrapper = new LambdaQueryWrapper() .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 taskQueryWrapper = new LambdaQueryWrapper() .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 LRUStands, String goodsId) { int equipmentId = -1; List equipmentIds = new ArrayList<>(); - List tasks = taskService.list(new LambdaQueryWrapper() + List tasks = taskMapper.selectList(new LambdaQueryWrapper() .select(Task::getDestination) .apply("goods_related -> '$.goods_id' = {0}", goodsId) .eq(Task::getTaskType, 1)); @@ -181,7 +181,7 @@ public class LocationServiceImplements extends ServiceImpl stocks = stockService.list(new LambdaQueryWrapper() + List stocks = stockMapper.selectList(new LambdaQueryWrapper() .select(Stock::getLocationId) .apply("goods_related -> '$.goods_id' = {0}", goodsId) .eq(Stock::getStockStatus, StockStatus.OK.getCode())); diff --git a/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java index fd7f40b..7f49da0 100644 --- a/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java @@ -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 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().eq(Location::getLocationId, locationId)); + Location outLocation = locationMapper.selectOne(new LambdaQueryWrapper().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().eq(Location::getLocationId, outLocation.getLocationId())); + Location depthMinus1Location = locationMapper.selectOne(new LambdaQueryWrapper().eq(Location::getLocationId, outLocation.getLocationId())); if (depthMinus1Location.getIsLock() == 1) {// 外层库位锁定 depthMinus1MoveTask.setTaskId("LOCKED"); return depthMinus1MoveTask; @@ -73,11 +73,11 @@ public class TaskServiceImplements extends ServiceImpl impleme moveTask.setPreTask(depthMinusIn1Task.getTaskId()); taskMapper.insert(moveTask); // 对应载具所有库存上锁 - stockService.update(new LambdaUpdateWrapper() + stockMapper.update(new LambdaUpdateWrapper() .set(Stock::getStockStatus, StockStatus.MOVE.getCode()) .eq(Stock::getLocationId, depthMinus1Location.getLocationId())); // 对应载具状态设置 - vehicleService.update(new LambdaUpdateWrapper() + vehicleMapper.update(new LambdaUpdateWrapper() .set(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode()) .eq(Vehicle::getCurrentLocation, depthMinus1Location.getLocationId())); depthMinus1MoveTask.setTaskId(moveTask.getTaskId()); @@ -100,11 +100,11 @@ public class TaskServiceImplements extends ServiceImpl impleme moveTask.setPreTask(depthMinus2MoveTask.getTaskId()); taskMapper.insert(moveTask); // 对应载具所有库存上锁 - stockService.update(new LambdaUpdateWrapper() + stockMapper.update(new LambdaUpdateWrapper() .set(Stock::getStockStatus, StockStatus.MOVE.getCode()) .eq(Stock::getLocationId, depthMinus1Location.getLocationId())); // 对应载具状态设置 - vehicleService.update(new LambdaUpdateWrapper() + vehicleMapper.update(new LambdaUpdateWrapper() .set(Vehicle::getVehicleStatus, VehicleStatus.MOVE.getCode()) .eq(Vehicle::getCurrentLocation, depthMinus1Location.getLocationId())); depthMinus1MoveTask.setTaskId(moveTask.getTaskId()); @@ -130,7 +130,7 @@ public class TaskServiceImplements extends ServiceImpl impleme Task moveTask = new Task(); // 先找一个新库位,同一个设备号,但是不同的排列层 Location newLocation = new Location(); - List availableLocations = locationService.list(new LambdaQueryWrapper() + List availableLocations = locationMapper.selectList(new LambdaQueryWrapper() .eq(Location::getEquipmentId, originLocation.getEquipmentId()) .eq(Location::getLocationType, originLocation.getLocationType()) .eq(Location::getIsLock, 0) @@ -144,7 +144,7 @@ public class TaskServiceImplements extends ServiceImpl impleme .eq(Location::getWRow, oneAvailableLocation.getWRow()) .eq(Location::getWCol, oneAvailableLocation.getWCol()) .eq(Location::getWLayer, oneAvailableLocation.getWLayer()); - List haveTaskLocations = locationService.list(haveTaskQueryWrapper); + List haveTaskLocations = locationMapper.selectList(haveTaskQueryWrapper); // 判断当前排列层的库位是否有出库或者移库任务 boolean hasTasksFlag = false; for (Location havaTaskLocation : haveTaskLocations) { @@ -166,7 +166,7 @@ public class TaskServiceImplements extends ServiceImpl 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; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 837bdad..a48975a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -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: