代码更新:

1. 增加库存判断时大小写的问题
2. 增加库存修改记录
This commit is contained in:
梁州 2024-09-06 16:31:38 +08:00
parent 283f2988ba
commit ebb2dd3b72
24 changed files with 6276 additions and 7430 deletions

View File

@ -16,6 +16,8 @@ public class WmsConstants {
public static String EMPTY_STRING = ""; public static String EMPTY_STRING = "";
public static String ROOT_MENU_ID = "0"; public static String ROOT_MENU_ID = "0";
public static String MYSQL_JSON_CI = "COLLATE utf8mb4_general_ci";
public static Map<String, String> type_values = ImmutableMap.<String, String>builder() public static Map<String, String> type_values = ImmutableMap.<String, String>builder()
.put("LR01", "CLC一箱两料") .put("LR01", "CLC一箱两料")
.put("LR02", "CLC一箱一料") .put("LR02", "CLC一箱一料")

View File

@ -12,7 +12,10 @@ public enum ConfigMapKeyEnum {
MAX_VEHICLE_NUMS("MAX_VEHICLE_NUMS"), MAX_VEHICLE_NUMS("MAX_VEHICLE_NUMS"),
MAX_WCS_ACCEPT_NUMS("MAX_WCS_ACCEPT_NUMS"), MAX_WCS_ACCEPT_NUMS("MAX_WCS_ACCEPT_NUMS"),
SLOC_FILTER_STRING("SLOC_FILTER_STRING"), SLOC_FILTER_STRING("SLOC_FILTER_STRING"),
URL_WCS_CHANGE_TASK("URL_WCS_CHANGE_TASK"); URL_WCS_CHANGE_TASK("URL_WCS_CHANGE_TASK"),
LOG_DELETE_INTERVAL("LOG_DELETE_INTERVAL"),
RECORD_DELETE_INTERVAL("RECORD_DELETE_INTERVAL"),
IMPORTANT_RECORD_DELETE_INTERVAL("IMPORTANT_RECORD_DELETE_INTERVAL");
private final String configKey; private final String configKey;
ConfigMapKeyEnum(String configKey) { ConfigMapKeyEnum(String configKey) {
this.configKey = configKey; this.configKey = configKey;

View File

@ -46,6 +46,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
import static com.wms.utils.HttpUtils.getIpAddr; import static com.wms.utils.HttpUtils.getIpAddr;
import static com.wms.utils.StringUtils.convertJsonString; import static com.wms.utils.StringUtils.convertJsonString;
@ -337,8 +338,8 @@ public class ExcelController {
.like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId()) .like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId())
.eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId())
.eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .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.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", stockQuery.getGoodsName())); .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName()));
EasyExcel.write(response.getOutputStream(), StockExcelVo.class) EasyExcel.write(response.getOutputStream(), StockExcelVo.class)
.excelType(ExcelTypeEnum.XLSX) .excelType(ExcelTypeEnum.XLSX)
.registerWriteHandler(horizontalCellStyleStrategy) .registerWriteHandler(horizontalCellStyleStrategy)

View File

@ -155,13 +155,15 @@ public class JobComponent {
} }
} }
/** /**
* 每天查询一次是否有过期记录 * 每天查询一次是否有过期记录
* 每天晚上10点执行一次 * 每天晚上10点执行一次
*/ */
// @Scheduled(cron = "0 0 22 * * ?") @Scheduled(cron = "0 0 22 * * ?")
public void deleteOutOfDateData() { public void deleteOutOfDateData() {
logger.info("执行定时任务:删除过期数据"); // 删除日志数据
wmsJobService.deleteLogsRegularly();
// 删除记录数据
wmsJobService.deleteRecordsRegularly();
} }
} }

View File

