代码更新:
1. 增加物料和工作分析报表的导出功能,修改料箱导出。 2. 增加一些报表界面的查询
This commit is contained in:
parent
6fededdd30
commit
113553ba80
|
|
@ -67,6 +67,7 @@ public class ExcelController {
|
|||
private final KateOrdersService kateOrdersService;// 工单服务
|
||||
private final GoodsService goodsService;// 物料服务
|
||||
private final WorkStationConfigService workStationConfigService;// 工站配置服务
|
||||
private final WorkSummaryService workSummaryService;// 工作分析服务
|
||||
|
||||
private final List<String> uploadFileHashStringList = new ArrayList<>();
|
||||
|
||||
|
|
@ -488,7 +489,7 @@ public class ExcelController {
|
|||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("盘点记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
String fileName = URLEncoder.encode("料箱报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
// 内容样式
|
||||
HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle();
|
||||
|
|
@ -505,6 +506,65 @@ public class ExcelController {
|
|||
.doWrite(vehicles.stream().map(VehicleExcelVo::of).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出物料信息
|
||||
*
|
||||
* @param response 请求
|
||||
*/
|
||||
@PostMapping("/downloadGoodsExcel")
|
||||
@ResponseBody
|
||||
public void downloadGoodsExcel(@RequestBody GoodsQuery goodsQuery, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出物料报表,筛选参数:{},请求ip:{}", convertJsonString(goodsQuery), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("物料报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
// 内容样式
|
||||
HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle();
|
||||
// 查询参数
|
||||
List<Goods> goodsList = goodsService.list(new LambdaQueryWrapper<Goods>()
|
||||
.like(StringUtils.isNotEmpty(goodsQuery.getGoodsId()), Goods::getGoodsId, goodsQuery.getGoodsId()));
|
||||
EasyExcel.write(response.getOutputStream(), GoodsExcelVo.class)
|
||||
.excelType(ExcelTypeEnum.XLSX)
|
||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||
.sheet("物料报表")
|
||||
.doWrite(goodsList.stream().map(GoodsExcelVo::of).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出工作总结
|
||||
*
|
||||
* @param response 请求
|
||||
*/
|
||||
@PostMapping("/downloadWorkSummaryExcel")
|
||||
@ResponseBody
|
||||
public void downloadWorkSummaryExcel(@RequestBody WorkSummaryQuery workSummaryQuery, HttpServletResponse response) throws IOException {
|
||||
logger.info("导出物料报表,筛选参数:{},请求ip:{}", convertJsonString(workSummaryQuery), getIpAddr(servletRequest));
|
||||
//设置响应格式
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
||||
String fileName = URLEncoder.encode("工作分析报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||
// 内容样式
|
||||
HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle();
|
||||
// 查询参数
|
||||
List<WorkSummary> goodsList = workSummaryService.list(new LambdaQueryWrapper<WorkSummary>()
|
||||
.eq(workSummaryQuery.getLackStatus() != null, WorkSummary::getLackStatus, workSummaryQuery.getLackStatus())
|
||||
.eq(workSummaryQuery.getWorkDate() != null, WorkSummary::getWorkDate, workSummaryQuery.getWorkDate())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkStation()), WorkSummary::getWorkStation, workSummaryQuery.getWorkStation())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkOrder()), WorkSummary::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkCenter()), WorkSummary::getWorkCenter, workSummaryQuery.getWorkCenter())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getGoodsId()), WorkSummary::getGoodsId, workSummaryQuery.getGoodsId()));
|
||||
EasyExcel.write(response.getOutputStream(), WorkSummaryExcelVo.class)
|
||||
.excelType(ExcelTypeEnum.XLSX)
|
||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||
.sheet("工作分析报表")
|
||||
.doWrite(goodsList.stream().map(WorkSummaryExcelVo::of).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出库位详情
|
||||
*
|
||||
|
|
|
|||
|
|
@ -301,6 +301,7 @@ public class LocationController {
|
|||
Page<Vehicle> page = vehicleQuery.toMpPage();
|
||||
Page<Vehicle> vehiclePage = vehicleService.page(page, new LambdaQueryWrapper<Vehicle>()
|
||||
.like(StringUtils.isNotEmpty(vehicleQuery.getVehicleId()), Vehicle::getVehicleId, vehicleQuery.getVehicleId())
|
||||
.like(StringUtils.isNotEmpty(vehicleQuery.getCurrentLocation()), Vehicle::getCurrentLocation, vehicleQuery.getCurrentLocation())
|
||||
.eq(vehicleQuery.getVehicleStatus() != null, Vehicle::getVehicleStatus, vehicleQuery.getVehicleStatus())
|
||||
.eq(vehicleQuery.getIsEmpty() != null, Vehicle::getIsEmpty, vehicleQuery.getIsEmpty())
|
||||
.orderByDesc(Vehicle::getLastInTime));
|
||||
|
|
|
|||
|
|
@ -17,10 +17,7 @@ import com.wms.entity.app.request.StockUpdateRecordQuery;
|
|||
import com.wms.entity.app.vo.StockUpdateRecordVo;
|
||||
import com.wms.entity.app.vo.StockVo;
|
||||
import com.wms.entity.table.*;
|
||||
import com.wms.service.IStockUpdateRecordService;
|
||||
import com.wms.service.LocationService;
|
||||
import com.wms.service.StockService;
|
||||
import com.wms.service.VehicleService;
|
||||
import com.wms.service.*;
|
||||
import com.wms.utils.HttpUtils;
|
||||
import com.wms.utils.StringUtils;
|
||||
import com.wms.utils.WmsUtils;
|
||||
|
|
@ -72,6 +69,18 @@ public class StockController {
|
|||
* 料箱服务
|
||||
*/
|
||||
private final VehicleService vehicleService;
|
||||
/**
|
||||
* 拣选任务服务
|
||||
*/
|
||||
private final PickTaskService pickTaskService;
|
||||
/**
|
||||
* 流转料箱服务
|
||||
*/
|
||||
private final OutsideVehiclesService outsideVehiclesService;
|
||||
/**
|
||||
* 站台要料服务
|
||||
*/
|
||||
private final GoodsToStationService goodsToStationService;
|
||||
/**
|
||||
* 请求头部信息
|
||||
*/
|
||||
|
|
@ -364,28 +373,54 @@ public class StockController {
|
|||
return convertJsonString(rsp);
|
||||
}
|
||||
// 查询到当前处理的库存
|
||||
List<Stock> currentStockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||
Stock currentStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
|
||||
.eq(Stock::getVehicleId, handleRequest.getVehicleId())
|
||||
.apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, handleRequest.getGoodsId()));
|
||||
if (currentStockList.isEmpty()) {
|
||||
.apply("goods_related ->> '$.goodsId' = {0}" + MYSQL_JSON_CI, handleRequest.getGoodsId())
|
||||
.last("limit 1"));
|
||||
if (currentStock == null) {
|
||||
logger.error("当前箱子中没有当前料号的库存。");
|
||||
rsp.setCode(ResponseCode.ERROR.getCode());
|
||||
rsp.setMessage("当前箱子中没有当前料号的库存。");
|
||||
return convertJsonString(rsp);
|
||||
}
|
||||
// 标记料箱
|
||||
|
||||
// 删除库存
|
||||
for (Stock stock : currentStockList) {
|
||||
|
||||
}
|
||||
// 找到当前箱子当前料对应的拣选任务-->取消拣选任务
|
||||
List<PickTask> pickTasks = pickTaskService.list(new LambdaQueryWrapper<PickTask>()
|
||||
.eq(PickTask::getVehicleId, handleRequest.getVehicleId())
|
||||
.ne(PickTask::getPickStatus, 2));
|
||||
// 找出当前料箱有没有其他料也需要用
|
||||
List<OutsideVehicles> otherOutsideVehicles = outsideVehiclesService.list(new LambdaQueryWrapper<OutsideVehicles>()
|
||||
.eq(OutsideVehicles::getVehicleId, handleRequest.getVehicleId())
|
||||
.ne(OutsideVehicles::getGoodsId, handleRequest.getGoodsId()));
|
||||
if (otherOutsideVehicles != null && !otherOutsideVehicles.isEmpty()) {
|
||||
// 找出其需要的拣选任务
|
||||
for (OutsideVehicles outsideVehicle : otherOutsideVehicles) {
|
||||
// 找出这个料的对应的goodsToStation
|
||||
|
||||
}
|
||||
}
|
||||
// 当前料
|
||||
OutsideVehicles currentOutsideVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper<OutsideVehicles>()
|
||||
.eq(OutsideVehicles::getVehicleId, handleRequest.getVehicleId())
|
||||
.eq(OutsideVehicles::getGoodsId, handleRequest.getGoodsId())
|
||||
.last("limit 1"));
|
||||
if (currentOutsideVehicle != null) {
|
||||
// 已经分配的数量
|
||||
BigDecimal distributedNum = currentStock.getGoodsRelated().getRemainNum().subtract(currentOutsideVehicle.getRemainNum());
|
||||
// 将当前物料的所有goodsToStation
|
||||
}
|
||||
// ----请求wcs接口
|
||||
// 将这个料的实际剩余库存数量减去outsideVehicles的剩余数量,得出这个料的分配数量
|
||||
// 回退goodsToStation
|
||||
// ----在请求回库时,需要增加箱子状态的判断。异常状态---允许回库,但是不生成回库任务
|
||||
// ----在请求回库时,需要增 加箱子状态的判断。异常状态---允许回库,但是不生成回库任务
|
||||
// 添加库存更新记录
|
||||
|
||||
// 标记料箱
|
||||
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||
.set(Vehicle::getVehicleStatus, VehicleStatus.EXCEPTION.getCode())
|
||||
.eq(Vehicle::getVehicleId, handleRequest.getVehicleId())
|
||||
.ne(Vehicle::getVehicleStatus, VehicleStatus.EXCEPTION.getCode()));
|
||||
// 删除库存
|
||||
stockService.removeById(currentStock);
|
||||
|
||||
return convertJsonString(rsp);
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -1123,6 +1123,7 @@ public class TaskController {
|
|||
|
||||
/**
|
||||
* 获取已完成行数信息
|
||||
*
|
||||
* @param standPickVo 查询
|
||||
*/
|
||||
public void getFinishedInfo(String workStation, StandPickVo standPickVo) {
|
||||
|
|
@ -1990,7 +1991,7 @@ public class TaskController {
|
|||
}
|
||||
if (!taskService.update(new LambdaUpdateWrapper<Task>()
|
||||
.set(Task::getTaskStatus, WmsTaskStatus.NEW.getCode())
|
||||
.set(Task::getDestination, nextLocationId)
|
||||
.set(Task::getDestination, nextLocationId)
|
||||
.eq(Task::getVehicleId, requestBackQuery.getVehicleId())
|
||||
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||
.eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode())
|
||||
|
|
@ -2271,7 +2272,7 @@ public class TaskController {
|
|||
} else {
|
||||
// 根据这些小盒子号找到对应的工单
|
||||
List<String> orderIds = eConfigLastList.stream().map(ELocationConfigLast::getWorkOrder).distinct().toList();
|
||||
sortBoxRequest.setSumOfOrders((orderIds.size() + orderQuantity - 1)/orderQuantity);
|
||||
sortBoxRequest.setSumOfOrders((orderIds.size() + orderQuantity - 1) / orderQuantity);
|
||||
}
|
||||
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
|
|
@ -2568,7 +2569,7 @@ public class TaskController {
|
|||
tempOutTask.setIsPicking(1);
|
||||
outTasks.add(tempOutTask);
|
||||
} else if (Objects.equals(tempStock.getStockStatus(), StockStatus.OUT.getCode())
|
||||
|| Objects.equals(tempStock.getStockStatus(), StockStatus.PICKING.getCode())) {
|
||||
|| Objects.equals(tempStock.getStockStatus(), StockStatus.PICKING.getCode())) {
|
||||
// 查询这个箱子的拣选任务
|
||||
List<PickTask> thisVehiclePickTasks = pickTaskService.list(new LambdaQueryWrapper<PickTask>()
|
||||
.eq(PickTask::getVehicleId, tempStock.getVehicleId()));
|
||||
|
|
@ -2641,7 +2642,7 @@ public class TaskController {
|
|||
if (!pickStandIds.isEmpty()) {
|
||||
message.append("有料需要去工作站台领取。站台号:");
|
||||
pickStandIds.forEach(pickStandId -> message.append(pickStandId).append("、"));
|
||||
message.replace(message.length()-1, message.length(), "。");
|
||||
message.replace(message.length() - 1, message.length(), "。");
|
||||
}
|
||||
response.setMessage(String.valueOf(message));
|
||||
} else {
|
||||
|
|
@ -2706,7 +2707,7 @@ public class TaskController {
|
|||
// 判断信息是否完备
|
||||
if (StringUtils.isEmpty(pickNumQuery.getGoodsId())
|
||||
|| StringUtils.isEmpty(pickNumQuery.getVehicleId())
|
||||
|| pickNumQuery.getRealPickNum() == null) {
|
||||
|| pickNumQuery.getRealPickNum() == null) {
|
||||
logger.error("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
||||
|
|
|
|||
|
|
@ -146,6 +146,9 @@ public class GoodsExcelVo extends KanbanExcelVo {
|
|||
* @return excel对象
|
||||
*/
|
||||
public static GoodsExcelVo of(Goods goodsPo) {
|
||||
return BeanUtil.copyProperties(goodsPo, GoodsExcelVo.class);
|
||||
GoodsExcelVo tempVo = new GoodsExcelVo();
|
||||
tempVo = BeanUtil.copyProperties(goodsPo, GoodsExcelVo.class);
|
||||
tempVo.setKanban(goodsPo.getKanbanList());
|
||||
return tempVo;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user