feat(task): 添加任务记录以及区域异常检测

This commit is contained in:
陆一凡 2025-03-01 23:47:04 +08:00
parent 8a9ac391cf
commit f1e1c1525e
37 changed files with 1504 additions and 490 deletions

View File

@ -22,6 +22,9 @@ import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
@ -111,7 +114,8 @@ public class JobComponent extends BaseController {
* 发送入库任务给WCS * 发送入库任务给WCS
* @param task 任务 * @param task 任务
*/ */
private void sendTasksInToWcs(Task task) { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void sendTasksInToWcs(Task task) {
try { try {
List<Location> thisLocations = locationService.selLocations(new Location(task.getDestination())); List<Location> thisLocations = locationService.selLocations(new Location(task.getDestination()));
if(thisLocations == null) { if(thisLocations == null) {
@ -190,7 +194,8 @@ public class JobComponent extends BaseController {
* 发送出库任务给WCS * 发送出库任务给WCS
* @param task 任务 * @param task 任务
*/ */
private void sendTasksOutToWcs(Task task) { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void sendTasksOutToWcs(Task task) {
/* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */ /* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */
List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin())); List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin()));
if(thisLocations == null) { if(thisLocations == null) {
@ -239,7 +244,7 @@ public class JobComponent extends BaseController {
} }
if(!notCompleteTasks.isEmpty()) { if(!notCompleteTasks.isEmpty()) {
logger.info("存在未完成的任务,退出函数"); logger.info("存在未完成的任务,退出函数");
return; // 存在未完成的任务退出函数 return;
} }
// 检查是否有库存因为存在空框所以不在库存表中检验 // 检查是否有库存因为存在空框所以不在库存表中检验
Vehicle nextVehicle = new Vehicle(); Vehicle nextVehicle = new Vehicle();
@ -258,7 +263,12 @@ public class JobComponent extends BaseController {
Location emptyLocation = new Location(); Location emptyLocation = new Location();
emptyLocation.setLocationStatus(LocationStatus.EMPTY.getCode()); emptyLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
emptyLocation.setAreaId(beforLocation.getAreaId()); emptyLocation.setAreaId(beforLocation.getAreaId());
List<Location> emptyLocations = locationMapper.selLocations(emptyLocation);
// 查找同一巷道的用于移库交换区域
emptyLocation.setTunnelId(Integer.parseInt(String.valueOf(thisLocation.getTunnelId()).substring(0,1)));
emptyLocation.setLayer(thisLocation.getLayer());
emptyLocation.setIsChangeArea(1);
List<Location> emptyLocations = locationMapper.findNearLocations(emptyLocation);
if(emptyLocations == null) { if(emptyLocations == null) {
logger.info("emptyLocations == null"); logger.info("emptyLocations == null");
return; return;
@ -294,18 +304,19 @@ public class JobComponent extends BaseController {
moveTask.setVehicleNo(beforVehicleCheckIfEmpty.get(0).getVehicleId()); moveTask.setVehicleNo(beforVehicleCheckIfEmpty.get(0).getVehicleId());
moveTask.setCreateTime(new Date()); moveTask.setCreateTime(new Date());
moveTask.setUserName("WMS"); moveTask.setUserName("WMS");
if(depth == 2){ moveTask.setTaskPriority(thisLocation.getDepth() - depth);
moveTask.setTaskPriority(8); // if(depth == 2){
} else if (depth == 1) { // moveTask.setTaskPriority(8);
moveTask.setTaskPriority(9); // } else if (depth == 1) {
} // moveTask.setTaskPriority(9);
// }
if (beforVehicleCheckIfEmpty.get(0).getIsEmpty() == 1){ if (beforVehicleCheckIfEmpty.get(0).getIsEmpty() == 1){
moveTask.setRemark1("空框"); moveTask.setRemark1("空框");
}else { }else {
moveTask.setRemark1("带料"); moveTask.setRemark1("带料");
} }
int a = taskService.addTask(moveTask); int a = taskService.addTask(moveTask);
if (a == 1 && depth == 2){ if (a == 1 && depth > 1){
logger.info("生成移库任务成功,任务号:{}", moveTask.getTaskId()); logger.info("生成移库任务成功,任务号:{}", moveTask.getTaskId());
continue; continue;
} else if (a == 1 && depth == 1) { } else if (a == 1 && depth == 1) {
@ -369,7 +380,9 @@ public class JobComponent extends BaseController {
* 发送移库任务给WCS * 发送移库任务给WCS
* @param task 任务 * @param task 任务
*/ */
private void sendTasksMoveToWcs(Task task){
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void sendTasksMoveToWcs(Task task){
/* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */ /* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */
List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin())); List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin()));
if(thisLocations == null) { if(thisLocations == null) {
@ -391,10 +404,9 @@ public class JobComponent extends BaseController {
depth--; depth--;
/* 检查该库位有没有任务,若有则退出函数,若没有则检查有没有库存,若没有库存则继续,若有库存则生成一个移库任务,生成之后退出函数 */ /* 检查该库位有没有任务,若有则退出函数,若没有则检查有没有库存,若没有库存则继续,若有库存则生成一个移库任务,生成之后退出函数 */
Location beforLocationsQuery = new Location(); Location beforLocationsQuery = new Location();
// logger.info("{},{},{},{},{}",thisLocation.getAreaId(),thisLocation.getQueue(),thisLocation.getLine(),thisLocation.getLayer(),depth);
beforLocationsQuery.setAreaId(thisLocation.getAreaId()); beforLocationsQuery.setAreaId(thisLocation.getAreaId());
//beforLocationsQuery.setQueue(thisLocation.getQueue()); beforLocationsQuery.setTunnelId(thisLocation.getTunnelId());
beforLocationsQuery.setLine(thisLocation.getLine()); beforLocationsQuery.setQueue(thisLocation.getQueue());
beforLocationsQuery.setLayer(thisLocation.getLayer()); beforLocationsQuery.setLayer(thisLocation.getLayer());
beforLocationsQuery.setLocationType(1); beforLocationsQuery.setLocationType(1);
beforLocationsQuery.setDepth(depth); beforLocationsQuery.setDepth(depth);
@ -404,18 +416,19 @@ public class JobComponent extends BaseController {
return; return;
} }
if (beforLocations.isEmpty()) { if (beforLocations.isEmpty()) {
logger.info(".isEmpty()"); logger.info("前一个库位信息为空");
return; return;
} }
Location beforLocation = beforLocations.get(0); // 前一个库位 Location beforLocation = beforLocations.get(0); // 前一个库位
List<Task> notCompleteTasks = taskMapper.haveNotCompleteTask(beforLocation.getLocationId()); List<Task> notCompleteTasks = taskMapper.haveNotCompleteTask(beforLocation.getLocationId());
if (notCompleteTasks == null) { if (notCompleteTasks == null) {
logger.info("eteTasks为null"); logger.info("查询任务异常");
return; return;
} }
if (!notCompleteTasks.isEmpty()) { // if (!notCompleteTasks.isEmpty()) {
return; // 存在未完成的任务退出函数 // logger.info("存在未完成的任务,退出函数");
} // return;
// }
} }
logger.info("开始发送移库任务给WCS任务号{}", task.getTaskId()); logger.info("开始发送移库任务给WCS任务号{}", task.getTaskId());
String uuid = UUID.randomUUID().toString(); String uuid = UUID.randomUUID().toString();
@ -432,6 +445,7 @@ public class JobComponent extends BaseController {
ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class); ContainerApiLocalResponse result = JSON.parseObject(responseString, ContainerApiLocalResponse.class);
if(result != null && result.getCode().equals("200")) { if(result != null && result.getCode().equals("200")) {
logger.info("下发四向车移库任务成功任务ID{}", task.getTaskId()); logger.info("下发四向车移库任务成功任务ID{}", task.getTaskId());
logger.info("移库目标位置为:{}",task.getDestination());
Task taskForUpdate = new Task(); Task taskForUpdate = new Task();
taskForUpdate.setTaskId(task.getTaskId()); taskForUpdate.setTaskId(task.getTaskId());
taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode()); taskForUpdate.setTaskStatus(WmsTaskStatus.WAIT.getCode());
@ -441,7 +455,8 @@ public class JobComponent extends BaseController {
logger.info("下发四向车移库任务失败任务ID{},信息:{}", task.getTaskId(), JSON.toJSONString(result)); logger.info("下发四向车移库任务失败任务ID{},信息:{}", task.getTaskId(), JSON.toJSONString(result));
} }
private void sendTasksMoveToWcs1(Task task) { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public void sendTasksMoveToWcs1(Task task) {
/* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */ /* 检查该库位前一个深度是否存在库存,若存在库存则生成一个移库任务,此任务暂不下发 */
List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin())); List<Location> thisLocations = locationService.selLocations(new Location(task.getOrigin()));
if(thisLocations == null) { if(thisLocations == null) {

View File

@ -9,19 +9,14 @@ import com.wms.entity.common.WmsApiResponse;
import com.wms.entity.table.*; import com.wms.entity.table.*;
import com.wms.mapper.*; import com.wms.mapper.*;
import com.wms.service.PartInfoService; import com.wms.service.PartInfoService;
import com.wms.utils.HttpUtils;
import com.wms.utils.WmsUtils; import com.wms.utils.WmsUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.Now;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import javax.swing.plaf.synth.Region;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -44,6 +39,10 @@ public class TaskOperation {
*/ */
private final TaskMapper taskMapper; private final TaskMapper taskMapper;
/**
* 任务记录操作类
*/
private final TaskRecordMapper taskRecordMapper;
/** /**
* 库位表操作类 * 库位表操作类
*/ */
@ -113,7 +112,7 @@ public class TaskOperation {
return false; return false;
} }
AppOrderIn appOrderInForCheck = appOrderIns.get(0); AppOrderIn appOrderInForCheck = appOrderIns.get(0);
if ("00000".equals(appOrderInForCheck.getGoodsId())){ if (appOrderInForCheck.getGoodsId() == null){
//表示这个为空托盘入库没有零件号不记录到库存表中,更新到料箱监控表中 //表示这个为空托盘入库没有零件号不记录到库存表中,更新到料箱监控表中
Vehicle a = new Vehicle(); Vehicle a = new Vehicle();
a.setVehicleId(appOrderInForCheck.getVehicleNo()); a.setVehicleId(appOrderInForCheck.getVehicleNo());
@ -198,6 +197,7 @@ public class TaskOperation {
}else{ }else{
log.info("四向车入库完成更新料箱监控成功,任务:{}", task.toLoggerString()); log.info("四向车入库完成更新料箱监控成功,任务:{}", task.toLoggerString());
} }
taskRecordMapper.addTask(task);
} }
return true; return true;
} }
@ -278,6 +278,7 @@ public class TaskOperation {
log.error("拉取库存失败,任务:{},原因:没有找到库存数据", task.toLoggerString()); log.error("拉取库存失败,任务:{},原因:没有找到库存数据", task.toLoggerString());
return false; return false;
} }
int totalNum = stocks.size(); int totalNum = stocks.size();
if (totalNum > 1){ if (totalNum > 1){
for (Stock stock : stocks){ for (Stock stock : stocks){
@ -292,9 +293,9 @@ public class TaskOperation {
appOrderIn.setGoodsNum(BigDecimal.valueOf(stock.getAvailableNum())); appOrderIn.setGoodsNum(BigDecimal.valueOf(stock.getAvailableNum()));
appOrderIn.setWareHouse("A"); appOrderIn.setWareHouse("A");
if (stock.getVehicleId() != null && !stock.getVehicleId().isEmpty()){ if (stock.getVehicleId() != null && !stock.getVehicleId().isEmpty()){
appOrderIn.setOrderStatus(2); appOrderIn.setOrderStatus(OrderInStatusEnum.BINDING.getCode());
}else { }else {
appOrderIn.setOrderStatus(0); appOrderIn.setOrderStatus(OrderInStatusEnum.CREATE.getCode());
} }
//appOrderIn.setOrderStatus(2); //appOrderIn.setOrderStatus(2);
appOrderIn.setCreateTime(LocalDateTime.now()); appOrderIn.setCreateTime(LocalDateTime.now());
@ -339,27 +340,26 @@ public class TaskOperation {
} }
}else{ }else{
log.error("库存数量为零,即将生成空托盘回库任务"); log.error("库存数量为零,即将生成空托盘回库任务");
AppOrderIn appOrderIn = new AppOrderIn(); // AppOrderIn appOrderIn = new AppOrderIn();
appOrderIn.setRowId(UUID.randomUUID().toString()); // appOrderIn.setRowId(UUID.randomUUID().toString());
appOrderIn.setGuid(UUID.randomUUID().toString()); // appOrderIn.setGuid(UUID.randomUUID().toString());
appOrderIn.setInType(1); // appOrderIn.setInType(1);
appOrderIn.setBatchNo(null); // appOrderIn.setBatchNo(null);
appOrderIn.setVehicleNo(task.getVehicleNo()); // appOrderIn.setVehicleNo(task.getVehicleNo());
appOrderIn.setGoodsId(null); // appOrderIn.setGoodsId(null);
appOrderIn.setGoodsNum(null); // appOrderIn.setGoodsNum(null);
appOrderIn.setWareHouse("A"); // appOrderIn.setWareHouse("D");
appOrderIn.setOrderStatus(0); // appOrderIn.setOrderStatus(0);
appOrderIn.setCreateTime(LocalDateTime.now()); // appOrderIn.setCreateTime(LocalDateTime.now());
appOrderIn.setCreatePerson("WMS"); // appOrderIn.setCreatePerson("WMS");
appOrderIn.setUpdateTime(LocalDateTime.now()); // appOrderIn.setUpdateTime(LocalDateTime.now());
appOrderIn.setRemark("空托盘入库"); // appOrderIn.setRemark("空托盘入库");
//appOrderIn.setProductionDate(request.abcSelect); // int a = appOrderInMapper.insert(appOrderIn);
int a = appOrderInMapper.insert(appOrderIn); // if (a > 0){
if (a > 0){ // log.info("空托盘回库任务生成成功,任务:{}", task.toLoggerString());
log.info("空托盘回库任务生成成功,任务:{}", task.toLoggerString()); // }else{
}else{ // log.error("空托盘回库任务生成失败,任务:{}", task.toLoggerString());
log.error("空托盘回库任务生成失败,任务:{}", task.toLoggerString()); // }
}
} }
} }
} }
@ -395,6 +395,7 @@ public class TaskOperation {
int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin()); int updateStock = stockMapper.deleteStockWithLocationId(task.getOrigin());
if(updateStock > 0){ if(updateStock > 0){
log.info("出库完成删除库存成功,任务:{}", task.toLoggerString()); log.info("出库完成删除库存成功,任务:{}", task.toLoggerString());
taskRecordMapper.addTask(task);
return true; return true;
}else{ }else{
log.error("出库完成删除库存失败,任务:{}", task.toLoggerString()); log.error("出库完成删除库存失败,任务:{}", task.toLoggerString());
@ -416,6 +417,7 @@ public class TaskOperation {
int bd = vehicleMapper.deleteVehicle(ab); int bd = vehicleMapper.deleteVehicle(ab);
if (bd == 0){ if (bd == 0){
log.error("四向车空托出库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString()); log.error("四向车空托出库完成更新料箱监控失败,任务:{},原因:更新载具为空状态失败", task.toLoggerString());
taskRecordMapper.addTask(task);
return false; return false;
}else{ }else{
log.info("四向车空托出库完成更新料箱监控成功,任务:{}", task.toLoggerString()); log.info("四向车空托出库完成更新料箱监控成功,任务:{}", task.toLoggerString());
@ -543,6 +545,7 @@ public class TaskOperation {
log.info("盘点出库完成删除库存成功,任务:{}", task.toLoggerString()); log.info("盘点出库完成删除库存成功,任务:{}", task.toLoggerString());
return true; return true;
} }
return false; return false;
} }
@ -598,12 +601,19 @@ public class TaskOperation {
updateLocation.setLocationId(task.getOrigin()); updateLocation.setLocationId(task.getOrigin());
updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode()); updateLocation.setLocationStatus(LocationStatus.EMPTY.getCode());
updateLocation.setVehicleId(""); updateLocation.setVehicleId("");
// 更新移动交换区域
updateLocation.setIsChangeArea(1);
locationMapper.modifyLocation(updateLocation); // 更新库位为空 locationMapper.modifyLocation(updateLocation); // 更新库位为空
// 占掉新库位生成的时候会占这里重复操作保护 // 占掉新库位生成的时候会占这里重复操作保护
Location occupyLocation = new Location(); Location occupyLocation = new Location();
occupyLocation.setLocationId(task.getDestination()); occupyLocation.setLocationId(task.getDestination());
occupyLocation.setLocationStatus(LocationStatus.OCCUPY.getCode()); occupyLocation.setLocationStatus(LocationStatus.OCCUPY.getCode());
occupyLocation.setVehicleId(task.getVehicleNo()); occupyLocation.setVehicleId(task.getVehicleNo());
// 更新移动交换区域
occupyLocation.setIsChangeArea(0);
locationMapper.modifyLocation(occupyLocation); // 更新库位 locationMapper.modifyLocation(occupyLocation); // 更新库位
String checkUse = task.getRemark1(); String checkUse = task.getRemark1();
// if (Objects.equals(checkUse, "空框")){ // if (Objects.equals(checkUse, "空框")){
@ -623,12 +633,14 @@ public class TaskOperation {
int updatedLocation = stockMapper.updateLocationAndStatus(task.getOrigin(), task.getDestination(), StockStatus.OK.getCode()); int updatedLocation = stockMapper.updateLocationAndStatus(task.getOrigin(), task.getDestination(), StockStatus.OK.getCode());
if(updatedLocation > 0){ if(updatedLocation > 0){
log.info("移库库位更新成功,任务:{}", task.toLoggerString()); log.info("移库库位更新成功,任务:{}", task.toLoggerString());
taskRecordMapper.addTask(task);
return true; return true;
}else { }else {
log.info("移库库位更新失败,任务:{}", task.toLoggerString()); log.info("移库库位更新失败,任务:{}", task.toLoggerString());
} }
} else if (Objects.equals(checkUse, "空框")) { } else if (Objects.equals(checkUse, "空框")) {
log.info("空框移库库位更新成功"); log.info("空框移库库位更新成功");
taskRecordMapper.addTask(task);
return true; return true;
} }
// 更新库位 // 更新库位

View File

@ -0,0 +1,19 @@
package com.wms.common;
import lombok.Data;
import java.io.Serializable;
/**
* 通用的删除请求类
*/
@Data
public class DeleteRequest implements Serializable {
/**
* id
*/
private Long id;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,30 @@
package com.wms.common;
import lombok.Data;
/**
* 通用的分页请求类
*/
@Data
public class PageRequest {
/**
* 当前页号
*/
private int current = 1;
/**
* 页面大小
*/
private int pageSize = 10;
/**
* 排序字段
*/
private String sortField;
/**
* 排序顺序默认升序
*/
private String sortOrder = "descend";
}

View File

@ -0,0 +1,52 @@
package com.wms.common;
import com.wms.exception.ErrorCode;
/**
* 响应工具类
*/
public class ResultUtils {
/**
* 成功
*
* @param data 数据
* @param <T> 数据类型
* @return 响应
*/
public static <T> BaseResponse<T> success(T data) {
return new BaseResponse<>(0, data, "ok");
}
/**
* 失败
*
* @param errorCode 错误码
* @return 响应
*/
public static BaseResponse<?> error(ErrorCode errorCode) {
return new BaseResponse<>(errorCode);
}
/**
* 失败
*
* @param code 错误码
* @param message 错误信息
* @return 响应
*/
public static BaseResponse<?> error(int code, String message) {
return new BaseResponse<>(code, null, message);
}
/**
* 失败
*
* @param errorCode 错误码
* @return 响应
*/
public static BaseResponse<?> error(ErrorCode errorCode, String message) {
return new BaseResponse<>(errorCode.getCode(), null, message);
}
}

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.wms.constants.enums.KateTaskStatus; import com.wms.constants.enums.KateTaskStatus;
import com.wms.constants.enums.ResponseCode; import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.ResponseEntity;
import com.wms.entity.excel.StockExcel;
import com.wms.entity.table.*; import com.wms.entity.table.*;
import com.wms.service.*; import com.wms.service.*;
import com.wms.utils.HttpUtils; import com.wms.utils.HttpUtils;
@ -12,6 +13,7 @@ import com.wms.utils.excel.ExcelUtils;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Isolation;
@ -53,9 +55,7 @@ public class ExcelController extends BaseController {
List<Goods> files = ExcelUtils.readMultipartFile(file, Goods.class); List<Goods> files = ExcelUtils.readMultipartFile(file, Goods.class);
// 添加进物料表 // 添加进物料表
for (Goods goods : files) { for (Goods goods : files) {
Goods query = new Goods(); if (goodsService.selGoodsByGoodsId(goods.getGoodsId()) != null) {
query.setGoodsName(goods.getGoodsName());
if (!CollectionUtils.isEmpty(goodsService.selGoods(query))) {
goodsService.modifyGoods(goods); goodsService.modifyGoods(goods);
}else { }else {
goodsService.addGoods(goods); goodsService.addGoods(goods);
@ -82,7 +82,13 @@ public class ExcelController extends BaseController {
@ResponseBody @ResponseBody
public void downloadStockExcel(HttpServletResponse response) { public void downloadStockExcel(HttpServletResponse response) {
List<Stock> stocks = stockService.selStocks(new Stock()); List<Stock> stocks = stockService.selStocks(new Stock());
ExcelUtils.export(response, "库存报表", stocks, Stock.class); List<StockExcel> stockExcelList = new ArrayList<>();
for (Stock stock : stocks) {
StockExcel stockExcel = new StockExcel();
BeanUtils.copyProperties(stock,stockExcel);
stockExcelList.add(stockExcel);
}
ExcelUtils.export(response, "库存报表", stockExcelList,StockExcel.class);
} }
/** /**

View File

@ -41,10 +41,7 @@ public class GoodsController extends BaseController{
* 物料服务 * 物料服务
*/ */
private final GoodsService goodsService; private final GoodsService goodsService;
/**
* 零件服务
*/
private final PartInfoService partInfoService;
/** /**
* 请求头部信息 * 请求头部信息
*/ */
@ -55,9 +52,9 @@ public class GoodsController extends BaseController{
*/ */
@PostMapping("/getPartInfo") @PostMapping("/getPartInfo")
@ResponseBody @ResponseBody
public String getPartInfo(@RequestBody TableRequest<PartInfo, String> tableRequest){ public String getPartInfo(@RequestBody TableRequest<Goods, String> tableRequest){
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest)); logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到查询零件数据请求:{}", JSON.toJSONString(tableRequest)); logger.info("接收到查询物料数据请求:{}", JSON.toJSONString(tableRequest));
TableResponse tblResp = new TableResponse(); TableResponse tblResp = new TableResponse();
// 解析请求数据 // 解析请求数据
if (tableRequest == null || tableRequest.getPage() == null) { if (tableRequest == null || tableRequest.getPage() == null) {
@ -68,21 +65,16 @@ public class GoodsController extends BaseController{
} }
// 处理分页信息 // 处理分页信息
PageDomain pageRequest = tableRequest.getPage(); PageDomain pageRequest = tableRequest.getPage();
// String[] orderByArr = {"location_id", "vehicle_id", "goods_id", "batch_no", "remain_num", "expiration_date", "create_time"}; String orderByStr = "create_time asc";
String orderByStr = "material asc";
// if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) {
// orderByStr = pageRequest.getOrderBy();
// } else {
// // 默认排序
// orderByStr = "expiration_date desc";
// }
PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr);
List<PartInfo> parts = partInfoService.selParts(tableRequest.getParam());
PageInfo<PartInfo> partPageInfo = new PageInfo<>(parts);
List<Goods> parts = goodsService.selGoods(tableRequest.getParam());
PageInfo<Goods> partPageInfo = new PageInfo<>(parts);
tblResp.setCode(ResponseCode.OK.getCode()); tblResp.setCode(ResponseCode.OK.getCode());
tblResp.setMessage("查询零件信息成功!"); tblResp.setMessage("查询物料信息成功!");
tblResp.setRows(partPageInfo.getList()); tblResp.setRows(partPageInfo.getList());
tblResp.setTotal(partPageInfo.getTotal()); tblResp.setTotal(partPageInfo.getTotal());
return JSON.toJSONString(tblResp); return JSON.toJSONString(tblResp);
@ -94,37 +86,37 @@ public class GoodsController extends BaseController{
* @param partInfo 零件信息 * @param partInfo 零件信息
* @return 结果 * @return 结果
*/ */
@PostMapping("/updatePartInfo") // @PostMapping("/updatePartInfo")
@ResponseBody // @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) // @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String updatePartInfo(@RequestBody PartInfo partInfo) { // public String updatePartInfo(@RequestBody PartInfo partInfo) {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest)); // logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到更新零件信息请求:{}", JSON.toJSONString(partInfo)); // logger.info("接收到更新零件信息请求:{}", JSON.toJSONString(partInfo));
// 创建响应信息 // // 创建响应信息
ResponseEntity rsp = new ResponseEntity(); // ResponseEntity rsp = new ResponseEntity();
try { // try {
if (StringUtils.isEmpty(partInfo.getMaterial())) {// 箱号为空不执行 // if (StringUtils.isEmpty(partInfo.getMaterial())) {// 箱号为空不执行
logger.error("请求零件号为空"); // logger.error("请求零件号为空");
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求零件号为空"); // rsp.setMessage("请求零件号为空");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
partInfoService.modifyPart(partInfo); // partInfoService.modifyPart(partInfo);
} catch (Exception e) { // } catch (Exception e) {
// 回滚事务 // // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("发生异常:{}", e.getMessage()); // logger.info("发生异常:{}", e.getMessage());
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage()); // rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
// 返回成功 // // 返回成功
rsp.setCode(ResponseCode.OK.getCode()); // rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新零件信息成功"); // rsp.setMessage("更新零件信息成功");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
//
/** /**
* 更新物料信息 * 更新物料信息
* *
@ -154,109 +146,108 @@ public class GoodsController extends BaseController{
rsp.setMessage("更新物料信息成功"); rsp.setMessage("更新物料信息成功");
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
//
@PostMapping("/queryPartInfoByPartNo") // @PostMapping("/queryPartInfoByPartNo")
@ResponseBody // @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) // @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String queryPartInfoByPartNo(@RequestBody PartInfo partInfo) { // public String queryPartInfoByPartNo(@RequestBody PartInfo partInfo) {
logger.info("前台查询零件数据"); // logger.info("前台查询零件数据");
ResponseEntity rsp = new ResponseEntity(); // ResponseEntity rsp = new ResponseEntity();
if (partInfo == null || StringUtils.isEmpty(partInfo.getMaterial())) { // if (partInfo == null || StringUtils.isEmpty(partInfo.getMaterial())) {
logger.info("请求查询的参数为空"); // logger.info("请求查询的参数为空");
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求查询的参数为空"); // rsp.setMessage("请求查询的参数为空");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
try { // try {
PartInfo partInfoNeed = partInfoService.selPartByPartNo(partInfo.getMaterial()); // PartInfo partInfoNeed = partInfoService.selPartByPartNo(partInfo.getMaterial());
if (partInfoNeed == null) { // if (partInfoNeed == null) {
logger.info("查询零件信息发生错误,零件号:{}", partInfo.getMaterial()); // logger.info("查询零件信息发生错误,零件号:{}", partInfo.getMaterial());
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("查询的零件信息为空"); // rsp.setMessage("查询的零件信息为空");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
rsp.setReturnData(partInfoNeed); // rsp.setReturnData(partInfoNeed);
} catch (Exception e) { // } catch (Exception e) {
// 回滚事务 // // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("查询零件信息发生错误:{}", e.getMessage()); // logger.info("查询零件信息发生错误:{}", e.getMessage());
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage()); // rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
logger.info("查询零件信息成功"); // logger.info("查询零件信息成功");
// 返回成功 // // 返回成功
rsp.setCode(ResponseCode.OK.getCode()); // rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("查询零件信息成功"); // rsp.setMessage("查询零件信息成功");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
//
@PostMapping("/queryPartNo") // @PostMapping("/queryPartNo")
@ResponseBody // @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) // @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String queryPartNo(@RequestBody PartInfo partInfo) { // public String queryPartNo(@RequestBody PartInfo partInfo) {
logger.info("前台查询零件数据"); // logger.info("前台查询零件数据");
ResponseEntity rsp = new ResponseEntity(); // ResponseEntity rsp = new ResponseEntity();
if (partInfo == null || StringUtils.isEmpty(partInfo.getMaterial())) { // if (partInfo == null || StringUtils.isEmpty(partInfo.getMaterial())) {
logger.info("请求查询的参数为空"); // logger.info("请求查询的参数为空");
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求查询的参数为空"); // rsp.setMessage("请求查询的参数为空");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
try { // try {
PartInfo query = new PartInfo(); // PartInfo query = new PartInfo();
query.setMaterial(partInfo.getMaterial()); // query.setMaterial(partInfo.getMaterial());
List<PartInfo> partInfoNeed = partInfoService.selParts(query); // List<PartInfo> partInfoNeed = partInfoService.selParts(query);
if (partInfoNeed.size() == 0) { // if (partInfoNeed.size() == 0) {
logger.info("查询零件信息发生错误,零件号:{}", partInfo.getMaterial()); // logger.info("查询零件信息发生错误,零件号:{}", partInfo.getMaterial());
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("查询的零件信息为空"); // rsp.setMessage("查询的零件信息为空");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
rsp.setReturnData(partInfoNeed); // rsp.setReturnData(partInfoNeed);
} catch (Exception e) { // } catch (Exception e) {
// 回滚事务 // // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("查询零件信息发生错误:{}", e.getMessage()); // logger.info("查询零件信息发生错误:{}", e.getMessage());
// 返回其他异常 // // 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode()); // rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage()); // rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
logger.info("查询零件信息成功"); // logger.info("查询零件信息成功");
// 返回成功 // // 返回成功
rsp.setCode(ResponseCode.OK.getCode()); // rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("查询零件信息成功"); // rsp.setMessage("查询零件信息成功");
return JSON.toJSONString(rsp); // return JSON.toJSONString(rsp);
} // }
//
/** /**
* 删除当前零件信息 * 删除当前零件信息
* *
* @param partInfo 零件
* @return 结果 * @return 结果
*/ */
@PostMapping("/deletePartInfo") @PostMapping("/deleteGoodInfo")
@ResponseBody @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String deleteVehicle(@RequestBody PartInfo partInfo) { public String deleteVehicle(@RequestBody Goods good) {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest)); logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到更新料箱信息请求:{}", JSON.toJSONString(partInfo)); logger.info("接收到更新料箱信息请求:{}", JSON.toJSONString(good));
// 创建响应信息 // 创建响应信息
ResponseEntity rsp = new ResponseEntity(); ResponseEntity rsp = new ResponseEntity();
try { try {
if (StringUtils.isEmpty(partInfo.getMaterial())) {// 零件号为空不做处理 if (StringUtils.isEmpty(good.getGoodsId())) {// 零件号为空不做处理
logger.error("请求删除的零件号为空"); logger.error("请求删除的零件号为空");
rsp.setCode(ResponseCode.ERROR.getCode()); rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求删除的零件号为空"); rsp.setMessage("请求删除的零件号为空");
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
partInfoService.deletePartByPartNo(partInfo.getMaterial()); goodsService.deleteGoods(good.getGoodsId());
} catch (Exception e) { } catch (Exception e) {
// 回滚事务 // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -271,4 +262,26 @@ public class GoodsController extends BaseController{
rsp.setMessage("删除零件信息成功"); rsp.setMessage("删除零件信息成功");
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
/*
* 清空当前零件信息
*
* @param partInfo 零件
* @return 结果
*/
@GetMapping("/clearGoodsInfo")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String deleteVehicle() {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到清空零件信息请求");
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
goodsService.clearGoodsInfo();
// 返回成功
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("清空零件信息成功");
return JSON.toJSONString(rsp);
}
} }

View File

@ -276,6 +276,43 @@ public class LocationController extends BaseController {
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
/**
* 查询料箱信息
* @param location
* @return 结果
*/
@PostMapping("/getVehiclesByLocation")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getVehicleByLocation(@RequestBody Location location) {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到查询料箱请求:{}", JSON.toJSONString(location));
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
// 解析请求数据
if (StringUtils.isEmpty(location.getLocationId())) {
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求数据为空,无法处理!");
logger.error("请求数据为空,无法处理!");
return JSON.toJSONString(rsp);
}
Vehicle vehicle = new Vehicle();
vehicle.setCurrentLocation(location.getLocationId());
List<Vehicle> vehicles = vehicleService.selVehicles(vehicle);
if (vehicles.size() == 0) {
rsp.setCode(ResponseCode.OK.getCode());
rsp.setReturnData(new Vehicle());
rsp.setMessage("无此位置托盘");
return JSON.toJSONString(rsp);
}
rsp.setCode(ResponseCode.OK.getCode());
rsp.setReturnData(vehicles.get(0));
rsp.setMessage("查询托盘成功");
return JSON.toJSONString(rsp);
}
/** /**
* 查询料箱信息 * 查询料箱信息
* @param tableRequest 请求 * @param tableRequest 请求
@ -319,6 +356,27 @@ public class LocationController extends BaseController {
return JSON.toJSONString(tblResp); return JSON.toJSONString(tblResp);
} }
/**
* 查询料箱信息
* @param
* @return 结果
*/
@GetMapping("/getVehicleList")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getVehicleList() {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到查询所有托盘信息请求");
List<Vehicle> vehicles = vehicleService.selVehicles(new Vehicle());
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
rsp.setMessage("查询所有托盘信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setReturnData(vehicles);
return JSON.toJSONString(rsp);
}
/** /**
* 更新料箱信息 * 更新料箱信息
* *
@ -455,4 +513,43 @@ public class LocationController extends BaseController {
rsp.setMessage("更新库位状态成功"); rsp.setMessage("更新库位状态成功");
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
/**
* 寻找库位关联信息
*
* @param location
* @return 结果
*/
@PostMapping("/findLocationInfo")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String findLocationInfo(@RequestBody Location location) {
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
try {
if (location.getLocationId() == null) {// 载具号不为空
// 判断是不是需要往载具表里面添加数据
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("参数填写错误");
return JSON.toJSONString(rsp);
}
List<Location> locationInfo = locationService.findLocationInfo(location);
rsp.setReturnData(locationInfo);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("更新库位状态发生错误:{}", e.getMessage());
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp);
}
// 返回成功
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("更新库位状态成功");
return JSON.toJSONString(rsp);
}
} }

View File

@ -3,13 +3,19 @@ package com.wms.controller;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wms.constants.enums.LocationStatus;
import com.wms.constants.enums.ResponseCode; import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.ResponseEntity;
import com.wms.entity.dto.stock.StockQueryReuqest; import com.wms.entity.dto.stock.StockQueryReuqest;
import com.wms.entity.page.PageDomain; import com.wms.entity.page.PageDomain;
import com.wms.entity.page.TableRequest; import com.wms.entity.page.TableRequest;
import com.wms.entity.page.TableResponse; import com.wms.entity.page.TableResponse;
import com.wms.entity.table.Goods;
import com.wms.entity.table.Location;
import com.wms.entity.table.PartInfo;
import com.wms.entity.table.Stock; import com.wms.entity.table.Stock;
import com.wms.mapper.LocationMapper;
import com.wms.mapper.StockMapper;
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;
@ -27,6 +33,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -44,13 +51,15 @@ public class StockController extends BaseController {
*/ */
private final StockService stockService; private final StockService stockService;
private final LocationMapper locationMapper;
/** /**
* 请求头部信息 * 请求头部信息
*/ */
private final HttpServletRequest servletRequest; private final HttpServletRequest servletRequest;
/** /**
* 查找所有库存 * 分页查找所有库存
*/ */
@PostMapping("/getAllStocks") @PostMapping("/getAllStocks")
@ResponseBody @ResponseBody
@ -74,7 +83,7 @@ public class StockController extends BaseController {
orderByStr = pageRequest.getOrderBy(); orderByStr = pageRequest.getOrderBy();
} else { } else {
// 默认排序 // 默认排序
orderByStr = "expiration_date desc"; orderByStr = "create_time desc";
} }
PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr);
@ -89,6 +98,24 @@ public class StockController extends BaseController {
} }
/**
* 查找所有库存
*/
@GetMapping("/getStockList")
@ResponseBody
public String getStockList(){
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("获取所有库存列表");
List<Stock> stocks = stockService.selStocks(new Stock());
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
rsp.setMessage("查询所有库存信息成功");
rsp.setCode(ResponseCode.OK.getCode());
rsp.setReturnData(stocks);
return JSON.toJSONString(rsp);
}
/** /**
* 根据库位号查询库存 * 根据库位号查询库存
*/ */
@ -216,9 +243,55 @@ public class StockController extends BaseController {
// 创建响应信息 // 创建响应信息
ResponseEntity rsp = new ResponseEntity(); ResponseEntity rsp = new ResponseEntity();
try { try {
Stock tempStock = new Stock(); Stock queryStock = new Stock();
tempStock.setStockId(WmsUtils.generateId("ST")); queryStock.setVehicleId(stock.getVehicleId());
List<Stock> queryStockList = stockService.selStocks(stock);
if(!CollectionUtils.isEmpty(queryStockList)) {
rsp.setMessage("输入托盘已被使用");
rsp.setCode(ResponseCode.ERROR.getCode());
return JSON.toJSONString(rsp);
}
//将批次号一部分裁下来做生产日期
Stock addStock = new Stock();
addStock.setStockId(WmsUtils.generateUUIDString());
addStock.setWarehouseName("四向车立体库");
addStock.setLocationId(stock.getLocationId());
//addStock.setLocationId(appOrderIn.getVehicleNo());
addStock.setVehicleId(stock.getVehicleId());
addStock.setGoodsId(stock.getGoodsId());
addStock.setGoodsName("");
addStock.setBatchNo("");
addStock.setAvailableNum(stock.getAvailableNum());
addStock.setRealNum(stock.getAvailableNum());
addStock.setProviderId("");
addStock.setProviderName("");
//addStock.setProductionDate(null);
addStock.setExpirationDate(null);
addStock.setStockStatus(0);
addStock.setGoodsStatus(null);
addStock.setCreateTime(new Date());
addStock.setLastUpdateTime(null);
addStock.setLastUpdateUser(null);
addStock.setProductionDate(null);
int i = stockService.addStock(addStock);
if (i <=0 ) {
logger.info("添加库存失败");
rsp.setMessage("添加失败");
rsp.setCode(ResponseCode.ERROR.getCode());
return JSON.toJSONString(rsp);
}
// 更新库位状态
Location location = new Location();
location.setLocationId(stock.getLocationId());
location.setLocationStatus(LocationStatus.OCCUPY.getCode());
int i1 = locationMapper.modifyLocation(location);
if (i1 <= 0) {
logger.info("更新库位状态失败");
rsp.setMessage("更新库位状态失败");
rsp.setCode(ResponseCode.ERROR.getCode());
return JSON.toJSONString(rsp);
}
} catch (Exception e) { } catch (Exception e) {
// 回滚事务 // 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -233,4 +306,41 @@ public class StockController extends BaseController {
rsp.setMessage("添加库存信息成功"); rsp.setMessage("添加库存信息成功");
return JSON.toJSONString(rsp); return JSON.toJSONString(rsp);
} }
/**
* 删除当前库存信息
*
* @param stock 零件
* @return 结果
*/
@PostMapping("/deleteStockInfo")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String deleteVehicle(@RequestBody Stock stock) {
logger.info("请求的ip地址{}", HttpUtils.getIpAddr(servletRequest));
logger.info("接收到删除库存信息请求:{}", JSON.toJSONString(stock));
// 创建响应信息
ResponseEntity rsp = new ResponseEntity();
try {
if (StringUtils.isEmpty(stock.getStockId())){// 零件号为空不做处理
logger.error("请求删除的库存号为空");
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("请求删除的库存为空");
return JSON.toJSONString(rsp);
}
stockService.deleteStock(stock.getStockId());
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.info("发生异常:{}", e.getMessage());
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage(e.getMessage());
return JSON.toJSONString(rsp);
}
// 返回成功
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("删除库存信息成功");
return JSON.toJSONString(rsp);
}
} }

View File

@ -1288,7 +1288,7 @@ public class TaskController extends BaseController {
taskQuery.setPickStand(stands.get(0).getStandId()); taskQuery.setPickStand(stands.get(0).getStandId());
} }
PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr);
List<Task> tasks = taskService.selTasks(taskQuery); List<Task> tasks = taskService.selTaskByCreateTime(taskQuery);
PageInfo<Task> taskPageInfo = new PageInfo<>(tasks); PageInfo<Task> taskPageInfo = new PageInfo<>(tasks);
tblResp.setCode(ResponseCode.OK.getCode()); tblResp.setCode(ResponseCode.OK.getCode());
tblResp.setMessage("查询任务成功!"); tblResp.setMessage("查询任务成功!");

View File

@ -20,8 +20,10 @@ import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -143,13 +145,19 @@ public class TaskDealController extends BaseController{
sendToWcsRequest.setDestination(newDestination); sendToWcsRequest.setDestination(newDestination);
} }
ResponseEntity response1; ResponseEntity response1;
for (int i = 0; i < 5; i++) { // for (int i = 0; i < 5; i++) {
response1 = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CHANGE_TASK.getValue(), JSON.toJSONString(sendToWcsRequest)), ResponseEntity.class); // response1 = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CHANGE_TASK.getValue(), JSON.toJSONString(sendToWcsRequest)), ResponseEntity.class);
logger.info("向WCS反馈任务状态变更"); // logger.info("向WCS反馈任务状态变更");
if (Objects.equals(response1.getCode(), 0)) {// 发送成功则不再发送不成功一共尝试发送5次 // if (response1 == null || response1.getCode() != 0) {
break; // logger.error("向WCS反馈任务状态变更失败");
} // response.setCode(ResponseCode.ERROR.getCode());
} // response.setMessage("向WCS反馈任务状态变更失败");
// return JSON.toJSONString(response);
// }
// if (Objects.equals(response1.getCode(), 0)) {// 发送成功则不再发送不成功一共尝试发送5次
// break;
// }
// }
logger.info("更新任务状态成功"); logger.info("更新任务状态成功");
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
response.setMessage("更新任务状态成功"); response.setMessage("更新任务状态成功");
@ -164,6 +172,38 @@ public class TaskDealController extends BaseController{
} }
} }
/**
* 更改任务状态
*
* @param request 请求参数
* @return 结果
*/
@PostMapping("/updateTaskStatus")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String updateTaskStatus(@RequestBody Task request) {
logger.info("用户请求更改任务状态,用户名:{}ip地址{}", request.getUserName(), HttpUtils.getIpAddr(servletRequest));
logger.info("请求详细:{}", JSON.toJSONString(request));
logger.info("更新任务状态成功");
ResponseEntity response = new ResponseEntity();
if (StringUtils.isEmpty(request.getTaskId())) {
response.setCode(ResponseCode.OK.getCode());
}
Task task = new Task();
task.setTaskId(request.getTaskId());
task.setTaskStatus(request.getTaskStatus());
int i = taskService.executeTask(task);
if(i <= 0){
logger.info("任务id{},无此任务",request.getTaskId());
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("无此任务");
}
response.setCode(ResponseCode.OK.getCode());
response.setMessage("更新任务状态成功");
return JSON.toJSONString(response);
}
/** /**
* 删除kate清单数据 * 删除kate清单数据
* *

View File

@ -0,0 +1,132 @@
package com.wms.entity.excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wms.utils.excel.ExcelExport;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @Classname StockExcel
* @Date 2025-02-27 14:06
* @Created by luyifan
*/
@Data
public class StockExcel {
/**
* 库存编号
*/
@ExcelExport("库存编号")
private String stockId;
/**
* 库区编号
*/
@ExcelExport("库区编号")
private String warehouseName;
/**
* 库位ID
*/
@ExcelExport("存放库位")
private String locationId;
/**
* 托盘号
*/
@ExcelExport("托盘号")
private String vehicleId;
/**
* 物料编号
*/
@ExcelExport("物料号")
private String goodsId;
// /**
// * 物料名称
// */
// @ExcelExport("零件名称")
// private String goodsName;
// /**
// * 批次号
// */
// @ExcelExport("批次号")
// private String batchNo;
/**
* 可用数量
*/
@ExcelExport("可用数量")
private Integer availableNum;
// /**
// * 剩余数量
// */
// @ExcelExport("剩余数量")
// private Integer remainNum;
// /**
// * 实际数量
// */
// @ExcelExport("实际数量")
// private Integer realNum;
/**
* 生产日期
*/
@ExcelExport("生产日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date productionDate;
/**
* 过期日期
*/
@ExcelExport("过期日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expirationDate;
/**
* 库存状态
* 正常出库中锁定
*/
@ExcelExport("库存状态")
private Integer stockStatus;
/**
* 创建时间
*/
@ExcelExport("入库时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 最后更新时间
*/
@ExcelExport("最后更新时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastUpdateTime;
/**
* 最后更新用户
*/
@ExcelExport("上架人")
private String lastUpdateUser;
/**
* 备注
*/
@ExcelExport("备注")
private String remark;
@ExcelExport("单重")
private Double singleWeight;
}

View File

@ -1,149 +1,70 @@
package com.wms.entity.table; package com.wms.entity.table;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wms.entity.BaseEntity; import com.wms.entity.BaseEntity;
import com.wms.utils.excel.ExcelExport;
import com.wms.utils.excel.ExcelImport;
import lombok.Data;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
/** /**
* 物料 * 物料
*/ */
public class Goods extends BaseEntity { @Data
public class Goods extends BaseEntity implements Serializable {
/** /**
* 物料编号 * 物料编号
*/ */
@ExcelImport("模具号")
@ExcelExport("模具号")
private String goodsId; private String goodsId;
/**
* 物料名称
*/
private String goodsName;
/** /**
* 单位 * 单位
*/ */
@ExcelImport("规格型号")
@ExcelExport("规格型号")
private String goodsUnit; private String goodsUnit;
/**
* 物料ID
*/
private String itemId;
/**
* 用户物料类型
*/
private String itemType;
/**
* 库存类别
*/
private String invCategory;
/** /**
* 存储天数 * 存储天数
*/ */
private Integer lifeDays; private Integer lifeDays;
/** /**
* 库存组织Id * 创建日期
*/ */
private String organizationId; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
/** /**
* 库存组织代码 * 单重
*/ */
private String organizationCode; @ExcelImport("单重(kg)")
@ExcelExport("单重(kg)")
private String singleWeight;
/**
* 冗余字段
*/
@ExcelImport("描述")
@ExcelExport("描述")
private String remark;
/** /**
* 最后更新日期 * 最后更新日期
*/ */
private Date lastUpdateTime; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
/**
* 最后更新用户
*/
private String lastUpdateUser;
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public String getGoodsUnit() {
return goodsUnit;
}
public void setGoodsUnit(String goodsUnit) {
this.goodsUnit = goodsUnit;
}
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getItemType() {
return itemType;
}
public void setItemType(String itemType) {
this.itemType = itemType;
}
public String getInvCategory() {
return invCategory;
}
public void setInvCategory(String invCategory) {
this.invCategory = invCategory;
}
public Integer getLifeDays() {
return lifeDays;
}
public void setLifeDays(Integer lifeDays) {
this.lifeDays = lifeDays;
}
public String getOrganizationId() {
return organizationId;
}
public void setOrganizationId(String organizationId) {
this.organizationId = organizationId;
}
public String getOrganizationCode() {
return organizationCode;
}
public void setOrganizationCode(String organizationCode) {
this.organizationCode = organizationCode;
}
public Date getLastUpdateTime() {
return lastUpdateTime;
}
public void setLastUpdateTime(Date lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
public String getLastUpdateUser() {
return lastUpdateUser;
}
public void setLastUpdateUser(String lastUpdateUser) {
this.lastUpdateUser = lastUpdateUser;
}
} }

View File

@ -78,6 +78,19 @@ public class Location extends BaseEntity {
private String vehicleId; private String vehicleId;
/**
* 移库交换区域
*/
private Integer isChangeArea;
public Integer getIsChangeArea() {
return isChangeArea;
}
public void setIsChangeArea(Integer isChangeArea) {
this.isChangeArea = isChangeArea;
}
/** /**
* 是否为空托盘存放区域 0: , 1: * 是否为空托盘存放区域 0: , 1:
*/ */

View File

@ -160,6 +160,20 @@ public class Stock extends BaseEntity {
@ExcelExport("单重") @ExcelExport("单重")
private Double singleWeight; private Double singleWeight;
/**
* 存放天数
*/
private Integer storageDays;
public Integer getStorageDays() {
return storageDays;
}
public void setStorageDays(Integer storageDays) {
this.storageDays = storageDays;
}
public Double getSingleWeight() { public Double getSingleWeight() {
return singleWeight; return singleWeight;
} }

View File

@ -160,6 +160,8 @@ public class Task extends BaseEntity {
*/ */
private String remark1; private String remark1;
public String getTaskId() { public String getTaskId() {
return taskId; return taskId;
} }

View File

@ -0,0 +1,346 @@
package com.wms.entity.table;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wms.entity.BaseEntity;
import com.wms.utils.excel.ExcelExport;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 完成任务记录
*/
public class TaskBak extends BaseEntity {
/**
* 物料编号
*/
@ExcelExport("零件号")
private String goodsId;
/**
* 任务编号
*/
@ExcelExport("箱号")
private String taskId;
/**
* 物料名称
*/
@ExcelExport("零件名称")
private String goodsName;
/**
* 任务类型 1入库2出库9移库
*/
@ExcelExport("任务类型")
private Integer taskType;
/**
* 任务组
*/
@ExcelExport("任务组")
private String taskGroup;
/**
* 起点
*/
@ExcelExport("起点")
private String origin;
/**
* 终点
*/
@ExcelExport("终点")
private String destination;
/**
* 拣选站台
*/
@ExcelExport("拣选站台")
private String pickStand;
/**
* 重量
*/
@ExcelExport("重量")
private Double weight;
/**
* 生产日期
*/
@ExcelExport("生产日期")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date productionDate;
/**
* 过期日期
*/
@ExcelExport("有效日期")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date expirationDate;
/**
* 本次操作数量
*/
@ExcelExport("操作数量")
private Integer operateNum;
/**
* 库存总数量
*/
@ExcelExport("库存数量")
private Integer totalNum;
/**
* 任务优先级
*/
@ExcelExport("任务优先级")
private Integer taskPriority;
/**
* 卡特任务的id
*/
@ExcelExport("配件任务号")
private String kateTaskId;
/**
* 操作人员姓名
*/
@ExcelExport("操作人员姓名")
private String userName;
/**
* 创建时间
*/
@ExcelExport("创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 完成时间
*/
@ExcelExport("任务完成时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
/**
* 任务状态
*/
@ExcelExport("任务状态")
private Integer taskStatus;
/**
* 载具编号
*/
private String vehicleNo;
/**
* 尺寸
*/
private Integer vehicleSize;
/**
* 电子标签库位
*/
private String etagLocation;
/**
* 备用字段
* 1. 原包装出库的货架号
*/
private String remark1;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public Integer getTaskType() {
return taskType;
}
public void setTaskType(Integer taskType) {
this.taskType = taskType;
}
public Integer getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(Integer taskStatus) {
this.taskStatus = taskStatus;
}
public String getTaskGroup() {
return taskGroup;
}
public void setTaskGroup(String taskGroup) {
this.taskGroup = taskGroup;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public String getPickStand() {
return pickStand;
}
public void setPickStand(String pickStand) {
this.pickStand = pickStand;
}
public Double getWeight() {
return weight;
}
public void setWeight(Double weight) {
this.weight = weight;
}
public String getVehicleNo() {
return vehicleNo;
}
public void setVehicleNo(String vehicleNo) {
this.vehicleNo = vehicleNo;
}
public Integer getVehicleSize() {
return vehicleSize;
}
public void setVehicleSize(Integer vehicleSize) {
this.vehicleSize = vehicleSize;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getGoodsId() {
return goodsId;
}
public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public Date getProductionDate() {
return productionDate;
}
public void setProductionDate(Date productionDate) {
this.productionDate = productionDate;
}
public Date getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(Date expirationDate) {
this.expirationDate = expirationDate;
}
public Integer getOperateNum() {
return operateNum;
}
public void setOperateNum(Integer operateNum) {
this.operateNum = operateNum;
}
public Integer getTotalNum() {
return totalNum;
}
public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
}
public String getEtagLocation() {
return etagLocation;
}
public void setEtagLocation(String etagLocation) {
this.etagLocation = etagLocation;
}
public Integer getTaskPriority() {
return taskPriority;
}
public void setTaskPriority(Integer taskPriority) {
this.taskPriority = taskPriority;
}
public String getKateTaskId() {
return kateTaskId;
}
public void setKateTaskId(String kateTaskId) {
this.kateTaskId = kateTaskId;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public String getRemark1() {
return remark1;
}
public void setRemark1(String remark1) {
this.remark1 = remark1;
}
}

View File

@ -0,0 +1,29 @@
package com.wms.exception;
import lombok.Getter;
@Getter
public enum ErrorCode {
SUCCESS(0, "ok"),
PARAMS_ERROR(40000, "请求参数错误"),
NOT_FOUND_ERROR(40400, "请求数据不存在"),
FORBIDDEN_ERROR(40300, "禁止访问"),
SYSTEM_ERROR(50000, "系统内部异常"),
OPERATION_ERROR(50001, "操作失败");
/**
* 状态码
*/
private final int code;
/**
* 信息
*/
private final String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -42,4 +42,7 @@ public interface GoodsMapper {
* @return * @return
*/ */
int deleteGoods(String goodsId); int deleteGoods(String goodsId);
void clearGoodsInfo();
} }

View File

@ -19,6 +19,7 @@ public interface LocationMapper {
List<Location> selLocations(Location location); List<Location> selLocations(Location location);
List<Location> findNearLocations(Location location);
List<Location> selSmallDepthLocations(Location location); List<Location> selSmallDepthLocations(Location location);
@ -45,8 +46,10 @@ public interface LocationMapper {
/** /**
* 修改区域 * 修改区域
* @param location * @param selectArean
* @return * @return
*/ */
int modifyArea(SelectArea selectArea); int modifyArea(SelectArea selectArea);
List<Location> findLocationInfo(Location location);
} }

View File

@ -15,7 +15,12 @@ public interface TaskMapper {
*/ */
List<Task> selTasks(Task task); List<Task> selTasks(Task task);
/**
* 根据创建时间从高到低查找任务
* @param task
* @return
*/
List<Task> selTaskByCreateTime(Task task);
List<Task> selTasksByTaskId(Task task); List<Task> selTasksByTaskId(Task task);
/** /**

View File

@ -40,4 +40,7 @@ public interface GoodsService {
* @return 结果 * @return 结果
*/ */
int deleteGoods(String goodsId); int deleteGoods(String goodsId);
void clearGoodsInfo();
} }

View File

@ -37,8 +37,10 @@ public interface LocationService {
/** /**
* 区域划分 * 区域划分
* @param location 选择的区域 * @param selectArea 选择的区域
* @return 结果 * @return 结果
*/ */
int modifyArea(SelectArea selectArea); int modifyArea(SelectArea selectArea);
List<Location> findLocationInfo(Location location);
} }

View File

@ -35,4 +35,6 @@ public interface TaskService{
* @return 结果 * @return 结果
*/ */
int deleteTask(String taskId); int deleteTask(String taskId);
List<Task> selTaskByCreateTime(Task taskQuery);
} }

View File

@ -42,4 +42,9 @@ public class GoodsServiceImplements implements GoodsService {
public int deleteGoods(String goodsId) { public int deleteGoods(String goodsId) {
return this.goodsMapper.deleteGoods(goodsId); return this.goodsMapper.deleteGoods(goodsId);
} }
@Override
public void clearGoodsInfo() {
this.goodsMapper.clearGoodsInfo();
}
} }

View File

@ -42,4 +42,9 @@ public class LocationServiceImplements implements LocationService {
public int modifyArea(SelectArea selectArea) { public int modifyArea(SelectArea selectArea) {
return this.locationMapper.modifyArea(selectArea); return this.locationMapper.modifyArea(selectArea);
} }
@Override
public List<Location> findLocationInfo(Location location) {
return locationMapper.findLocationInfo(location);
}
} }

View File

@ -1,5 +1,6 @@
package com.wms.service.serviceImplements; package com.wms.service.serviceImplements;
import com.wms.constants.WmsConstants;
import com.wms.constants.enums.OrderInStatusEnum; import com.wms.constants.enums.OrderInStatusEnum;
import com.wms.constants.enums.OrderOutStatusEnum; import com.wms.constants.enums.OrderOutStatusEnum;
import com.wms.entity.common.WmsApiResponse; import com.wms.entity.common.WmsApiResponse;
@ -11,6 +12,7 @@ import com.wms.entity.table.AppOrderIn;
import com.wms.entity.table.OrderOut; import com.wms.entity.table.OrderOut;
import com.wms.service.IOrderInService; import com.wms.service.IOrderInService;
import com.wms.utils.StringUtils; import com.wms.utils.StringUtils;
import com.wms.utils.WmsUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -54,7 +56,7 @@ public class OrderInImplement implements IOrderInService {
* @return 返回结果 * @return 返回结果
*/ */
public WmsApiResponse<Object> addOrderIn(downOrderInRequest request){ public WmsApiResponse<Object> addOrderIn(downOrderInRequest request){
if ("00000".equals(request.getGoodsId())){ if (WmsConstants.EMPTY_STOCK_BATCH_NO.equals(request.getVehicleNo())){
log.info("托盘{}为空托盘入库", request.vehicleNo); log.info("托盘{}为空托盘入库", request.vehicleNo);
AppOrderIn appOrderIn = new AppOrderIn(); AppOrderIn appOrderIn = new AppOrderIn();
appOrderIn.setRowId(UUID.randomUUID().toString()); appOrderIn.setRowId(UUID.randomUUID().toString());
@ -64,7 +66,7 @@ public class OrderInImplement implements IOrderInService {
appOrderIn.setVehicleNo(request.vehicleNo); appOrderIn.setVehicleNo(request.vehicleNo);
appOrderIn.setGoodsId(null); appOrderIn.setGoodsId(null);
appOrderIn.setGoodsNum(null); appOrderIn.setGoodsNum(null);
appOrderIn.setWareHouse("A"); appOrderIn.setWareHouse(request.abcSelect);
appOrderIn.setOrderStatus(0); appOrderIn.setOrderStatus(0);
appOrderIn.setCreateTime(LocalDateTime.now()); appOrderIn.setCreateTime(LocalDateTime.now());
appOrderIn.setCreatePerson("WMS"); appOrderIn.setCreatePerson("WMS");
@ -75,7 +77,7 @@ public class OrderInImplement implements IOrderInService {
return new WmsApiResponse<>(0, "添加成功", appOrderIn); return new WmsApiResponse<>(0, "添加成功", appOrderIn);
}else{ }else{
AppOrderIn selectOrderIn = new AppOrderIn(); AppOrderIn selectOrderIn = new AppOrderIn();
selectOrderIn.setRemark("托盘入库"); selectOrderIn.setRemark("带物料托盘入库");
selectOrderIn.setVehicleNo(request.vehicleNo); selectOrderIn.setVehicleNo(request.vehicleNo);
List<AppOrderIn> selEmpty = appOrderInMapper.select(selectOrderIn); List<AppOrderIn> selEmpty = appOrderInMapper.select(selectOrderIn);
if (selEmpty == null || selEmpty.isEmpty()){ if (selEmpty == null || selEmpty.isEmpty()){
@ -102,14 +104,12 @@ public class OrderInImplement implements IOrderInService {
appOrderIn.setCreatePerson("WMS"); appOrderIn.setCreatePerson("WMS");
appOrderIn.setUpdateTime(LocalDateTime.now()); appOrderIn.setUpdateTime(LocalDateTime.now());
appOrderIn.setRemark(""); appOrderIn.setRemark("");
//appOrderIn.setProductionDate(request.abcSelect);
appOrderInMapper.insert(appOrderIn); appOrderInMapper.insert(appOrderIn);
return new WmsApiResponse<>(0, "添加成功", appOrderIn); return new WmsApiResponse<>(0, "添加成功", appOrderIn);
}else { }else {
return new WmsApiResponse<>(1, "必须先删除托盘入库任务!", null); return new WmsApiResponse<>(1, "必须先删除带物料托盘入库任务!", null);
} }
} }
} }
/** /**

View File

@ -82,10 +82,10 @@ public class OrderOutImplements implements IOrderOutService {
// 计算出库 // 计算出库
List<Task> outTasks = new ArrayList<>(); // 出库任务列表 List<Task> outTasks = new ArrayList<>(); // 出库任务列表
/* 查询库存 */ /* 查询库存 */
// 拉出该物料的所有库存
if(Objects.equals(orderOut.getRemark(), "手动出库")){ if(Objects.equals(orderOut.getRemark(), "手动出库")){
// 拉出该物料的所有正常库存
Stock queryStock = new Stock(); Stock queryStock = new Stock();
//queryStock.setGoodsId(orderOut.getGoodsId());
queryStock.setGoodsId(orderOut.getGoodsId() != null ? orderOut.getGoodsId().trim() : null); queryStock.setGoodsId(orderOut.getGoodsId() != null ? orderOut.getGoodsId().trim() : null);
queryStock.setWarehouseName(orderOut.getWarehouseOrigin()); queryStock.setWarehouseName(orderOut.getWarehouseOrigin());
queryStock.setStockStatus(StockStatus.OK.getCode()); queryStock.setStockStatus(StockStatus.OK.getCode());
@ -99,6 +99,7 @@ public class OrderOutImplements implements IOrderOutService {
if(stockList.isEmpty()) { if(stockList.isEmpty()) {
return new WmsApiResponse<>(1, String.format("该物料没有库存,物料号:%s其他物料也一并拒绝出库", orderOut.getGoodsId()), null); return new WmsApiResponse<>(1, String.format("该物料没有库存,物料号:%s其他物料也一并拒绝出库", orderOut.getGoodsId()), null);
} }
Integer availableNum = com.wms.utils.storage.StockUtils.sumStcokAvailableNum(stockList); // 拥有的数量 Integer availableNum = com.wms.utils.storage.StockUtils.sumStcokAvailableNum(stockList); // 拥有的数量
int needNum = Integer.parseInt(orderOut.getGoodsNum()); // 需要的数量 int needNum = Integer.parseInt(orderOut.getGoodsNum()); // 需要的数量
if(availableNum.compareTo(needNum) < 0) { if(availableNum.compareTo(needNum) < 0) {

View File

@ -42,4 +42,9 @@ public class TaskServiceImplements implements TaskService {
public int deleteTask(String taskId) { public int deleteTask(String taskId) {
return taskMapper.deleteTask(taskId); return taskMapper.deleteTask(taskId);
} }
@Override
public List<Task> selTaskByCreateTime(Task taskQuery) {
return taskMapper.selTaskByCreateTime(taskQuery);
}
} }

View File

@ -88,6 +88,7 @@ public class ContainerImplement implements ContainerService {
*/ */
@Override @Override
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public CreateInstoreTaskResponse createInstoreTask(CreateInstoreTaskRequest request) { public CreateInstoreTaskResponse createInstoreTask(CreateInstoreTaskRequest request) {
//进行MD5加密的验证 //进行MD5加密的验证
String md5 = StringUtils.containerMd5(request.getRequestId()); String md5 = StringUtils.containerMd5(request.getRequestId());
@ -96,10 +97,71 @@ public class ContainerImplement implements ContainerService {
} }
CreateInstoreTaskResponse success = new CreateInstoreTaskResponse(); CreateInstoreTaskResponse success = new CreateInstoreTaskResponse();
// 空托盘入库任务
if(WmsConstants.EMPTY_VEHICHLE_ID.equals(request.getPalletNo())){
// 生成虚拟托盘id
String virtualPalletId = "T0000001";
// 生成空托盘的订单
AppOrderIn appOrderIn = new AppOrderIn();
appOrderIn.setRowId(UUID.randomUUID().toString());
appOrderIn.setGuid(UUID.randomUUID().toString());
appOrderIn.setInType(1);
appOrderIn.setBatchNo(null);
appOrderIn.setVehicleNo(virtualPalletId);
appOrderIn.setGoodsId(null);
appOrderIn.setGoodsNum(null);
// 空头托盘区域
appOrderIn.setWareHouse("D");
appOrderIn.setOrderStatus(OrderInStatusEnum.IN.getCode());
appOrderIn.setCreateTime(LocalDateTime.now());
appOrderIn.setCreatePerson("WMS");
appOrderIn.setUpdateTime(LocalDateTime.now());
appOrderIn.setRemark("空托盘入库");
//appOrderIn.setProductionDate(request.abcSelect);
appOrderInMapper.insert(appOrderIn);
/* 查找可用库位 */
List<Location> canUseLocations = locationUtils.getNewLocation(2,appOrderIn);
if(canUseLocations.isEmpty()){
return new CreateInstoreTaskResponse("400", "没有可用库位");
}
Location useLocation = locationUtils.checkCanUse(canUseLocations);
Task newInTask = new Task();
newInTask.setTaskId(String.valueOf(Calendar.getInstance().getTimeInMillis()));
newInTask.setTaskGroup(UUID.randomUUID().toString());
newInTask.setTaskType(TaskType.IN.getCode());
newInTask.setTaskStatus(WmsTaskStatus.WAIT.getCode()); // 因为任务是直接返回去的所以直接是已下发状态
newInTask.setOrigin(request.getFromCellNo());
newInTask.setDestination(useLocation.getLocationId());
newInTask.setGoodsId(null);
newInTask.setCreateTime(new java.util.Date());
newInTask.setUserName("四向车API");
newInTask.setWeight(Double.valueOf(request.getWeight()));
newInTask.setVehicleSize(Integer.valueOf(request.getHeight()));
newInTask.setVehicleNo(virtualPalletId);
newInTask.setTaskPriority(1);
newInTask.setProductionDate(null);
int insertTaskResult = taskMapper.addTask(newInTask);
if(insertTaskResult < 1) {
log.error("生成任务失败,无法插入新的入库任务");
return new CreateInstoreTaskResponse("400", "生成任务失败,无法插入新的入库任务");
}
// 占用库位
Location location = new Location();
location.setLocationId(useLocation.getLocationId());
location.setLocationStatus(LocationStatus.OCCUPY.getCode());
location.setVehicleId(virtualPalletId);
locationMapper.modifyLocation(location);
success.setCode("200");
success.setMessage("生成入库任务成功");
success.setWmsTaskId(newInTask.getTaskId());
success.setPalletNo(virtualPalletId);
success.setFromCellNo(request.getFromCellNo());
success.setToCellNo(useLocation.getLocationId());
}else {
// 查询待入库的批次号 // 查询待入库的批次号
AppOrderIn waitInStockQuery = new AppOrderIn(); AppOrderIn waitInStockQuery = new AppOrderIn();
waitInStockQuery.setVehicleNo(request.getPalletNo()); waitInStockQuery.setVehicleNo(request.getPalletNo());
//waitInStockQuery.setOrderStatus(OrderInStatusEnum.CREATE.getCode());
List<AppOrderIn> waitInStockList = appOrderInMapper.select(waitInStockQuery); // 查找待入库的批次号 List<AppOrderIn> waitInStockList = appOrderInMapper.select(waitInStockQuery); // 查找待入库的批次号
if(waitInStockList.isEmpty()) { if(waitInStockList.isEmpty()) {
log.error("条码:{} 不存在待入库的任务", request.getPalletNo()); log.error("条码:{} 不存在待入库的任务", request.getPalletNo());
@ -133,7 +195,6 @@ public class ContainerImplement implements ContainerService {
newInTask.setTaskStatus(WmsTaskStatus.WAIT.getCode()); // 因为任务是直接返回去的所以直接是已下发状态 newInTask.setTaskStatus(WmsTaskStatus.WAIT.getCode()); // 因为任务是直接返回去的所以直接是已下发状态
newInTask.setOrigin(request.getFromCellNo()); newInTask.setOrigin(request.getFromCellNo());
newInTask.setDestination(useLocation.getLocationId()); newInTask.setDestination(useLocation.getLocationId());
//newInTask.setGoodsId(String.format("%s 等 %d 个物料", waitInStockList.get(0).getGoodsId(), waitInStockList.size()));
if (!waitInStockList.isEmpty() && waitInStockList.get(0) != null) { if (!waitInStockList.isEmpty() && waitInStockList.get(0) != null) {
newInTask.setGoodsId(waitInStockList.get(0).getGoodsId()); newInTask.setGoodsId(waitInStockList.get(0).getGoodsId());
} else { } else {
@ -143,12 +204,7 @@ public class ContainerImplement implements ContainerService {
newInTask.setCreateTime(new java.util.Date()); newInTask.setCreateTime(new java.util.Date());
newInTask.setUserName("四向车API"); newInTask.setUserName("四向车API");
newInTask.setVehicleSize(Integer.valueOf(request.getHeight())); newInTask.setVehicleSize(Integer.valueOf(request.getHeight()));
if(WmsConstants.EMPTY_VEHICHLE_ID.equals(request.getPalletNo())){
// 生成空托盘的虚拟id
newInTask.setVehicleNo(WmsUtils.generateUUIDString());
}else {
newInTask.setVehicleNo(request.getPalletNo()); newInTask.setVehicleNo(request.getPalletNo());
}
newInTask.setTaskPriority(1); newInTask.setTaskPriority(1);
newInTask.setProductionDate(null); newInTask.setProductionDate(null);
int insertTaskResult = taskMapper.addTask(newInTask); // 添加入库任务 int insertTaskResult = taskMapper.addTask(newInTask); // 添加入库任务
@ -171,13 +227,13 @@ public class ContainerImplement implements ContainerService {
location.setLocationStatus(LocationStatus.OCCUPY.getCode()); location.setLocationStatus(LocationStatus.OCCUPY.getCode());
location.setVehicleId(request.getPalletNo()); location.setVehicleId(request.getPalletNo());
locationMapper.modifyLocation(location); locationMapper.modifyLocation(location);
success.setCode("200"); success.setCode("200");
success.setMessage("生成入库任务成功"); success.setMessage("生成入库任务成功");
success.setWmsTaskId(newInTask.getTaskId()); success.setWmsTaskId(newInTask.getTaskId());
success.setPalletNo(request.getPalletNo()); success.setPalletNo(request.getPalletNo());
success.setFromCellNo(request.getFromCellNo()); success.setFromCellNo(request.getFromCellNo());
success.setToCellNo(useLocation.getLocationId()); success.setToCellNo(useLocation.getLocationId());
}
return success; return success;
} }
@ -187,6 +243,7 @@ public class ContainerImplement implements ContainerService {
* @return 响应信息 * @return 响应信息
*/ */
@Override @Override
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public ContainerApiLocalResponse taskStateNotice(TaskStateNoticeRequest request) { public ContainerApiLocalResponse taskStateNotice(TaskStateNoticeRequest request) {
String md5 = StringUtils.containerMd5(request.getRequestId()); String md5 = StringUtils.containerMd5(request.getRequestId());
if(!md5.equals(request.getKey())) { if(!md5.equals(request.getKey())) {
@ -251,10 +308,14 @@ public class ContainerImplement implements ContainerService {
List<Location> usefulLocation = new ArrayList<>(); List<Location> usefulLocation = new ArrayList<>();
for (Vehicle empty : emptyVehicle) { for (Vehicle empty : emptyVehicle) {
// 根据空托盘位置信息查找对应载具信息 // 根据空托盘位置信息查找对应库位信息
Location location = locationMapper.selLocations(new Location(empty.getCurrentLocation()))
.stream().filter(l -> l.getLayer() == 1) Location queryLocation = new Location();
.findFirst().orElse(null); queryLocation.setLocationId(vehicle.getCurrentLocation());
queryLocation.setWareArea("D");
queryLocation.setLocationStatus(LocationStatus.OCCUPY.getCode());
Location location = locationMapper.selLocations( queryLocation)
.stream().findFirst().orElse(null);
if (location == null) { if (location == null) {
log.info("该空托盘无库位信息"); log.info("该空托盘无库位信息");

View File

@ -55,21 +55,21 @@ public class LocationUtils {
query.setWareArea("A"); query.setWareArea("A");
query.setLocationStatus(LocationStatus.EMPTY.getCode()); query.setLocationStatus(LocationStatus.EMPTY.getCode());
List<Location> canUseLocations = locationMapper.selNextLocation(query); List<Location> canUseLocations = locationMapper.selNextLocation(query);
if(canUseLocations.isEmpty()){ // if(canUseLocations.isEmpty()){
log.info("A级优先级没有可用库位开始寻找B级库位"); // log.info("A级优先级没有可用库位开始寻找B级库位");
query.setAreaId(areaId); // query.setAreaId(areaId);
query.setWareArea("B"); // query.setWareArea("B");
query.setLocationStatus(LocationStatus.EMPTY.getCode()); // query.setLocationStatus(LocationStatus.EMPTY.getCode());
List<Location> canUseLocations2 = locationMapper.selNextLocation(query); // List<Location> canUseLocations2 = locationMapper.selNextLocation(query);
if (canUseLocations2.isEmpty()){ // if (canUseLocations2.isEmpty()){
log.info("A,B级优先级没有可用库位开始寻找C级库位"); // log.info("A,B级优先级没有可用库位开始寻找C级库位");
query.setAreaId(areaId); // query.setAreaId(areaId);
query.setWareArea("C"); // query.setWareArea("C");
query.setLocationStatus(LocationStatus.EMPTY.getCode()); // query.setLocationStatus(LocationStatus.EMPTY.getCode());
return locationMapper.selNextLocation(query); // return locationMapper.selNextLocation(query);
} // }
return canUseLocations2; // return canUseLocations2;
} // }
return canUseLocations; return canUseLocations;
} else if (Objects.equals(appOrderIn.getWareHouse(), "B")) { } else if (Objects.equals(appOrderIn.getWareHouse(), "B")) {
Location query = new Location(); Location query = new Location();
@ -77,13 +77,13 @@ public class LocationUtils {
query.setWareArea("B"); query.setWareArea("B");
query.setLocationStatus(LocationStatus.EMPTY.getCode()); query.setLocationStatus(LocationStatus.EMPTY.getCode());
List<Location> canUseLocations = locationMapper.selNextLocation(query); List<Location> canUseLocations = locationMapper.selNextLocation(query);
if(canUseLocations.isEmpty()){ // if(canUseLocations.isEmpty()){
log.info("B级优先级没有可用库位开始寻找C级库位"); // log.info("B级优先级没有可用库位开始寻找C级库位");
query.setAreaId(areaId); // query.setAreaId(areaId);
query.setWareArea("C"); // query.setWareArea("C");
query.setLocationStatus(LocationStatus.EMPTY.getCode()); // query.setLocationStatus(LocationStatus.EMPTY.getCode());
return locationMapper.selNextLocation(query); // return locationMapper.selNextLocation(query);
} // }
return canUseLocations; return canUseLocations;
} else if (Objects.equals(appOrderIn.getWareHouse(), "C")) { } else if (Objects.equals(appOrderIn.getWareHouse(), "C")) {
Location query = new Location(); Location query = new Location();
@ -91,6 +91,12 @@ public class LocationUtils {
query.setWareArea(appOrderIn.getWareHouse()); query.setWareArea(appOrderIn.getWareHouse());
query.setLocationStatus(LocationStatus.EMPTY.getCode()); query.setLocationStatus(LocationStatus.EMPTY.getCode());
return locationMapper.selNextLocation(query); return locationMapper.selNextLocation(query);
}else if (Objects.equals(appOrderIn.getWareHouse(), "D")) {
Location query = new Location();
query.setAreaId(areaId);
query.setWareArea(appOrderIn.getWareHouse());
query.setLocationStatus(LocationStatus.EMPTY.getCode());
return locationMapper.selNextLocation(query);
}else{ }else{
return null; return null;
} }
@ -106,6 +112,7 @@ public class LocationUtils {
if(canUseLocations == null || canUseLocations.isEmpty()) { if(canUseLocations == null || canUseLocations.isEmpty()) {
return null; return null;
} }
boolean canUse = true;
for (Location location : canUseLocations) { for (Location location : canUseLocations) {
if(location.getDepth() == 1) { if(location.getDepth() == 1) {
return location; // 1 深度的不需要检验 return location; // 1 深度的不需要检验
@ -122,15 +129,14 @@ public class LocationUtils {
// 找出此位置不同深度的库位 // 找出此位置不同深度的库位
Location queryDifferentDepthLocation = new Location(); Location queryDifferentDepthLocation = new Location();
queryDifferentDepthLocation.setAreaId(location.getAreaId()); queryDifferentDepthLocation.setAreaId(location.getAreaId());
queryDifferentDepthLocation.setEquipmentId(location.getEquipmentId());
queryDifferentDepthLocation.setQueue(location.getQueue()); queryDifferentDepthLocation.setQueue(location.getQueue());
queryDifferentDepthLocation.setLine(location.getLine()); queryDifferentDepthLocation.setTunnelId(location.getTunnelId());
queryDifferentDepthLocation.setLayer(location.getLayer()); queryDifferentDepthLocation.setLayer(location.getLayer());
List<Location> differentDepthLocations = locationMapper.selLocations(queryDifferentDepthLocation); List<Location> differentDepthLocations = locationMapper.selLocations(queryDifferentDepthLocation);
if(differentDepthLocations == null) { if(differentDepthLocations == null) {
continue; // 数据库查询失败 continue; // 数据库查询失败
} }
boolean canUse = false; // 指示当前库位是否可用若可用会置成 true // boolean canUse = false; // 指示当前库位是否可用若可用会置成 true
if(!differentDepthLocations.isEmpty()) { if(!differentDepthLocations.isEmpty()) {
// 存在干涉库位检验其是否有未完成的任务 // 存在干涉库位检验其是否有未完成的任务
for (Location differentDepthLocation : differentDepthLocations) { for (Location differentDepthLocation : differentDepthLocations) {
@ -139,13 +145,15 @@ public class LocationUtils {
queryLocationTask.setLocationId(differentDepthLocation.getLocationId()); queryLocationTask.setLocationId(differentDepthLocation.getLocationId());
List<Task> locationTasks = taskMapper.haveNotCompleteTask(differentDepthLocation.getLocationId()); List<Task> locationTasks = taskMapper.haveNotCompleteTask(differentDepthLocation.getLocationId());
if(locationTasks == null) { if(locationTasks == null) {
continue; // 数据库查询失败 log.info("检查存在干涉库位失败,数据库异常");
canUse = false;
break; // 数据库查询失败
} }
if(!locationTasks.isEmpty()) { if(!locationTasks.isEmpty()) {
canUse = false;
break; // 有任务这个库位不行 break; // 有任务这个库位不行
} }
} }
canUse = true;
} }
if(canUse) { if(canUse) {
return location; return location;

View File

@ -29,6 +29,8 @@ mybatis:
config-location: classpath:mybatis-config.xml config-location: classpath:mybatis-config.xml
mapper-locations: classpath:mapper/*.xml mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.wms.entity.table type-aliases-package: com.wms.entity.table
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging: logging:
config: classpath:logback-spring.xml config: classpath:logback-spring.xml

View File

@ -120,5 +120,5 @@
</logger> </logger>
</springProfile> </springProfile>
<!-- 打印SQL --> <!-- 打印SQL -->
<!-- <logger level="DEBUG" name="com.wms.kate.mapper"/>--> <logger level="DEBUG" name="com.wms.mapper"/>
</configuration> </configuration>

View File

@ -4,21 +4,16 @@
<mapper namespace="com.wms.mapper.GoodsMapper"> <mapper namespace="com.wms.mapper.GoodsMapper">
<resultMap type="Goods" id="GoodsMap"> <resultMap type="Goods" id="GoodsMap">
<result property="goodsId" column="goods_id"/> <result property="goodsId" column="goods_id"/>
<result property="goodsName" column="goods_name"/>
<result property="goodsUnit" column="goods_unit"/> <result property="goodsUnit" column="goods_unit"/>
<result property="itemId" column="item_id"/>
<result property="itemType" column="item_type"/>
<result property="invCategory" column="inv_category"/>
<result property="lifeDays" column="life_days"/> <result property="lifeDays" column="life_days"/>
<result property="organizationId" column="organization_id"/> <result property="remark" column="remark"/>
<result property="organizationCode" column="organization_code"/> <result property="singleWeight" column="single_weight"/>
<result property="lastUpdateTime" column="last_update_time"/> <result property="createTime" column="create_time"/>
<result property="lastUpdateUser" column="last_update_user"/> <result property="updateTime" column="update_time"/>
</resultMap> </resultMap>
<sql id="selectAll"> <sql id="selectAll">
select goods_id, goods_name, goods_unit, item_id, item_type, inv_category, life_days, organization_id, select goods_id, goods_unit, life_days, remark, single_weight,create_time, update_time
organization_code, last_update_time, last_update_user
from tbl_app_goods from tbl_app_goods
</sql> </sql>
@ -26,18 +21,14 @@
<include refid="selectAll"/> <include refid="selectAll"/>
<where> <where>
<if test="goodsId != null and goodsId != ''"> and goods_id = #{goodsId}</if> <if test="goodsId != null and goodsId != ''"> and goods_id = #{goodsId}</if>
<if test="goodsName != null and goodsName != ''"> and goods_name = #{goodsName}</if>
<if test="goodsUnit != null and goodsUnit != ''"> and goods_unit = #{goodsUnit}</if> <if test="goodsUnit != null and goodsUnit != ''"> and goods_unit = #{goodsUnit}</if>
<if test="itemId != null and itemId != ''"> and item_id = #{itemId}</if>
<if test="itemType != null and goodsId != ''"> and item_type = #{itemType}</if>
<if test="invCategory != null and invCategory != ''"> and inv_category = #{invCategory}</if>
<if test="lifeDays != null"> and life_days = #{lifeDays}</if> <if test="lifeDays != null"> and life_days = #{lifeDays}</if>
<if test="organizationId != null and organizationId != ''"> and organization_id = #{organizationId}</if> <if test="remark != null"> and remark = #{remark}</if>
<if test="organizationCode != null and organizationCode != ''"> and organization_code = #{organizationCode}</if> <if test="singleWeight != null"> and single_weight = #{single_weight}</if>
<if test="lastUpdateTime != null"> and last_update_time = #{lastUpdateTime}</if> <if test="updateTime != null"> and update_time = #{updateTime}</if>
<if test="lastUpdateUser != null and lastUpdateUser != ''"> and last_update_user = #{lastUpdateUser}</if> <if test="createTime != null"> and create_time = #{create_time}</if>
</where> </where>
order by last_update_time desc order by create_time desc
</select> </select>
<select id="selGoodsByGoodsId" parameterType="String" resultMap="GoodsMap"> <select id="selGoodsByGoodsId" parameterType="String" resultMap="GoodsMap">
@ -49,45 +40,27 @@
insert into tbl_app_goods insert into tbl_app_goods
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="goodsId != null">goods_id,</if> <if test="goodsId != null">goods_id,</if>
<if test="goodsName != null">goods_name,</if>
<if test="goodsUnit != null">goods_unit,</if> <if test="goodsUnit != null">goods_unit,</if>
<if test="itemId != null">item_id,</if>
<if test="itemType != null">item_type,</if>
<if test="invCategory != null">inv_category,</if>
<if test="lifeDays != null">life_days,</if> <if test="lifeDays != null">life_days,</if>
<if test="organizationId != null">organization_id,</if> <if test="remark != null"> remark</if>
<if test="organizationCode != null">organization_code,</if> <if test="singleWeight != null">single_weight</if>
<if test="lastUpdateTime != null">last_update_time,</if>
<if test="lastUpdateUser != null">last_update_user,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="goodsId != null">#{goodsId},</if> <if test="goodsId != null">#{goodsId},</if>
<if test="goodsName != null">#{goodsName},</if>
<if test="goodsUnit != null">#{goodsUnit},</if> <if test="goodsUnit != null">#{goodsUnit},</if>
<if test="itemId != null">#{itemId},</if>
<if test="itemType != null">#{itemType},</if>
<if test="invCategory != null">#{invCategory},</if>
<if test="lifeDays != null">#{lifeDays},</if> <if test="lifeDays != null">#{lifeDays},</if>
<if test="organizationId != null">#{organizationId},</if> <if test="remark != null"> #{remark}</if>
<if test="organizationCode != null">#{organizationCode},</if> <if test="singleWeight != null">#{singleWeight}</if>
<if test="lastUpdateTime != null">#{lastUpdateTime},</if>
<if test="lastUpdateUser != null">#{lastUpdateUser},</if>
</trim> </trim>
</insert> </insert>
<update id="modifyGoods" parameterType="Goods"> <update id="modifyGoods" parameterType="Goods">
update tbl_app_goods update tbl_app_goods
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">
<if test="goodsName != null">goods_name = #{goodsName},</if>
<if test="goodsUnit != null">goods_unit = #{goodsUnit},</if> <if test="goodsUnit != null">goods_unit = #{goodsUnit},</if>
<if test="itemId != null">item_id = #{itemId},</if>
<if test="itemType != null">item_type = #{itemType},</if>
<if test="invCategory != null">inv_category = #{invCategory},</if>
<if test="lifeDays != null">life_days = #{lifeDays},</if> <if test="lifeDays != null">life_days = #{lifeDays},</if>
<if test="organizationId != null">organization_id = #{organizationId},</if> <if test="remark != null"> remark= #{remark},</if>
<if test="organizationCode != null">organization_code = #{organizationCode},</if> <if test="singleWeight != null">single_weight = #{singleWeight},</if>
<if test="lastUpdateTime != null">last_update_time = #{lastUpdateTime},</if>
<if test="lastUpdateUser != null">last_update_user = #{lastUpdateUser},</if>
</trim> </trim>
where goods_id = #{goodsId} where goods_id = #{goodsId}
</update> </update>
@ -95,4 +68,8 @@
<delete id="deleteGoods" parameterType="String"> <delete id="deleteGoods" parameterType="String">
delete from tbl_app_goods where goods_id = #{goodsId} delete from tbl_app_goods where goods_id = #{goodsId}
</delete> </delete>
<update id="clearGoodsInfo" parameterType="String">
truncate table tbl_app_goods
</update>
</mapper> </mapper>

View File

@ -16,13 +16,36 @@
<result property="locationStatus" column="location_status"/> <result property="locationStatus" column="location_status"/>
<result property="vehicleId" column="vehicle_id"/> <result property="vehicleId" column="vehicle_id"/>
<result property="wareArea" column="ware_area"/> <result property="wareArea" column="ware_area"/>
<result property="isChangeArea" column="is_change_area"/>
</resultMap> </resultMap>
<sql id="selectAll"> <sql id="selectAll">
select location_id, area_id, tunnel_id, equipment_id, location_type, queue, line, layer, depth, is_lock, location_status, vehicle_id, ware_area select location_id, area_id, tunnel_id, equipment_id, location_type, queue, line, layer, depth, is_lock, location_status, vehicle_id, ware_area,is_change_area
from tbl_app_location from tbl_app_location
</sql> </sql>
<select id="findNearLocations" parameterType="Location" resultMap="LocationMap">
<include refid="selectAll"/>
<where>
<if test="locationId != null and locationId != ''"> and location_id = #{locationId}</if>
<if test="areaId != null"> and area_id = #{areaId}</if>
<if test="tunnelId != null"> and left(tunnel_id,1) = #{tunnelId}</if>
<if test="equipmentId != null"> and equipment_id = #{equipmentId}</if>
<if test="locationType != null"> and location_type = #{locationType}</if>
<if test="queue != null"> and queue = #{queue}</if>
<if test="line != null"> and line = #{line}</if>
<if test="layer != null"> and layer = #{layer}</if>
<if test="depth != null"> and depth = #{depth}</if>
<if test="isLock != null"> and is_lock = #{isLock}</if>
<if test="locationStatus != null"> and location_status = #{locationStatus}</if>
<if test="vehicleId != null and vehicleId != ''"> and vehicle_id = #{vehicleId}</if>
<if test="wareArea != null and wareArea != ''"> and ware_area = #{wareArea}</if>
<if test="isChangeArea != null"> and is_change_area = #{isChangeArea}</if>
</where>
order by tunnel_id asc,depth desc, layer asc, line desc
</select>
<select id="selLocations" parameterType="Location" resultMap="LocationMap"> <select id="selLocations" parameterType="Location" resultMap="LocationMap">
<include refid="selectAll"/> <include refid="selectAll"/>
<where> <where>
@ -39,6 +62,7 @@
<if test="locationStatus != null"> and location_status = #{locationStatus}</if> <if test="locationStatus != null"> and location_status = #{locationStatus}</if>
<if test="vehicleId != null and vehicleId != ''"> and vehicle_id = #{vehicleId}</if> <if test="vehicleId != null and vehicleId != ''"> and vehicle_id = #{vehicleId}</if>
<if test="wareArea != null and wareArea != ''"> and ware_area = #{wareArea}</if> <if test="wareArea != null and wareArea != ''"> and ware_area = #{wareArea}</if>
<if test="isChangeArea != null"> and is_change_area = #{isChangeArea}</if>
</where> </where>
order by tunnel_id asc,depth desc, layer asc, line desc order by tunnel_id asc,depth desc, layer asc, line desc
</select> </select>
@ -67,13 +91,13 @@
<if test="equipmentId != null"> and equipment_id = #{equipmentId}</if> <if test="equipmentId != null"> and equipment_id = #{equipmentId}</if>
<if test="locationType != null"> and location_type = #{locationType}</if> <if test="locationType != null"> and location_type = #{locationType}</if>
<if test="wareArea != null"> and ware_area = #{wareArea}</if> <if test="wareArea != null"> and ware_area = #{wareArea}</if>
and is_lock = 0 and location_status = 0 and is_lock = 0 and location_status = 0 and is_change_area = 0
</where> </where>
order by tunnel_id asc,depth desc, layer asc, line desc order by tunnel_id asc,depth desc, layer asc, line desc
for update for update
</select> </select>
<select id="selectAll" resultType="java.lang.Integer"> <select id="selectAll" resultType="java.lang.Integer">
select location_id, area_id, tunnel_id, equipment_id, location_type, queue, line, layer, depth, is_lock, location_status, vehicle_id, ware_area select location_id, area_id, tunnel_id, equipment_id, location_type, queue, line, layer, depth, is_lock, location_status, vehicle_id, ware_area,is_change_area
from tbl_app_location from tbl_app_location
</select> </select>
@ -92,6 +116,7 @@
<if test="isLock != null">is_lock,</if> <if test="isLock != null">is_lock,</if>
<if test="locationStatus != null">location_status,</if> <if test="locationStatus != null">location_status,</if>
<if test="vehicleId != null">vehicle_id,</if> <if test="vehicleId != null">vehicle_id,</if>
<if test="isChangeArea != null">is_change_area,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="locationId != null">#{locationId},</if> <if test="locationId != null">#{locationId},</if>
@ -106,6 +131,7 @@
<if test="isLock != null">#{isLock},</if> <if test="isLock != null">#{isLock},</if>
<if test="locationStatus != null">#{locationStatus},</if> <if test="locationStatus != null">#{locationStatus},</if>
<if test="vehicleId != null">#{vehicleId},</if> <if test="vehicleId != null">#{vehicleId},</if>
<if test="isChangeArea != null">#{isChangeArea},</if>
</trim> </trim>
</insert> </insert>
@ -116,6 +142,7 @@
<if test="locationStatus != null">location_status = #{locationStatus},</if> <if test="locationStatus != null">location_status = #{locationStatus},</if>
<if test="vehicleId != null">vehicle_id = #{vehicleId},</if> <if test="vehicleId != null">vehicle_id = #{vehicleId},</if>
<if test="wareArea != null">ware_area = #{wareArea},</if> <if test="wareArea != null">ware_area = #{wareArea},</if>
<if test="isChangeArea != null">is_change_area = #{isChangeArea},</if>
</trim> </trim>
where location_id = #{locationId} where location_id = #{locationId}
</update> </update>
@ -128,4 +155,25 @@
where queue &gt;= #{startQueue} and queue &lt;= #{endQueue} and line &gt;= #{startLine} and line &lt;= #{endLine} and layer &gt;= #{startLayer} and layer &lt;= #{endLayer} where queue &gt;= #{startQueue} and queue &lt;= #{endQueue} and line &gt;= #{startLine} and line &lt;= #{endLine} and layer &gt;= #{startLayer} and layer &lt;= #{endLayer}
</update> </update>
<!-- 寻找库位关联信息 -->
<select id="findLocationInfo" parameterType="Location" resultMap="LocationMap">
select ta.location_id, ta.area_id, ta.tunnel_id, ta.equipment_id, ta.location_type, ta.queue, ta.line, ta.layer, ta.depth, ta.is_lock, ta.location_status, ta.vehicle_id, ta.ware_area,ta.is_change_area
from tbl_app_location ta INNER JOIN tbl_app_stock ts on ta.location_id = ts.location_id INNER JOIN tbl_app_vehicle tv on tv.current_location = ta.location_id
<where>
<if test="locationId != null and locationId != ''"> and location_id = #{locationId}</if>
<if test="areaId != null"> and area_id = #{areaId}</if>
<if test="tunnelId != null"> and left(tunnel_id,1) = #{tunnelId}</if>
<if test="equipmentId != null"> and equipment_id = #{equipmentId}</if>
<if test="locationType != null"> and location_type = #{locationType}</if>
<if test="queue != null"> and queue = #{queue}</if>
<if test="line != null"> and line = #{line}</if>
<if test="layer != null"> and layer = #{layer}</if>
<if test="depth != null"> and depth = #{depth}</if>
<if test="isLock != null"> and is_lock = #{isLock}</if>
<if test="locationStatus != null"> and location_status = #{locationStatus}</if>
<if test="vehicleId != null and vehicleId != ''"> and vehicle_id = #{vehicleId}</if>
<if test="wareArea != null and wareArea != ''"> and ware_area = #{wareArea}</if>
<if test="isChangeArea != null"> and is_change_area = #{isChangeArea}</if>
</where>
</select>
</mapper> </mapper>

View File

@ -28,19 +28,20 @@
<result property="shelfLife" column="shelf_life"/> <result property="shelfLife" column="shelf_life"/>
<result property="warehouseName" column="warehouse_name"/> <result property="warehouseName" column="warehouse_name"/>
<result property="singleWeight" column="single_weight"/> <result property="singleWeight" column="single_weight"/>
<result property="storageDays" column="storage_days"/>
</resultMap> </resultMap>
<sql id="selectAll"> <sql id="selectAll">
select stock_id, warehouse_name, location_id, vehicle_id, goods_id, goods_name, batch_no, available_num, remain_num, real_num, provider_id, select stock_id, warehouse_name, location_id, vehicle_id, goods_id, goods_name, batch_no, available_num, remain_num, real_num, provider_id,
provider_name, production_date, expiration_date, stock_status, goods_status, create_time, last_update_time, last_update_user, remark, provider_name, production_date, expiration_date, stock_status, goods_status, create_time, last_update_time, last_update_user, remark,
is_inventory, inventory_task_id, current_location, shelf_life,single_weight is_inventory, inventory_task_id, current_location, shelf_life,single_weight,storage_days
from tbl_app_stock from tbl_app_stock
</sql> </sql>
<select id="selStocksFront" parameterType="String" resultMap="StockMap"> <select id="selStocksFront" parameterType="String" resultMap="StockMap">
<include refid="selectAll" /> <include refid="selectAll" />
<where> <where>
<if test="query != null and query != ''"> vehicle_id = #{query} or goods_id like concat('%', #{query}, '%') or goods_name like concat('%', #{query}, '%') or batch_no = #{query}</if> <if test="query != null and query != ''"> vehicle_id = #{query} or goods_id like concat('%', #{query}, '%') or goods_name like concat('%', #{query}, '%') or batch_no = #{query} or create_time like concat('%', #{query}, '%') </if>
</where> </where>
order by create_time order by create_time
</select> </select>
@ -59,10 +60,7 @@
<select id="selStocksByLocationId" parameterType="string" resultMap="StockMap"> <select id="selStocksByLocationId" parameterType="string" resultMap="StockMap">
select stock_id, warehouse_name, location_id, vehicle_id, goods_id, goods_name, batch_no, available_num, remain_num, real_num, provider_id, <include refid="selectAll" />
provider_name, production_date, expiration_date, stock_status, goods_status, create_time, last_update_time, last_update_user, remark,
is_inventory, inventory_task_id, current_location, shelf_life,singleWeight
from tbl_app_stock
<where> <where>
<if test="locationId != null and locationId != ''"> and location_id = #{locationId}</if> <if test="locationId != null and locationId != ''"> and location_id = #{locationId}</if>
</where> </where>
@ -115,8 +113,9 @@
<if test="currentLocation != null and currentLocation != ''"> and current_location = #{currentLocation}</if> <if test="currentLocation != null and currentLocation != ''"> and current_location = #{currentLocation}</if>
<if test="shelfLife != null"> and shelf_life = #{shelfLife}</if> <if test="shelfLife != null"> and shelf_life = #{shelfLife}</if>
<if test="singleWeight != null"> and single_weight = #{singleWeight}</if> <if test="singleWeight != null"> and single_weight = #{singleWeight}</if>
<if test="storageDays != null"> and storage_days = #{storageDays}</if>
</where> </where>
order by goods_status desc, available_num asc , create_time asc order by goods_status desc, available_num desc , create_time asc
</select> </select>
<insert id="addStock" parameterType="Stock"> <insert id="addStock" parameterType="Stock">
@ -147,6 +146,7 @@
<if test="currentLocation != null">current_location,</if> <if test="currentLocation != null">current_location,</if>
<if test="shelfLife != null">shelf_life,</if> <if test="shelfLife != null">shelf_life,</if>
<if test="singleWeight != null"> single_weight</if> <if test="singleWeight != null"> single_weight</if>
<if test="storageDays != null"> storage_days</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="stockId != null">#{stockId},</if> <if test="stockId != null">#{stockId},</if>
@ -174,6 +174,7 @@
<if test="currentLocation != null">#{currentLocation},</if> <if test="currentLocation != null">#{currentLocation},</if>
<if test="shelfLife != null">#{shelfLife},</if> <if test="shelfLife != null">#{shelfLife},</if>
<if test="singleWeight != null"> #{singleWeight}</if> <if test="singleWeight != null"> #{singleWeight}</if>
<if test="storageDays != null"> #{storageDays}</if>
</trim> </trim>
</insert> </insert>
@ -203,6 +204,7 @@
<if test="currentLocation != null">current_location = #{currentLocation},</if> <if test="currentLocation != null">current_location = #{currentLocation},</if>
<if test="shelfLife != null">shelf_life = #{shelfLife},</if> <if test="shelfLife != null">shelf_life = #{shelfLife},</if>
<if test="singleWeight != null">single_weight = #{singleWeight},</if> <if test="singleWeight != null">single_weight = #{singleWeight},</if>
<if test="storageDays != null">storage_days = #{storageDays},</if>
</trim> </trim>
where stock_id = #{stockId} where stock_id = #{stockId}
</update> </update>

View File

@ -60,9 +60,40 @@
<if test="kateTaskId != null and kateTaskId != ''"> and kate_task_id = #{kateTaskId}</if> <if test="kateTaskId != null and kateTaskId != ''"> and kate_task_id = #{kateTaskId}</if>
<if test="remark1 != null and remark1 != ''"> and remark1 = #{remark1}</if> <if test="remark1 != null and remark1 != ''"> and remark1 = #{remark1}</if>
</where> </where>
order by create_time desc, task_priority desc, task_status desc order by task_priority desc, task_status desc,create_time desc
</select> </select>
<select id="selTaskByCreateTime" parameterType="Task" resultMap="TaskMap">
<include refid="selectAll" />
<where>
<if test="taskId != null and taskId != ''"> and task_id = #{taskId}</if>
<if test="taskType != null"> and task_type = #{taskType}</if>
<if test="taskStatus != null"> and task_status = #{taskStatus}</if>
<if test="taskGroup != null and taskGroup != ''"> and task_group = #{taskGroup}</if>
<if test="origin != null and origin != ''"> and origin = #{origin}</if>
<if test="destination != null and destination != ''"> and destination = #{destination}</if>
<if test="pickStand != null and pickStand != ''"> and pick_stand = #{pickStand}</if>
<if test="weight != null"> and weight = #{weight}</if>
<if test="vehicleNo != null and vehicleNo != ''"> and vehicle_no = #{vehicleNo}</if>
<if test="vehicleSize != null"> and vehicle_size = #{vehicleSize}</if>
<if test="createTime != null"> and create_time = #{createTime}</if>
<if test="userName != null and userName != ''"> and user_name = #{userName}</if>
<if test="goodsId != null and goodsId != ''"> and goods_id = #{goodsId}</if>
<if test="goodsName != null and goodsName != ''"> and goods_name = #{goodsName}</if>
<if test="operateNum != null"> and operate_num = #{operateNum}</if>
<if test="totalNum != null"> and total_num = #{totalNum}</if>
<if test="etagLocation != null and etagLocation != ''"> and etag_location = #{etagLocation}</if>
<if test="taskPriority != null"> and task_priority = #{taskPriority}</if>
<if test="productionDate != null"> and production_date = #{productionDate}</if>
<if test="expirationDate != null"> and expiration_date = #{expirationDate}</if>
<if test="kateTaskId != null and kateTaskId != ''"> and kate_task_id = #{kateTaskId}</if>
<if test="remark1 != null and remark1 != ''"> and remark1 = #{remark1}</if>
</where>
order by task_priority desc,create_time desc ,task_status desc
</select>
<select id="selTasksByTaskId" parameterType="Task" resultMap="TaskMap"> <select id="selTasksByTaskId" parameterType="Task" resultMap="TaskMap">
<include refid="selectAll" /> <include refid="selectAll" />
<where> <where>