@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
import static com.wms.utils.StringUtils.convertJsonString; import static com.wms.utils.StringUtils.convertJsonString;
/** /**
@ -61,8 +62,8 @@ public class RecordController {
LambdaQueryWrapper<TaskRecord> lambdaQueryWrapper = new LambdaQueryWrapper<TaskRecord>() LambdaQueryWrapper<TaskRecord> lambdaQueryWrapper = new LambdaQueryWrapper<TaskRecord>()
.eq(taskRecordQuery.getTaskType() != null, TaskRecord::getTaskType, taskRecordQuery.getTaskType()) .eq(taskRecordQuery.getTaskType() != null, TaskRecord::getTaskType, taskRecordQuery.getTaskType())
.like(StringUtils.isNotEmpty(taskRecordQuery.getVehicleId()), TaskRecord::getVehicleId, taskRecordQuery.getVehicleId()) .like(StringUtils.isNotEmpty(taskRecordQuery.getVehicleId()), TaskRecord::getVehicleId, taskRecordQuery.getVehicleId())
.apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", taskRecordQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskRecordQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", taskRecordQuery.getGoodsName()); .apply(StringUtils.isNotEmpty(taskRecordQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskRecordQuery.getGoodsName());
Page<TaskRecord> taskRecordPage = taskRecordService.page(page, lambdaQueryWrapper); Page<TaskRecord> taskRecordPage = taskRecordService.page(page, lambdaQueryWrapper);
// 生成数据 // 生成数据
PageDto<TaskRecordVO> pageDto = PageDto.of(taskRecordPage, records -> BeanUtil.copyProperties(records, TaskRecordVO.class)); PageDto<TaskRecordVO> pageDto = PageDto.of(taskRecordPage, records -> BeanUtil.copyProperties(records, TaskRecordVO.class));

View File

@ -12,6 +12,7 @@ import com.wms.entity.app.dto.StockDto;
import com.wms.entity.app.request.StockQuery; import com.wms.entity.app.request.StockQuery;
import com.wms.entity.app.vo.StockVo; import com.wms.entity.app.vo.StockVo;
import com.wms.entity.table.Stock; import com.wms.entity.table.Stock;
import com.wms.service.IStockUpdateRecordService;
import com.wms.service.StockService; import com.wms.service.StockService;
import com.wms.utils.HttpUtils; import com.wms.utils.HttpUtils;
import com.wms.utils.StringUtils; import com.wms.utils.StringUtils;
@ -33,6 +34,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
import static com.wms.utils.StringUtils.convertJsonString; import static com.wms.utils.StringUtils.convertJsonString;
/** /**
@ -51,7 +53,10 @@ public class StockController {
* 库存服务 * 库存服务
*/ */
private final StockService stockService; private final StockService stockService;
/**
* 库存更新记录服务
*/
private final IStockUpdateRecordService stockUpdateRecordService;
/** /**
* 请求头部信息 * 请求头部信息
*/ */
@ -72,8 +77,8 @@ public class StockController {
.like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId()) .like(StringUtils.isNotEmpty(stockQuery.getVehicleId()), Stock::getVehicleId, stockQuery.getVehicleId())
.eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId())
.eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .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.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", stockQuery.getGoodsName()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName())
.orderByDesc(Stock::getLastUpdateTime)); .orderByDesc(Stock::getLastUpdateTime));
PageDto<StockVo> pageDto = PageDto.of(stockPage, StockVo::of); PageDto<StockVo> pageDto = PageDto.of(stockPage, StockVo::of);
@ -112,7 +117,7 @@ public class StockController {
stockVo.setGoodsId(stockQuery.getGoodsId()); stockVo.setGoodsId(stockQuery.getGoodsId());
// 查询库存 // 查询库存
List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>() List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>()
.apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' = {0}", stockQuery.getGoodsId())); .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, stockQuery.getGoodsId()));
if (stocks == null || stocks.isEmpty()) { if (stocks == null || stocks.isEmpty()) {
// 没有库存 // 没有库存
stockVo.setRemainNum(BigDecimal.ZERO); stockVo.setRemainNum(BigDecimal.ZERO);
@ -161,9 +166,11 @@ public class StockController {
rsp.setMessage("请求的库存编号为空,不允许修改"); rsp.setMessage("请求的库存编号为空,不允许修改");
return convertJsonString(rsp); return convertJsonString(rsp);
} }
Stock stockBefore = stockService.getOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
LambdaQueryWrapper<Stock> stockLambdaQueryWrapper = new LambdaQueryWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()); LambdaQueryWrapper<Stock> stockLambdaQueryWrapper = new LambdaQueryWrapper<Stock>().eq(Stock::getStockId, stock.getStockId());
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) <= 0) { if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) <= 0) {
if (stockService.remove(stockLambdaQueryWrapper)) { if (stockService.remove(stockLambdaQueryWrapper)) {
stockUpdateRecordService.addStockUpdateRecord(stockBefore, null, "删除库存", "前端界面");
// 返回成功 // 返回成功
logger.info("数量为0删除库存成功"); logger.info("数量为0删除库存成功");
rsp.setCode(ResponseCode.OK.getCode()); rsp.setCode(ResponseCode.OK.getCode());
@ -176,11 +183,11 @@ public class StockController {
} }
} else { } else {
if (stockService.update(BeanUtil.copyProperties(stock, Stock.class), stockLambdaQueryWrapper)) { if (stockService.update(BeanUtil.copyProperties(stock, Stock.class), stockLambdaQueryWrapper)) {
stockUpdateRecordService.addStockUpdateRecord(stockBefore, BeanUtil.copyProperties(stock, Stock.class), "修改库存", "前端界面");
// 返回成功 // 返回成功
logger.info("更新库存信息成功"); logger.info("更新库存信息成功");
rsp.setCode(ResponseCode.OK.getCode()); rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新库存信息成功"); rsp.setMessage("更新库存信息成功");
return JSON.toJSONString(rsp);
} else { } else {
// 返回失败 // 返回失败
logger.error("更新库存信息失败"); logger.error("更新库存信息失败");
@ -218,6 +225,7 @@ public class StockController {
StockDto tempStock = new StockDto(); StockDto tempStock = new StockDto();
tempStock.setStockId(WmsUtils.generateId("ST")); tempStock.setStockId(WmsUtils.generateId("ST"));
if (stockService.save(BeanUtil.copyProperties(stock, Stock.class))) { if (stockService.save(BeanUtil.copyProperties(stock, Stock.class))) {
stockUpdateRecordService.addStockUpdateRecord(null, BeanUtil.copyProperties(stock, Stock.class), "新增库存", "前端界面");
// 返回成功 // 返回成功
logger.info("添加库存信息成功"); logger.info("添加库存信息成功");
rsp.setCode(ResponseCode.OK.getCode()); rsp.setCode(ResponseCode.OK.getCode());
@ -228,7 +236,7 @@ public class StockController {
rsp.setCode(ResponseCode.ERROR.getCode()); rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("添加库存信息失败"); rsp.setMessage("添加库存信息失败");
} }
return JSON.toJSONString(rsp); return convertJsonString(rsp);
} catch (Exception e) { } catch (Exception e) {
// 回滚事务 // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -236,7 +244,7 @@ public class StockController {
// 返回其他异常 // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage()); rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp); return convertJsonString(rsp);
} }
} }
} }

