From 368b846b1fd27ca98666281f9d7712d86c15a53e Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Tue, 24 Jun 2025 20:18:50 +0800 Subject: [PATCH] =?UTF-8?q?opt:=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wms_pro/hd/nladmin-system/pom.xml | 6 +- .../java/org/nl/common/enums/StatusEnum.java | 4 +- .../java/org/nl/common/utils/StructUtil.java | 43 ++ .../controller/BmVehicleRfidController.java | 122 ++++ .../service/IbmVehicleRfidService.java | 70 +++ .../service/dao/BmVehicleRfid.java | 134 +++++ .../dao/mapper/BmVehicleRfidMapper.java | 15 + .../dao/mapper/xml/BmVehicleRfidMapper.xml | 6 + .../service/dto/BmVehicleRfidDto.java | 81 +++ .../service/dto/BmVehicleRfidParam.java | 74 +++ .../rfid_manage/service/dto/EpcRecord.java | 15 + .../impl/BmVehicleRfidServiceImpl.java | 523 ++++++++++++++++++ .../chainer/impl/EndDecisionChainer.java | 44 +- .../impl/base/AlleyAveRuleHandler.java | 3 +- .../impl/base/LimitStorageRuleHandler.java | 17 +- .../impl/diy/DepthPriorityHandler.java | 5 + .../controller/SchBasePointController.java | 35 +- .../point/service/ISchBasePointService.java | 3 +- .../service/impl/SchBasePointServiceImpl.java | 133 +++-- .../handler/impl/GroupDickInStorageTask.java | 4 +- .../task/handler/impl/InStorageTask.java | 17 +- .../task/handler/impl/MoveStorageTask.java | 3 +- .../task/handler/impl/OutStorageTask.java | 110 ++-- .../handler/impl/PalletInStorageTask.java | 17 +- .../impl/SecondFloorEmptyShelfTask.java | 8 +- .../impl/SecondFloorOutStorageTask.java | 49 +- .../dao/mapper/xml/SchBaseTaskMapper.xml | 9 +- .../task/service/dto/SchBaseTaskQuery.java | 4 +- .../service/impl/SchBaseTaskServiceImpl.java | 144 +++-- .../acs/service/AcsToWmsService.java | 20 +- .../acs/service/WmsToAcsService.java | 17 +- .../impl/StrucFormActivityBehavior.java | 1 - .../impl/SubProcessActivityBehavior.java | 1 - .../service/impl/MdGruopDickServiceImpl.java | 37 +- .../service/IMdPbVehicleMaterService.java | 3 + .../service/dao/MdPbVehicleMater.java | 6 + .../dao/mapper/MdPbVehicleMaterMapper.java | 2 + .../dao/mapper/xml/MdPbVehicleivtMapper.xml | 59 +- .../service/dto/MdPbVehicleMaterVo.java | 3 +- .../impl/MdPbVehicleMaterServiceImpl.java | 12 +- .../common/PdaCommonController.java | 44 +- .../wms/pda_manage/group/GroupController.java | 54 +- .../iostorage/IOStorageController.java | 35 +- .../pda_manage/iostorage/PdaInController.java | 2 + .../iostorage/PdaOutController.java | 9 +- .../iostorage/sevice/PdaIOService.java | 8 +- .../mapper/xml/StIvtIostorinvOutMapper.xml | 2 +- .../impl/StIvtIostorinvServiceImpl.java | 28 +- .../controller/StIvtStructattrController.java | 53 +- .../service/IStIvtStructattrService.java | 6 +- .../dao/mapper/StIvtStructattrMapper.java | 2 + .../dao/mapper/xml/StIvtStructattrMapper.xml | 224 +++++--- .../struct/service/dto/StructattrQuery.java | 7 + .../impl/StIvtStructattrServiceImpl.java | 128 ++++- .../task/ApplyShelfScheduleService.java | 27 +- .../task/CleanCtuTaskScheduleService.java | 75 --- .../quartz/task/CtuTaskScheduleService.java | 2 +- .../quartz/task/TakeShelfScheduleService.java | 131 +++++ .../service/quartz/utils/ExecutionJob.java | 9 +- .../main/resources/config/application-dev.yml | 6 +- wms_pro/qd/package.json | 3 +- wms_pro/qd/src/views/system/timing/log.vue | 14 +- .../views/wms/base_manage/struct/index.vue | 70 ++- .../wms/base_manage/vehicle_rfid/index.vue | 272 ++++----- .../base_manage/vehicle_rfid/vehicle_rfid.js | 49 ++ .../views/wms/dispatch_manage/point/index.vue | 18 +- .../views/wms/dispatch_manage/task/index.vue | 19 +- .../storIvtInfo/StructAttrDialog.vue | 38 +- .../wms/stor_manage/storIvtInfo/index.vue | 78 ++- .../wms/stor_manage/storIvtInfo/structattr.js | 8 + 70 files changed, 2563 insertions(+), 717 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/controller/BmVehicleRfidController.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/IbmVehicleRfidService.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/BmVehicleRfid.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/xml/BmVehicleRfidMapper.xml create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidDto.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidParam.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/EpcRecord.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java delete mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/CleanCtuTaskScheduleService.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/TakeShelfScheduleService.java create mode 100644 wms_pro/qd/src/views/wms/base_manage/vehicle_rfid/vehicle_rfid.js diff --git a/wms_pro/hd/nladmin-system/pom.xml b/wms_pro/hd/nladmin-system/pom.xml index 80409d5f..5819c186 100644 --- a/wms_pro/hd/nladmin-system/pom.xml +++ b/wms_pro/hd/nladmin-system/pom.xml @@ -39,7 +39,11 @@ 3.0.13 pom - + + reader + reader + 1.4 + com.github.oshi diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index e5c673d3..cc802489 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -53,7 +53,7 @@ public enum StatusEnum { * 任务优先级 */ PRIORITY_TYPE(ForkMap.of( - "最低", "1", null, "普通", "5", null, "较高", "6", null, "加急", "7", null + "最低", "1", null, "普通", "5", null, "较高", "6", null, "加急", "7", null, "移库", "8", null )), /** @@ -79,7 +79,7 @@ public enum StatusEnum { REGION_INFO(ForkMap.of("主存区拣选平台", "PICK01", null, "一楼出入库输送线", "IOConveyor", null, "二楼出入库输送线", "IOConveyor2", null, "拣选台秤重区", "WEIGH01", null, - "二楼CTU货架对接位", "CTU_POSITION", null, "二楼AGV产线对接位", "AGV_POSITION", null)), + "二楼CTU货架对接位", "CTU_POSITION", null, "二楼AGV产线对接位", "AGV_POSITION", null,"二楼空货架缓存区", "SHELF_POSITION", null)), STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null, diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java index 9e1d4fff..5274a302 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/utils/StructUtil.java @@ -1,5 +1,7 @@ package org.nl.common.utils; +import com.gg.reader.api.utils.BitBuffer; +import com.gg.reader.api.utils.HexUtils; import org.springframework.beans.BeanUtils; import java.util.ArrayList; @@ -25,4 +27,45 @@ public class StructUtil { return String.format(replace, blockRow); } + public static String getPc(int pcLen) { + int iPc = pcLen << 11; + BitBuffer buffer = BitBuffer.allocateDynamic(); + buffer.put(iPc); + buffer.position(16); + byte[] bTmp = new byte[2]; + buffer.get(bTmp); + return HexUtils.bytes2HexString(bTmp); + } + + public static String getGbPc(int pcLen) { + int iPc = pcLen << 8; + BitBuffer buffer = BitBuffer.allocateDynamic(); + buffer.put(iPc); + buffer.position(16); + byte[] bTmp = new byte[2]; + buffer.get(bTmp); + return HexUtils.bytes2HexString(bTmp); + } + + //写入数据不足4位后面补'0' AA00 + public static String padLeft(String src, int len, char ch) { + int diff = len - src.length(); + if (diff <= 0) { + return src; + } + + char[] chars = new char[len]; + System.arraycopy(src.toCharArray(), 0, chars, 0, src.length()); + for (int i = src.length(); i < len; i++) { + chars[i] = ch; + } + return new String(chars); + } + + public static int getValueLen(String data) { + data = data.trim(); + return data.length() % 4 == 0 ? data.length() / 4 + : (data.length() / 4) + 1; + } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/controller/BmVehicleRfidController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/controller/BmVehicleRfidController.java new file mode 100644 index 00000000..d425f83c --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/controller/BmVehicleRfidController.java @@ -0,0 +1,122 @@ +package org.nl.wms.base_manage.rfid_manage.controller; + +import java.util.Set; +import java.util.Map; + +import cn.dev33.satoken.annotation.SaIgnore; +import org.nl.common.TableDataInfo; +import org.springframework.web.bind.annotation.*; +import lombok.RequiredArgsConstructor; + +import javax.annotation.Resource; + +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.entity.PageQuery; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.nl.wms.base_manage.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.wms.base_manage.rfid_manage.service.IbmVehicleRfidService; + + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)控制层 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/rfid") +@Slf4j +@SaIgnore +public class BmVehicleRfidController { + + + @Resource + private IbmVehicleRfidService bmVehicleRfidService; + + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @GetMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:list") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + //写入标签 + //bmVehicleRfidService.writeEpc("1"); + return new ResponseEntity<>(TableDataInfo.build(bmVehicleRfidService.query(whereJson, page)), HttpStatus.OK); + } + + + + + /** + * 条件查询 + * + * @param params 查询条件 + */ + @PostMapping("/selectList") + //@SaCheckPermission("@el.check(BmVehicleRfid:list") + public ResponseEntity selectList(@RequestBody BmVehicleRfidParam params) { + return new ResponseEntity<>(bmVehicleRfidService.selectList(params), HttpStatus.OK); + } + + + /** + * 新增数据 + * + * @param params 实体对象 + * @return 新增结果 + */ + @PostMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:add") + public ResponseEntity create(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.create(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + /** + * 连接测试 + * @return 结果 + */ + @PostMapping("/open") + //@SaCheckPermission("@el.check(BmVehicleRfid:add") + public ResponseEntity connectRfid(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.connectRfid(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 修改数据 + * + * @param params 实体对象 + * @return 修改结果 + */ + @PutMapping + //@SaCheckPermission("@el.check(BmVehicleRfid:edit')") + public ResponseEntity update(@RequestBody BmVehicleRfidParam params) { + bmVehicleRfidService.update(params); + return new ResponseEntity<>(HttpStatus.OK); + } + + + /** + * 删除数据 + * + * @param ids 多个主键Id + * @return 删除结果 + */ + //@SaCheckPermission("@el.check(BmVehicleRfid:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + bmVehicleRfidService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/IbmVehicleRfidService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/IbmVehicleRfidService.java new file mode 100644 index 00000000..8eb28bb3 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/IbmVehicleRfidService.java @@ -0,0 +1,70 @@ +package org.nl.wms.base_manage.rfid_manage.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.base_manage.rfid_manage.service.dao.BmVehicleRfid; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.base_manage.rfid_manage.service.dto.BmVehicleRfidParam; + +import java.util.List; +import java.util.Map; +import java.util.Set; + + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)服务接口层 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +public interface IbmVehicleRfidService extends IService { + + + /** + * 分页查询 + * + * @param whereJson 查询条件 + * @return IPage + */ + IPage query(Map whereJson, PageQuery page); + + /** + * 条件查询 + * + * @param params 查询条件 + * @return List + */ + List selectList(BmVehicleRfidParam params); + + + /** + * 创建 + * + * @param params 对象实体 + */ + void create(BmVehicleRfidParam params); + + + /** + * 编辑 + * + * @param params 对象实体 + */ + void update(BmVehicleRfidParam params); + + /** + * 多选删除 + * + * @param ids / + */ + void deleteAll(Set ids); + + + void connectRfid(BmVehicleRfidParam params); + + void writeEpc(String id); + + +} + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/BmVehicleRfid.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/BmVehicleRfid.java new file mode 100644 index 00000000..10412573 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/BmVehicleRfid.java @@ -0,0 +1,134 @@ +package org.nl.wms.base_manage.rfid_manage.service.dao; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)实体类 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bm_vehicle_rfid") +public class BmVehicleRfid extends Model { + + private static final long serialVersionUID = -7739291296662381393L; + //@TableId(type = IdType.ASSIGN_ID) + + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.NONE) + private String id; + + + /** + * ip + */ + private String ip; + + + /** + * 端口 + */ + private String port; + + + /** + * 设备编号 + */ + private String device_code; + + + /** + * rfid号码 + */ + private String rfid; + + + /** + * 开始连接时间 + */ + private String start_time; + + + /** + * 创建人 + */ + private String create_id; + + + /** + * 创建人姓名 + */ + private String create_name; + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private String create_time; + + + /** + * 修改人 + */ + private String update_id; + + + /** + * 修改人姓名 + */ + private String update_name; + + + /** + * 在线时间 + */ + @TableField(exist = false) + private String online_time; + /** + * 日志 + */ + private String log; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String update_time; + + + /** + * 是否启用 + */ + private Integer is_used; + /** + * 状态 + */ + private Integer status; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } + +} + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java new file mode 100644 index 00000000..912cc399 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/BmVehicleRfidMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.base_manage.rfid_manage.service.dao.mapper; + +import org.nl.wms.base_manage.rfid_manage.service.dao.BmVehicleRfid; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)数据持久层 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +public interface BmVehicleRfidMapper extends BaseMapper { + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/xml/BmVehicleRfidMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/xml/BmVehicleRfidMapper.xml new file mode 100644 index 00000000..ea7c43cd --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dao/mapper/xml/BmVehicleRfidMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidDto.java new file mode 100644 index 00000000..82f3b4c4 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidDto.java @@ -0,0 +1,81 @@ +package org.nl.wms.base_manage.rfid_manage.service.dto; +import java.io.Serializable; +import lombok.*; +import lombok.Data; +import lombok.Builder; + + + + + /** + * {@code @Description:} 计量单位表(BmVehicleRfid)数据传输类 + * {@code @Author:} gbx + * @since 2025-06-09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BmVehicleRfidDto implements Serializable +{ + + private static final long serialVersionUID = -7739291296662381396L; + + + /** + * 设备id + */ + private String id; + /** + * ip + */ + private String ip; + /** + * 端口 + */ + private String port; + /** + * 设备编号 + */ + private String device_code; + /** + * rfid号码 + */ + private String rfid; + /** + * 开始连接时间 + */ + private String start_time; + /** + * 创建人 + */ + private String create_id; + /** + * 创建人姓名 + */ + private String create_name; + /** + * 创建时间 + */ + private String create_time; + /** + * 修改人 + */ + private String update_id; + /** + * 修改人姓名 + */ + private String update_name; + /** + * 修改时间 + */ + private String update_time; + /** + * 是否启用 + */ + private Integer is_used; + +} + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidParam.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidParam.java new file mode 100644 index 00000000..d4224cae --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/BmVehicleRfidParam.java @@ -0,0 +1,74 @@ +package org.nl.wms.base_manage.rfid_manage.service.dto; + +import lombok.*; +import org.nl.common.domain.entity.BaseQuery; +import org.nl.wms.base_manage.rfid_manage.service.dao.BmVehicleRfid; + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)查询参数类 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +@Data +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class BmVehicleRfidParam extends BaseQuery { + /** + * 设备id + */ + private String id; + /** + * ip + */ + private String ip; + /** + * 端口 + */ + private String port; + /** + * 设备编号 + */ + private String device_code; + /** + * rfid号码 + */ + private String rfid; + /** + * 开始连接时间 + */ + private String start_time; + /** + * 创建人 + */ + private String create_id; + /** + * 创建人姓名 + */ + private String create_name; + /** + * 创建时间 + */ + private String create_time; + /** + * 修改人 + */ + private String update_id; + /** + * 修改人姓名 + */ + private String update_name; + /** + * 修改时间 + */ + private String update_time; + + /** + * 开启或关闭 + */ + private String isOpen; + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/EpcRecord.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/EpcRecord.java new file mode 100644 index 00000000..2be0d26a --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/dto/EpcRecord.java @@ -0,0 +1,15 @@ +package org.nl.wms.base_manage.rfid_manage.service.dto; + +/** + * @author gbx + * @since 2025-06-09 + */ +public class EpcRecord { + public String epc; + public long timestamp; + + public EpcRecord(String epc, long timestamp) { + this.epc = epc; + this.timestamp = timestamp; + } +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java new file mode 100644 index 00000000..1e8711f4 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/rfid_manage/service/impl/BmVehicleRfidServiceImpl.java @@ -0,0 +1,523 @@ +package org.nl.wms.base_manage.rfid_manage.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gg.reader.api.dal.GClient; +import com.gg.reader.api.dal.HandlerTagEpcLog; +import com.gg.reader.api.dal.HandlerTcpDisconnected; +import com.gg.reader.api.protocol.gx.*; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.domain.entity.PageQuery; +import org.nl.common.utils.StructUtil; +import org.nl.wms.base_manage.rfid_manage.service.IbmVehicleRfidService; +import org.nl.wms.base_manage.rfid_manage.service.dao.BmVehicleRfid; +import org.nl.wms.base_manage.rfid_manage.service.dao.mapper.BmVehicleRfidMapper; +import org.nl.wms.base_manage.rfid_manage.service.dto.BmVehicleRfidParam; +import org.nl.wms.base_manage.rfid_manage.service.dto.EpcRecord; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + + +/** + * {@code @Description:} 计量单位表(BmVehicleRfid)服务实现层 + * {@code @Author:} gbx + * + * @since 2025-06-09 + */ +@Service("bmVehicleRfidService") +public class BmVehicleRfidServiceImpl extends ServiceImpl implements IbmVehicleRfidService { + + + @Resource + private BmVehicleRfidMapper bmVehicleRfidMapper; + // EPC 缓存:设备ID -> 天线号 -> EPC记录对象(包含EPC值 + 时间戳) + + private static final ConcurrentHashMap> epcCache = new ConcurrentHashMap<>(); + + //rfid读写器列表 + private static final ConcurrentHashMap clientMap = new ConcurrentHashMap<>(); + + // 缓存过期时间,单位:毫秒(例如5分钟) + private static final long EXPIRE_MILLIS = 5 * 60 * 1000; + + + @Override + public void connectRfid(BmVehicleRfidParam params) { + //reconnectAllDisconnectedClients(); + List clientList = this.list(new QueryWrapper().eq("is_used", '1')); + for (BmVehicleRfid r : clientList) { + String deviceId = r.getId(); + GClient client = clientMap.get(deviceId); + String port = StringUtils.isNotBlank(params.getPort()) ? params.getPort() : r.getPort(); + String ip = r.getIp() + ":" + port; + // 打开连接命令 "1" 为开启所有设备连接,"0" 为关闭所有设备连接 + if ("1".equals(params.getIsOpen())) { + // 如果客户端连接对象不存在或未打开,创建新连接 + if (client == null) { + client = new GClient(); + if (client.openTcp(ip, 2000)) { + addClient(deviceId, client); + client.setSendHeartBeat(true); + stopEpc(deviceId); + // 发送扫码启动命令 + MsgBaseInventoryEpc msgBaseInventoryEpc = new MsgBaseInventoryEpc(); + msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1); // 默认1号天线 + msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory); + client.sendSynMsg(msgBaseInventoryEpc); + if (msgBaseInventoryEpc.getRtCode() == 0x00) { + System.out.println("设备[" + ip + "] 开始扫码任务成功"); + } else { + System.err.println("设备[" + ip + "] 扫码配置失败: " + msgBaseInventoryEpc.getRtMsg()); + } + //写入数据 +// MsgBaseWriteEpc msg = new MsgBaseWriteEpc(); +// msg.setAntennaEnable(EnumG.AntennaNo_1); +// //字起始地址 第0个为CRC,不可写 +// msg.setStart(1);//word +// //写EPC,数据默认为 hex 432 +// msg.setArea(EnumG.WriteArea_Epc); +// String sWriteHexData = "888"; // 写入数据 (16进制) +// System.out.println("Write hex " + sWriteHexData); +// int iWordLen = StructUtil.getValueLen(sWriteHexData); +// // PC值为EPC区域的长度标识(前5个bit标记长度),参考文档说明 +// sWriteHexData = StructUtil.getPc(iWordLen) + StructUtil.padLeft(sWriteHexData.toUpperCase(), 4 * iWordLen, '0'); // PC值+数据内容 +// msg.setHexWriteData(sWriteHexData); +// // 若需要写入带特殊编码数据,请自行进行编码并使用 "BwriteData" 属性。 +// // msg.setBwriteData(HexUtils.hexString2Bytes(sWriteHexData)); +// client.sendSynMsg(msg); +// if (0 == msg.getRtCode()) { +// System.out.println("写入:" + sWriteHexData + "成功!"); +// } else { +// System.out.println("写入:" + sWriteHexData + "失败!"); +// } + + // 订阅标签事件 + subscribeHandler(client, deviceId); + MsgAppGetBaseVersion msgAppGetBaseVersion = new MsgAppGetBaseVersion(); + //获取版本号 + client.sendSynMsg(msgAppGetBaseVersion); + if (0x00 == msgAppGetBaseVersion.getRtCode()) { + System.out.println("msgAppGetBaseVersion[OK]."); + } else { + System.out.println(msgAppGetBaseVersion.getRtMsg()); + } + //获取设备信息 + MsgAppGetReaderInfo msgAppGetReaderInfo = new MsgAppGetReaderInfo(); + client.sendSynMsg(msgAppGetReaderInfo); + if (0x00 == msgAppGetReaderInfo.getRtCode()) { + System.out.println("msgAppGetReaderInfo[OK]."); + } else { + System.out.println(msgAppGetReaderInfo.getRtMsg()); + } + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setStart_time(DateUtil.now()); + updated.setStatus(1); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "连接服务器成功!"); + this.updateById(updated); + } else { + System.err.println("设备[" + ip + "] TCP连接失败"); + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(null); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "连接服务器失败!"); + updated.setStatus(0); + this.updateById(updated); + continue; + } + } + // 检查连接有效性(通过版本获取判断) + if (!checkConnection(client)) { + System.err.println("设备[" + ip + "] 连接无效,关闭重试"); + removeClient(deviceId); + } + } else if ("0".equals(params.getIsOpen())) { + // 关闭连接 + if (client != null) { + // MsgBaseStop stopMsg = new MsgBaseStop(); + // client.sendSynMsg(stopMsg); + // if (stopMsg.getRtCode() == 0x00) { + // System.out.println("设备[" + ip + "] 停止扫码任务成功"); + // } else { + // System.err.println("设备[" + ip + "] 停止扫码失败: " + stopMsg.getRtMsg()); + // } + // client.close(); + // removeClient(deviceId); + disconnectAllClients(); + System.out.println("设备[" + ip + "] 已断开连接"); + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(null); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "已与服务器断开连接!"); + updated.setStart_time(null); + updated.setStatus(0); + this.updateById(updated); + } else { + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "未连接,无需断开"); + updated.setStart_time(null); + updated.setStatus(0); + this.updateById(updated); + System.out.println("设备[" + ip + "] 未连接,无需断开"); + } + } + } + } + + @Override + public void writeEpc(String id) { + GClient client = getClient("1"); + if (client != null) { + MsgBaseWriteEpc msg = new MsgBaseWriteEpc(); + stopEpc(id); + msg.setAntennaEnable(EnumG.AntennaNo_1); + //字起始地址 第0个为CRC,不可写 + msg.setStart(1);//word + //写EPC,数据默认为 hex 432 + msg.setArea(EnumG.WriteArea_Epc); + String sWriteHexData = "666"; // 写入数据 (16进制) + System.out.println("Write hex " + sWriteHexData); + int iWordLen = StructUtil.getValueLen(sWriteHexData); + // PC值为EPC区域的长度标识(前5个bit标记长度),参考文档说明 + sWriteHexData = StructUtil.getPc(iWordLen) + StructUtil.padLeft(sWriteHexData.toUpperCase(), 4 * iWordLen, '0'); // PC值+数据内容 + msg.setHexWriteData(sWriteHexData); + // 若需要写入带特殊编码数据,请自行进行编码并使用 "BwriteData" 属性。 + // msg.setBwriteData(HexUtils.hexString2Bytes(sWriteHexData)); + client.sendSynMsg(msg); + if (0 == msg.getRtCode()) { + System.out.println("写入:" + sWriteHexData + "成功!"); + } else { + System.out.println("写入:" + sWriteHexData + "失败!"); + } + } + } + + public void stopEpc(String id) { + GClient client = getClient("1"); + if (client != null) { + MsgBaseStop msgBaseStop = new MsgBaseStop(); + client.sendSynMsg(msgBaseStop); + if (0 == msgBaseStop.getRtCode()) { + System.out.println("停止成功!"); + } else { + System.out.println("停止失败!"); + } + } + } + + /** + * 判断设备是否已连接(通过获取版本信息判断) + */ + private boolean checkConnection(GClient client) { + try { + MsgAppGetBaseVersion versionMsg = new MsgAppGetBaseVersion(); + client.sendSynMsg(versionMsg); + return versionMsg.getRtCode() == 0x00; + } catch (Exception e) { + return false; + } + } + + /** + * 定时器执行断线重连 + */ + public void reconnectAllDisconnectedClients() { + List clientList = this.list(new QueryWrapper().eq("is_used", '1')); + for (BmVehicleRfid r : clientList) { + String ip = r.getIp() + ":" + r.getPort(); + System.out.println("设备[" + ip + "] 连接异常,开始重连..."); + if (tryReconnect(r.getId(), ip)) { + System.out.println("设备[" + ip + "] 重连成功"); + } else { + System.err.println("设备[" + ip + "] 重连失败"); + } + } + } + + public boolean tryReconnect(String deviceId, String ip) { + final int MAX_RETRY = 3; + final int WAIT_MS = 500; + for (int i = 1; i <= MAX_RETRY; i++) { + System.out.println("设备[" + ip + "] 第" + i + "次重连尝试..."); + GClient oldClient = clientMap.remove(deviceId); + if (oldClient != null) { + try { + oldClient.close(); + } catch (Exception ignored) { + } + } + GClient newClient = new GClient(); + if (newClient.openTcp(ip, 2000)) { + addClient(deviceId, newClient); + subscribeHandler(newClient, deviceId); + newClient.setSendHeartBeat(true); + if (checkConnection(newClient)) { + System.out.println("设备[" + ip + "] 重连成功"); + return true; + } else { + try { + newClient.close(); + } catch (Exception ignored) { + } + } + } + try { + Thread.sleep(WAIT_MS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return false; + } + } + return false; + } + + + public static GClient getClient(String deviceId) { + return clientMap.get(deviceId); + } + + public static void disconnectAllClients() { + for (String deviceId : clientMap.keySet()) { + removeClient(deviceId); + } + } + + + public static void addClient(String deviceId, GClient client) { + clientMap.put(deviceId, client); + } + + + public static void removeClient(String deviceId) { + GClient client = clientMap.remove(deviceId); + if (client != null) { + client.close(); + // try { + // MsgBaseStop stopMsg = new MsgBaseStop(); + // client.sendSynMsg(stopMsg); + // if (stopMsg.getRtCode() == 0x00) { + // System.out.println("停止扫码任务成功: " + deviceId); + // } else { + // System.err.println("停止扫码失败: " + stopMsg.getRtMsg()); + // } + // } catch (Exception e) { + // System.err.println("停止扫码任务异常: " + e.getMessage()); + // } finally { + // client.close(); + // System.out.println("已断开设备连接: " + deviceId); + // } + } + } + + + /** + * 上报RFID信息 + */ + private void subscribeHandler(GClient client, String id) { + //上报标签信息 + client.onTagEpcLog = new HandlerTagEpcLog() { + @Override + public void log(String s, LogBaseEpcInfo logBaseEpcInfo) { + if (logBaseEpcInfo != null && logBaseEpcInfo.getResult() == 0) { + String epc = logBaseEpcInfo.getEpc(); + handleEpc(epc, id, "1"); + } + } + }; + //断开连接通知 + client.onDisconnected = new HandlerTcpDisconnected() { + @Override + public void log(String s) { + System.out.println("command log output5:onDisconnected:" + "connect" + s + "close.........."); + client.close();//释放当前连接资源 + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(id); + updated.setRfid(null); + // updated.setLog(DateUtil.now() + ":设备:" + r.getDevice_code() + "已与服务器断开连接!"); + updated.setStart_time(null); + updated.setStatus(0); + //todo 更新断开状态 + // this.updateById(updated); + } + }; + + } + + /** + * 主处理方法:如果 EPC 不同或过期,则更新数据库 + */ + private void handleEpc(String epc, String deviceId, String antenna) { + if (epc == null) { + return; + } + ConcurrentHashMap antennaMap = epcCache.get(deviceId); + EpcRecord record = antennaMap != null ? antennaMap.get(antenna) : null; + boolean isSame = record != null && epc.equals(record.epc) + && System.currentTimeMillis() - record.timestamp < EXPIRE_MILLIS; + + if (isSame) { + System.out.println(epc + "与上次标签值相同,不上报,跳过...."); + return; // EPC 相同且未过期,跳过 + } + epcCache.computeIfAbsent(deviceId, k -> new ConcurrentHashMap<>()) + .put(antenna, new EpcRecord(epc, System.currentTimeMillis())); + BmVehicleRfid currentDevice = this.getById(deviceId); + if (currentDevice != null && !epc.equals(currentDevice.getRfid())) { + BmVehicleRfid updated = new BmVehicleRfid(); + updated.setId(deviceId); + updated.setRfid(epc); + updated.setLog(DateUtil.now() + ":设备:" + currentDevice.getDevice_code() + "读取RFID值:" + epc + "成功!"); + this.updateById(updated); + System.out.println("读取RFID值:" + epc + "成功!"); + } + } + + + /** + * 定期清理过期 EPC 缓存(建议由定时任务调用) + */ + private void clearExpiredCache() { + long now = System.currentTimeMillis(); + for (Map.Entry> deviceEntry : epcCache.entrySet()) { + ConcurrentHashMap antennaMap = deviceEntry.getValue(); + for (Map.Entry antennaEntry : antennaMap.entrySet()) { + if (now - antennaEntry.getValue().timestamp >= EXPIRE_MILLIS) { + antennaMap.remove(antennaEntry.getKey()); + } + } + if (antennaMap.isEmpty()) { + epcCache.remove(deviceEntry.getKey()); + } + } + } + + + /** + * 查询数据分页 + * + * @param whereJson 查询条件 + * @param page 分页参数 + */ + @Override + public IPage query(Map whereJson, PageQuery page) { + IPage resultPage = new Page<>(page.getPage(), page.getSize()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + IPage list = bmVehicleRfidMapper.selectPage(resultPage, queryWrapper); + list.getRecords().forEach(r -> { + if (r.getStart_time() != null) { + LocalDateTime createTime = LocalDateTime.parse(r.getStart_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime updateTime = DateTime.now().toLocalDateTime(); + // 计算时间间隔 + Duration duration = Duration.between(createTime, updateTime); + if (duration.toMinutes() > 0) { + r.setOnline_time(duration.toMinutes() + "分钟"); + } else { + r.setOnline_time(duration.getSeconds() + "秒钟"); + } + } + }); + return list; + } + + + /** + * 根据条件查询 + * + * @param params 查询条件 + */ + @Override + public List selectList(BmVehicleRfidParam params) { + return bmVehicleRfidMapper.selectList(new QueryWrapper() + .lambda() + //.eq(ObjectUtil.isNotEmpty(params), BmVehicleRfid::getId, params.getFuzzy()) + //.or() + //.eq(ObjectUtil.isNotEmpty(params), BmVehicleRfid::getDjid, params.getFuzzy()) + ); + } + + + /** + * 创建 + * + * @param params 对象实体 + */ + @Override + public void create(BmVehicleRfidParam params) { + bmVehicleRfidMapper.insert(getBasicInfo(params, true)); + } + + + /** + * 编辑 + * + * @param params 对象实体 + */ + @Override + public void update(BmVehicleRfidParam params) { + // BmVehicleRfid dto = bmVehicleRfidMapper.selectById(params.getId()); + // if (dto == null) { + // throw new BadRequestException("不存在该数据!"); + // } + bmVehicleRfidMapper.updateById(getBasicInfo(params, false)); + } + + + /** + * 多选删除 + * + * @param ids 多个Id主键 + */ + @Override + public void deleteAll(Set ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("is_delete", "1") + //.set("update_optid", SecurityUtils.getCurrentUserId()) + //.set("update_optname", SecurityUtils.getCurrentNickName()) + //.set("update_time", DateUtil.now()) + .in("id", ids); + bmVehicleRfidMapper.update(null, updateWrapper); + //bmVehicleRfidMapper.deleteBatchIds(ids); + } + + + /** + * 获取实体基础信息 + * + * @param params 对象实体 + * @param isCreate 是否创建 + */ + private BmVehicleRfid getBasicInfo(BmVehicleRfidParam params, boolean isCreate) { + // if (isCreate) { + // params.setId(IdUtil.getStringId()); + // params.setCreate_id(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setCreate_name(SecurityUtils.getCurrentNickName()); + // params.setCreate_time(DateUtil.now()); + // params.setIs_delete(IOSEnum.IS_NOTANDYES.code("否")); + // } + // params.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + // params.setUpdate_optname(SecurityUtils.getCurrentNickName()); + // params.setUpdate_time(DateUtil.now()); + BmVehicleRfid bmVehicleRfid = new BmVehicleRfid(); + BeanUtils.copyProperties(params, bmVehicleRfid); + return bmVehicleRfid; + } + + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java index de5e7209..408fe90c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/chainer/impl/EndDecisionChainer.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.javaparser.utils.Log; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SpringContextHolder; @@ -57,41 +58,30 @@ public class EndDecisionChainer extends DecisionerChain { List structs = new ArrayList<>(); //入库分配 if (in_storage) { - StIvtStructattr structattr = (StIvtStructattr) transfers.get(0); - //清除异常锁 - // if ("FStockId".equals(startParam.getString("stor_code"))) { - // QueryWrapper query = new QueryWrapper() - // .eq("is_used", true) - // .eq("vehicle_code", startParam.getString("vehicle_code")) - // .eq("stor_code", startParam.getString("stor_code")) - // .eq("sect_code", "LXBCP01"); - // StIvtStructattr list = iStIvtStructattrService.getOne(query); - // if (list != null) { - // log.error("发现异常,入满阻挡未更新旧目标库位的载具号:" + startParam.getString("vehicle_code")); - // iStIvtStructattrService.update(new UpdateWrapper() - // .set("vehicle_code", null) - // .set("lock_type", StatusEnum.LOCK.code("无锁")) - // .set("update_time", DateUtil.now()) - // .set("update_name", SecurityUtils.getCurrentNickName()) - // .eq("vehicle_code", startParam.getString("vehicle_code"))); - // - // } - // } - UpdateWrapper updateWrapper = new UpdateWrapper() - .set("vehicle_code", startParam.getString("vehicle_code")) - .set("lock_type", StatusEnum.LOCK.code("入库锁")) + StIvtStructattr struct = (StIvtStructattr) transfers.get(0); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("lock_type", StatusEnum.LOCK.code("入库锁")) .set("update_time", DateUtil.now()) .set("update_name", SecurityUtils.getCurrentNickName()) - .eq("struct_code", structattr.getStruct_code()); + .eq("struct_code", struct.getStruct_code()); Boolean isMove = startParam.getBoolean("is_move"); - //移库任务不能绑定终点托盘不然报错 + //异常任务无需锁定二次分配库位的载具号,任务完成会更新载具号 + String taskType = startParam.getString("taskType"); + if (StringUtils.isNotEmpty(taskType)) { + if (!taskType.equals(StatusEnum.IOBILL_TYPE_MOVE.code("移库"))) { + updateWrapper.set("vehicle_code", startParam.getString("vehicle_code")); + } + } else { + updateWrapper.set("vehicle_code", startParam.getString("vehicle_code")); + } + //异常位移库任务不能绑定终点载具,不然载具号唯一 if (isMove != null && isMove) { updateWrapper.set("vehicle_code", null) .set("lock_type", StatusEnum.LOCK.code("移库锁")); } iStIvtStructattrService.update(updateWrapper); - System.out.println("货位绑定成功" + structattr.getStruct_code() + "_" + startParam.getString("vehicle_code")); - structs.add(structattr.getStruct_code()); + System.out.println("货位绑定成功" + struct.getStruct_code() + "_" + startParam.getString("vehicle_code")); + structs.add(struct.getStruct_code()); } else { List vechielDtos = transfers; for (StructattrVechielDto vechielDto : vechielDtos) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java index 5da49f84..ec01d43c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/AlleyAveRuleHandler.java @@ -94,7 +94,8 @@ public class AlleyAveRuleHandler extends Decisioner log.info("均衡策略结果:载具号:" + param.getString("vehicle_code") + "分配结果: " + subList.stream().map(StIvtStructattr::getStruct_code).collect(Collectors.toList())); log.info("均衡策略:载具号:" + param.getString("vehicle_code") + "获取仓位耗时:{}", System.currentTimeMillis() - startTime1); if (subList.size() == 0) { - throw new BadRequestException("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略无可用货位"); + log.error("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略货位数量为0"); + throw new BadRequestException("均衡策略结果:载具号:" + param.getString("vehicle_code") + "当前分配策略货位数量为0"); } return subList; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java index ab3e0127..926cc070 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/base/LimitStorageRuleHandler.java @@ -45,7 +45,6 @@ public class LimitStorageRuleHandler extends Decisioner handler(List list, JSONObject param) { - long startTime1 = System.currentTimeMillis(); // 判断仓位是否为空 // 判断策略类型 @@ -58,18 +57,22 @@ public class LimitStorageRuleHandler extends Decisioner struct.getCol_num() > 2).collect(Collectors.toList()); if ("1109".equals(start_point)) { - list = list.stream().filter(struct -> struct.getCol_num() > 2).collect(Collectors.toList()); log.info("限位策略:起点为1109,载具号:" + vehicleCode + "排除小于3排的仓位成功!"); } - } else if (StringUtils.isBlank(start_point) || StringUtils.isNotBlank(errorTask)) { - list = list.stream().filter(struct -> struct.getCol_num() > 2).collect(Collectors.toList()); - log.info("限位策略:起点为1109,载具号:" + vehicleCode + "排除小于3排的仓位成功!"); + if (StringUtils.isNotBlank(errorTask)) { + log.info("限位策略:任务类型为入满或出阻挡任务,载具号:" + vehicleCode + "排除小于3排的仓位成功!"); + } } List result = inHandler(list, vehileInfo); + if (CollectionUtils.isEmpty(result)) { + log.error("限位策略:载具号:" + vehicleCode + "获取仓位失败,该高度等级对应库位数量为0!"); + throw new BadRequestException("限位策略:载具号:" + vehicleCode + "获取仓位失败,该高度等级对应库位数量为0!"); + } log.info("限位策略:起点为" + start_point + ",载具号:" + vehicleCode + "执行策略后仓位位数为:" + result.size() + ",第一个仓位为:" + result.get(0).getStruct_code()); - log.info("限位策略:载具号:"+vehicleCode+"获取仓位耗时:{}", System.currentTimeMillis() - startTime1); + log.info("限位策略:载具号:" + vehicleCode + "获取仓位耗时:{}", System.currentTimeMillis() - startTime1); return result; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java index f2679ea8..aa00e379 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SpringContextHolder; import org.nl.wms.decision_manage.handler.decisioner.Decisioner; @@ -120,6 +121,10 @@ public class DepthPriorityHandler extends Decisioner query(SchBasePointQuery whereJson, PageQuery page) { return new ResponseEntity<>(TableDataInfo.build(pointService.queryAll(whereJson, page)), HttpStatus.OK); @@ -128,9 +137,33 @@ public class SchBasePointController { if (param == null || StringUtils.isEmpty(param.getString("site_code")) || StringUtils.isEmpty(param.getString("shelf_code")) || StringUtils.isEmpty(param.getString("mode"))) { throw new BadRequestException("请求参数不能为空"); } - pointService.bindOrUnbind(param.getString("site_code"),param.getString("shelf_code"), param.getString("mode")); + pointService.bindOrUnbind(param.getString("site_code"), param.getString("shelf_code"), param.getString("mode")); return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } + @PostMapping("/unbind") + @Log("解绑点位") + @SaIgnore + public ResponseEntity unbind(@RequestBody JSONObject param) { + if (param == null || StringUtils.isEmpty(param.getString("site_code")) || StringUtils.isEmpty(param.getString("shelf_code"))) { + throw new BadRequestException("请求参数不能为空"); + } + String siteCode = param.getString("site_code"); + SchBasePoint sitePoint = pointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getCode, siteCode).eq(SchBasePoint::getIs_used, true).eq(SchBasePoint::getRegion_code, StatusEnum.REGION_INFO.code("二楼CTU货架对接位"))); + if (sitePoint == null) { + throw new BadRequestException("输入的站点不是CTU线边站点或被禁用,请检查!"); + } + String shelfCode = param.getString("shelf_code"); + StIvtSectattr shelfPoint = iStIvtSectattrService.getOne(new LambdaQueryWrapper().eq(StIvtSectattr::getSect_code, shelfCode).eq(StIvtSectattr::getIs_used, true)); + if (shelfPoint == null) { + throw new BadRequestException("输入的货架信息有误或被禁用,请检查!"); + } + TableDataInfo tableDataInfo = wmsToAcsService.bindPodAndBerth(shelfCode, siteCode, "0", "bindPodAndBerth"); + if ("200".equals(tableDataInfo.getCode())) { + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); + } else { + throw new BadRequestException("指令下发CTU,返回解绑失败,失败原因:" + tableDataInfo.getMsg()); + } + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java index b29c6ee3..af7da61e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/ISchBasePointService.java @@ -49,10 +49,11 @@ public interface ISchBasePointService extends IService { * @param pointType 0空载具1满载具 * @param pointCode 点位编码 * @param vehicleIsNull 载具是否为空 + * @param isFourPoint 是否判断4个任务点位 * @return List */ List checkEndPointTask(String regionCode, String getLockType, String sortType, String - pointType, String pointCode, String vehicleIsNull); + pointType, String pointCode, String vehicleIsNull, String groupCode,boolean isFourPoint); String sendErrorMsg(String type,String title,String msg); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java index 9be68ef9..df3fcec1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java @@ -26,6 +26,7 @@ import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.external_system.acs.service.WmsToAcsService; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.system_manage.service.notice.ISysNoticeService; +import org.nl.wms.system_manage.service.notice.dao.SysNotice; import org.nl.wms.system_manage.service.user.ISysUserService; import org.nl.wms.system_manage.service.user.dao.SysUser; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,7 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.time.LocalTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -77,7 +79,8 @@ public class SchBasePointServiceImpl extends ServiceImpl queryAll(SchBasePointQuery whereJson, PageQuery page) { - page.setSize(20); + page.setSize(30); + page.setSort("id"); IPage pages = new Page<>(page.getPage() + 1, page.getSize()); pages = this.baseMapper.selectPointPage(pages, whereJson); return pages; @@ -94,48 +97,43 @@ public class SchBasePointServiceImpl extends ServiceImpl pointList = this.list(new LambdaQueryWrapper().eq(SchBasePoint::getCode, siteCode).eq(SchBasePoint::getIs_used, true)); - if (ObjectUtils.isEmpty(pointList)) { + SchBasePoint sitePoint = this.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getCode, siteCode).eq(SchBasePoint::getIs_used, true)); + if (sitePoint == null) { throw new BadRequestException("输入的站点编号有误或被禁用,请检查!"); } - //检查是否为空架 - // List stIvtStructattrList = iStIvtStructattrService.list(new LambdaQueryWrapper() - // .eq(StIvtStructattr::getIs_used, true) - // .eq(StIvtStructattr::getSect_code, shelfCode)); - // List notEmptyList = stIvtStructattrList.stream().filter(r -> StringUtils.isNotBlank(r.getVehicle_code())).collect(Collectors.toList()); - // if (ObjectUtils.isNotEmpty(notEmptyList)) { - // throw new BadRequestException("该货架的货位:" + notEmptyList.get(0).getStruct_code() + ",存在未出库的料箱:" + notEmptyList.get(0).getVehicle_code() + ",请检查!"); - // } - List shelfCodePointList = this.list(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, shelfCode)); + if (!sitePoint.getLock_type().equals(StatusEnum.LOCK.code("无锁"))) { + List cxPointLists = this.checkEndPointTask( + null, + null, + StatusEnum.SORT_TYPE.code("升序"), null, sitePoint.getCode(), null, null, true); + if (ObjectUtils.isNotEmpty(cxPointLists)) { + throw new BadRequestException("该货架正在执行输送任务,任务号为:" + cxPointLists.get(0).getCode() + ",状态为锁定,请等任务完成再做绑定或解绑!"); + } + } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() .eq(SchBasePoint::getCode, siteCode); if ("1".equals(mode)) { - if (StringUtils.isNotBlank(pointList.get(0).getVehicle_code())) { - throw new BadRequestException("当前站点已绑定货架,货架编号:" + pointList.get(0).getVehicle_code() + ",请检查或解绑!"); + if (StringUtils.isNotBlank(sitePoint.getVehicle_code())) { + throw new BadRequestException("当前站点已绑定货架:" + sitePoint.getVehicle_code() + ",请先解绑:" + sitePoint.getVehicle_code()); } - if (ObjectUtils.isNotEmpty(shelfCodePointList)) { - if (!shelfCodePointList.get(0).getLock_type().equals(StatusEnum.LOCK.code("无锁"))) { - throw new BadRequestException("该货架正在执行输送任务,状态为锁定,请等任务完成再绑定!"); - } - //解锁货架,清空货架库存 - LambdaUpdateWrapper wrapper1 = new LambdaUpdateWrapper() - .eq(SchBasePoint::getVehicle_code, shelfCode) - .set(SchBasePoint::getVehicle_code, null) - .set(SchBasePoint::getPoint_type, 0) - .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); - this.update(wrapper1); + //校验是否在其他站点绑定 + SchBasePoint shelfPoint = this.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getVehicle_code, shelfCode)); + if (shelfPoint != null) { + throw new BadRequestException("当前货架已绑定在站点:" + sitePoint.getCode() + ",请先解绑。"); } wrapper.set(SchBasePoint::getVehicle_code, shelfCode) .set(SchBasePoint::getPoint_type, 0) .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); } else if ("0".equals(mode)) { - if (ObjectUtils.isNotEmpty(shelfCodePointList)) { - if (!shelfCodePointList.get(0).getLock_type().equals(StatusEnum.LOCK.code("无锁"))) { - throw new BadRequestException("该货架正在执行输送任务,状态为锁定,请等任务完成再解绑!"); - } - } wrapper.set(SchBasePoint::getVehicle_code, null) .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); + //解锁货架,清空货架库存 + LambdaUpdateWrapper wrapper1 = new LambdaUpdateWrapper() + .eq(SchBasePoint::getVehicle_code, shelfCode) + .set(SchBasePoint::getVehicle_code, null) + .set(SchBasePoint::getPoint_type, 0) + .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")); + this.update(wrapper1); } wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); @@ -157,7 +155,7 @@ public class SchBasePointServiceImpl extends ServiceImpl checkEndPointTask(String regionCode, String getLockType, String sortType, String - pointType, String pointCode, String vehicleIsNull) { + pointType, String pointCode, String vehicleIsNull, String groupCode, boolean isFourPoint) { Set pointSets; List taskList; List returList = new ArrayList<>(); @@ -174,6 +172,9 @@ public class SchBasePointServiceImpl extends ServiceImpl Stream.of( - task.getPoint_code1(), - task.getPoint_code2() - )) - .filter(point -> point != null && !point.trim().isEmpty()) - .collect(Collectors.toSet()); + if (isFourPoint) { + //点位任务 + taskList = iSchBaseTaskService.getTaskList(pointIds, pointIds, pointIds, pointIds); + pointSets = taskList.stream() + .flatMap(task -> Stream.of( + task.getPoint_code1(), + task.getPoint_code2(), + task.getPoint_code3(), + task.getPoint_code4() + )) + .filter(point -> point != null && !point.trim().isEmpty()) + .collect(Collectors.toSet()); + } else { + taskList = iSchBaseTaskService.getTaskList(pointIds, pointIds, null, null); + pointSets = taskList.stream() + .flatMap(task -> Stream.of( + task.getPoint_code1(), + task.getPoint_code2() + )) + .filter(point -> point != null && !point.trim().isEmpty()) + .collect(Collectors.toSet()); + + } //符合条件的库存点位过滤掉已存在任务的点位 return ivtList.stream() .filter(p -> !pointSets.contains(p.getCode()) && p.getLock_type().equals(getLockType)) @@ -214,20 +229,36 @@ public class SchBasePointServiceImpl extends ServiceImpl().eq(SysNotice::getNotice_title, title)); - // if (notice == null) { - // iSysNoticeService.createNotice(msg, title, type); - // return "二楼任务完成与扫码延迟问题,无需通知: " + msg; - // } - // } - title = "1".equals(type) ? "内部消息" : "客户消息"; + if (StringUtils.isBlank(title)) { + title = "1".equals(type) ? "内部消息" : "客户消息"; + } else { + SysNotice notice = iSysNoticeService.getOne(new LambdaQueryWrapper().eq(SysNotice::getNotice_title, title)); + if (notice == null) { + iSysNoticeService.createNotice(msg, title, type); + return "二楼任务完成与扫码延迟问题,无需通知: " + msg; + } + } try { JSONObject text = new JSONObject(); List userList = userService.list(new QueryWrapper().eq("extperson_id", 1)); if (ObjectUtils.isNotEmpty(userList)) { + if (StringUtils.isNotBlank(userList.get(0).getAvatar_path())) { + //查询当前时间是否在晚上18点到凌晨7点之间 + LocalTime now = LocalTime.now(); + LocalTime nightStart = LocalTime.of(20, 0); // 晚上18:00 + LocalTime morningEnd = LocalTime.of(7, 0); // 次日早上7:00 + boolean isNight; + if (nightStart.isBefore(morningEnd)) { + // 正常时间段(不会跨天) + isNight = now.isAfter(nightStart) && now.isBefore(morningEnd); + } else { + // 跨天时间段,例如 18:00 到第二天 07:00 + isNight = now.isAfter(nightStart) || now.isBefore(morningEnd); + } + if (isNight) { + return "夜晚时间,无需通知: " + msg; + } + } List userIds = userList.stream().map(SysUser::getExtuser_id).collect(Collectors.toList()); JSONArray mentionedArray = new JSONArray(); mentionedArray.addAll(userIds); @@ -252,8 +283,6 @@ public class SchBasePointServiceImpl extends ServiceImpl() - .set(MdPbVehicleMater::getTask_code,task.getTask_code()) - .eq(MdPbVehicleMater::getVehicle_code,task.getVehicle_code()) - .eq(MdPbVehicleMater::getIs_delete,false)); + .set(MdPbVehicleMater::getTask_code, task.getTask_code()) + .set(MdPbVehicleMater::getIs_check, null) + .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) + .eq(MdPbVehicleMater::getIs_delete, false)); return (JSONObject) JSON.toJSON(task); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java index ef5f24fd..b33cef36 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java @@ -55,13 +55,11 @@ public class MoveStorageTask extends AbstractTask { JSONObject form_data = from.getJSONObject("form_data"); String start_struct_code = form_data.getString("start_struct_code"); String end_struct_code = form_data.getString("end_struct_code"); - List list = taskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); if (!CollectionUtils.isEmpty(list)){ throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); } - StIvtStructattr target = iStIvtStructattrService.getOne(new QueryWrapper().eq("struct_code", end_struct_code)); if (StringUtils.isNotEmpty(target.getVehicle_code())){ throw new BadRequestException("目标货位存在载具:"+target.getVehicle_code()); @@ -74,6 +72,7 @@ public class MoveStorageTask extends AbstractTask { log.info("载具号{}移库任务创建成功,库位{}{}已更新移库锁。",vehicle_code,start_struct_code,end_struct_code); SchBaseTask task = new SchBaseTask(); task.setId(IdUtil.getStringId()); + task.setPriority(StatusEnum.PRIORITY_TYPE.code("移库")); task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); task.setStatus(StatusEnum.FORM_STATUS.code("生成")); task.setHandle_class(this.getClass().getName()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java index eab92ff8..2fe618dd 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/OutStorageTask.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -48,15 +49,36 @@ public class OutStorageTask extends AbstractTask { private IStIvtStructattrService iStIvtStructattrService; @Autowired private IMdPbVehicleMaterService iMdPbVehicleMaterService; - + @Autowired + private ISchBaseTaskService iSchBaseTaskService; @Override @Transactional @SneakyThrows public JSONObject createTask(JSONObject from) { String priority = from.getString("priority"); + String isCheck = from.getString("isCheck"); String vehicle_code = from.getString("vehicle_code"); String target_point = from.getString("target_point"); + List taskList = iSchBaseTaskService.list(new QueryWrapper().eq("vehicle_code", vehicle_code) + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (!CollectionUtils.isEmpty(taskList)) { + throw new BadRequestException("当前载具存在任务:" + taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + } + // List list = taskService.list(new QueryWrapper() + // .eq("vehicle_code", vehicle_code) + // .ne("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库")) + // .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + // if (!CollectionUtils.isEmpty(list)) { + // if (!from.getString("task_type").equals(StatusEnum.IOBILL_TYPE_MOVE.code("移库"))) { + // //一个托盘绑定多个物料,物料编码相同批号不同,防止生成相同起点终点相同的任务 + // if (list.get(0).getPoint_code2().equals(target_point) && list.get(0).getVehicle_code().contains("T")) { + // return (JSONObject) JSON.toJSON(list.get(0)); + // } + // } else { + // throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); + // } + // } //通过全局变量获取目标位置 String product_area = from.getString("product_area"); if (StringUtils.isEmpty(product_area)) { @@ -75,24 +97,10 @@ public class OutStorageTask extends AbstractTask { if (StringUtils.isEmpty(configTarget)) { throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常"); } - target_point = configTarget; - } - if (StringUtils.isEmpty(vehicle_code) || StringUtils.isEmpty(target_point)) { - throw new BadRequestException("创建任务失败:方法请求参数不能为空"); - } - List list = taskService.list(new QueryWrapper() - .eq("vehicle_code", vehicle_code) - .ne("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库")) - .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (!CollectionUtils.isEmpty(list)) { - if (!from.getString("task_type").equals(StatusEnum.IOBILL_TYPE_MOVE.code("移库"))) { - //一个托盘绑定多个物料,物料编码相同批号不同,防止生成相同起点终点相同的任务 - if (list.get(0).getPoint_code2().equals(target_point) && list.get(0).getVehicle_code().contains("T")) { - return (JSONObject) JSON.toJSON(list.get(0)); - } - } else { - throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); - } + target_point = target_point.contains("B") ? target_point : configTarget; + } + if (StringUtils.isEmpty(vehicle_code) || StringUtils.isEmpty(target_point)) { + throw new BadRequestException("创建任务失败:方法请求参数不能为空"); } StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper().eq("vehicle_code", vehicle_code)); log.info("OutStorgeTask出入分配货位信息:{}", struct.toString()); @@ -107,24 +115,40 @@ public class OutStorageTask extends AbstractTask { task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); task.setStatus(StatusEnum.FORM_STATUS.code("生成")); task.setHandle_class(this.getClass().getName()); - task.setProduct_area(end_struct_code.contains("B") ? "A3" : "A1"); - task.setAcs_type(end_struct_code.contains("B") ? StatusEnum.ACS_TYPE.code("三楼CTU") : StatusEnum.ACS_TYPE.code("立库")); - task.setPriority("1".equals(priority)?StatusEnum.PRIORITY_TYPE.code("加急"):StatusEnum.PRIORITY_TYPE.code("普通")); + task.setAcs_type(StatusEnum.ACS_TYPE.code("立库")); + task.setPriority("1".equals(priority) ? StatusEnum.PRIORITY_TYPE.code("加急") : StatusEnum.PRIORITY_TYPE.code("普通")); task.setCreate_time(DateUtil.now()); task.setCreate_name(SecurityUtils.getCurrentNickName()); - task.setTask_type(from.getString("task_type")); task.setVehicle_code(vehicle_code); task.setPoint_code1(end_struct_code); task.setPoint_code2(target_point); + task.setTask_type(from.getString("task_type")); iMdPbVehicleMaterService.getVehicleMaters(task, false); - if (end_struct_code.contains("B")) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper(); + if (StringUtils.isNotBlank(isCheck)) { + if ("1".equals(isCheck)) { + task.setTask_type(StatusEnum.IOBILL_TYPE_OUT.code("盘点出库")); + updateWrapper.set(MdPbVehicleMater::getIs_check, "1"); + } + } + updateWrapper.set(MdPbVehicleMater::getTask_code, task.getTask_code()) + .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) + .eq(MdPbVehicleMater::getIs_delete, false); + iMdPbVehicleMaterService.update(updateWrapper); + //三楼呆料转运任务 + if (target_point.contains("B")) { + task.setProduct_area("A3"); + task.setTask_type(StatusEnum.IOBILL_TYPE_MOVE.code("移库")); task.setPriority(StatusEnum.PRIORITY_TYPE.code("最低")); + task.setHandle_class(moveStorageTask.getClass().getName()); + task.setAcs_type(StatusEnum.ACS_TYPE.code("三楼CTU")); + iStIvtStructattrService.update(new UpdateWrapper() + .set("lock_type", StatusEnum.LOCK.code("移库锁")) + .set("update_time", DateUtil.now()) + .in("struct_code", end_struct_code, target_point)); + log.info("载具号{}转运三楼任务创建成功,库位{}{}已更新移库锁。", vehicle_code, end_struct_code, target_point); } taskService.save(task); - iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() - .set(MdPbVehicleMater::getTask_code, task.getTask_code()) - .eq(MdPbVehicleMater::getVehicle_code, task.getVehicle_code()) - .eq(MdPbVehicleMater::getIs_delete, false)); Boolean isSend = from.getBoolean("is_send"); if (isSend) { //参数封装,调acs接口 @@ -132,26 +156,26 @@ public class OutStorageTask extends AbstractTask { return (JSONObject) JSON.toJSON(task); } - @Transactional(propagation= Propagation.REQUIRES_NEW) - public String DoubleStor(StIvtStructattr struct) { - String blockPoint = StructUtil.getZdPoint(struct.getRow_num(),struct.getStruct_code()); + @Transactional(propagation = Propagation.REQUIRES_NEW) + public String DoubleStor(StIvtStructattr struct) { + String blockPoint = StructUtil.getZdPoint(struct.getRow_num(), struct.getStruct_code()); //浅货位 - log.info("1-----出库分配:{},当前货位:{}",blockPoint,struct.getStruct_code()); - if (blockPoint.equals(struct.getStruct_code())){ + log.info("1-----出库分配:{},当前货位:{}", blockPoint, struct.getStruct_code()); + if (blockPoint.equals(struct.getStruct_code())) { /** * 当前为浅位 * 1.判断浅位是否存在移库任务 * 2.存在则取移库任务终点作为出库起点 */ SchBaseTask moveTask = taskService.getOne(new QueryWrapper() - .eq("task_type",StatusEnum.IOBILL_TYPE_MOVE.code("移库")) - .eq("vehicle_code",struct.getVehicle_code()) + .eq("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库")) + .eq("vehicle_code", struct.getVehicle_code()) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (moveTask !=null){ - log.info("出库分配:浅位存在移库任务,任务信息:{}",moveTask.getTask_code()+"_"+moveTask.getVehicle_code()+"_"+moveTask.getPoint_code1()+"_"+moveTask.getPoint_code2()); + if (moveTask != null) { + log.info("出库分配:浅位存在移库任务,任务信息:{}", moveTask.getTask_code() + "_" + moveTask.getVehicle_code() + "_" + moveTask.getPoint_code1() + "_" + moveTask.getPoint_code2()); return moveTask.getPoint_code2(); } - }else { + } else { /** * 1.判断对应浅位是否存在托盘 * 2.如果有则判断是否存在出库任务 @@ -160,22 +184,22 @@ public class OutStorageTask extends AbstractTask { StIvtStructattr block = iStIvtStructattrService.getOne(new QueryWrapper() .eq("struct_code", blockPoint) .isNotNull("vehicle_code")); - log.info("-----出库分配:深位查询浅位是否有货:{}",block!=null); - if (block!=null){ + log.info("-----出库分配:深位查询浅位是否有货:{}", block != null); + if (block != null) { int count = taskService.count(new QueryWrapper() .eq("point_code1", block.getStor_code()) .lt("status", StatusEnum.FORM_STATUS.code("完成"))); - if (count == 0){ + if (count == 0) { AtomicReference moveStruct = new AtomicReference<>(); RedissonUtils.lock(() -> { System.out.println("---3--" + Thread.currentThread().getName()); - Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage","depthPriority","alleyAve"), new JSONObject(MapOf.of("is_move",true,"stor_code", block.getStor_code(),"vehicle_code",block.getVehicle_code()))); + Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve"), new JSONObject(MapOf.of("is_move", true, "stor_code", block.getStor_code(), "vehicle_code", block.getVehicle_code()))); moveStruct.set(((Map) process.get("form_data")).get("end_struct_code")); }, "1" + block.getStor_code(), 5); Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("移库") , "is_send", false , "vehicle_code", block.getVehicle_code(), "form_data", new JSONObject(MapOf.of("start_struct_code", block.getStruct_code(), "end_struct_code", moveStruct.get()))); - log.info("载具:{},出库分配:生成移库任务:{}",block.getVehicle_code(),moveForm); + log.info("载具:{},出库分配:生成移库任务:{}", block.getVehicle_code(), moveForm); moveStorageTask.createTask(new JSONObject(moveForm)); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java index e07c60be..ab8c55e4 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/PalletInStorageTask.java @@ -75,21 +75,22 @@ public class PalletInStorageTask extends AbstractTask { } BmVehicleInfo vehicleInfo = iBmVehicleInfoService.getOne(new QueryWrapper() .eq("vehicle_code", vehicle_code)); - if (vehicleInfo==null){ - throw new BadRequestException("申请任务失败:载具"+vehicle_code+"信息不存在"); + if (vehicleInfo == null) { + throw new BadRequestException("申请任务失败:载具" + vehicle_code + "信息不存在"); } List item = iMdPbVehicleMaterService.getVehicleMaters(vehicle_code); - if (CollectionUtils.isEmpty(item)){ - throw new BadRequestException("申请任务失败:载具"+vehicle_code+"载具物料信息信息不存在"); + if (CollectionUtils.isEmpty(item)) { + throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在"); } MdPbVehicleMaterVo vehicleMaterVo = item.get(0); String remark = vehicleMaterVo.getRemark(); - if ("空托盘入库".equals(remark)){ + String isCheck = StringUtils.isNotBlank(vehicleMaterVo.getIs_check()) ? "1" : vehicleMaterVo.getIs_check(); + if ("空托盘入库".equals(remark)) { iBmVehicleInfoService.update(new UpdateWrapper() - .set("h",Integer.valueOf(h)) + .set("h", Integer.valueOf(h)) .set("update_time", DateUtil.now()) .set("update_name", "ACS托盘入库申请") - .eq("vehicle_code",vehicle_code)); + .eq("vehicle_code", vehicle_code)); MdPbVehicleMaterVo vehicleMater = item.get(0); //拣选回库流程 BussEventMulticaster.Publish( @@ -128,7 +129,7 @@ public class PalletInStorageTask extends AbstractTask { .set("proc_inst_id", proc_inst_id) .eq("vehicle_code", vehicle_code) .eq("is_delete", false)) - , new JSONObject(MapOf.of("start_point", point_code1))) + , new JSONObject(MapOf.of("start_point", point_code1, "isCheck", isCheck))) .build("md_group_dick", mst.getId(), mst.getSource_form_type(), mst.getSource_form_id(), mstJ) .build("md_pb_vehicleMater", item) ); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java index 2709bb23..f6aae7fe 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorEmptyShelfTask.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; @@ -47,6 +48,9 @@ public class SecondFloorEmptyShelfTask extends AbstractTask { @Override public JSONObject createTask(JSONObject from) { + if (StringUtils.isBlank(from.getString("vehicleCode"))) { + throw new BadRequestException("空架搬运任务申请失败:空架号不能为空!"); + } SchBaseTask task = new SchBaseTask(); task.setId(IdUtil.getStringId()); task.setSource_form_id(from.getString("id")); @@ -87,8 +91,8 @@ public class SecondFloorEmptyShelfTask extends AbstractTask { .eq(SchBasePoint::getCode, schBaseTask.getPoint_code1())); //货架绑定 TableDataInfo tableDataInfo = iSchBasePointService.bindOrUnbind(schBaseTask.getPoint_code2(), schBaseTask.getVehicle_code(), "1"); - String bindResult = "200".equals(tableDataInfo.getCode()) ? "任务:"+schBaseTask.getTask_code()+"完成,地面站点:" + schBaseTask.getPoint_code2() + "绑定" + schBaseTask.getVehicle_code() + "指令下发CTU,返回绑定成功!" : - "任务:"+schBaseTask.getTask_code()+"完成,地面站点:"+ schBaseTask.getPoint_code2() + "绑定" + schBaseTask.getVehicle_code() + "指令下发CTU,返回绑定失败,请操作站点绑定,失败原因:" + tableDataInfo.getMsg(); + String bindResult = "200".equals(tableDataInfo.getCode()) ? "任务:" + schBaseTask.getTask_code() + "完成,地面站点:" + schBaseTask.getPoint_code2() + "绑定" + schBaseTask.getVehicle_code() + "指令下发CTU,返回绑定成功!" : + "任务:" + schBaseTask.getTask_code() + "完成,地面站点:" + schBaseTask.getPoint_code2() + "绑定" + schBaseTask.getVehicle_code() + "指令下发CTU,返回绑定失败,请操作站点绑定,失败原因:" + tableDataInfo.getMsg(); iSchBaseTaskService.update(new LambdaUpdateWrapper() .set(SchBaseTask::getUpdate_time, DateUtil.now()) .set(SchBaseTask::getRemark, bindResult) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java index 0e103540..4e8bc715 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/SecondFloorOutStorageTask.java @@ -16,7 +16,6 @@ import org.nl.common.utils.CodeUtil; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; -import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.dispatch_manage.task.handler.AbstractTask; import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService; import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; @@ -220,27 +219,43 @@ public class SecondFloorOutStorageTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) public void cancel(JSONObject data) { try { - SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper().eq("task_code", data.getString("task_code"))); - //起点解锁 - iStIvtStructattrService.update(new LambdaUpdateWrapper() - .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) - .eq(StIvtStructattr::getStruct_code, schBaseTask.getPoint_code1())); - //终点解锁 - iSchBasePointService.update(new LambdaUpdateWrapper() - .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) - .eq(SchBasePoint::getCode, schBaseTask.getPoint_code3())); - //入库仓位解锁 + List taskList = iSchBaseTaskService.list(new QueryWrapper().eq("group_code", data.getString("group_code")).eq("task_type", StatusEnum.IOBILL_TYPE_OUT.code("二楼CTU出库"))); + taskList.forEach(r -> { + //CTU库位C01-06-02解锁 + LambdaUpdateWrapper updateWrapper1 = new LambdaUpdateWrapper() + .set(StIvtStructattr::getLock_type, StatusEnum.LOCK.code("无锁")) + .eq(StIvtStructattr::getStruct_code, r.getPoint_code1()) + .set(StIvtStructattr::getRemark, r.getTask_code() + "任务被取消,任务组:" + r.getGroup_code() + "任务都被取消。"); + //载具物料Z00003821解锁 + LambdaUpdateWrapper updateWrapper2 = new LambdaUpdateWrapper() + .set(MdPbVehicleMater::getFrozen_qty, 0) + .set(MdPbVehicleMater::getRemark, r.getTask_code() + "任务被取消,任务组:" + r.getGroup_code() + "任务都被取消。") + .eq(MdPbVehicleMater::getId, r.getSource_form_id()); + LambdaUpdateWrapper updateWrapper3 = new LambdaUpdateWrapper() + .set(SchBaseTask::getRemark, r.getTask_code() + "任务被取消,任务组:" + r.getGroup_code() + "任务都被取消。") + .eq(SchBaseTask::getId, r.getId()); + if (r.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))) { + //清除库存 + updateWrapper1.set(StIvtStructattr::getVehicle_code, null); + updateWrapper2.set(MdPbVehicleMater::getIs_delete, 1); + } else { + updateWrapper3.set(SchBaseTask::getStatus, StatusEnum.FORM_STATUS.code("取消")); + } + iStIvtStructattrService.update(updateWrapper1); + iMdPbVehicleMaterService.update(updateWrapper2); + iSchBaseTaskService.update(updateWrapper3); + //地面站点A104解锁 + // iSchBasePointService.update(new LambdaUpdateWrapper() + // .set(SchBasePoint::getLock_type, StatusEnum.LOCK.code("无锁")) + // .eq(SchBasePoint::getCode, schBaseTask.getPoint_code3())); + }); + //入库仓位H05-01-01解锁 iStIvtStructattrService.update(new UpdateWrapper() .set("lock_type", StatusEnum.LOCK.code("无锁")) .set("vehicle_code", null) .set("update_time", DateUtil.now()) .set("update_name", SecurityUtils.getCurrentNickName()) - .eq("struct_code", schBaseTask.getPoint_code2())); - //载具物料解锁 - iMdPbVehicleMaterService.update(new LambdaUpdateWrapper() - .set(MdPbVehicleMater::getFrozen_qty, 0) - .eq(MdPbVehicleMater::getId, schBaseTask.getSource_form_id())); - this.updateTask(data); + .eq("sect_code", taskList.get(0).getPoint_code2().substring(0, 3))); } catch (Exception e) { throw new BadRequestException("取消任务失败,失败原因:" + e.getMessage()); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml index 5cf2763d..9ad4baf1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml @@ -32,13 +32,16 @@ AND t.form_data LIKE '%${whereJson.material_code}%' - AND t.task_step = #{whereJson.task_step} + AND t.group_code = #{whereJson.task_step} - AND t.status #{whereJson.unFinished} + AND t.status #{whereJson.unFinished} - AND t.vehicle_code LIKE '%${whereJson.vehicle_code}%' + AND t.vehicle_code LIKE '%${whereJson.vehicle_code}%' + + + AND t.remark LIKE '%${whereJson.remark}%' AND t.create_time #{whereJson.end_time} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskQuery.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskQuery.java index 05bf7fc7..8f1671dd 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskQuery.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dto/SchBaseTaskQuery.java @@ -26,7 +26,7 @@ public class SchBaseTaskQuery implements Serializable { private String unFinished; private String allBoxOut; private String config_code; - - private String is_delete="0"; + private String remark; + private String is_delete; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java index 1ae147b7..1f40c070 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java @@ -51,6 +51,7 @@ import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; +import java.util.stream.Stream; /** *

@@ -84,21 +85,16 @@ public class SchBaseTaskServiceImpl extends ServiceImpl queryAll(SchBaseTaskQuery whereJson, PageQuery page) { - //默认显示未下发的拣选任务 - if ("84".equals(whereJson.getTask_type())) { - if (whereJson.getMore_status() == null) { - whereJson.setMore_status("10"); - } - whereJson.setAllBoxOut("1"); - whereJson.setTask_type(null); - } - List collect = ObjectUtil.isNotEmpty(whereJson.getMore_status()) - ? Arrays.stream(whereJson.getMore_status().split(",")).collect(Collectors.toList()) : null; - if (collect != null) { - if (collect.contains("")) { - collect = null; - whereJson.setUnFinished(StatusEnum.FORM_STATUS.code("执行中")); - } + //无任何查询条件时,默认显示未完成的任务 + if (Stream.of( + whereJson.getTask_id(), whereJson.getTask_code(), whereJson.getTask_type(), + whereJson.getVehicle_code(), whereJson.getPoint_code1(), whereJson.getPoint_code2(), + whereJson.getPoint_code3(), whereJson.getPoint_code4(), whereJson.getMaterial_code(), + whereJson.getTask_step(), whereJson.getStart_time(), whereJson.getEnd_time(), + whereJson.getMore_status(), whereJson.getUnFinished(), whereJson.getAllBoxOut(), + whereJson.getConfig_code(), whereJson.getRemark(), whereJson.getIs_delete() + ).allMatch(v -> v == null || (v).trim().isEmpty())) { + whereJson.setUnFinished(StatusEnum.FORM_STATUS.code("完成")); } List taskTypes = ObjectUtil.isNotEmpty(whereJson.getTask_type()) ? Arrays.stream(whereJson.getTask_type().split(",")).collect(Collectors.toList()) : null; @@ -106,6 +102,22 @@ public class SchBaseTaskServiceImpl extends ServiceImpl collect = ObjectUtil.isNotEmpty(whereJson.getMore_status()) + ? Arrays.stream(whereJson.getMore_status().split(",")).collect(Collectors.toList()) : null; + if (collect != null) { + if (collect.contains("")) { + collect = null; + whereJson.setUnFinished(StatusEnum.FORM_STATUS.code("完成")); + } } IPage pages = new Page<>(page.getPage() + 1, page.getSize()); pages = this.baseMapper.selectPageLeftJoin(pages, whereJson, collect,taskTypes); @@ -194,11 +206,12 @@ public class SchBaseTaskServiceImpl extends ServiceImpl().eq("task_code", task_code)); - if (task==null){ + if (task == null) { return; } - if (task.getStatus().equals(StatusEnum.FORM_STATUS.code("完成"))) { - throw new BadRequestException("当前任务已完成"); + param.put("group_code", task.getGroup_code()); + if (task.getStatus().equals(StatusEnum.FORM_STATUS.code("完成")) || task.getStatus().equals(StatusEnum.FORM_STATUS.code("取消")) || task.getStatus().equals(StatusEnum.FORM_STATUS.code("强制完成"))) { + throw new BadRequestException("当前任务已完成或被取消"); } if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("完成"))) { List vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper() @@ -308,26 +321,34 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() + List vehicleList = iMdPbVehicleMaterService.list(new QueryWrapper() .eq("vehicle_code", task.getVehicle_code()) - .eq("is_delete",false)); - if (vehicleCode!=null){ - iActRuExecutionService.update(new UpdateWrapper() - .set("status", StatusEnum.FLOW_STATUS.code("异常完成")) - .set("remark", task.getVehicle_code() + "载具空出:货位" + struct_code) - .eq("proc_inst_id", vehicleCode.getProc_inst_id())); + .eq("is_delete", false)); + if (ObjectUtils.isNotEmpty(vehicleList)) { + //非混料托盘 + if (vehicleList.size() == 1) { + //清除库位库存 + iStIvtStructattrService.update(new UpdateWrapper() + .set("update_time", DateUtil.now()) + .set("vehicle_code", null) + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .set("remark", struct_code + "空出异常") + .eq("struct_code", struct_code)); + } + //流程异常完成 + vehicleList = vehicleList.stream().filter(r -> StringUtils.isNotBlank(r.getProc_inst_id())).collect(Collectors.toList()); + if (ObjectUtils.isNotEmpty(vehicleList)) { + iActRuExecutionService.update(new UpdateWrapper() + .set("status", StatusEnum.FLOW_STATUS.code("异常完成")) + .set("remark", task.getVehicle_code() + "载具空出:货位" + struct_code) + .eq("proc_inst_id", vehicleList.get(0).getProc_inst_id())); + } + this.update(new UpdateWrapper() + .set("status", StatusEnum.FORM_STATUS.code("取消")) + .set("remark", struct_code + "空出异常") + .set("update_time", DateUtil.now()) + .eq("task_code", task_code)); } - iStIvtStructattrService.update(new UpdateWrapper() - .set("update_time", DateUtil.now()) - .set("vehicle_code", null) - .set("lock_type", StatusEnum.LOCK.code("无锁")) - .set("remark", struct_code + "空出异常") - .eq("struct_code", struct_code)); - this.update(new UpdateWrapper() - .set("status", StatusEnum.FORM_STATUS.code("取消")) - .set("remark", struct_code + "空出异常") - .set("update_time", DateUtil.now()) - .eq("task_code", task_code)); break; case "rm": return rm(stIvtStructattr, task); @@ -390,27 +411,20 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() - .set("update_time", DateUtil.now()) - .set("vehicle_code", null) - .set("remark", "该货位进行移库任务号为:" + task.getTask_code() + "时,目标货位:" + task.getPoint_code2() + "为深位,存在浅位:"+stIvtStructattr.getStruct_code()+"阻挡,清除载具号,即将重新分配新目标货位。") - .eq("struct_code", task.getPoint_code1())); - } //查询分配规则 Map map = SpringContextHolder.getBean(DecisionHandler.class) .dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve") , new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code() , "vehicle_code", task.getVehicle_code(), - "start_point", task.getPoint_code1(), "errorTask", "errorTask"))); + "start_point", task.getPoint_code1(), "errorTask", "errorTask", "rm", "rm"))); String new_struct_code = ((Map) map.get("form_data")).get("end_struct_code"); iActRuExecutionService.update(new UpdateWrapper() - .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) + .set("remark", stIvtStructattr.getStruct_code() + "入库阻挡异常重新分配货位" + new_struct_code) .eq("proc_inst_id", vehicleCode.getProc_inst_id())); + log.error("任务:{},载具号:{},原终点:{}入库阻挡异常重新分配货位:{}", task_code, task.getVehicle_code(), task.getPoint_code2(), new_struct_code); this.update(new UpdateWrapper() .set("point_code2", new_struct_code) - .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) + .set("remark", stIvtStructattr.getStruct_code() + "入库阻挡异常重新分配货位" + new_struct_code) .eq("task_code", task_code)); JSONObject result = new JSONObject(); result.put("point_code2", new_struct_code); @@ -418,31 +432,49 @@ public class SchBaseTaskServiceImpl extends ServiceImpl() + //阻挡位锁定,如果无载具,那么锁定为异常库位,需要人工查看库位情况 + if (StringUtils.isEmpty(stIvtStructattr.getVehicle_code())) { + iStIvtStructattrService.update(new UpdateWrapper() + .eq("struct_code", stIvtStructattr.getStruct_code()) + .set("lock_type", StatusEnum.LOCK.code("异常锁定")) + .set("update_time", DateUtil.now()) + .set("remark", "入满异常:" + task_code) + .set("vehicle_code", task_code + "_ZD_" + org.nl.common.utils.IdUtil.getStringId())); + } + List vehicleList = iMdPbVehicleMaterService + .list(new QueryWrapper() .eq("vehicle_code", task.getVehicle_code()) - .eq("is_delete",false)); + .eq("is_delete", false)); //查询分配规则 iStIvtStructattrService.update(new UpdateWrapper() .eq("struct_code", stIvtStructattr.getStruct_code()) .set("lock_type", StatusEnum.LOCK.code("异常锁定")) .set("update_time", DateUtil.now()) .set("remark", "入满异常:" + task_code) - .set("vehicle_code", task_code+"_ZD_"+org.nl.common.utils.IdUtil.getStringId())); + .set("vehicle_code", task_code + "_ZD_" + org.nl.common.utils.IdUtil.getStringId())); + if (task.getTask_type().equals(StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库"))) { + iStIvtStructattrService.update(new UpdateWrapper() + .eq("struct_code", task.getPoint_code1()) + .set("update_time", DateUtil.now()) + .set("remark", "异常位移库分配库位,出现二次满入,清除起点载具信息:" + task.getVehicle_code() + ",任务号为:" + task_code) + .set("vehicle_code", null)); + } Map map = SpringContextHolder.getBean(DecisionHandler.class) - .dispenseTransa(ListOf.of("limitStorage","depthPriority","alleyAve"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code() - ,"vehicle_code",task.getVehicle_code(), - "start_point",task.getPoint_code1(),"errorTask","errorTask"))); + .dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve"), new JSONObject(MapOf.of("stor_code", stIvtStructattr.getStor_code() + , "vehicle_code", task.getVehicle_code(), + "start_point", task.getPoint_code1(), "errorTask", "errorTask", "taskType", task.getTask_type()))); String new_struct_code = ((Map) map.get("form_data")).get("end_struct_code"); - if (vehicleCode!=null){ + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(vehicleList)) { iActRuExecutionService.update(new UpdateWrapper() .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) - .eq("proc_inst_id", vehicleCode.getProc_inst_id())); + .eq("proc_inst_id", vehicleList.get(0).getProc_inst_id())); } + log.error("任务:{},载具号:{},原终点:{}入满异常重新分配货位:{}", task_code, task.getVehicle_code(), task.getPoint_code2(), new_struct_code); this.update(new UpdateWrapper() .set("point_code2", new_struct_code) .set("remark", stIvtStructattr.getStruct_code() + "入满异常重新分配货位" + new_struct_code) .eq("task_code", task_code)); + JSONObject result = new JSONObject(); result.put("point_code2", new_struct_code); return result; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java index d85f7087..d2212868 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/AcsToWmsService.java @@ -1,8 +1,10 @@ package org.nl.wms.external_system.acs.service; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.enums.StatusEnum; import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; @@ -30,6 +32,7 @@ import java.util.Map; } */ @Service +@Slf4j public class AcsToWmsService { @@ -43,12 +46,19 @@ public class AcsToWmsService { public String applyTask(String service, String type, JSONObject data, InteracteDto param) { if ("InStorage".equals(service)) { - JSONObject task = applyTaskMap.get(type).createTask(data); - if (task != null) { + try { + JSONObject task = applyTaskMap.get(type).createTask(data); + if (task == null) { + log.error("创建任务失败:返回任务信息为空,申请参数为:" + JSON.toJSONString(param)); + throw new BadRequestException("创建任务失败:返回任务信息为空,申请参数为:" + JSON.toJSONString(param)); + } return task.getString("task_code"); - } else { - //iSchBasePointService.sendErrorMsg("1", null,"任务申请失败,申请参数为:"+JSON.toJSONString(param)+"请查看错误日志"); - throw new BadRequestException("出现异常,任务申请失败,申请参数为:" + type + ":" + JSON.toJSONString(data) + ",请查看错误日志"); + } catch (Exception e) { + if (param.getData() != null) { + String title = param.getType() + DateUtil.today() + param.getData().toString(); + iSchBasePointService.sendErrorMsg("1", title, "任务申请失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志" + e); + } + throw new BadRequestException("申请任务失败,申请参数为:" + JSON.toJSONString(param) + "请查看错误日志:" + e); } } return null; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java index 5e56bc59..95fc774e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/external_system/acs/service/WmsToAcsService.java @@ -55,12 +55,17 @@ public class WmsToAcsService{ } public TableDataInfo bindPodAndBerth(String podCode,String positionCode,String indBind,String type){ - InteracteDto dto = InteracteDto.builder().service("wmsToAcsService") - .trace_id(MDC.get("trace_id")) - .type(type) - .data(MapOf.of("podCode", podCode, "positionCode", positionCode, "indBind", indBind)) - .build(); - TableDataInfo result = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto)); + TableDataInfo result = new TableDataInfo(); + if (positionCode.contains("A")) { + InteracteDto dto = InteracteDto.builder().service("wmsToAcsService") + .trace_id(MDC.get("trace_id")) + .type(type) + .data(MapOf.of("podCode", podCode, "positionCode", positionCode, "indBind", indBind)) + .build(); + result = InterationUtil.notifyExt("/api/wmsToAcs/apply", (JSONObject) JSON.toJSON(dto)); + } else { + result.setCode("200"); + } return result; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/StrucFormActivityBehavior.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/StrucFormActivityBehavior.java index f33fe3c8..fc79b6ee 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/StrucFormActivityBehavior.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/flow_manage/flow/framework/engine/behavior/impl/StrucFormActivityBehavior.java @@ -78,7 +78,6 @@ public class StrucFormActivityBehavior extends FlowNodeActivityBehavior query = new QueryWrapper() - .eq("is_used", true) - .eq("lock_type", StatusEnum.LOCK.code("无锁")) - .eq("stor_code", forms.getString("stor_code")) - .isNull("vehicle_code"); - if (h != null) { - query.ge("h", h); - } - int structCount = iStIvtStructattrService.count(query); - if (structCount < DictConstantPool.STRUCT_COUNT) { - throw new BadRequestException("入库失败:当前仓库可用库位小于" + DictConstantPool.STRUCT_COUNT); + if (!vehicleInfo.getVehicle_code().contains("T")) { + //组盘前符合条件库位数量校验 + QueryWrapper query = new QueryWrapper() + .eq("is_used", true) + .eq("lock_type", StatusEnum.LOCK.code("无锁")) + .eq("stor_code", forms.getString("stor_code")) + .isNull("vehicle_code"); + if (h != null) { + query.ge("h", h); + } + int structCount = iStIvtStructattrService.count(query); + if (structCount < DictConstantPool.STRUCT_COUNT) { + throw new BadRequestException("入库失败:当前仓库可用库位小于" + DictConstantPool.STRUCT_COUNT); + } } }, StatusEnum.STRATEGY_TYPE.code("入库")+forms.getString("stor_code"),5); - String now = DateUtil.now(); forms.put("create_name",SecurityUtils.getCurrentNickName()); forms.put("create_time", now); @@ -360,12 +361,20 @@ public class MdGruopDickServiceImpl extends ServiceImpl entry.getValue().size() > 1); + if (count) { + throw new BadRequestException("存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!"); + } iMdPbVehicleMaterService.saveBatch(vms); this.saveBatch(groups); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java index f7f1cc60..32e99d08 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/IMdPbVehicleMaterService.java @@ -25,6 +25,9 @@ public interface IMdPbVehicleMaterService extends IService { void getVehicleMaters(SchBaseTask task,Boolean isGetQty); List getVehicleMaters(String vehicleCode); + List getCheckMaters(String vehicleCode); + + /** * 载具编码与id对应关系 * @param vehicle_code diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java index 43fdbca5..a2749c36 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/MdPbVehicleMater.java @@ -76,6 +76,12 @@ public class MdPbVehicleMater implements Serializable { */ private String unit_id; + /** + * 是否盘点 + */ + private String is_check; + + /** * 父容器 */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java index 7e9414ca..60b65065 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java @@ -21,4 +21,6 @@ public interface MdPbVehicleMaterMapper extends BaseMapper { Integer getQtySumByMaterial(String material_id); List getVehicleMaters(String vehicle_code); + List getCheckMaters(String vehicle_code); + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml index 3715023e..700cd9fb 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dao/mapper/xml/MdPbVehicleivtMapper.xml @@ -2,27 +2,50 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dto/MdPbVehicleMaterVo.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dto/MdPbVehicleMaterVo.java index 02a72bf9..2bbe7278 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dto/MdPbVehicleMaterVo.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/dto/MdPbVehicleMaterVo.java @@ -22,6 +22,7 @@ public class MdPbVehicleMaterVo extends MdPbVehicleMater { private String material_code; private String material_name; private String material_spec; - + private String single_weight; + private String unit_name; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java index 75e1f561..aa924481 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/md_manage/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java @@ -47,14 +47,10 @@ public class MdPbVehicleMaterServiceImpl extends ServiceImpl materList = mdPbVehicleMaterMapper.getVehicleMaters(task.getVehicle_code()); if (materList.size() > 0) { - MdPbVehicleMaterVo mater = null; + MdPbVehicleMaterVo mater; String materialCode = ""; if (isGetQty) { - if (materList.size() > 1&&task.getVehicle_code().contains("T")) { - mater = materList.stream().filter(m -> m.getRemark().contains("该托盘需要拣选")).findFirst().orElse(null); - } else { mater = materList.get(0); - } if (mater != null) { materialCode = "物料编码:" + Objects.toString(mater.getMaterial_code(), "") + " | 数量:" + Objects.toString(mater.getQty() != null ? mater.getQty().toBigInteger() : "", "") + @@ -84,6 +80,12 @@ public class MdPbVehicleMaterServiceImpl extends ServiceImpl getCheckMaters(String vehicleCode) { + return mdPbVehicleMaterMapper.getCheckMaters(vehicleCode); + } + + @Override public Map getVehicleCode2Id(String material_id, String... vehicle_code) { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java index 6c1d41fc..32752e2c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/common/PdaCommonController.java @@ -2,22 +2,24 @@ package org.nl.wms.pda_manage.common; import cn.dev33.satoken.annotation.SaIgnore; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import org.nl.common.domain.exception.BadRequestException; import org.nl.common.utils.ListOf; import org.nl.common.utils.MapOf; -import org.nl.wms.dispatch_manage.point.service.ISchBasePointService; -import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; -import org.nl.wms.external_system.acs.service.WmsToAcsService; -import org.nl.wms.pda_manage.devicemanage.dto.ComTp; +import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.nl.wms.system_manage.service.param.ISysParamService; import org.nl.wms.system_manage.service.param.dao.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.*; @@ -39,8 +41,12 @@ public class PdaCommonController { @Autowired private ISysParamService iSysParamService; + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + /** * 仓库编码 + * * @return */ @PostMapping("common/storList") @@ -51,7 +57,29 @@ public class PdaCommonController { HashMap of2 = MapOf.of("label", "料箱库编码", "value", "FStockId"); HashMap of3 = MapOf.of("label", "虚拟库编码", "value", "FicStockId"); ArrayList list = ListOf.of(of1, of2, of3); - return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK); + return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); + } + + + /** + * 获取库位数量 + */ + @PostMapping("common/getStructCount") + @SaIgnore + @Log("获取库位数量") + public ResponseEntity getStructCount(@RequestBody JSONObject form) { + String storeCoe = form.getString("vehicle_code").contains("T") ? "FStockPallet" : "FStockId"; + List list = iStIvtStructattrService.list(new LambdaUpdateWrapper() + .eq(StIvtStructattr::getStor_code, storeCoe).eq(StIvtStructattr::getIs_used, 1) + .eq(StIvtStructattr::getLock_type, "00").isNull(StIvtStructattr::getVehicle_code)); + Long g = list.stream().filter(a -> a.getH() == 3).count(); + Long z = list.stream().filter(a -> a.getH() == 2).count(); + Long d = list.stream().filter(a -> a.getH() == 1).count(); + JSONObject result = new JSONObject(); + result.put("g", "FStockPallet".equals(storeCoe) ? g : d); + result.put("z", z); + result.put("d", "FStockPallet".equals(storeCoe) ? d : g); + return new ResponseEntity<>(result, HttpStatus.OK); } @@ -63,7 +91,7 @@ public class PdaCommonController { @SaIgnore public ResponseEntity apkUrl() { Map of = MapOf.of("versionName", "1.0.1", "url", "http://192.168.18.218:8012/api/pda/download/app-release"); - return new ResponseEntity<>(of,HttpStatus.OK); + return new ResponseEntity<>(of, HttpStatus.OK); } @RequestMapping("/download/app-release") @SaIgnore diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java index 3c91f7cc..a704fbaf 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/group/GroupController.java @@ -6,10 +6,10 @@ import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kingdee.bos.webapi.sdk.K3CloudApi; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; @@ -20,24 +20,27 @@ import org.nl.common.utils.RedissonUtils; import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; import org.nl.wms.base_manage.material.service.dto.MaterialQuery; -import org.nl.wms.early_manage.service.early_inv.dao.AlmEarlyInv; import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService; +import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService; +import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater; import org.nl.wms.pda_manage.group.dto.GroupItemData; import org.nl.wms.pda_manage.group.dto.MaterGroupDto; import org.nl.wms.pda_manage.group.dto.MaterItem; import org.nl.wms.pda_manage.group.dto.PdaMaterQuery; -import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService; +import org.nl.wms.pm_manage.form_data.service.dao.PmFormData; import org.nl.wms.sync_manage.service.form_mapping.dao.SyncFormMapping; import org.nl.wms.sync_manage.service.form_mapping.impl.SyncFormMappingServiceImpl; import org.nl.wms.system_manage.service.quartz.task.SyncErpBillsScheduleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -52,6 +55,8 @@ import java.util.Map; @RequestMapping("api/groupMater") public class GroupController { + @Autowired + private IMdPbVehicleMaterService iMdPbVehicleMaterService; @Autowired private IMdGruopDickService iMdGruopDickService; @Autowired @@ -91,7 +96,7 @@ public class GroupController { pageQuery.setSize(query.getSize()); MaterialQuery materialQuery = new MaterialQuery(); if (!StringUtils.isEmpty(query.getSearch())){ - materialQuery.setSearch(query.getSearch()); + materialQuery.setSearch(query.getSearch().trim().toUpperCase()); } Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build()); List> records = mapPage.getRecords(); @@ -122,9 +127,9 @@ public class GroupController { @SaIgnore @Log("手持物料组盘操作") public ResponseEntity inStorage(@RequestBody JSONObject jform) { - RedissonUtils.lock(()->{ + RedissonUtils.lock(() -> { MaterGroupDto form = jform.toJavaObject(MaterGroupDto.class); - Assert.noNullElements(new Object[]{form,form.getItem(),form.getStor_code()},"请求参数不能为空"); + Assert.noNullElements(new Object[]{form, form.getItem(), form.getStor_code()}, "请求参数不能为空"); for (MaterItem item : form.getItem()) { GroupItemData itemData = new GroupItemData(); itemData.setSingle_weight(item.getSingle_weight()); @@ -132,8 +137,41 @@ public class GroupController { item.setUnit_id("16"); } iMdGruopDickService.groupDick((JSONObject) JSONObject.toJSON(form)); - },"手持组盘入库",5); - return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); + }, "手持组盘入库", 5); + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); + } + + + /** + * 盘点入库 + * + * @param params + * @return + */ + @PostMapping("checkMaterConfirm") + @SaIgnore + @Log("盘点入库") + @Transactional(rollbackFor = Exception.class) + public ResponseEntity checkMaterConfirm(@RequestBody JSONObject params) { + PmFormData pmFormData = params.toJavaObject(PmFormData.class); + Assert.noNullElements(new Object[]{pmFormData.getId(),pmFormData.getQty(), pmFormData.getPcsn()}, "请求参数不能为空"); + if (StringUtils.isEmpty(params.getString("id"))) { + throw new BadRequestException("载具物料id不能为空!"); + } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(MdPbVehicleMater::getId, pmFormData.getId()) + .set(MdPbVehicleMater::getQty, pmFormData.getQty()) + .set(MdPbVehicleMater::getMaterial_id,pmFormData.getMaterial_id()) + .set(MdPbVehicleMater::getPcsn,pmFormData.getPcsn()); + //.set(MdPbVehicleMater::getIs_delete, false); + iMdPbVehicleMaterService.update(updateWrapper); + if (StringUtils.isNotBlank(pmFormData.getSingle_weight())) { + if (new BigDecimal(pmFormData.getSingle_weight()).compareTo(BigDecimal.ZERO) > 0) { + iMdMeMaterialbaseService.update( + new LambdaUpdateWrapper().eq(MdMeMaterialbase::getMaterial_id, pmFormData.getMaterial_id()).set(MdMeMaterialbase::getNet_weight, pmFormData.getSingle_weight())); + } + } + return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java index 6ce3fec8..312769df 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/IOStorageController.java @@ -75,7 +75,7 @@ public class IOStorageController { .eq("is_used", true) .eq("vehicle_code", vehicle_code); List list = iStIvtStructattrService.list(query); - if (ObjectUtils.isNotEmpty(list)) { + if (ObjectUtils.isNotEmpty(list) && ones.get(0).getIs_check() == null) { List ivtList = list.stream().filter(r -> r.getStor_code().equals(StatusEnum.STOCK_INFO.code("二楼ctu缓存库")) || r.getStor_code().equals(StatusEnum.STOCK_INFO.code("二楼货架缓存库"))).collect(Collectors.toList()); if (ObjectUtils.isNotEmpty(ivtList)) { @@ -97,10 +97,15 @@ public class IOStorageController { throw new BadRequestException(String.format("出库确认失败:载具有拣选回库任务未完成或在立库的库位中未出库:%s中,请核查。", list.get(0).getStruct_code())); } } - }, StatusEnum.STRATEGY_TYPE.code("出库") + vehicle_code, 5); //流程校验 for (MdPbVehicleMater one : ones) { + //托盘拣选,扫描托盘码提示拣选数量 + if (vehicle_code.contains("T")&&one.getIs_check() == null) { + if (one.getNeed_pick() && one.getQty().compareTo(BigDecimal.ZERO) > 0) { + throw new BadRequestException(one.getRemark()); + } + } String proc_inst_id = one.getProc_inst_id(); if (!StringUtils.isEmpty(proc_inst_id)) { //判断拣选出库任务未完成 @@ -117,19 +122,27 @@ public class IOStorageController { // throw new BadRequestException(String.format("当前载具%s业务流程%s未完成", vehicle_code, parent_id)); // } } - //单据校验"针对托盘库做条件判断 - if (vehicle_code.contains("T")){ - if (one.getNeed_pick() && one.getQty().compareTo(BigDecimal.ZERO)>0){ - throw new BadRequestException(one.getRemark()); + UpdateWrapper updateWrapper = new UpdateWrapper(); + //盘点出库,直接出库确认则清除库存 + if (one.getIs_check() != null) { + if ("1".equals(one.getIs_check())) { + updateWrapper.set("remark", "用户于" + DateUtil.now() + "进行盘点出库,并出库确认不再入库,物料取走。") + .set("is_check", null); + iStIvtStructattrService.update(new UpdateWrapper() + .set("lock_type", StatusEnum.LOCK.code("无锁")) + .set("vehicle_code", null) + .set("update_time", DateUtil.now()) + .set("update_name", SecurityUtils.getCurrentNickName()) + .eq("vehicle_code", one.getVehicle_code())); } } - iMdPbVehicleMaterService.update(new UpdateWrapper() - .set("is_delete",true) - .set("proc_inst_id",null) + updateWrapper.set("is_delete", true) + .set("proc_inst_id", null) .set("update_time", DateUtil.now()) .set("update_name", SecurityUtils.getCurrentNickName()) - .eq("id",one.getId())); - if (StringUtils.isNotEmpty(one.getGroup_id())){ + .eq("id", one.getId()); + iMdPbVehicleMaterService.update(updateWrapper); + if (StringUtils.isNotEmpty(one.getGroup_id())) { iMdGruopDickService.update(new UpdateWrapper() .set("status", StatusEnum.FORM_STATUS.code("完成")) .set("update_time", DateUtil.now()) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java index 9f4277d3..3a8ed82c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaInController.java @@ -50,6 +50,8 @@ public class PdaInController { } + + /** * 根据生产合格证查询物料信息 */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java index 3ad47283..349bc8d8 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/PdaOutController.java @@ -130,7 +130,7 @@ public class PdaOutController { public ResponseEntity confirm(@RequestBody PdaFormOutMst pdaFormOutMst) { RedissonUtils.lock(() -> { pdaIOService.PpdaOrderOutStorage(pdaFormOutMst); - }, pdaFormOutMst.getCode(), null); + }, "confirm", null); return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } @@ -144,7 +144,7 @@ public class PdaOutController { public ResponseEntity ctuOutConfirm(@RequestBody PdaFormOutMst pdaFormOutMst) { RedissonUtils.lock(() -> { pdaIOService.ctuOutConfirm(pdaFormOutMst); - }, pdaFormOutMst.getBill_code(), null); + }, "ctuOutConfirm", null); return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } @@ -166,13 +166,14 @@ public class PdaOutController { } + @PostMapping("materConfirm") - @Log("物料出库确认") + @Log("盘点出库确认") @SaIgnore public ResponseEntity materConfirm(@RequestBody PdaMaterOutMst pdaMaterOutMst) { RedissonUtils.lock(() -> { pdaIOService.PdaMaterOutStorage(pdaMaterOutMst); - }, pdaMaterOutMst.getStruct_code(), null); + }, "materConfirm", null); return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java index 2eb8e510..28e93350 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/iostorage/sevice/PdaIOService.java @@ -115,7 +115,7 @@ public class PdaIOService { /** - * 手持物料出库不回传 + * 盘点出库不回传 * * @param pdaFormOutMst */ @@ -131,7 +131,6 @@ public class PdaIOService { if (CollectionUtils.isEmpty(structattrVechielDtos)){ throw new BadRequestException("当前库存不存在或库存锁定"); } - StructattrVechielDto structattrVechielDto = structattrVechielDtos.get(0); iMdPbVehicleMaterService.update(new UpdateWrapper() .set("frozen_qty",now_assign_qty) @@ -141,7 +140,6 @@ public class PdaIOService { .set("update_time", DateUtil.now()) .set("update_name", SecurityUtils.getCurrentNickName()) .in("struct_code", structCode)); - StructattrVechielDto vechielDto = structattrVechielDto; StIvtIostorinv mst = new StIvtIostorinv(); { @@ -151,10 +149,10 @@ public class PdaIOService { mst.setCode(CodeUtil.getNewCode("IO_CODE")); mst.setStatus(StatusEnum.FORM_STATUS.code("已分配")); mst.setProduct_area(product_area); - mst.setBill_type(StatusEnum.IOBILL_TYPE_OUT.code("生产出库")); + mst.setBill_type(StatusEnum.IOBILL_TYPE_OUT.code("盘点出库")); mst.setIn_storage(false); mst.setProduct_area(pdaFormOutMst.getProduct_area()); - mst.setForm_data(new JSONObject(MapOf.of("shipper", null, "product_area", pdaFormOutMst.getProduct_area()))); + mst.setForm_data(new JSONObject(MapOf.of("shipper", null, "product_area", pdaFormOutMst.getProduct_area(), "isCheck", "1"))); } StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl(); { diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/dao/mapper/xml/StIvtIostorinvOutMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/dao/mapper/xml/StIvtIostorinvOutMapper.xml index ed9c5aa4..fe238bfd 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/dao/mapper/xml/StIvtIostorinvOutMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/dao/mapper/xml/StIvtIostorinvOutMapper.xml @@ -42,7 +42,7 @@ and st_ivt_iostorinv.source_form_code = #{query.source_form_code} - and st_ivt_iostorinv.create_time >= #{query.start_time} and st_ivt_iostorinv.update_time <= #{query.end_time} + and st_ivt_iostorinv.create_time >= #{query.start_time} and st_ivt_iostorinv.create_time <= #{query.end_time} GROUP BY st_ivt_iostorinv.id order by st_ivt_iostorinv.id desc diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/impl/StIvtIostorinvServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/impl/StIvtIostorinvServiceImpl.java index 962f19b9..015522c6 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/impl/StIvtIostorinvServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/io/service/iostor/impl/StIvtIostorinvServiceImpl.java @@ -326,29 +326,43 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl dtlVo = iStIvtIostorinvDtlService.getDtlVo(iostorinv.getId()); List vechiles = dtlVo.stream().map(StIvtIostorinvdtlVo::getVehicle_code).collect(Collectors.toList()); //扔一个物料信息进去 String BaseModeKey; - if (dtlVo.get(0).getVehicle_code().contains("T")){ - BaseModeKey="st_ivt_iostorinv_tp_"; - }else { - BaseModeKey= "st_ivt_iostorinv_"; + if (dtlVo.get(0).getVehicle_code().contains("T")) { + BaseModeKey = "st_ivt_iostorinv_tp_"; + } else { + BaseModeKey = "st_ivt_iostorinv_"; } + //标记盘点出库 + String isCheck; + if (iostorinv.getForm_data() != null) { + if (StringUtils.isNotBlank(iostorinv.getForm_data().getString("isCheck"))) { + isCheck = iostorinv.getForm_data().getString("isCheck"); + } else { + isCheck = null; + } + } else { + isCheck = null; + } + dtlVo.forEach(r -> { + r.getVehicleMater().setIs_check(isCheck); + }); BussEventMulticaster.Publish(new FlowStartEvent(BaseModeKey + (iostorinv.getIn_storage() ? "in" : "out") , (proc_inst_id, innerVehicle) -> iMdPbVehicleMaterService.update(new UpdateWrapper() .set("proc_inst_id", proc_inst_id) - .eq("is_delete",false) + .set("is_check", isCheck) + .eq("is_delete", false) .in("vehicle_code", innerVehicle == null ? vechiles : ListOf.of(innerVehicle))) //传递全局参数:出库分配出库点用 , iostorinv.getForm_data()) .build("st_ivt_iostorinv", iostorinv.getId(), iostorinv.getSource_form_type(), iostorinv.getSource_form_id(), form) .build("st_ivt_iostorinvdtl", dtlVo) ); - + int count = 0; this.update(new UpdateWrapper() .set("status", StatusEnum.FORM_STATUS.code("执行中")) .set("update_time", DateUtil.now()) diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/controller/StIvtStructattrController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/controller/StIvtStructattrController.java index 2d840dd8..b04ecf27 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/controller/StIvtStructattrController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/controller/StIvtStructattrController.java @@ -2,6 +2,7 @@ package org.nl.wms.stor_manage.struct.controller; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -72,6 +73,41 @@ public class StIvtStructattrController { return new ResponseEntity<>(structattrService.pageQuery(query, page), HttpStatus.OK); } + @GetMapping("/checkQuery") + @Log("盘点物料查询") + @SaIgnore + public ResponseEntity checkQuery(StructattrQuery query, PageQuery page) { + if (StringUtils.isEmpty(query.getPcsn()) && StringUtils.isEmpty(query.getVehicle_code()) && StringUtils.isEmpty(query.getMaterial_code()) && StringUtils.isEmpty(query.getStruct_code())) { + throw new BadRequestException("请输入查询条件"); + } + if (StringUtils.isNotBlank(query.getPcsn()) || StringUtils.isNotBlank(query.getMaterial_code()) || StringUtils.isNotBlank(query.getVehicle_code()) || StringUtils.isNotBlank(query.getStruct_code())) { + if (StringUtils.isNotBlank(query.getPcsn())) { + query.setPcsn(query.getPcsn().trim().toUpperCase()); + } + if (StringUtils.isNotBlank(query.getMaterial_code())) { + query.setMaterial_code(query.getMaterial_code().trim().toUpperCase()); + } + if (StringUtils.isNotBlank(query.getVehicle_code())) { + query.setVehicle_code(query.getVehicle_code().trim().toUpperCase()); + } + if (StringUtils.isNotBlank(query.getStruct_code())) { + query.setStruct_code(query.getStruct_code().trim().toUpperCase()); + } + } + return new ResponseEntity<>(structattrService.checkQuery(query), HttpStatus.OK); + } + + @PostMapping("/queryMaterByVehicleCode") + @Log("根据载具查询盘点入库物料") + @SaIgnore + public ResponseEntity queryMaterByVehicleCode(@RequestBody JSONObject params) { + if (StringUtils.isEmpty(params.getString("vehicle_code"))) { + throw new BadRequestException("载具号不能为空"); + } + return new ResponseEntity<>(structattrService.queryMaterByVehicleCode(params.getString("vehicle_code")), HttpStatus.OK); + } + + @PostMapping @Log("仓位新增") public ResponseEntity create(@Validated @RequestBody StIvtStructattr dto) { @@ -117,10 +153,23 @@ public class StIvtStructattrController { @GetMapping("/getStructIvt") @Log("查询库存") public ResponseEntity getStructIvt(StructattrQuery query, PageQuery page) { - return new ResponseEntity<>(structattrService.getStructIvt(query,page), HttpStatus.OK); + return new ResponseEntity<>(structattrService.getStructIvt(query, page), HttpStatus.OK); } + + + /** + * 呆滞料出库下发 + */ + @PostMapping("/createIdleTask") + @Log("呆滞料出库下发") + public ResponseEntity createIdleTask(@RequestBody List> taskList) { + structattrService.createIdleTask(taskList); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/exportFile") - public void exportFile(@RequestBody StructattrQuery query, HttpServletResponse response) { + public void exportFile(@RequestBody StructattrQuery query, HttpServletResponse response) { PageQuery page = new PageQuery(); page.setPage(0); page.setSize(99999); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/IStIvtStructattrService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/IStIvtStructattrService.java index 2846d881..6be53369 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/IStIvtStructattrService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/IStIvtStructattrService.java @@ -40,6 +40,10 @@ public interface IStIvtStructattrService extends IService { Object pageQuery(StructattrQuery query, PageQuery page); + Object queryMaterByVehicleCode(String vehicleCode); + + + Object checkQuery(StructattrQuery query); void changeActive(StIvtStructattr dto); /** @@ -61,6 +65,6 @@ public interface IStIvtStructattrService extends IService { List getStructIvtAssign(List materials, String stor_code); Long getIoBillCounts(String vehicleCode); - + void createIdleTask( List> taskList); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/StIvtStructattrMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/StIvtStructattrMapper.java index 70ebcd2d..724c0d5b 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/StIvtStructattrMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/StIvtStructattrMapper.java @@ -24,6 +24,8 @@ public interface StIvtStructattrMapper extends BaseMapper { List getPageQuery(@Param("query") StructattrQuery query, PageQuery pageQuery); + List checkQuery(@Param("query") StructattrQuery query); + List collectVehicle(Map query); List structVehicle(Map query); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml index 1350e840..23c3a18c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml @@ -2,68 +2,7 @@ - + + +