代码更新:

1. 增加物料和工作分析报表的导出功能,修改料箱导出。
2. 增加一些报表界面的查询
This commit is contained in:
梁州 2024-10-05 16:41:24 +08:00
parent 6fededdd30
commit 113553ba80
5 changed files with 121 additions and 21 deletions

View File

@ -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());
}
/**
* 导出库位详情
*

View File

@ -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));

View File

@ -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) {

View File

@ -1123,6 +1123,7 @@ public class TaskController {
/**
* 获取已完成行数信息
*
* @param standPickVo 查询
*/
public void getFinishedInfo(String workStation, StandPickVo standPickVo) {
@ -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());
@ -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 {

View File

@ -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;
}
}