View File

@ -44,6 +44,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.wms.config.InitLocalConfig.configMap; import static com.wms.config.InitLocalConfig.configMap;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
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;
@ -147,6 +148,10 @@ public class TaskController {
* 非计划领料服务 * 非计划领料服务
*/ */
private final NoPlanRecordService noPlanRecordService; private final NoPlanRecordService noPlanRecordService;
/**
* 库存更新服务
*/
private final IStockUpdateRecordService stockUpdateRecordService;
/** /**
* 日志服务 * 日志服务
*/ */
@ -330,18 +335,22 @@ public class TaskController {
if (inTask.getGoodsRelated() != null && StringUtils.isNotEmpty(inTask.getGoodsRelated().getGoodsId())) { if (inTask.getGoodsRelated() != null && StringUtils.isNotEmpty(inTask.getGoodsRelated().getGoodsId())) {
// 查询这个物料有没有库存 // 查询这个物料有没有库存
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", inTask.getGoodsRelated().getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, inTask.getGoodsRelated().getGoodsId())
.eq(Stock::getVehicleId, inTask.getVehicleId()) .eq(Stock::getVehicleId, inTask.getVehicleId())
.last("limit 1")); .last("limit 1"));
if (existStock != null) { if (existStock != null) {
Stock originStock = BeanUtil.copyProperties(existStock, Stock.class);
// 已有库存直接更新数量 // 已有库存直接更新数量
existStock.setLocationId(inTask.getDestination());
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()));
stockService.update(existStock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, existStock.getStockId())); stockService.update(existStock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, existStock.getStockId()));
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "入库", inTask.getUserName());
} 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());
@ -354,6 +363,7 @@ public class TaskController {
detailInfo.setTotalNum(inTask.getGoodsRelated().getOpNum()); detailInfo.setTotalNum(inTask.getGoodsRelated().getOpNum());
newStock.setGoodsRelated(detailInfo); newStock.setGoodsRelated(detailInfo);
stockService.save(newStock); stockService.save(newStock);
stockUpdateRecordService.addStockUpdateRecord(null, newStock, "入库", inTask.getUserName());
} }
} }
} }
@ -453,6 +463,10 @@ public class TaskController {
} }
} else {// 代表整出 } else {// 代表整出
// 删除当前载具上所有库存 // 删除当前载具上所有库存
List<Stock> removeStocks = stockService.list(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
for (Stock stock : removeStocks) {
stockUpdateRecordService.addStockUpdateRecord(stock, null, "整出", outTask.getUserName());
}
stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId())); stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
// 删除载具 // 删除载具
vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId())); vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId()));
@ -723,8 +737,8 @@ public class TaskController {
.eq(taskQuery.getTaskType() != null, Task::getTaskType, taskQuery.getTaskType()) .eq(taskQuery.getTaskType() != null, Task::getTaskType, taskQuery.getTaskType())
.eq(taskQuery.getTaskStatus() != null, Task::getTaskStatus, taskQuery.getTaskStatus()) .eq(taskQuery.getTaskStatus() != null, Task::getTaskStatus, taskQuery.getTaskStatus())
.like(StringUtils.isNotEmpty(taskQuery.getVehicleId()), Task::getVehicleId, taskQuery.getVehicleId()) .like(StringUtils.isNotEmpty(taskQuery.getVehicleId()), Task::getVehicleId, taskQuery.getVehicleId())
.apply(StringUtils.isNotEmpty(taskQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", taskQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(taskQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(taskQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", taskQuery.getGoodsName()); .apply(StringUtils.isNotEmpty(taskQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskQuery.getGoodsName());
Page<Task> tasksPage = taskService.page(page, lambdaQueryWrapper); Page<Task> tasksPage = taskService.page(page, lambdaQueryWrapper);
// 生成数据 // 生成数据
PageDto<TaskVO> pageDto = PageDto.of(tasksPage, tasks -> BeanUtil.copyProperties(tasks, TaskVO.class)); PageDto<TaskVO> pageDto = PageDto.of(tasksPage, tasks -> BeanUtil.copyProperties(tasks, TaskVO.class));
@ -757,8 +771,8 @@ public class TaskController {
.eq(taskQuery.getTaskStatus() != null, Task::getTaskStatus, taskQuery.getTaskStatus()) .eq(taskQuery.getTaskStatus() != null, Task::getTaskStatus, taskQuery.getTaskStatus())
.eq(taskQuery.getIsPicking() != null, Task::getIsPicking, taskQuery.getIsPicking()) .eq(taskQuery.getIsPicking() != null, Task::getIsPicking, taskQuery.getIsPicking())
.like(StringUtils.isNotEmpty(taskQuery.getVehicleId()), Task::getVehicleId, taskQuery.getVehicleId()) .like(StringUtils.isNotEmpty(taskQuery.getVehicleId()), Task::getVehicleId, taskQuery.getVehicleId())
.apply(StringUtils.isNotEmpty(taskQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", taskQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(taskQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskQuery.getGoodsId())
.apply(StringUtils.isNotEmpty(taskQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", taskQuery.getGoodsName()); .apply(StringUtils.isNotEmpty(taskQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, taskQuery.getGoodsName());
List<Task> tasks = taskService.list(lambdaQueryWrapper); List<Task> tasks = taskService.list(lambdaQueryWrapper);
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
response.setMessage("查询成功"); response.setMessage("查询成功");
@ -893,7 +907,7 @@ public class TaskController {
// 查找库存信息 // 查找库存信息
Stock stock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock stock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.eq(Stock::getVehicleId, vehicleId) .eq(Stock::getVehicleId, vehicleId)
.apply("goods_related ->> '$.goodsId' = {0}", workQuery.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, workQuery.getGoodsId())
.last("limit 1")); .last("limit 1"));
if (stock == null || StringUtils.isEmpty(stock.getStockId()) || stock.getGoodsRelated() == null) { if (stock == null || StringUtils.isEmpty(stock.getStockId()) || stock.getGoodsRelated() == null) {
logger.error("请求料号:{}与正在拣选的箱子:{}无对应关系", workQuery.getGoodsId(), vehicleId); logger.error("请求料号:{}与正在拣选的箱子:{}无对应关系", workQuery.getGoodsId(), vehicleId);
@ -1196,14 +1210,16 @@ public class TaskController {
workFlowService.updateById(workFlow); workFlowService.updateById(workFlow);
// 更新库存数量 // 更新库存数量
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", workFlow.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, workFlow.getGoodsId())
.eq(Stock::getVehicleId, eTaskFeedbackRequest.getVehicleNo()) .eq(Stock::getVehicleId, eTaskFeedbackRequest.getVehicleNo())
.last("limit 1")); .last("limit 1"));
if (existStock != null && existStock.getGoodsRelated() != null) { if (existStock != null && existStock.getGoodsRelated() != null) {
Stock originStock = BeanUtil.copyProperties(existStock, Stock.class);
StockDetailInfo goodsDetail = existStock.getGoodsRelated(); StockDetailInfo goodsDetail = existStock.getGoodsRelated();
goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum()))); goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum())));
existStock.setGoodsRelated(goodsDetail); existStock.setGoodsRelated(goodsDetail);
stockService.updateById(existStock); stockService.updateById(existStock);
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "备料拣选更新", "电子标签灯光反馈");
} }
// 更新电子标签库位信息 // 更新电子标签库位信息
etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>() etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>()
@ -1310,14 +1326,16 @@ public class TaskController {
// 处理库存偏差 // 处理库存偏差
if (workConfirmRequest.getRemainNumReal().compareTo(workConfirmRequest.getRemainNumOrigin()) != 0) { if (workConfirmRequest.getRemainNumReal().compareTo(workConfirmRequest.getRemainNumOrigin()) != 0) {
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, workConfirmRequest.getGoodsId())
.eq(Stock::getVehicleId, pickTask.getVehicleId()) .eq(Stock::getVehicleId, pickTask.getVehicleId())
.last("limit 1"));// 更新库存数量 .last("limit 1"));// 更新库存数量
if (existStock != null && existStock.getGoodsRelated() != null) { if (existStock != null && existStock.getGoodsRelated() != null) {
Stock originStock = BeanUtil.copyProperties(existStock, Stock.class);
StockDetailInfo goodsDetail = existStock.getGoodsRelated(); StockDetailInfo goodsDetail = existStock.getGoodsRelated();
goodsDetail.setRemainNum(workConfirmRequest.getRemainNumReal()); goodsDetail.setRemainNum(workConfirmRequest.getRemainNumReal());
existStock.setGoodsRelated(goodsDetail); existStock.setGoodsRelated(goodsDetail);
stockService.updateById(existStock); stockService.updateById(existStock);
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "站台确认更新", workConfirmRequest.getUserName());
} }
OutsideVehicles currentGoodsVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper<OutsideVehicles>() OutsideVehicles currentGoodsVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper<OutsideVehicles>()
.eq(OutsideVehicles::getVehicleId, pickTask.getVehicleId()) .eq(OutsideVehicles::getVehicleId, pickTask.getVehicleId())
@ -2287,7 +2305,7 @@ public class TaskController {
} }
// 查询库存 // 查询库存
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>() List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
.apply("goods_related ->> '$.goodsId' = {0}", noPlanRequest.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, noPlanRequest.getGoodsId())
.apply("goods_related ->> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.orderByAsc(Stock::getCreateTime)); .orderByAsc(Stock::getCreateTime));
// 查询应该的库存总数 // 查询应该的库存总数
@ -2476,15 +2494,17 @@ public class TaskController {
} }
// 更新库存 // 更新库存
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", pickNumQuery.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, pickNumQuery.getGoodsId())
.eq(Stock::getVehicleId, pickNumQuery.getVehicleId()) .eq(Stock::getVehicleId, pickNumQuery.getVehicleId())
.last("limit 1")); .last("limit 1"));
// 更新库存数量 // 更新库存数量
if (existStock != null && existStock.getGoodsRelated() != null) { if (existStock != null && existStock.getGoodsRelated() != null) {
Stock originStock = BeanUtil.copyProperties(existStock, Stock.class);
StockDetailInfo goodsDetail = existStock.getGoodsRelated(); StockDetailInfo goodsDetail = existStock.getGoodsRelated();
goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(pickNumQuery.getRealPickNum())); goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(pickNumQuery.getRealPickNum()));
existStock.setGoodsRelated(goodsDetail); existStock.setGoodsRelated(goodsDetail);
stockService.updateById(existStock); stockService.updateById(existStock);
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "直接物料非计划领料确认回库", pickNumQuery.getUserName());
} }
// 判断这个箱子是否还有拣选任务 // 判断这个箱子是否还有拣选任务
boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>() boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()

