From 00837564e894f85b179d748adcd1d14a7fecad48 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Thu, 25 Jul 2024 16:58:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0--=E5=A4=87?= =?UTF-8?q?=E6=96=99=E4=B8=9A=E5=8A=A1=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/wms/constants/WmsConstants.java | 25 +++ .../com/wms/controller/TaskController.java | 148 +++++++++++++++++- .../wms/entity/app/request/VehicleQuery.java | 6 + .../java/com/wms/entity/app/vo/VehicleVO.java | 2 +- .../com/wms/entity/table/ELocationConfig.java | 27 ++++ .../wms/entity/table/ELocationConfigLast.java | 44 ++++++ .../java/com/wms/entity/table/Vehicle.java | 2 +- .../wms/mapper/ELocationConfigLastMapper.java | 9 ++ .../java/com/wms/mapper/VehicleMapper.java | 3 +- .../service/ELocationConfigLastService.java | 10 ++ .../java/com/wms/service/VehicleService.java | 2 +- .../WorkServiceImplements.java | 30 +++- .../ELocationConfigLastServiceImpl.java | 20 +++ .../VehicleServiceImplements.java | 2 + .../mapper/ELocationConfigMapperLast.xml | 6 + 15 files changed, 324 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/wms/entity/table/ELocationConfigLast.java create mode 100644 src/main/java/com/wms/mapper/ELocationConfigLastMapper.java create mode 100644 src/main/java/com/wms/service/ELocationConfigLastService.java create mode 100644 src/main/java/com/wms/service/serviceImplements/ELocationConfigLastServiceImpl.java create mode 100644 src/main/resources/mapper/ELocationConfigMapperLast.xml diff --git a/src/main/java/com/wms/constants/WmsConstants.java b/src/main/java/com/wms/constants/WmsConstants.java index 4b5cdc1..dcb5b1a 100644 --- a/src/main/java/com/wms/constants/WmsConstants.java +++ b/src/main/java/com/wms/constants/WmsConstants.java @@ -15,4 +15,29 @@ import com.wms.constants.enums.WmsTaskStatus; public class WmsConstants { public static String EMPTY_STRING = ""; public static String ROOT_MENU_ID = "0"; + + public static Map type_values = ImmutableMap.builder() + .put("LR01", "CLC一箱两料") + .put("LR02", "CLC一箱一料") + .put("UD01", "CLC一箱两料") + .put("FC01", "CLC一箱一料") + .put("FB01", "No-CLC一箱一料") + .put("FB02", "间接物料") + .put("FB03", "间接物料") + .put("FB04", "间接物料") + .put("FB05", "间接物料") + .put("FB06", "间接物料") + .build(); + public static Map type_descriptions = ImmutableMap.builder() + .put("LR01", "810左右4个") + .put("LR02", "811左右2个") + .put("UD01", "911上下2个") + .put("FC01", "822整体1个") + .put("FB01", "分包1个料箱") + .put("FB02", "分包1/2个料箱") + .put("FB03", "分包1/3个料箱") + .put("FB04", "分包1/4个料箱") + .put("FB05", "分包1/5个料箱") + .put("FB06", "分包1/6个料箱") + .build(); } \ No newline at end of file diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index aa02c3e..3d977e4 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -11,6 +11,7 @@ import com.wms.entity.app.*; import com.wms.entity.app.dto.PageDto; import com.wms.entity.app.dto.extend.StockDetailInfo; import com.wms.entity.app.request.*; +import com.wms.entity.app.vo.StandPickFinishVo; import com.wms.entity.app.vo.StandPickVo; import com.wms.entity.app.vo.TaskVO; import com.wms.entity.app.wcs.*; @@ -335,7 +336,7 @@ public class TaskController { // 添加载具 Vehicle newVehicle = new Vehicle(); newVehicle.setVehicleId(inTask.getVehicleId()); - newVehicle.setVehicleType(1); + newVehicle.setVehicleType(""); newVehicle.setVehicleStatus(VehicleStatus.ON.getCode()); newVehicle.setCurrentLocation(inTask.getDestination()); if (haveMoveTask) { @@ -1022,11 +1023,11 @@ public class TaskController { * @param workConfirmRequest 请求信息 * @return 结果 */ - @PostMapping("/confirmFinishedWork") + @PostMapping("/confirmFinishWork") @ResponseBody @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) - @MyLog(logTitle = "确认当前拣货完成(wms界面触发)", logMethod = "confirmFinishedWork") - public String confirmFinishedWork(@RequestBody WorkConfirmRequest workConfirmRequest) { + @MyLog(logTitle = "确认当前拣货完成(wms界面触发)", logMethod = "confirmFinishWork") + public String confirmFinishWork(@RequestBody WorkConfirmRequest workConfirmRequest) { logger.info("接收到确认当前拣货完成(wms界面触发)请求:{},ip地址:{}", convertJsonString(workConfirmRequest), HttpUtils.getIpAddr(servletRequest)); ResponseEntity response = new ResponseEntity(); try { @@ -1281,4 +1282,143 @@ public class TaskController { return convertJsonString(response); } } + + /** + * 获取当前站台任务完成信息 + * + * @param workQuery 请求信息 + * @return 结果 + */ + @PostMapping("/getFinishedWorkInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "获取当前站台任务完成信息", logMethod = "getFinishedWorkInfo") + public String getFinishedWorkInfo(@RequestBody WorkQuery workQuery) { + logger.info("获取当前站台任务完成信息:{},ip地址:{}", convertJsonString(workQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + // 获取站台号 + String standId = ""; + if (StringUtils.isNotEmpty(workQuery.getStandId())) { + // 站台号从请求参数中获取 + standId = workQuery.getStandId(); + } else { + // 站台号从ip获取 + Stand standOfIp = standService.getOne(new LambdaQueryWrapper() + .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) + .eq(Stand::getStandType, 1)); + if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { + standId = standOfIp.getStandId(); + } + } + if (StringUtils.isEmpty(standId)) { + logger.error("请求参数缺少站台号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请求参数缺少站台号。"); + return convertJsonString(response); + } + // 生成前台VO + StandPickFinishVo standPickFinishVo = new StandPickFinishVo(); + standPickFinishVo.setStandId(standId); + try { + // 获取当前站台已完成数量 + List allWorkFlows = workFlowService.list(); + int finishedRows = 0; + BigDecimal finishedCounts = BigDecimal.ZERO; + BigDecimal planCounts = BigDecimal.ZERO; + for (WorkFlow workFlow : allWorkFlows) { + if (workFlow.getWorkStatus() == 2) { + finishedRows++; + } + finishedCounts = finishedCounts.add(workFlow.getPickedNum()); + planCounts = planCounts.add(workFlow.getNeedNum()); + } + standPickFinishVo.setPlanRows(allWorkFlows.size()); + standPickFinishVo.setActualRows(finishedRows); + standPickFinishVo.setPlanCounts(planCounts); + standPickFinishVo.setActualCounts(finishedCounts); + if (finishedRows == allWorkFlows.size()) { + standPickFinishVo.setTip("工作已经完成,请打印标签"); + } else { + standPickFinishVo.setTip("工作未完成,请继续工作"); + } + if (finishedCounts.compareTo(planCounts) < 0) { + standPickFinishVo.setRemark("有缺料,请至异常区处理"); + } else { + standPickFinishVo.setRemark("正常"); + } + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("获取工作信息成功"); + response.setReturnData(standPickFinishVo); + } catch (Exception e) { + logger.error("获取已完成数据报表失败,可能存在类型转换错误"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("获取已完成数据报表失败,可能存在类型转换错误"); + } + + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("获取当前站台任务完成信息"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("获取当前站台任务完成信息"); + return convertJsonString(response); + } + } + + /** + * 工作完成确认 + * + * @param workQuery 请求信息 + * @return 结果 + */ + @PostMapping("/confirmFinishedWork") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "工作完成确认", logMethod = "confirmFinishedWork") + public String confirmFinishedWork(@RequestBody WorkQuery workQuery) { + logger.info("工作完成确认:{},ip地址:{}", convertJsonString(workQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + // 获取站台号 + String standId = ""; + if (StringUtils.isNotEmpty(workQuery.getStandId())) { + // 站台号从请求参数中获取 + standId = workQuery.getStandId(); + } else { + // 站台号从ip获取 + Stand standOfIp = standService.getOne(new LambdaQueryWrapper() + .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) + .eq(Stand::getStandType, 1)); + if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { + standId = standOfIp.getStandId(); + } + } + if (StringUtils.isEmpty(standId)) { + logger.error("请求参数缺少站台号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请求参数缺少站台号。"); + return convertJsonString(response); + } + String finishResult = workService.finishWork(standId); + if (Objects.equals(finishResult, "")) { + // 工作完成成功 + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("确认成功,请至收盒子界面完成后续操作。"); + } else { + // 工作完成失败 + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("确认失败:" + finishResult); + } + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("工作完成确认异常"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("工作完成确认异常"); + return convertJsonString(response); + } + } } \ No newline at end of file diff --git a/src/main/java/com/wms/entity/app/request/VehicleQuery.java b/src/main/java/com/wms/entity/app/request/VehicleQuery.java index f857cd1..b6b4c65 100644 --- a/src/main/java/com/wms/entity/app/request/VehicleQuery.java +++ b/src/main/java/com/wms/entity/app/request/VehicleQuery.java @@ -26,6 +26,11 @@ public class VehicleQuery extends PageQuery { */ @JsonProperty("isEmpty") private Integer isEmpty; + /** + * 料箱类型 + */ + @JsonProperty("vehicleType") + private String vehicleType; /** * 当前位置 */ @@ -42,6 +47,7 @@ public class VehicleQuery extends PageQuery { vehiclePO.setVehicleStatus(vehicleStatus); vehiclePO.setIsEmpty(isEmpty); vehiclePO.setCurrentLocation(currentLocation); + vehiclePO.setVehicleType(vehicleType); return vehiclePO; } diff --git a/src/main/java/com/wms/entity/app/vo/VehicleVO.java b/src/main/java/com/wms/entity/app/vo/VehicleVO.java index 9c43460..76566cf 100644 --- a/src/main/java/com/wms/entity/app/vo/VehicleVO.java +++ b/src/main/java/com/wms/entity/app/vo/VehicleVO.java @@ -27,7 +27,7 @@ public class VehicleVO { /** * 载具类型 */ - private Integer vehicleType; + private String vehicleType; /** * 额外信息 */ diff --git a/src/main/java/com/wms/entity/table/ELocationConfig.java b/src/main/java/com/wms/entity/table/ELocationConfig.java index f79f627..3b5400c 100644 --- a/src/main/java/com/wms/entity/table/ELocationConfig.java +++ b/src/main/java/com/wms/entity/table/ELocationConfig.java @@ -1,10 +1,13 @@ package com.wms.entity.table; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import java.util.List; + /** * 电子标签库位对应工单工位盒子 */ @@ -46,4 +49,28 @@ public class ELocationConfig { */ @TableField("print_counts") private Integer printCounts = 0; + + /** + * 转换为ELocationConfigLast + * @return 转换后的ELocationConfigLast + */ + public ELocationConfigLast toLocationConfigLast() { + ELocationConfigLast newELocationConfigLast = new ELocationConfigLast(); + newELocationConfigLast.setELocationId(this.eLocationId); + newELocationConfigLast.setOrderBoxNo(this.orderBoxNo); + newELocationConfigLast.setWorkCenter(this.workCenter); + newELocationConfigLast.setWorkOrder(this.workOrder); + newELocationConfigLast.setWorkStation(this.workStation); + + return newELocationConfigLast; + } + + /** + * 转换为ELocationConfigLast列表 + * @param eLocationConfigs 原来配置列表 + * @return 转换后的列表 + */ + public static List toLocationsConfigLastList(List eLocationConfigs) { + return BeanUtil.copyToList(eLocationConfigs, ELocationConfigLast.class); + } } diff --git a/src/main/java/com/wms/entity/table/ELocationConfigLast.java b/src/main/java/com/wms/entity/table/ELocationConfigLast.java new file mode 100644 index 0000000..9a38002 --- /dev/null +++ b/src/main/java/com/wms/entity/table/ELocationConfigLast.java @@ -0,0 +1,44 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 待收盒子配置表 + */ +@Data +@TableName(value = "tbl_app_e_location_config_last", autoResultMap = true) +public class ELocationConfigLast { + /** + * 电子标签库位 + */ + @TableId("e_location_id") + private String eLocationId; + /** + * 工站 + */ + @TableField("work_station") + private String workStation; + /** + * 工单 + */ + @TableField("work_order") + private String workOrder; + /** + * 工位 + */ + @TableField("work_center") + private String workCenter; + /** + * 盒子号 + */ + @TableField("order_box_no") + private String orderBoxNo; + /** + * 是否取走 + */ + @TableField("box_status") + private Integer boxStatus = 0; +} diff --git a/src/main/java/com/wms/entity/table/Vehicle.java b/src/main/java/com/wms/entity/table/Vehicle.java index b392ce0..979e318 100644 --- a/src/main/java/com/wms/entity/table/Vehicle.java +++ b/src/main/java/com/wms/entity/table/Vehicle.java @@ -39,7 +39,7 @@ public class Vehicle { * 载具类型 */ @TableField("vehicle_type") - private Integer vehicleType; + private String vehicleType; /** * 额外信息 */ diff --git a/src/main/java/com/wms/mapper/ELocationConfigLastMapper.java b/src/main/java/com/wms/mapper/ELocationConfigLastMapper.java new file mode 100644 index 0000000..adb5d41 --- /dev/null +++ b/src/main/java/com/wms/mapper/ELocationConfigLastMapper.java @@ -0,0 +1,9 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.ELocationConfigLast; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ELocationConfigLastMapper extends BaseMapper { +} diff --git a/src/main/java/com/wms/mapper/VehicleMapper.java b/src/main/java/com/wms/mapper/VehicleMapper.java index 46bf8b3..b02832e 100644 --- a/src/main/java/com/wms/mapper/VehicleMapper.java +++ b/src/main/java/com/wms/mapper/VehicleMapper.java @@ -4,10 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.wms.entity.table.Vehicle; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 载具mapper */ @Mapper public interface VehicleMapper extends BaseMapper { - } \ No newline at end of file diff --git a/src/main/java/com/wms/service/ELocationConfigLastService.java b/src/main/java/com/wms/service/ELocationConfigLastService.java new file mode 100644 index 0000000..43fc165 --- /dev/null +++ b/src/main/java/com/wms/service/ELocationConfigLastService.java @@ -0,0 +1,10 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.table.ELocationConfigLast; + +/** + * 电子标签库位配置服务接口 + */ +public interface ELocationConfigLastService extends IService { +} diff --git a/src/main/java/com/wms/service/VehicleService.java b/src/main/java/com/wms/service/VehicleService.java index 37f48ad..44fdb01 100644 --- a/src/main/java/com/wms/service/VehicleService.java +++ b/src/main/java/com/wms/service/VehicleService.java @@ -5,8 +5,8 @@ import com.wms.entity.app.dto.VehicleDto; import com.wms.entity.table.Vehicle; import java.util.List; +import java.util.Map; public interface VehicleService extends IService { - List selVehicles(Vehicle vehicle); } diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index 197f2f6..da7787a 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -40,6 +40,7 @@ public class WorkServiceImplements implements IWorkService { private final PickTaskService pickTaskService;// 拣选任务服务 private final VehicleService vehicleService;// 载具服务 private final WorkSummaryService workSummaryService;// 工作总结服务 + private final ELocationConfigLastService eLocationConfigLastService;// 上一次标签配置的服务 private final List workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台 private final List workDoingStations = new ArrayList<>();// 当前正在执行任务的站台 private final List workFinishingStations = new ArrayList<>();// 当前正在完成任务的站台 @@ -305,6 +306,15 @@ public class WorkServiceImplements implements IWorkService { // 有标签未打印 return "有标签未打印"; } + // 查找当前站台的标签配置 + List eLocationConfigList = eLocationConfigService.list(new LambdaQueryWrapper() + .eq(ELocationConfig::getWorkStation, workStation)); + // 保存一下记录 + List eLocationConfigLastList = ELocationConfig.toLocationsConfigLastList(eLocationConfigList); + // 先清空之前的 + eLocationConfigLastService.remove(new LambdaQueryWrapper() + .eq(ELocationConfigLast::getWorkStation, workStation)); + eLocationConfigLastService.saveBatch(eLocationConfigLastList); // 删除所有的标签配置 eLocationConfigService.remove(new LambdaQueryWrapper() .eq(ELocationConfig::getWorkStation, workStation)); @@ -329,6 +339,7 @@ public class WorkServiceImplements implements IWorkService { summary.setLackStatus(summary.getLackNum().compareTo(BigDecimal.ZERO) > 0 ? 1 : 0); summary.setFinishTime(workFlow.getFinishTime()); workSummaryList.add(summary); + // 更新工单表 kateOrdersService.update(new LambdaUpdateWrapper() .set(KateOrders::getOrderStatus, 2) .set(KateOrders::getFinishTime, LocalDateTime.now()) @@ -337,12 +348,23 @@ public class WorkServiceImplements implements IWorkService { .eq(KateOrders::getOrderId, workFlow.getOrderId()) .eq(KateOrders::getSupplyArea, workFlow.getWorkCenter()) .eq(KateOrders::getGoodsId, workFlow.getGoodsId())); + // 如果当前工单已经没有未完成的工作,更新DBS状态完成 + if (!kateOrdersService.exists(new LambdaQueryWrapper() + .eq(KateOrders::getOrderId, workFlow.getOrderId()) + .ne(KateOrders::getOrderStatus, 4))) { + kateDBSService.update(new LambdaUpdateWrapper() + .set(KateDBS::getDbsStatus, 2) + .set(KateDBS::getLastUpdateTime, LocalDateTime.now()) + .eq(KateDBS::getWorkOrder, workFlow.getOrderId())); + } } workSummaryService.saveBatch(workSummaryList); - // 更新工单表 - - // 更新DBS表 - + // 移除工作流 + workFlowService.remove(new LambdaQueryWrapper() + .eq(WorkFlow::getWorkStation, workStation)); + // 移库站台要料 + goodsToStationService.remove(new LambdaQueryWrapper() + .eq(GoodsToStation::getWorkStation, workStation)); } catch (Exception e) { throw new Exception("完成站台:" + workStation + "工作发生异常!"); } finally { diff --git a/src/main/java/com/wms/service/serviceImplements/ELocationConfigLastServiceImpl.java b/src/main/java/com/wms/service/serviceImplements/ELocationConfigLastServiceImpl.java new file mode 100644 index 0000000..ff1f98c --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/ELocationConfigLastServiceImpl.java @@ -0,0 +1,20 @@ +package com.wms.service.serviceImplements; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.entity.table.ELocationConfig; +import com.wms.entity.table.ELocationConfigLast; +import com.wms.mapper.ELocationConfigLastMapper; +import com.wms.mapper.ELocationConfigMapper; +import com.wms.service.ELocationConfigLastService; +import com.wms.service.ELocationConfigService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 电子标签库位配置服务实现 + */ +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class ELocationConfigLastServiceImpl extends ServiceImpl implements ELocationConfigLastService { +} diff --git a/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java index 111867c..7252954 100644 --- a/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java @@ -12,7 +12,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) diff --git a/src/main/resources/mapper/ELocationConfigMapperLast.xml b/src/main/resources/mapper/ELocationConfigMapperLast.xml new file mode 100644 index 0000000..b0e43db --- /dev/null +++ b/src/main/resources/mapper/ELocationConfigMapperLast.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file