View File

@ -0,0 +1,10 @@
package com.wms.entity.app.request;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class StockUpdateRecordQuery extends PageQuery {
}

View File

@ -0,0 +1,74 @@
package com.wms.entity.app.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 库存更新记录Vo
*/
@Data
public class StockUpdateRecordVo {
/**
* 库存编号
*/
@JsonProperty("record_id")
private String recordId;
/**
* 库位ID
*/
@JsonProperty("stock_id")
private String stockId;
/**
* 库位ID
*/
@JsonProperty("vehicle_id")
private String vehicleId;
/**
* 库位ID
*/
@JsonProperty("goods_id")
private String goodsId;
/**
* 库位ID
*/
@JsonProperty("goods_name")
private String goodsName;
/**
* 库位ID
*/
@JsonProperty("location_before")
private String locationBefore;
/**
* 库位ID
*/
@JsonProperty("location_after")
private String locationAfter;
/**
* 库位ID
*/
@JsonProperty("quantity_before")
private BigDecimal quantityBefore;
/**
* 库位ID
*/
@JsonProperty("quantity_after")
private BigDecimal quantityAfter;
/**
* 库位ID
*/
@JsonProperty("reason")
private String reason;
/**
* 更新时间
*/
@JsonProperty("updateTime")
private LocalDateTime updateTime;
/**
* 更新用户
*/
@JsonProperty("updateUser")
private String updateUser;
}

View File

@ -0,0 +1,77 @@
package com.wms.entity.table;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 接口更新记录
*/
@Data
@TableName(value = "tbl_app_stock_update_record", autoResultMap = true)
public class StockUpdateRecord {
/**
* 记录id
*/
@TableId("record_id")
private String recordId;
/**
* 库存id
*/
@TableField("stock_id")
private String stockId;
/**
* 料箱号
*/
@TableField("vehicle_id")
private String vehicleId;
/**
* 料号
*/
@TableField("goods_id")
private String goodsId;
/**
* 物料名称
*/
@TableField("goods_name")
private String goodsName;
/**
* 更新前库位
*/
@TableField("location_before")
private String locationBefore;
/**
* 更新后库位
*/
@TableField("location_after")
private String locationAfter;
/**
* 更新前数量
*/
@TableField("quantity_before")
private BigDecimal quantityBefore;
/**
* 更新后数量
*/
@TableField("quantity_after")
private BigDecimal quantityAfter;
/**
* 更新原因
*/
@TableField("reason")
private String reason;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
/**
* 更新用户
*/
@TableField("update_user")
private String updateUser;
}

View File

@ -0,0 +1,12 @@
package com.wms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wms.entity.table.StockUpdateRecord;
import org.apache.ibatis.annotations.Mapper;
/**
* 库存更新记录Mapper
*/
@Mapper
public interface StockUpdateRecordMapper extends BaseMapper<StockUpdateRecord> {
}

View File

@ -0,0 +1,20 @@
package com.wms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wms.entity.table.Stock;
import com.wms.entity.table.StockUpdateRecord;
/**
* 库存更新记录接口
*/
public interface IStockUpdateRecordService extends IService<StockUpdateRecord> {
/**
* 添加库存更新记录
* @param stockBefore 原始库存---可为null
* @param stockAfter 锌库存---可为null
* @param reason 更新原因
* @param opUser 操作用户
* @return 添加结果
*/
boolean addStockUpdateRecord(Stock stockBefore, Stock stockAfter, String reason, String opUser);
}

View File

@ -21,4 +21,14 @@ public interface IWmsJobService {
* @throws Exception 异常用于回滚 * @throws Exception 异常用于回滚
*/ */
void solveDuplicateTask() throws Exception; void solveDuplicateTask() throws Exception;
/**
* 定期清除日志数据
*/
void deleteLogsRegularly();
/**
* 定期清除记录数据
*/
void deleteRecordsRegularly();
} }

View File

@ -22,6 +22,8 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Objects; import java.util.Objects;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
/** /**
* 验证服务接口的实现 * 验证服务接口的实现
*/ */
@ -144,8 +146,8 @@ public class ValidateServiceImplements implements IValidateService {
} }
// 查询库存信息 // 查询库存信息
LambdaQueryWrapper<Stock> stockQueryWrapper = new LambdaQueryWrapper<Stock>() LambdaQueryWrapper<Stock> stockQueryWrapper = new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", taskOutRequest.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, taskOutRequest.getGoodsId())
.apply("goods_related -> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Stock::getVehicleId, taskOutRequest.getVehicleId()) .eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Stock::getVehicleId, taskOutRequest.getVehicleId())
.eq(StringUtils.isNotEmpty(taskOutRequest.getOriginPoint()), Stock::getLocationId, taskOutRequest.getOriginPoint()); .eq(StringUtils.isNotEmpty(taskOutRequest.getOriginPoint()), Stock::getLocationId, taskOutRequest.getOriginPoint());
if (!stockService.exists(stockQueryWrapper)) { if (!stockService.exists(stockQueryWrapper)) {

View File

@ -24,6 +24,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
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 org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -45,6 +49,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
/** /**
* 发送正常的任务 * 发送正常的任务
*/ */
@Override
public void sendCommonTasks() throws Exception { public void sendCommonTasks() throws Exception {
try { try {
String max_vehicle_nums = configMap.get(ConfigMapKeyEnum.MAX_VEHICLE_NUMS.getConfigKey()); String max_vehicle_nums = configMap.get(ConfigMapKeyEnum.MAX_VEHICLE_NUMS.getConfigKey());
@ -174,6 +179,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
/** /**
* 发送拣选任务 * 发送拣选任务
*/ */
@Override
public void sendPickTasks() throws Exception { public void sendPickTasks() throws Exception {
try { try {
// 检索任务表---新建未下发的拣选任务 // 检索任务表---新建未下发的拣选任务
@ -243,6 +249,7 @@ public class WmsJobServiceImplements implements IWmsJobService {
/** /**
* 处理重复入库的任务 * 处理重复入库的任务
*/ */
@Override
public void solveDuplicateTask() throws Exception { public void solveDuplicateTask() throws Exception {
try { try {
// 检索任务表---重复入库的任务 // 检索任务表---重复入库的任务
@ -307,4 +314,53 @@ public class WmsJobServiceImplements implements IWmsJobService {
throw new Exception("向WCS发送新目的地时发生异常"); throw new Exception("向WCS发送新目的地时发生异常");
} }
} }
/**
* 定期清除日志
*/
@Override
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void deleteLogsRegularly() {
try {
int interval = 30;
try {
interval = Integer.parseInt(configMap.get(ConfigMapKeyEnum.LOG_DELETE_INTERVAL.getConfigKey()));
} catch (Exception e) {
logger.error("获取日志清理天数错误使用默认值30天");
}
LambdaQueryWrapper<WmsLog> lambdaQueryWrapper = new LambdaQueryWrapper<WmsLog>()
.apply("log_time <= date_add(curdate(),INTERVAL -{0} DAY)", interval);
logService.remove(lambdaQueryWrapper);
} catch (Exception exception) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
/**
* 定期清除记录
*/
@Override
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void deleteRecordsRegularly() {
try {
int interval = 180;// 普通接口记录默认保留180天
int importantInterval = 365;// 重要接口记录默认保留一年
try {
interval = Integer.parseInt(configMap.get(ConfigMapKeyEnum.LOG_DELETE_INTERVAL.getConfigKey()));
} catch (Exception e) {
logger.error("获取普通记录清理天数错误使用默认值180天");
}
try {
importantInterval = Integer.parseInt(configMap.get(ConfigMapKeyEnum.LOG_DELETE_INTERVAL.getConfigKey()));
} catch (Exception e) {
logger.error("获取重要记录清理天数错误使用默认值365天");
}
// 重要记录---盘点记录工作总结库存更新记录非计划领料记录上传文件记录
} catch (Exception exception) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
} }

View File

@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
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;
@ -196,8 +197,8 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
public String genGoodsOutTask(TaskOutRequest taskOutRequest) { public String genGoodsOutTask(TaskOutRequest taskOutRequest) {
// 查询库存 // 查询库存
LambdaQueryWrapper<Stock> stockQueryWrapper = new LambdaQueryWrapper<Stock>() LambdaQueryWrapper<Stock> stockQueryWrapper = new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", taskOutRequest.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, taskOutRequest.getGoodsId())
.apply("goods_related -> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Stock::getVehicleId, taskOutRequest.getVehicleId()) .eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Stock::getVehicleId, taskOutRequest.getVehicleId())
.eq(StringUtils.isNotEmpty(taskOutRequest.getOriginPoint()), Stock::getLocationId, taskOutRequest.getOriginPoint()); .eq(StringUtils.isNotEmpty(taskOutRequest.getOriginPoint()), Stock::getLocationId, taskOutRequest.getOriginPoint());
List<Stock> stocks = stockService.list(stockQueryWrapper); List<Stock> stocks = stockService.list(stockQueryWrapper);
@ -313,7 +314,7 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
// 查询当前料箱当前物料的库存 // 查询当前料箱当前物料的库存
Stock stock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock stock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.eq(Stock::getVehicleId, outsideVehicle.getVehicleId()) .eq(Stock::getVehicleId, outsideVehicle.getVehicleId())
.apply("goods_related ->> '$.goodsId' = {0}", goodsId) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, goodsId)
.apply("goods_related ->> '$.remainNum' > 0") .apply("goods_related ->> '$.remainNum' > 0")
.last("limit 1")); .last("limit 1"));
if (stock == null) { if (stock == null) {
@ -350,7 +351,7 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
// 查询库存判断数量是否充足 // 查询库存判断数量是否充足
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>() List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
.eq(Stock::getStockStatus, StockStatus.OK.getCode()) .eq(Stock::getStockStatus, StockStatus.OK.getCode())
.apply("goods_related ->> '$.goodsId' = {0}", goodsId) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, goodsId)
.orderByAsc(Stock::getCreateTime)); .orderByAsc(Stock::getCreateTime));
if (stockList != null && !stockList.isEmpty()) { if (stockList != null && !stockList.isEmpty()) {
List<Stock> waitForOutStockList = new ArrayList<>(); List<Stock> waitForOutStockList = new ArrayList<>();

View File

@ -21,6 +21,7 @@ import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import static com.wms.config.InitLocalConfig.configMap; import static com.wms.config.InitLocalConfig.configMap;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
import static com.wms.utils.StringUtils.convertJsonString; import static com.wms.utils.StringUtils.convertJsonString;
/** /**
@ -219,7 +220,7 @@ public class WorkServiceImplements implements IWorkService {
} }
// 判断实际库存是否充足 // 判断实际库存是否充足
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>() List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
.apply("goods_related ->> '$.goodsId' = {0}", goodsToStation.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, goodsToStation.getGoodsId())
.apply("goods_related ->> '$.remainNum' > 0")); .apply("goods_related ->> '$.remainNum' > 0"));
if (stockList == null || stockList.isEmpty()) { if (stockList == null || stockList.isEmpty()) {
goodsToStation.setDistributeStatus(3); goodsToStation.setDistributeStatus(3);

View File

@ -21,6 +21,8 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
@Service @Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class LocationServiceImplements extends ServiceImpl<LocationMapper, Location> implements LocationService { public class LocationServiceImplements extends ServiceImpl<LocationMapper, Location> implements LocationService {
@ -142,7 +144,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
List<Integer> equipmentIds = new ArrayList<>(); List<Integer> equipmentIds = new ArrayList<>();
List<Task> tasks = taskMapper.selectList(new LambdaQueryWrapper<Task>() List<Task> tasks = taskMapper.selectList(new LambdaQueryWrapper<Task>()
.select(Task::getDestination) .select(Task::getDestination)
.apply("goods_related -> '$.goodsId' = {0}", goodsId) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, goodsId)
.eq(Task::getTaskType, 1)); .eq(Task::getTaskType, 1));
for (Task task : tasks) { for (Task task : tasks) {
Location tempLocation = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, task.getDestination())); Location tempLocation = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, task.getDestination()));
@ -152,7 +154,7 @@ public class LocationServiceImplements extends ServiceImpl<LocationMapper, Locat
} }
List<Stock> stocks = stockMapper.selectList(new LambdaQueryWrapper<Stock>() List<Stock> stocks = stockMapper.selectList(new LambdaQueryWrapper<Stock>()
.select(Stock::getLocationId) .select(Stock::getLocationId)
.apply("goods_related -> '$.goodsId' = {0}", goodsId) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, goodsId)
.eq(Stock::getStockStatus, StockStatus.OK.getCode())); .eq(Stock::getStockStatus, StockStatus.OK.getCode()));
for (Stock stock : stocks) { for (Stock stock : stocks) {
Location tempLocation = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, stock.getLocationId())); Location tempLocation = locationMapper.selectOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, stock.getLocationId()));

View File

@ -18,6 +18,8 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
@Service @Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StockServiceImplements extends ServiceImpl<StockMapper, Stock> implements StockService { public class StockServiceImplements extends ServiceImpl<StockMapper, Stock> implements StockService {
@ -55,7 +57,7 @@ public class StockServiceImplements extends ServiceImpl<StockMapper, Stock> impl
public List<StockOfGoodsDto> selectSumOfGoods(List<String> goodsIdList) { public List<StockOfGoodsDto> selectSumOfGoods(List<String> goodsIdList) {
// 先查询库存 // 先查询库存
List<Stock> stocks = stockMapper.selectList(new LambdaQueryWrapper<Stock>() List<Stock> stocks = stockMapper.selectList(new LambdaQueryWrapper<Stock>()
.apply(goodsIdList != null && !goodsIdList.isEmpty(), "goods_related ->> '$.goodsId' in {0}", goodsIdList)); .apply(goodsIdList != null && !goodsIdList.isEmpty(), "goods_related ->> '$.goodsId' in {0}" + MYSQL_JSON_CI, goodsIdList));
if (stocks == null || stocks.isEmpty()) { if (stocks == null || stocks.isEmpty()) {
// 查不到对应物料的库存 // 查不到对应物料的库存
return Collections.emptyList(); return Collections.emptyList();

View File

@ -0,0 +1,56 @@
package com.wms.service.serviceImplements;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wms.entity.table.Stock;
import com.wms.entity.table.StockUpdateRecord;
import com.wms.mapper.StockUpdateRecordMapper;
import com.wms.service.IStockUpdateRecordService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static com.wms.utils.WmsUtils.generateId;
/**
* 库存接收记录服务实现类
*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StockUpdateRecordServiceImpl extends ServiceImpl<StockUpdateRecordMapper, StockUpdateRecord> implements IStockUpdateRecordService {
private final StockUpdateRecordMapper stockUpdateRecordMapper;
@Override
public boolean addStockUpdateRecord(Stock stockBefore, Stock stockAfter, String reason, String opUser) {
if (stockBefore == null && stockAfter == null) {
return false;
}
StockUpdateRecord stockUpdateRecord = new StockUpdateRecord();
stockUpdateRecord.setRecordId(generateId("STOCK_UPDATE_"));
// 解析数据
if (stockBefore != null) {
stockUpdateRecord.setStockId(stockBefore.getStockId());
stockUpdateRecord.setGoodsId(stockBefore.getGoodsRelated().getGoodsId());
stockUpdateRecord.setGoodsName(stockBefore.getGoodsRelated().getGoodsName());
stockUpdateRecord.setVehicleId(stockBefore.getVehicleId());
stockUpdateRecord.setLocationBefore(stockBefore.getLocationId());
stockUpdateRecord.setQuantityBefore(stockBefore.getGoodsRelated().getRemainNum());
} else {
stockUpdateRecord.setStockId(stockAfter.getStockId());
stockUpdateRecord.setGoodsId(stockAfter.getGoodsRelated().getGoodsId());
stockUpdateRecord.setGoodsName(stockAfter.getGoodsRelated().getGoodsName());
stockUpdateRecord.setVehicleId(stockAfter.getVehicleId());
stockUpdateRecord.setLocationBefore("");
stockUpdateRecord.setQuantityBefore(BigDecimal.ZERO);
}
if (stockAfter != null) {
stockUpdateRecord.setLocationAfter(stockAfter.getLocationId());
stockUpdateRecord.setQuantityAfter(stockAfter.getGoodsRelated().getRemainNum());
}
stockUpdateRecord.setReason(reason);
stockUpdateRecord.setUpdateTime(LocalDateTime.now());
stockUpdateRecord.setUpdateUser(opUser);
return stockUpdateRecordMapper.insert(stockUpdateRecord) > 0;
}
}

View File

@ -15,6 +15,8 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
@Service @Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
@ -47,9 +49,9 @@ public class TaskRecordServiceImplements extends ServiceImpl<TaskRecordMapper, T
if (query.getGoodsRelated() != null) { if (query.getGoodsRelated() != null) {
queryWrapper queryWrapper
// 物料编号 // 物料编号
.apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", query.getGoodsRelated().getGoodsId()) .apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, query.getGoodsRelated().getGoodsId())
// 物料名称/描述 // 物料名称/描述
.apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", query.getGoodsRelated().getGoodsName()); .apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, query.getGoodsRelated().getGoodsName());
} }
return super.list(queryWrapper); return super.list(queryWrapper);
} }

View File

@ -15,6 +15,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
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;
@ -81,7 +82,7 @@ public class UploadStocksListener implements ReadListener<StockExcelVo> {
Stock oldStock = stockService.getOne(new LambdaQueryWrapper<Stock>() Stock oldStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.eq(Stock::getVehicleId, stockExcelVo.getVehicleId()) .eq(Stock::getVehicleId, stockExcelVo.getVehicleId())
.eq(Stock::getLocationId, stockExcelVo.getLocationId()) .eq(Stock::getLocationId, stockExcelVo.getLocationId())
.apply("goods_related ->> '$.goodsId' = {0}", stockExcelVo.getGoodsId()) .apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, stockExcelVo.getGoodsId())
.last("limit 1")); .last("limit 1"));
if (oldStock != null) { if (oldStock != null) {
StockDetailInfo goodsRelated = oldStock.getGoodsRelated(); StockDetailInfo goodsRelated = oldStock.getGoodsRelated();

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wms.mapper.StockUpdateRecordMapper">
</mapper>

File diff suppressed because one or more lines are too long