From 5cc0c807ca8b656f71b6e2f2afc7a392111d1b75 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Wed, 26 Jul 2023 15:04:48 +0800 Subject: [PATCH] =?UTF-8?q?rev:=20=E4=B8=8EACS=E5=AF=B9=E6=8E=A5=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=8E=E5=AE=9E=E4=BD=93=E7=9A=84=E5=AF=B9?= =?UTF-8?q?=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/nladmin-system/doc/wms.xls | Bin 348160 -> 320000 bytes .../controller/MdBaseBrickInfoController.java | 66 ++++ .../service/IMdBaseBrickInfoService.java | 56 +++ .../brick/service/dao/MdBaseBrickInfo.java | 79 +++++ .../dao/mapper/MdBaseBrickInfoMapper.java | 12 + .../dao/mapper/MdBaseBrickInfoMapper.xml | 5 + .../brick/service/dto/MdBaseBrickInfoDto.java | 67 ++++ .../service/dto/MdBaseBrickInfoQuery.java | 12 + .../impl/MdBaseBrickInfoServiceImpl.java | 101 ++++++ .../material/service/dao/MdBaseMaterial.java | 2 +- .../acs/controller/AcsToWmsController.java | 42 --- .../wms/ext/acs/service/AcsToWmsService.java | 14 +- .../ext/acs/service/dto/ApplyTaskRequest.java | 12 +- .../wms/ext/acs/service/dto/BaseRequest.java | 30 +- .../wms/ext/acs/service/dto/BrickInfoDto.java | 2 +- .../acs/service/dto/CancelTaskRequest.java | 36 ++ .../acs/service/dto/CreateTaskRequest.java | 130 +++++++ .../dto/FeedBackTaskStatusRequest.java | 47 +++ .../acs/service/dto/GetPalletizeRequest.java | 11 + .../wms/ext/acs/service/dto/GrabRequest.java | 4 +- .../ext/acs/service/dto/PutActionRequest.java | 22 ++ .../wms/ext/acs/service/dto/SignalData.java | 18 + .../acs/service/impl/AcsToWmsServiceImpl.java | 318 +++++++++++------- .../ext/acs/service/vo/ApplyTaskResponse.java | 13 + .../wms/ext/acs/service/vo/BaseResponse.java | 17 + .../acs/service/vo/CancelTaskResponse.java | 13 + .../acs/service/vo/CreateTaskResponse.java | 14 + .../vo/FeedBackTaskStatusResponse.java | 4 + .../acs/service/vo/GetPalletizeResponse.java | 31 ++ .../ext/acs/service/vo/PutActionResponse.java | 11 + .../org/nl/wms/ext/acs/service/vo/Resp.java | 32 ++ .../IPdmBdRequestMaterialRecordService.java | 6 + .../dao/PdmBdRequestMaterialRecord.java | 4 + .../dto/PdmBdRequestMaterialRecordDto.java | 8 + ...PdmBdRequestMaterialRecordServiceImpl.java | 8 + ...BdProductionProcessTrackingController.java | 68 ++++ ...PdmBdProductionProcessTrackingService.java | 44 +++ .../dao/PdmBdProductionProcessTracking.java | 44 +++ .../PdmBdProductionProcessTrackingMapper.java | 16 + .../PdmBdProductionProcessTrackingMapper.xml | 16 + .../PdmBdProductionProcessTrackingDto.java | 28 ++ .../PdmBdProductionProcessTrackingQuery.java | 16 + ...dProductionProcessTrackingServiceImpl.java | 67 ++++ .../controller/PdmBdWorkorderController.java | 8 +- .../service/IPdmBdWorkorderService.java | 13 +- .../service/dao/PdmBdWorkorder.java | 2 +- .../dao/mapper/PdmBdWorkorderMapper.java | 6 +- .../dao/mapper/PdmBdWorkorderMapper.xml | 4 +- .../service/dto/PdmBdWorkorderDto.java | 2 +- .../service/dto/PdmBdWorkorderQuery.java | 2 +- .../impl/PdmBdWorkorderServiceImpl.java | 24 +- .../report/controller/ReportController.java | 39 +++ .../nl/wms/report/service/ReportService.java | 15 + .../service/dao/mapper/ReportMapper.java | 9 + .../service/dao/mapper/ReportMapper.xml | 5 + .../service/impl/ReportServiceImpl.java | 15 + ...SchBaseVehiclematerialgroupController.java | 3 +- .../ISchBaseVehiclematerialgroupService.java | 28 ++ .../dao/SchBaseVehiclematerialgroup.java | 8 + .../dto/SchBaseVehiclematerialgroupDto.java | 6 + ...chBaseVehiclematerialgroupServiceImpl.java | 34 ++ .../impl/SchBaseRegionServiceImpl.java | 3 +- .../sch/task/service/ISchBaseTaskService.java | 2 + .../wms/sch/task/service/dao/SchBaseTask.java | 7 +- .../sch/task/service/dto/SchBaseTaskDto.java | 3 + .../service/impl/SchBaseTaskServiceImpl.java | 10 + .../nl/wms/sch/task_manage/AbstractTask.java | 27 +- .../nl/wms/sch/task_manage/AcsTaskDto.java | 25 +- .../sch/task_manage/GeneralDefinition.java | 17 +- .../nl/wms/sch/task_manage/task/AcsUtil.java | 8 +- .../task/tasks/auto/RYKQLTask.java | 247 +++++++------- .../task_manage/task/tasks/dtk/CTQKTask.java | 4 +- .../task_manage/task/tasks/dtk/DTSKTask.java | 17 +- .../task_manage/task/tasks/fj/FJMKTask.java | 225 ++++++++++--- .../task_manage/task/tasks/fj/FJQKTask.java | 147 +++++--- .../task_manage/task/tasks/fj/FJQLTask.java | 45 ++- .../task_manage/task/tasks/fj/FJRKTask.java | 180 ++++++++-- .../task_manage/task/tasks/fj/FJSKTask.java | 45 ++- .../task_manage/task/tasks/fj/FJSLTask.java | 234 +++++++++++++ .../task/tasks/fj/mapper/FJMapper.java | 4 + .../task/tasks/fj/mapper/FJMapper.xml | 13 + .../task_manage/task/tasks/hn/HNMLTask.java | 128 ++++--- .../task_manage/task/tasks/hn/HNQKTask.java | 2 +- .../task/tasks/hn/mapper/HNMapper.xml | 2 +- .../task_manage/task/tasks/yao/CYZCTask.java | 51 ++- .../task_manage/task/tasks/yao/GZYQLTask.java | 181 ++++++++++ .../task_manage/task/tasks/yz/YZQKTask.java | 32 +- .../task_manage/task/tasks/yz/YZQLTask.java | 2 +- .../task_manage/task/tasks/yz/YZSKTask.java | 22 +- .../task_manage/task/tasks/yz/YZSLTask.java | 94 ++++-- .../java/org/nl/wms/util/CommonUtils.java | 9 + .../main/java/org/nl/wms/util/TaskUtils.java | 22 +- .../test/java/org/nl/point/PointCreate.java | 15 +- .../src/views/tools/codeGen/codeDetail.vue | 2 +- .../src/views/wms/basedata/brick/index.vue | 203 +++++++++++ .../wms/basedata/brick/mdBaseBrickInfo.js | 27 ++ .../src/views/wms/pdm/record/index.vue | 15 +- .../src/views/wms/pdm/track/index.vue | 116 +++++++ .../track/pdmBdProductionProcessTracking.js | 27 ++ .../src/views/wms/sch/group/index.vue | 10 +- .../src/views/wms/sch/task/index.vue | 9 +- 101 files changed, 3313 insertions(+), 688 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/controller/MdBaseBrickInfoController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoQuery.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CancelTaskRequest.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CreateTaskRequest.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/FeedBackTaskStatusRequest.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GetPalletizeRequest.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PutActionRequest.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CancelTaskResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CreateTaskResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/FeedBackTaskStatusResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/GetPalletizeResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/PutActionResponse.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/Resp.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/controller/PdmBdProductionProcessTrackingController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/controller/PdmBdWorkorderController.java (90%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/IPdmBdWorkorderService.java (71%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/PdmBdWorkorder.java (98%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/mapper/PdmBdWorkorderMapper.java (65%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dao/mapper/PdmBdWorkorderMapper.xml (89%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dto/PdmBdWorkorderDto.java (97%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/dto/PdmBdWorkorderQuery.java (88%) rename lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/{ => workorder}/service/impl/PdmBdWorkorderServiceImpl.java (73%) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/ReportService.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.xml create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/impl/ReportServiceImpl.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java create mode 100644 lms/nladmin-ui/src/views/wms/basedata/brick/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/basedata/brick/mdBaseBrickInfo.js create mode 100644 lms/nladmin-ui/src/views/wms/pdm/track/index.vue create mode 100644 lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js diff --git a/lms/nladmin-system/doc/wms.xls b/lms/nladmin-system/doc/wms.xls index dc4148865f9751af1ffcd509348a2577acde5bfb..03b9b3c8bfe1b9adecd8c73601fa02b207bc9c46 100644 GIT binary patch delta 23142 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
1mEEuL1w)) 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 OclRkv%0RuN{Qm%hryHXH delta 48383 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 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/controller/MdBaseBrickInfoController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/controller/MdBaseBrickInfoController.java new file mode 100644 index 0000000..a4df162 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/controller/MdBaseBrickInfoController.java @@ -0,0 +1,66 @@ +package org.nl.wms.database.brick.controller; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.database.brick.service.IMdBaseBrickInfoService; +import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.Set; +/** +* @author lyd +* @date 2023-07-19 +**/ +@Slf4j +@RestController +@Api(tags = "每块砖的信息记录管理") +@RequestMapping("/api/mdBaseBrickInfo") +public class MdBaseBrickInfoController { + + @Autowired + private IMdBaseBrickInfoService mdBaseBrickInfoService; + + @GetMapping + @Log("查询每块砖的信息记录") + @ApiOperation("查询每块砖的信息记录") + //@SaCheckPermission("@el.check('mdBaseBrickInfo:list')") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(mdBaseBrickInfoService.queryAll(whereJson,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增每块砖的信息记录") + @ApiOperation("新增每块砖的信息记录") + //@SaCheckPermission("@el.check('mdBaseBrickInfo:add')") + public ResponseEntity create(@Validated @RequestBody MdBaseBrickInfo entity){ + mdBaseBrickInfoService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改每块砖的信息记录") + @ApiOperation("修改每块砖的信息记录") + //@SaCheckPermission("@el.check('mdBaseBrickInfo:edit')") + public ResponseEntity update(@Validated @RequestBody MdBaseBrickInfo entity){ + mdBaseBrickInfoService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除每块砖的信息记录") + @ApiOperation("删除每块砖的信息记录") + //@SaCheckPermission("@el.check('mdBaseBrickInfo:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + mdBaseBrickInfoService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java new file mode 100644 index 0000000..c2964c3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/IMdBaseBrickInfoService.java @@ -0,0 +1,56 @@ +package org.nl.wms.database.brick.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo; +import org.nl.wms.ext.acs.service.dto.BrickInfoDto; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-07-19 +**/ +public interface IMdBaseBrickInfoService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(Map whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(MdBaseBrickInfo entity); + + /** + * 编辑 + * @param entity / + */ + void update(MdBaseBrickInfo entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); + + /** + * 添加每块砖信息记录 + * @param dto + */ + void addBrickInfo(BrickInfoDto dto); + + /** + * 将所有当前位置的砖块设置组盘标识 + * @param deviceCode : 放砖位置-压制对接位 + */ + void setGroupByCurrentAllBrick(String deviceCode, String groupId); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java new file mode 100644 index 0000000..1cd2125 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/MdBaseBrickInfo.java @@ -0,0 +1,79 @@ +package org.nl.wms.database.brick.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-19 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_base_brick_info") +public class MdBaseBrickInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "brick_id", type = IdType.NONE) + @ApiModelProperty(value = "砖块标识") + private String brick_id; + + @ApiModelProperty(value = "当前抓取工位") + private String get_station; + + @ApiModelProperty(value = "当前放置工位") + private String put_station; + + @ApiModelProperty(value = "是否合格") + private Boolean is_qualified; + + @ApiModelProperty(value = "激光标刻码") + private String laser_marking_code; + + @ApiModelProperty(value = "碾次") + private String grinding_number; + + @ApiModelProperty(value = "高度1") + private String height1; + + @ApiModelProperty(value = "高度2") + private String height2; + + @ApiModelProperty(value = "高度3") + private String height3; + + @ApiModelProperty(value = "高度4") + private String height4; + + @ApiModelProperty(value = "宽度1") + private String width1; + + @ApiModelProperty(value = "宽度2") + private String width2; + + @ApiModelProperty(value = "长度") + private String len; + + @ApiModelProperty(value = "体积") + private String volume; + + @ApiModelProperty(value = "平面度") + private String flatness; + + @ApiModelProperty(value = "缺陷个数") + private String unqualified_qty; + + @ApiModelProperty(value = "组盘标识") + private String group_id; + + @ApiModelProperty(value = "是否组盘") + private Boolean is_group; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java new file mode 100644 index 0000000..da08666 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.brick.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo; + +/** +* @author lyd +* @date 2023-07-19 +**/ +public interface MdBaseBrickInfoMapper extends BaseMapper { + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml new file mode 100644 index 0000000..af568a1 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dao/mapper/MdBaseBrickInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoDto.java new file mode 100644 index 0000000..e6cbe0c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoDto.java @@ -0,0 +1,67 @@ +package org.nl.wms.database.brick.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-19 +**/ +@Data +public class MdBaseBrickInfoDto implements Serializable { + + /** 砖块标识 */ + private String brick_id; + + /** 当前抓取工位 */ + private String get_station; + + /** 当前放置工位 */ + private String put_station; + + /** 是否合格 */ + private Boolean is_qualified; + + /** 激光标刻码 */ + private String laser_marking_code; + + /** 碾次 */ + private String grinding_number; + + /** 高度1 */ + private String height1; + + /** 高度2 */ + private String height2; + + /** 高度3 */ + private String height3; + + /** 高度4 */ + private String height4; + + /** 宽度1 */ + private String width1; + + /** 宽度2 */ + private String width2; + + /** 长度 */ + private String len; + + /** 体积 */ + private String volume; + + /** 平面度 */ + private String flatness; + + /** 缺陷个数 */ + private String unqualified_qty; + + /** 组盘标识 */ + private String group_id; + + /** 是否组盘 */ + private Boolean is_group; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoQuery.java new file mode 100644 index 0000000..d56a61b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/dto/MdBaseBrickInfoQuery.java @@ -0,0 +1,12 @@ +package org.nl.wms.database.brick.service.dto; + +import org.nl.common.domain.query.BaseQuery; +import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo; + +/** +* @author lyd +* @date 2023-07-19 +**/ +public class MdBaseBrickInfoQuery extends BaseQuery { + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java new file mode 100644 index 0000000..36b3867 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/brick/service/impl/MdBaseBrickInfoServiceImpl.java @@ -0,0 +1,101 @@ +package org.nl.wms.database.brick.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.database.brick.service.IMdBaseBrickInfoService; +import org.nl.wms.database.brick.service.dao.mapper.MdBaseBrickInfoMapper; +import org.nl.wms.database.brick.service.dao.MdBaseBrickInfo; +import org.nl.wms.ext.acs.service.dto.BrickInfoDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-07-19 +**/ +@Slf4j +@Service +public class MdBaseBrickInfoServiceImpl extends ServiceImpl implements IMdBaseBrickInfoService { + + @Autowired + private MdBaseBrickInfoMapper mdBaseBrickInfoMapper; + + @Override + public IPage queryAll(Map whereJson, PageQuery page){ + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + mdBaseBrickInfoMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(MdBaseBrickInfo entity) { + entity.setBrick_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + mdBaseBrickInfoMapper.insert(entity); + } + + @Override + public void update(MdBaseBrickInfo entity) { + MdBaseBrickInfo dto = mdBaseBrickInfoMapper.selectById(entity.getBrick_id()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + mdBaseBrickInfoMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + mdBaseBrickInfoMapper.deleteBatchIds(ids); + } + + @Override + public void addBrickInfo(BrickInfoDto dto) { + MdBaseBrickInfo brickInfo = toBrickInfoMapper(dto); + mdBaseBrickInfoMapper.insert(brickInfo); + } + + @Override + public void setGroupByCurrentAllBrick(String deviceCode, String groupId) { + MdBaseBrickInfo brickInfo = new MdBaseBrickInfo(); + brickInfo.setIs_group(true); + brickInfo.setGroup_id(groupId); + this.update(brickInfo, new LambdaQueryWrapper() + .eq(MdBaseBrickInfo::getPut_station, deviceCode) + .eq(MdBaseBrickInfo::getIs_group, false)); + } + + private MdBaseBrickInfo toBrickInfoMapper(BrickInfoDto dto) { + MdBaseBrickInfo brickInfo = new MdBaseBrickInfo(); + brickInfo.setBrick_id(IdUtil.getSnowflake(1,1).nextIdStr()); + brickInfo.setGet_station(dto.getGet_station()); + brickInfo.setPut_station(dto.getPut_station()); + brickInfo.setIs_qualified(dto.getIs_qualified().equals("1")); + brickInfo.setLaser_marking_code(dto.getLaser_marking_code()); + brickInfo.setGrinding_number(dto.getGrinding_number()); + brickInfo.setHeight1(dto.getHeight1()); + brickInfo.setHeight2(dto.getHeight2()); + brickInfo.setHeight3(dto.getHeight3()); + brickInfo.setHeight4(dto.getHeight4()); + brickInfo.setWidth1(dto.getWidth1()); + brickInfo.setWidth2(dto.getWidth2()); + brickInfo.setLen(dto.getLen()); + brickInfo.setVolume(dto.getVolume()); + brickInfo.setFlatness(dto.getFlatness()); + brickInfo.setUnqualified_qty(dto.getUnqualified_qty()); + brickInfo.setIs_group(false); + return brickInfo; + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java index 7ec52ab..31e53dc 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/database/material/service/dao/MdBaseMaterial.java @@ -39,7 +39,7 @@ public class MdBaseMaterial implements Serializable { private String class_id; @ApiModelProperty(value = "静置时间(分钟)") - private BigDecimal standing_time; + private Integer standing_time; @ApiModelProperty(value = "车间编码") private String workshop_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java index ed45257..6e047dd 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java @@ -7,7 +7,6 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nl.common.logging.annotation.Log; import org.nl.wms.ext.acs.service.AcsToWmsService; -import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -27,56 +26,15 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j @SaIgnore public class AcsToWmsController { - @Autowired - private ISchBaseTaskService schBaseTaskService; @Autowired private AcsToWmsService acsToWmsService; @PostMapping("/apply") @Log("新增任务管理") @ApiOperation("新增任务管理") - //@SaCheckPermission("@el.check('schBaseTask:add')") @SaIgnore public ResponseEntity apply(@RequestBody JSONObject param) { return new ResponseEntity<>(acsToWmsService.acsApply(param), HttpStatus.OK); } - -// @PostMapping("/apply2") -// @Log("新增任务管理") -// @ApiOperation("新增任务管理") -// //@SaCheckPermission("@el.check('schBaseTask:add')") -// @SaIgnore -// public ResponseEntity apply2(@RequestBody Map param) { -// schBaseTaskService.apply(JSONObject.parseObject(JSON.toJSONString(param))); -// return new ResponseEntity<>(HttpStatus.CREATED); -// } - - @PostMapping("/status") - @Log("ACS给WMS反馈任务状态") - @ApiOperation("ACS给WMS反馈任务状态") - @SaIgnore - public ResponseEntity receiveTaskStatusAcs(@RequestBody String string) { - return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); - } - - @PostMapping("/pressRequestMaterial") - @Log("压机要料请求") - @ApiOperation("压机要料请求") - //@SaCheckPermission("@el.check('schBaseTask:add')") - @SaIgnore - public ResponseEntity pressRequestMaterial(@RequestBody JSONObject param) { - return new ResponseEntity<>(acsToWmsService.pressRequestMaterial(param), HttpStatus.CREATED); - } - - @PostMapping("/getGroupInfo") - @Log("获取组盘信息") - @ApiOperation("获取组盘信息") - //@SaCheckPermission("@el.check('schBaseTask:add')") - @SaIgnore - public ResponseEntity getGroupInfo(@RequestBody JSONObject param) { - return new ResponseEntity<>(acsToWmsService.getVehicleInfo(param), HttpStatus.CREATED); - } - - } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 5fa6edb..e6e7f0c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -2,6 +2,8 @@ package org.nl.wms.ext.acs.service; import com.alibaba.fastjson.JSONObject; import org.nl.wms.ext.acs.service.vo.BaseResponse; +import org.nl.wms.ext.acs.service.vo.FeedBackTaskStatusResponse; +import org.nl.wms.ext.acs.service.vo.GetPalletizeResponse; /** * @Author: lyd @@ -9,18 +11,6 @@ import org.nl.wms.ext.acs.service.vo.BaseResponse; * @Date: 2023/6/26 */ public interface AcsToWmsService { - /** - * ACS请求压机要料 - * @param param - * @return - */ - BaseResponse pressRequestMaterial(JSONObject param); - - /** ACS反馈 */ - JSONObject receiveTaskStatusAcs(String string); - - /** 获取组盘信息 */ - JSONObject getVehicleInfo(JSONObject param); BaseResponse acsApply(JSONObject param); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ApplyTaskRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ApplyTaskRequest.java index 32bd0d7..75155d7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ApplyTaskRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/ApplyTaskRequest.java @@ -1,7 +1,12 @@ package org.nl.wms.ext.acs.service.dto; import lombok.Data; +import org.nl.wms.ext.acs.service.dto.BaseRequest; +import org.nl.wms.ext.acs.service.dto.PalletizeDto; +/** + * ACS 任务申请请求实体 + */ @Data public class ApplyTaskRequest extends BaseRequest { @@ -11,7 +16,7 @@ public class ApplyTaskRequest extends BaseRequest { private String vehicle_code; /** - * 载具号 + * 载具类型 */ private String vehicle_type; @@ -35,4 +40,9 @@ public class ApplyTaskRequest extends BaseRequest { */ private String qty; + /** + * 砖型 + */ + private PalletizeDto palletizeDto; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BaseRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BaseRequest.java index 4926be6..89828df 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BaseRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BaseRequest.java @@ -1,11 +1,13 @@ package org.nl.wms.ext.acs.service.dto; -import com.alibaba.fastjson.JSONObject; import lombok.Data; import java.util.HashMap; import java.util.Map; +/** + * ACS请求基础实体 + */ @Data public class BaseRequest { @@ -30,34 +32,10 @@ public class BaseRequest { private String request_medthod_name; /** - * 请求设备 + * 设备号 */ private String device_code; - /** - * 载具号 - */ - private String vehicle_code; - - /** - * 重量 - */ - private String weight; - - /** - * 工单号 - */ - private String order_code; - - /** - * 物料 - */ - private String material_code; - - /** - * 数量 - */ - private String qty; /** * 系统编号 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BrickInfoDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BrickInfoDto.java index 0f53e78..5428505 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BrickInfoDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/BrickInfoDto.java @@ -4,7 +4,7 @@ import lombok.Data; /** * @Author: lyd - * @Description: 砖信息 + * @Description: 砖信息实体 * @Date: 2023/7/18 */ @Data diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CancelTaskRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CancelTaskRequest.java new file mode 100644 index 0000000..020d2b4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CancelTaskRequest.java @@ -0,0 +1,36 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 取消任务请求 + * @Date: 2023/7/26 + */ +@Data +public class CancelTaskRequest extends BaseRequest { + + /** + * 任务标识 + */ + private String ext_task_id; + + /** + * 任务编号 + */ + private String task_code; + + /** + * 载具号 + */ + String vehicle_code; + + /** + * 扩展属性 + */ + Map params; + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CreateTaskRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CreateTaskRequest.java new file mode 100644 index 0000000..2f51739 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/CreateTaskRequest.java @@ -0,0 +1,130 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 下发任务实体类 + * @Date: 2023/7/26 + */ +@Data +public class CreateTaskRequest extends BaseRequest { + + /** + * 任务标识 + */ + private String ext_task_id; + + /** + * 任务编号 + */ + private String task_code; + + + /** + * 取货点1 + */ + String start_device_code; + + /** + * 放货点1 + */ + String next_device_code; + + /** + * 取货点2 + */ + String start_device_code2; + + /** + * 放货点2 + */ + String next_device_code2; + + /** + * 对接位 + */ + String put_device_code; + + /** + * 优先级 + */ + String priority; + + /** + * 载具号 + */ + String vehicle_code; + + /** + * 载具号2 + */ + String vehicle_code2; + + /** + * 载具类型 + */ + String vehicle_type; + + /** + * 路由方案 + */ + String route_plan_code; + + /** + * 任务类型 + */ + String task_type; + + /** + * 立库任务类型 + * + */ + String dtl_type; + + /** + * Agv系统类型 + * 1:1楼叉车系统 + * 2:2楼1区域AGV系统 + * 3:2楼2区域AGV系统 + */ + String agv_system_type; + + /** + * 备注 + */ + String remark; + + /** + * 烘箱时间 + */ + String oven_time; + + /** + * 烘箱温度 + */ + String temperature; + + /** + * agv取货高度 + */ + private String start_height; + + /** + * agv放货高度 + */ + private String next_height; + + /** + * 方向 1往左 2往右 + */ + private String direction; + + /** + * 扩展属性 + */ + Map params; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/FeedBackTaskStatusRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/FeedBackTaskStatusRequest.java new file mode 100644 index 0000000..55cc824 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/FeedBackTaskStatusRequest.java @@ -0,0 +1,47 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +/** + * ACS任务反馈请求实体 + */ +@Data +public class FeedBackTaskStatusRequest extends BaseRequest { + + /** + * 任务id + */ + private String task_id; + + /** + * 任务code + */ + private String task_code; + + /** + * 任务状态 + */ + private String task_status; + + /** + * 任务类型 + */ + private String task_type; + + /** + * 车号 + */ + private String car_no; + + /** + * 载具号 + */ + private String vehicle_code; + + /** + * 动作 1请求取货 2取货完成 3请求放货 4放货完成 + */ + private String action; + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GetPalletizeRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GetPalletizeRequest.java new file mode 100644 index 0000000..0f8f6e7 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GetPalletizeRequest.java @@ -0,0 +1,11 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +@Data +public class GetPalletizeRequest extends BaseRequest { + /** + * 载具号 + */ + private String vehicle_code; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GrabRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GrabRequest.java index b6d44f8..80ad737 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GrabRequest.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/GrabRequest.java @@ -1,8 +1,10 @@ package org.nl.wms.ext.acs.service.dto; - import lombok.Data; +/** + * ACS抓取砖块记录信息实体 + */ @Data public class GrabRequest extends BaseRequest { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PutActionRequest.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PutActionRequest.java new file mode 100644 index 0000000..f356f38 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/PutActionRequest.java @@ -0,0 +1,22 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 提供设备信号 + * @Date: 2023/7/26 + */ +@Data +public class PutActionRequest extends BaseRequest { + + /** + * 设备号 + */ + private String device_code; + + private List list ; + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java new file mode 100644 index 0000000..9148f27 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/dto/SignalData.java @@ -0,0 +1,18 @@ +package org.nl.wms.ext.acs.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 信号:mode:'1', move:'0'之类 + * @Date: 2023/7/26 + */ +@Data +public class SignalData { + + private String code; + + private String value; + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 9da141b..73073cf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -5,21 +5,28 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.config.MapOf; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.brick.service.IMdBaseBrickInfoService; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; +import org.nl.wms.ext.acs.service.dto.*; import org.nl.wms.ext.acs.service.dto.ApplyTaskRequest; import org.nl.wms.ext.acs.service.vo.BaseResponse; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.ext.acs.service.vo.ApplyTaskResponse; +import org.nl.wms.ext.acs.service.vo.GetPalletizeResponse; import org.nl.wms.ext.record.service.ISysInteractRecordService; import org.nl.wms.pdm.record.service.IPdmBdRequestMaterialRecordService; import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -65,16 +72,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired private TaskFactory taskFactory; - @Autowired - private TaskUtils taskUtils; + @Autowired private ISysNoticeService noticeService; @Autowired private ISysInteractRecordService interactRecordService; + @Autowired + private IMdBaseBrickInfoService baseBrickInfoService; + @Autowired + private IMdBaseMaterialService materialService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; @Override public BaseResponse acsApply(JSONObject param) { - BaseResponse result = new BaseResponse(); + String requestNo = param.getString("requestNo"); + BaseResponse result = BaseResponse.build(requestNo); try { String requestMethodCode = param.getString("request_medthod_code"); // 获取请求方法名 if (ObjectUtil.isEmpty(requestMethodCode)) { @@ -89,9 +102,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.error("ACS请求LMS出现错误: {}", message); result.setCode(HttpStatus.HTTP_BAD_REQUEST); result.setMessage(message); - result.setRequestNo(param.getString("requestNo")); + result.setRequestNo(requestNo); // 消息通知 - noticeService.createNotice("异常信息:" + message, "acsApply: " + param.getString("requestNo"), + noticeService.createNotice("异常信息:" + message, "acsApply: " + requestNo, NoticeTypeEnum.EXCEPTION.getCode()); } // acs对接记录 @@ -164,12 +177,21 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } /** 申请强制取走满料盅托盘(强制入库) */ - public String applyForceTakeFullVehicle(JSONObject param) { + public ApplyTaskResponse applyForceTakeFullVehicle(JSONObject param) { + String deviceCode = param.getString("device_code"); + SchBasePoint basePoint = pointService.getById(deviceCode); + if (ObjectUtil.isEmpty(basePoint)) { + throw new BadRequestException("点位错误!"); + } String requestNo = param.getString("requestNo"); - return requestNo; + String configCode = basePoint.getRegion_code() + "QZRKTask"; + // 组织参数 + param.put("config_code", configCode); + taskService.apply(param); + return ApplyTaskResponse.responseOk(requestNo); } - /** 申请强制满托入缓存 */ + /** 申请强制满托入缓存 todo: 暂时 */ public ApplyTaskResponse applyForceTakeFullVehicleInStorage(JSONObject param) { // 找到当前的设备 String deviceCode = param.getString("device_code"); @@ -178,29 +200,47 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("点位错误!"); } String requestNo = param.getString("requestNo"); - String configCode = basePoint.getRegion_code() + "CZRKTask"; + String configCode = basePoint.getRegion_code() + "SLHSTask"; // 组织参数 param.put("config_code", configCode); taskService.apply(param); return ApplyTaskResponse.responseOk(requestNo); } - /** 强制去包装位(半托) 记录不包装 */ + /** 强制去包装位(半托) 记录不包装 --- 业务不需要*/ public String forceNoPackage(JSONObject param) { String requestNo = param.getString("requestNo"); return requestNo; } /** 申请贴标 */ - public String applyLabelling(JSONObject param) { + public BaseResponse applyLabelling(JSONObject param) { + // 木托盘号##物料编码##数量##吨量(单重X数量)##生产日期##成型工单号(mes提供压制工单) String requestNo = param.getString("requestNo"); - return requestNo; + ApplyTaskRequest baseRequest = param.toJavaObject(ApplyTaskRequest.class); + if (baseRequest.getVehicle_code() == null) { + return BaseResponse.responseError(requestNo, "载具编码不能为空!"); + } + StringBuilder sb = new StringBuilder(); + SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(baseRequest.getVehicle_code(), + GroupBindMaterialStatusEnum.UNBOUND.getValue()); + String materialId = groupInfo.getMaterial_id(); + MdBaseMaterial baseMaterial = materialService.getById(materialId); + // 组合 + sb.append(baseRequest.getVehicle_code()).append("##") + .append(baseMaterial.getMaterial_code()).append("##") + .append("吨量").append("##") + .append(DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); + return BaseResponse.responseOk(requestNo, MapOf.of("labelling", sb.toString())); } /** 单次放置完成 - 每块砖的信息 */ - public String applyOneGrab(JSONObject param) { + public BaseResponse applyOneGrab(JSONObject param) { String requestNo = param.getString("requestNo"); - return requestNo; + JSONObject brickInfo = param.getJSONObject("brick_info"); + BrickInfoDto brickInfoDto = brickInfo.toJavaObject(BrickInfoDto.class); + baseBrickInfoService.addBrickInfo(brickInfoDto); // 添加数据 + return BaseResponse.responseOk(requestNo); } /** 人工排产确认 */ @@ -236,40 +276,103 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } /** 扫码成功申请 - 判断是否静置完成 */ - public BaseResponse barcodeSuccessApply(JSONObject param) { - String requestNo = param.getString("requestNo"); - BaseResponse standResponse = BaseResponse.build(requestNo); + public ApplyTaskResponse barcodeSuccessApply(JSONObject param) { ApplyTaskRequest baseRequest = param.toJavaObject(ApplyTaskRequest.class); + String deviceCode = baseRequest.getDevice_code(); + SchBasePoint basePoint = pointService.getById(deviceCode); // 获取点位实体 + switch (basePoint.getRegion_code()) { + case GeneralDefinition.LZKLX: // 如果是困料线位置就是判断是否静置完成 + return this.isStandingFinish(baseRequest); // 直接返回 + case GeneralDefinition.GZY: // 如果是入窑口就是记录数据 + return this.recordKilnTime(baseRequest); // 直接返回 + default: + return (ApplyTaskResponse) ApplyTaskResponse.responseError(baseRequest.getRequestNo(), + "参数错误"); + } + + } + + /** 扫码成功申请 - 判断是否静置完成 */ + public ApplyTaskResponse isStandingFinish(ApplyTaskRequest baseRequest) { + String requestNo = baseRequest.getRequestNo(); + ApplyTaskResponse taskResponse = ApplyTaskResponse.responseOk(requestNo); + SchBasePoint basePoint = pointService.getById(baseRequest.getDevice_code()); + if (ObjectUtil.isEmpty(baseRequest.getVehicle_code())) { + return (ApplyTaskResponse) ApplyTaskResponse.responseError(requestNo, "载具编码不能为空!"); + } + if (ObjectUtil.isEmpty(baseRequest.getVehicle_type())) { + baseRequest.setVehicle_type(GeneralDefinition.STEEL_TRAY); + } + // 静置完成要把组盘改成以解绑 + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroupInfo(baseRequest.getVehicle_code(), + baseRequest.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue()); + if (ObjectUtil.isEmpty(one)) { + // 返回400,物料不存在 + return (ApplyTaskResponse) ApplyTaskResponse.responseError(requestNo, "物料不存在!"); + } + String yjDeviceCode = basePoint.getParent_point_code(); // 压机设备编码 + // 获取当前工单 + PdmBdWorkorder productionTask = workorderService.getDeviceProductionTask(yjDeviceCode); + // 校验物料是否正确 + if (ObjectUtil.isEmpty(productionTask)) { + return (ApplyTaskResponse) ApplyTaskResponse.responseError(requestNo, + "压机" + yjDeviceCode + "工单不存在!"); + } + String rawMaterialCode = productionTask.getRaw_material_code(); + if (!rawMaterialCode.equals(baseRequest.getMaterial_code())) { + return (ApplyTaskResponse) ApplyTaskResponse.responseError(requestNo, "物料不一样!"); + } + + // 判断是否静置完成 + if (CommonUtils.isStandingFinish(one.getInstorage_time(), one.getStanding_time())) { + if (ObjectUtil.isNotEmpty(basePoint)) { + // 记录当前位置 + one.setPoint_code(basePoint.getPoint_code()); // 当前位置 + one.setPoint_name(basePoint.getPoint_name()); + one.setMove_way(one.getMove_way() + " -> " + basePoint.getPoint_code()); + } + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + TaskUtils.setGroupUpdateByAcs(one); + vehiclematerialgroupService.updateById(one); + taskResponse.setIs_standing_finish(GeneralDefinition.YES); + taskResponse.setMessage("静置完成"); + return taskResponse; + } else { + taskResponse.setIs_standing_finish(GeneralDefinition.NO); + taskResponse.setMessage("静置未完成"); + return taskResponse; + } + } + + /** 扫码成功申请 - 入窑记录时间 */ + public ApplyTaskResponse recordKilnTime(ApplyTaskRequest baseRequest) { if (ObjectUtil.isEmpty(baseRequest.getVehicle_code())) { throw new BadRequestException("载具编码不能为空"); } if (ObjectUtil.isEmpty(baseRequest.getVehicle_type())) { - throw new BadRequestException("载具类型不能为空"); + baseRequest.setVehicle_type(GeneralDefinition.STEEL_TRAY); } - // 入库完成要把组盘改成以解绑 - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, baseRequest.getVehicle_code()) - .eq(SchBaseVehiclematerialgroup::getVehicle_type, baseRequest.getVehicle_type()) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()) - .eq(SchBaseVehiclematerialgroup::getIs_delete, false)); - if (ObjectUtil.isEmpty(one)) { - // 返回400,物料不存在 - standResponse.setCode(HttpStatus.HTTP_BAD_REQUEST); - standResponse.setMessage("物料不存在"); - return standResponse; + SchBasePoint basePoint = pointService.getById(baseRequest.getDevice_code()); + // 入窑记录时间 + SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(baseRequest.getVehicle_code(), + baseRequest.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue()); + groupInfo.setInto_kiln_time(DateUtil.now()); + if (ObjectUtil.isNotEmpty(basePoint)) { + // 记录当前位置 + groupInfo.setPoint_code(basePoint.getPoint_code()); // 当前位置 + groupInfo.setPoint_name(basePoint.getPoint_name()); + groupInfo.setMove_way(groupInfo.getMove_way() + " -> " + basePoint.getPoint_code()); } - // 判断是否静置完成 - if (CommonUtils.isStandingFinish(one.getInstorage_time(), one.getStanding_time())) { - standResponse.setCode(HttpStatus.HTTP_OK); - standResponse.setMessage("静置完成"); - one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); - taskUtils.setGroupUpdateByAcs(one); - vehiclematerialgroupService.updateById(one); - } else { - standResponse.setCode(HttpStatus.HTTP_BAD_REQUEST); - standResponse.setMessage("静置未完成"); - } - return standResponse; + TaskUtils.setGroupUpdateByAcs(groupInfo); + vehiclematerialgroupService.updateById(groupInfo); + // 插入生产过程跟踪表 + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(groupInfo.getBuss_move_id()); + processTracking.setProcess_action("送料到入窑口"); + processTracking.setProcess_location(baseRequest.getDevice_code()); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); + return ApplyTaskResponse.responseOk(baseRequest.getRequestNo()); } /** @@ -277,7 +380,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * @param param * @return */ - @Override @Transactional(rollbackFor = Exception.class) public BaseResponse pressRequestMaterial(JSONObject param) { // (公共接口进来)只是给我一个下料位(中间位置) String requestNo = param.getString("requestNo"); @@ -303,92 +405,79 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { requestMaterialRecord.setWorkorder_id(workOrder.getWorkorder_id()); requestMaterialRecord.setDevice_code(parentPointCode); requestMaterialRecord.setCreate_time(DateUtil.now()); + requestMaterialRecord.setIs_finish(false); requestMaterialRecordService.save(requestMaterialRecord); return BaseResponse.responseOk(requestNo); } - @Override - public JSONObject receiveTaskStatusAcs(String string) { - JSONArray array = JSONArray.parseArray(string); - //返回处理失败的任务 - JSONArray errArr = new JSONArray(); - for (int i = 0; i < array.size(); i++) { - JSONObject row = array.getJSONObject(i); - String taskCode = row.getString("task_code"); - if (ObjectUtil.isEmpty(taskCode)) { - throw new BadRequestException("任务编码不能为空!"); - } -// String taskId = row.getString("task_id"); - SchBaseTask taskObj = taskService.getById(taskCode); - if (ObjectUtil.isEmpty(taskObj)) { - throw new BadRequestException("未找到任务编码为 [" + taskCode + "] 的任务"); - } - // 任务处理类 - String processingClass = taskObj.getConfig_code(); - //1:执行中,2:完成 ,3:acs取消 - String acsTaskStatus = row.getString("task_status"); - String message = ""; - TaskStatus status = TaskStatus.APPLY; - switch (acsTaskStatus) { - case "1": - status = TaskStatus.EXECUTING; - break; - case "2": - status = TaskStatus.FINISHED; - break; - case "3": - status = TaskStatus.CANCELED; - break; - default: - break; - } - // 根据配置去工厂类获得类对象 - AbstractTask abstractTask = taskFactory.getTask(processingClass); - // 更新任务 - try { - abstractTask.updateTaskStatus(taskCode, status); - } catch (Exception e) { - log.error("任务状态更新失败:{}", message); - JSONObject json = new JSONObject(); - json.put("task_code", taskCode); - json.put("message", message); - errArr.add(json); - } + public BaseResponse receiveTaskStatusAcs(JSONObject param) { + // todo: action暂未维护 + String requestNo = param.getString("requestNo"); + FeedBackTaskStatusRequest taskStatusRequest = param.toJavaObject(FeedBackTaskStatusRequest.class); + String taskCode = taskStatusRequest.getTask_code(); + if (ObjectUtil.isEmpty(taskCode)) { + throw new BadRequestException("任务编码不能为空!"); } - JSONObject result = new JSONObject(); - result.put("status", HttpStatus.HTTP_OK); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); - result.put("errArr", errArr); - return result; + SchBaseTask taskObj = taskService.getByCode(taskCode); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("未找到任务编码为 [" + taskCode + "] 的任务"); + } + // 任务处理类 + String processingClass = taskObj.getConfig_code(); + //1:执行中,2:完成 ,3:acs取消 + String acsTaskStatus = param.getString("task_status"); + String message = ""; + TaskStatus status = TaskStatus.APPLY; + switch (acsTaskStatus) { + case "1": + status = TaskStatus.EXECUTING; + break; + case "2": + status = TaskStatus.FINISHED; + break; + case "3": + status = TaskStatus.CANCELED; + break; + default: + break; + } + // 根据配置去工厂类获得类对象 + AbstractTask abstractTask = taskFactory.getTask(processingClass); + // 更新任务 + try { + abstractTask.updateTaskStatus(taskCode, status); + } catch (Exception e) { + log.error("任务状态更新失败:{}", message); + return BaseResponse.responseError(requestNo, "任务:[" + taskCode + "]状态更新失败," + message); + } + return BaseResponse.responseOk(requestNo, "任务状态反馈成功!"); } - @Override - public JSONObject getVehicleInfo(JSONObject param) { + public GetPalletizeResponse getVehicleInfo(JSONObject param) { // 校验组盘信息 - String vehicleCode = param.getString("vehicle_code"); - String vehicleType = param.getString("vehicle_type"); + GetPalletizeRequest palletizeRequest = param.toJavaObject(GetPalletizeRequest.class); + String vehicleCode = palletizeRequest.getVehicle_code(); + String vehicleType = GeneralDefinition.STEEL_TRAY; if (ObjectUtil.isEmpty(vehicleCode)) { throw new BadRequestException("载具编码为空!"); } // 根据载具编码查找组盘信息 -- 查找已绑定的数据 - SchBaseVehiclematerialgroup baseVehiclematerialgroup = vehiclematerialgroupService - .getOne(new LambdaQueryWrapper().eq( - SchBaseVehiclematerialgroup::getGroup_bind_material_status, - GroupBindMaterialStatusEnum.BOUND.getValue()) - .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) - .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType)); - JSONObject result = new JSONObject(); - result.put("status", "200"); - result.put("message", "任务状态反馈成功!"); - result.put("data", baseVehiclematerialgroup); - return result; + SchBaseVehiclematerialgroup baseVehiclematerialgroup = vehiclematerialgroupService.getGroupInfo(vehicleCode, + vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue()); + String extData = baseVehiclematerialgroup.getExt_data(); + if (extData == null) { + return GetPalletizeResponse.responseOk(palletizeRequest.getRequestNo()); + } + // 转成实体 + PalletizeDto palletizeDto = CommonUtils.toJavaObject(extData, PalletizeDto.class); + return GetPalletizeResponse.responseOk(palletizeRequest.getRequestNo(), palletizeDto); } /** 实时修改点位状态 */ public BaseResponse realTimeSetPoint(JSONObject param) { String requestNo = param.getString("requestNo"); String deviceCode = param.getString("device_code"); + String vehicleType = param.getString("vehicle_type"); if (deviceCode == null) { return BaseResponse.responseError(requestNo, "设备编码不能为空"); } @@ -406,6 +495,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { && move.equals(PointStatusEnum.EMPTY_VEHICLE.getCode())) || (pointStatus.equals(move))) { // 不做操作 return BaseResponse.responseOk(requestNo); } + if (vehicleType != null) { + schBasePoint.setVehicle_type(vehicleType); + } schBasePoint.setPoint_status(move); PointUtils.setUpdateByAcs(schBasePoint); pointService.updateById(schBasePoint); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/ApplyTaskResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/ApplyTaskResponse.java index 14e2f6b..3b42721 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/ApplyTaskResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/ApplyTaskResponse.java @@ -2,8 +2,20 @@ package org.nl.wms.ext.acs.service.vo; import cn.hutool.core.date.DateUtil; import cn.hutool.http.HttpStatus; +import lombok.Data; +@Data public class ApplyTaskResponse extends BaseResponse { + /** + * 是否静置完成 1完成 + */ + private String is_standing_finish; + + /** + * 是否优先包装 + */ + private String is_package; + public static ApplyTaskResponse responseOk(String requestNo) { ApplyTaskResponse response = new ApplyTaskResponse(); response.setRequestNo(requestNo); @@ -12,4 +24,5 @@ public class ApplyTaskResponse extends BaseResponse { response.setCode(HttpStatus.HTTP_OK); return response; } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/BaseResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/BaseResponse.java index 71db999..7db5897 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/BaseResponse.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/BaseResponse.java @@ -59,6 +59,23 @@ public class BaseResponse implements Serializable { response.setResponseDate(DateUtil.now()); return response; } + public static BaseResponse responseOk(String requestNo, String message) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage(message); + response.setResponseDate(DateUtil.now()); + return response; + } + public static BaseResponse responseOk(String requestNo, HashMap parameters) { + BaseResponse response = new BaseResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setResponseDate(DateUtil.now()); + response.setParameters(parameters); + return response; + } public static BaseResponse responseError(String requestNo, String message) { BaseResponse response = new BaseResponse(); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CancelTaskResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CancelTaskResponse.java new file mode 100644 index 0000000..a9c5bcc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CancelTaskResponse.java @@ -0,0 +1,13 @@ +package org.nl.wms.ext.acs.service.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 取消任务 + * @Date: 2023/7/26 + */ +@Data +public class CancelTaskResponse extends BaseResponse { + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CreateTaskResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CreateTaskResponse.java new file mode 100644 index 0000000..60b88dc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/CreateTaskResponse.java @@ -0,0 +1,14 @@ +package org.nl.wms.ext.acs.service.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 下发任务acs的反馈数据 + * @Date: 2023/7/26 + */ +@Data +public class CreateTaskResponse extends BaseResponse { + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/FeedBackTaskStatusResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/FeedBackTaskStatusResponse.java new file mode 100644 index 0000000..cde7a98 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/FeedBackTaskStatusResponse.java @@ -0,0 +1,4 @@ +package org.nl.wms.ext.acs.service.vo; + +public class FeedBackTaskStatusResponse extends BaseResponse { +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/GetPalletizeResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/GetPalletizeResponse.java new file mode 100644 index 0000000..15e24ea --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/GetPalletizeResponse.java @@ -0,0 +1,31 @@ +package org.nl.wms.ext.acs.service.vo; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.http.HttpStatus; +import lombok.Data; +import org.nl.wms.ext.acs.service.dto.PalletizeDto; + +@Data +public class GetPalletizeResponse extends BaseResponse { + + private PalletizeDto palletizeDto; + + public static GetPalletizeResponse responseOk(String requestNo) { + GetPalletizeResponse response = new GetPalletizeResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setResponseDate(DateUtil.now()); + return response; + } + + public static GetPalletizeResponse responseOk(String requestNo, PalletizeDto palletizeDto) { + GetPalletizeResponse response = new GetPalletizeResponse(); + response.setRequestNo(requestNo); + response.setCode(HttpStatus.HTTP_OK); + response.setMessage("请求成功"); + response.setPalletizeDto(palletizeDto); + response.setResponseDate(DateUtil.now()); + return response; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/PutActionResponse.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/PutActionResponse.java new file mode 100644 index 0000000..8d11756 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/PutActionResponse.java @@ -0,0 +1,11 @@ +package org.nl.wms.ext.acs.service.vo; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/7/26 + */ +public class PutActionResponse extends BaseResponse { + +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/Resp.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/Resp.java new file mode 100644 index 0000000..9523d21 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/vo/Resp.java @@ -0,0 +1,32 @@ +package org.nl.wms.ext.acs.service.vo; + +import lombok.Data; + +/** + * 调用立库接口统一返回参数类 + * + * @author: geng by + * @createDate: 2022/11/24 + */ +@Data +public class Resp { + /** + * 成功返回true,失败返回false + */ + public String result; + + /** + * 错误码(0表示成功)1代表入库目的位置有货,其他更多情况待定 + */ + public String code; + + /** + * 错误信息,如果成功则为null + */ + public String comment; + + /** + * 报文携带的数据 + */ + public T data; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java index 450e4b5..c326b40 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/IPdmBdRequestMaterialRecordService.java @@ -40,4 +40,10 @@ public interface IPdmBdRequestMaterialRecordService extends IService ids); + + /** + * 叫料完成 + * @param recordId + */ + void callMaterialFinish(String recordId); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/PdmBdRequestMaterialRecord.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/PdmBdRequestMaterialRecord.java index 84d5dad..71cec91 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/PdmBdRequestMaterialRecord.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dao/PdmBdRequestMaterialRecord.java @@ -36,5 +36,9 @@ public class PdmBdRequestMaterialRecord implements Serializable { @ApiModelProperty(value = "叫料时间") private String create_time; + @ApiModelProperty(value = "是否上料成功") + private Boolean is_finish; + @ApiModelProperty(value = "上料时间") + private String update_time; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dto/PdmBdRequestMaterialRecordDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dto/PdmBdRequestMaterialRecordDto.java index ae5228d..726d221 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dto/PdmBdRequestMaterialRecordDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/dto/PdmBdRequestMaterialRecordDto.java @@ -1,5 +1,6 @@ package org.nl.wms.pdm.record.service.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -25,4 +26,11 @@ public class PdmBdRequestMaterialRecordDto implements Serializable { /** 叫料时间 */ private String create_time; + + /** 是否上料成功 */ + private Boolean is_finish; + + /** 上料时间 */ + private String update_time; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java index 9c91033..23e4edf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/record/service/impl/PdmBdRequestMaterialRecordServiceImpl.java @@ -62,4 +62,12 @@ public class PdmBdRequestMaterialRecordServiceImpl extends ServiceImpl query(PdmBdProductionProcessTrackingQuery query, PageQuery page){ + return new ResponseEntity<>(TableDataInfo.build(pdmBdProductionProcessTrackingService + .queryAll(query,page)),HttpStatus.OK); + } + + @PostMapping + @Log("新增生产过程跟踪表") + @ApiOperation("新增生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:add')") + public ResponseEntity create(@Validated @RequestBody PdmBdProductionProcessTracking entity){ + pdmBdProductionProcessTrackingService.create(entity); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生产过程跟踪表") + @ApiOperation("修改生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:edit')") + public ResponseEntity update(@Validated @RequestBody PdmBdProductionProcessTracking entity){ + pdmBdProductionProcessTrackingService.update(entity); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生产过程跟踪表") + @ApiOperation("删除生产过程跟踪表") + //@SaCheckPermission("@el.check('pdmBdProductionProcessTracking:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Set ids) { + pdmBdProductionProcessTrackingService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java new file mode 100644 index 0000000..7e23c06 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/IPdmBdProductionProcessTrackingService.java @@ -0,0 +1,44 @@ +package org.nl.wms.pdm.track.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务接口 +* @author lyd +* @date 2023-07-21 +**/ +public interface IPdmBdProductionProcessTrackingService extends IService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param pageable 分页参数 + * @return IPage + */ + IPage queryAll(PdmBdProductionProcessTrackingQuery whereJson, PageQuery pageable); + + /** + * 创建 + * @param entity / + */ + void create(PdmBdProductionProcessTracking entity); + + /** + * 编辑 + * @param entity / + */ + void update(PdmBdProductionProcessTracking entity); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Set ids); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java new file mode 100644 index 0000000..9fb7e61 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/PdmBdProductionProcessTracking.java @@ -0,0 +1,44 @@ +package org.nl.wms.pdm.track.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-21 +**/ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("pdm_bd_production_process_tracking") +public class PdmBdProductionProcessTracking implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "process_id", type = IdType.NONE) + @ApiModelProperty(value = "跟踪标识") + private String process_id; + + @ApiModelProperty(value = "记录时间") + private String record_time; + + @ApiModelProperty(value = "动作") + private String process_action; + + @ApiModelProperty(value = "地点") + private String process_location; + + @ApiModelProperty(value = "链路id") + private String buss_move_id; + @TableField(exist = false) + private String vehicle_code; + @TableField(exist = false) + private String point_name; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java new file mode 100644 index 0000000..ece735f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.pdm.track.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; + +/** +* @author lyd +* @date 2023-07-21 +**/ +public interface PdmBdProductionProcessTrackingMapper extends BaseMapper { + + IPage selectPageLeftJoin(IPage pages, + PdmBdProductionProcessTrackingQuery query); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml new file mode 100644 index 0000000..3e33002 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dao/mapper/PdmBdProductionProcessTrackingMapper.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java new file mode 100644 index 0000000..9d246c5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingDto.java @@ -0,0 +1,28 @@ +package org.nl.wms.pdm.track.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** +* @description / +* @author lyd +* @date 2023-07-21 +**/ +@Data +public class PdmBdProductionProcessTrackingDto implements Serializable { + + /** 跟踪标识 */ + private String process_id; + + /** 记录时间 */ + private String record_time; + + /** 动作 */ + private String process_action; + + /** 地点 */ + private String process_location; + + /** 链路id */ + private String buss_move_id; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java new file mode 100644 index 0000000..25e68fa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/dto/PdmBdProductionProcessTrackingQuery.java @@ -0,0 +1,16 @@ +package org.nl.wms.pdm.track.service.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** +* @author lyd +* @date 2023-07-21 +**/ +@Data +public class PdmBdProductionProcessTrackingQuery implements Serializable { + private String buss_move_id; + private String begin_time; + private String end_time; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java new file mode 100644 index 0000000..5cb4ae5 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/track/service/impl/PdmBdProductionProcessTrackingServiceImpl.java @@ -0,0 +1,67 @@ +package org.nl.wms.pdm.track.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.mapper.PdmBdProductionProcessTrackingMapper; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.track.service.dto.PdmBdProductionProcessTrackingQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.Set; + +/** +* @description 服务实现 +* @author lyd +* @date 2023-07-21 +**/ +@Slf4j +@Service +public class PdmBdProductionProcessTrackingServiceImpl extends ServiceImpl implements IPdmBdProductionProcessTrackingService { + + @Autowired + private PdmBdProductionProcessTrackingMapper pdmBdProductionProcessTrackingMapper; + + @Override + public IPage queryAll(PdmBdProductionProcessTrackingQuery query, PageQuery page){ + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + pages = pdmBdProductionProcessTrackingMapper.selectPageLeftJoin(pages, query); + return pages; + } + + @Override + public void create(PdmBdProductionProcessTracking entity) { + entity.setProcess_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + pdmBdProductionProcessTrackingMapper.insert(entity); + } + + @Override + public void update(PdmBdProductionProcessTracking entity) { + PdmBdProductionProcessTracking dto = pdmBdProductionProcessTrackingMapper.selectById(entity.getProcess_id()); + if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + pdmBdProductionProcessTrackingMapper.updateById(entity); + } + + @Override + public void deleteAll(Set ids) { + // 真删除 + pdmBdProductionProcessTrackingMapper.deleteBatchIds(ids); + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java similarity index 90% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java index a603c79..f3155b2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/controller/PdmBdWorkorderController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/controller/PdmBdWorkorderController.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.controller; +package org.nl.wms.pdm.workorder.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -6,9 +6,9 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.base.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java similarity index 71% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java index f926f55..9ca5064 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/IPdmBdWorkorderService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/IPdmBdWorkorderService.java @@ -1,10 +1,10 @@ -package org.nl.wms.pdm.service; +package org.nl.wms.pdm.workorder.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; import java.util.Set; @@ -40,4 +40,11 @@ public interface IPdmBdWorkorderService extends IService { * @param ids / */ void deleteAll(Set ids); + + /** + * 获取设备生产中的工单 + * @param deviceCode + * @return + */ + PdmBdWorkorder getDeviceProductionTask(String deviceCode); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java similarity index 98% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java index b25018e..edca547 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/PdmBdWorkorder.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dao; +package org.nl.wms.pdm.workorder.service.dao; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java similarity index 65% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java index 10fd966..c6faca7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.java @@ -1,9 +1,9 @@ -package org.nl.wms.pdm.service.dao.mapper; +package org.nl.wms.pdm.workorder.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; /** * @author lyd diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml similarity index 89% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml index db94dda..ee64c80 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/mapper/PdmBdWorkorderMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dao/mapper/PdmBdWorkorderMapper.xml @@ -1,7 +1,7 @@ - - SELECT wo.* ,ma.material_name ,ma.material_code diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java similarity index 97% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java index 82fde9f..f878083 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderDto.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dto; +package org.nl.wms.pdm.workorder.service.dto; import lombok.Data; import java.io.Serializable; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java similarity index 88% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java index 375c115..1171d27 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dto/PdmBdWorkorderQuery.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/dto/PdmBdWorkorderQuery.java @@ -1,4 +1,4 @@ -package org.nl.wms.pdm.service.dto; +package org.nl.wms.pdm.workorder.service.dto; import lombok.Data; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java similarity index 73% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java index 4ad5956..00ff6e2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/impl/PdmBdWorkorderServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/workorder/service/impl/PdmBdWorkorderServiceImpl.java @@ -1,8 +1,9 @@ -package org.nl.wms.pdm.service.impl; +package org.nl.wms.pdm.workorder.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -11,14 +12,14 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.pdm.service.dao.mapper.PdmBdWorkorderMapper; -import org.nl.wms.pdm.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.dao.mapper.PdmBdWorkorderMapper; +import org.nl.wms.pdm.workorder.service.dto.PdmBdWorkorderQuery; +import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; import java.util.Set; /** @@ -80,4 +81,13 @@ public class PdmBdWorkorderServiceImpl extends ServiceImpl lam = new QueryWrapper().lambda(); + lam.eq(PdmBdWorkorder::getPoint_code, deviceCode) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode()); + return pdmBdWorkorderMapper.selectOne(lam); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java new file mode 100644 index 0000000..4fd8098 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/controller/ReportController.java @@ -0,0 +1,39 @@ +package org.nl.wms.report.controller; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.report.service.ReportService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author: lyd + * @Description: 报表管理 + * @Date: 2023/7/21 + */ +@Slf4j +@RestController +@Api(tags = "报表管理") +@RequestMapping("/api/report/v1") +public class ReportController { + + @Autowired + private ReportService reportService; + + @PostMapping("/mudTransfer") + @Log("泥料转运记录表") + @ApiOperation("泥料转运记录表") + public ResponseEntity mudTransfer(JSONObject json, PageQuery page){ +// return new ResponseEntity<>(TableDataInfo.build(reportService.mudTransfer(json,page)), HttpStatus.OK); + return null; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/ReportService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/ReportService.java new file mode 100644 index 0000000..8deb9dd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/ReportService.java @@ -0,0 +1,15 @@ +package org.nl.wms.report.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.nl.common.domain.query.PageQuery; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/7/21 + */ +public interface ReportService { + +// IPage<> mudTransfer(JSONObject json, PageQuery page); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.java new file mode 100644 index 0000000..d1a69a3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.java @@ -0,0 +1,9 @@ +package org.nl.wms.report.service.dao.mapper; + +/** + * @Author: lyd + * @Description: 报表mapper + * @Date: 2023/7/21 + */ +public interface ReportMapper { +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.xml new file mode 100644 index 0000000..2164a72 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/dao/mapper/ReportMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/impl/ReportServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/impl/ReportServiceImpl.java new file mode 100644 index 0000000..f63d367 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/report/service/impl/ReportServiceImpl.java @@ -0,0 +1,15 @@ +package org.nl.wms.report.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.report.service.ReportService; +import org.springframework.stereotype.Service; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/7/21 + */ +@Slf4j +@Service +public class ReportServiceImpl implements ReportService { +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java index 725d580..9b03915 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/controller/SchBaseVehiclematerialgroupController.java @@ -36,7 +36,8 @@ public class SchBaseVehiclematerialgroupController { @ApiOperation("查询组盘信息管理") //@SaCheckPermission("@el.check('schBaseVehiclematerialgroup:list')") public ResponseEntity query(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){ - return new ResponseEntity<>(TableDataInfo.build(schBaseVehiclematerialgroupService.queryAll(whereJson,page)),HttpStatus.OK); + return new ResponseEntity<>(TableDataInfo.build(schBaseVehiclematerialgroupService + .queryAll(whereJson,page)),HttpStatus.OK); } @PostMapping diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java index f4c154d..075cf3b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/ISchBaseVehiclematerialgroupService.java @@ -6,6 +6,7 @@ import org.nl.common.domain.query.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import java.util.Map; import java.util.Set; @@ -49,4 +50,31 @@ public interface ISchBaseVehiclematerialgroupService extends IService lambda = new QueryWrapper().lambda(); + lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, value) + .eq(SchBaseVehiclematerialgroup::getMaterial_id, materialId) + .eq(SchBaseVehiclematerialgroup::getIs_delete, false); + SchBaseVehiclematerialgroup selectOne = vehiclematerialgroupMapper.selectOne(lambda); + return selectOne; + } + + @Override + public SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String vehicleType, String value) { + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, value) + .eq(SchBaseVehiclematerialgroup::getIs_delete, false); + SchBaseVehiclematerialgroup selectOne = vehiclematerialgroupMapper.selectOne(lambda); + return selectOne; + } + + @Override + public SchBaseVehiclematerialgroup getGroupInfo(String vehicleCode, String value) { + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + lambda.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, value) + .eq(SchBaseVehiclematerialgroup::getIs_delete, false); + SchBaseVehiclematerialgroup selectOne = vehiclematerialgroupMapper.selectOne(lambda); + return selectOne; + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java index d8cb4e6..ddbea58 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/region/service/impl/SchBaseRegionServiceImpl.java @@ -89,7 +89,8 @@ public class SchBaseRegionServiceImpl extends ServiceImpl getRegionList(SchBaseRegion region) { return schBaseRegionMapper.selectList(new LambdaQueryWrapper() - .eq(ObjectUtil.isNotEmpty(region), SchBaseRegion::getIs_has_workder, true)); + .eq(ObjectUtil.isNotEmpty(region), SchBaseRegion::getIs_has_workder, true) + .orderByAsc(SchBaseRegion::getOrder_seq)); } @Override diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java index 89a25e0..50ee40e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java @@ -100,4 +100,6 @@ public interface ISchBaseTaskService extends IService { * @param param */ void operation(Map param); + + SchBaseTask getByCode(String taskCode); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index ec58783..781a239 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -22,7 +22,10 @@ public class SchBaseTask implements Serializable { private static final long serialVersionUID = 1L; - @TableId(value = "task_code", type = IdType.NONE) + @TableId(value = "task_id", type = IdType.NONE) + @ApiModelProperty(value = "任务标识") + private String task_id; + @ApiModelProperty(value = "任务编码") private String task_code; @@ -57,6 +60,8 @@ public class SchBaseTask implements Serializable { @ApiModelProperty(value = "载具编码") private String vehicle_code; + @ApiModelProperty(value = "载具编码2") + private String vehicle_code2; @ApiModelProperty(value = "处理状态") private String handle_status; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java index 28a972f..8caae8d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java @@ -14,6 +14,9 @@ import java.io.Serializable; @Data public class SchBaseTaskDto implements Serializable { + /** 任务标识 */ + private String task_id; + /** 任务编码 */ private String task_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index 9a722fb..e86f792 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -132,6 +133,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl findUnFinishTasksByTaskConfig(String config_code, String device_code, String direction) { Assert.notNull(config_code, "任务配置编码不能为空!"); + Assert.notNull(direction, "任务配置编置的方向不能为空!"); LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); lam.eq(SchBaseTask::getConfig_code, config_code) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) @@ -161,6 +163,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl lam = new QueryWrapper().lambda(); + lam.eq(SchBaseTask::getTask_code, taskCode); + return this.getOne(lam); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index a67064d..0557ae5 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -1,14 +1,14 @@ package org.nl.wms.sch.task_manage; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -42,8 +42,7 @@ public abstract class AbstractTask { private ISchBasePointService pointService; @Autowired private IPdmBdWorkorderService workorderService; - @Autowired - private TaskUtils taskUtils; + /** * 任务创建 @@ -78,16 +77,17 @@ public abstract class AbstractTask { List list = new ArrayList<>(); for (SchBaseTask task : taskList) { AcsTaskDto taskDto = new AcsTaskDto(); - taskDto.setExt_task_uuid(task.getTask_code()); + taskDto.setRequestNo(IdUtil.simpleUUID());// todo + taskDto.setRequestDate(DateUtil.now()); + taskDto.setExt_task_id(task.getTask_id()); taskDto.setTask_code(task.getTask_code()); - taskDto.setRoute_plan_code("normal"); taskDto.setStart_device_code(task.getPoint_code1()); taskDto.setNext_device_code(task.getPoint_code2()); + taskDto.setStart_device_code2(task.getPoint_code3()); + taskDto.setNext_device_code2(task.getPoint_code4()); taskDto.setVehicle_code(task.getVehicle_code()); - - taskDto.setParams(task.getResponse_param()); - + taskDto.setVehicle_code2(task.getVehicle_code2()); this.setTask(task.getConfig_code(), taskDto); list.add(taskDto); } @@ -183,6 +183,7 @@ public abstract class AbstractTask { String apply_point_code = param.getString("device_code"); // 请求点 String config_code = param.getString("config_code"); String requestNo = param.getString("requestNo"); + String vehicleType = param.getString("vehicle_type"); // 1、校验数据 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, config_code)); @@ -213,7 +214,7 @@ public abstract class AbstractTask { } param.put("workorder_code", workorder.getWorkorder_code()); // 工单编码 // 设置任务数据 - task.setVehicle_type(workorder.getVehicle_type()); + vehicleType = workorder.getVehicle_type(); } // 校验是否需要自动agv if (!pointObj.getIs_auto()) { @@ -222,11 +223,13 @@ public abstract class AbstractTask { } // 2、创建申请任务 task.setAcs_trace_id(requestNo); + task.setTask_id(IdUtil.getSnowflake(1,1).nextIdStr()); task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); task.setConfig_code(config_code); task.setCreate_mode(GeneralDefinition.ACS_CREATION); task.setVehicle_code(param.getString("vehicle_code")); task.setVehicle_qty(param.getInteger("vehicle_qty")); + task.setVehicle_type(vehicleType); task.setTask_status(TaskStatus.APPLY.getCode()); task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 // 设置起/终点 @@ -234,7 +237,7 @@ public abstract class AbstractTask { // 设置组盘 - 需要的话由子类自行实现 task.setGroup_id(this.setGroupPlate(param)); task.setRequest_param(JSONObject.toJSONString(param)); - taskUtils.setCreateByAcs(task); // 设置创建人信息 + TaskUtils.setCreateByAcs(task); // 设置创建人信息 taskService.save(task); // 创建一条单点任务。 // 3、判断是否直接找点下发 if (taskConfig.getIs_immediate_create()) { diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java index 4b11d7d..6f7be06 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java @@ -1,30 +1,9 @@ package org.nl.wms.sch.task_manage; import lombok.Data; +import org.nl.wms.ext.acs.service.dto.CreateTaskRequest; @Data -public class AcsTaskDto { - //任务标识 - private String ext_task_uuid; - //任务编码 - private String task_code; - //任务类型 - private String task_type; - //起点 - private String start_device_code; - //下一点 - private String next_device_code; - //载具号 - private String vehicle_code; - //载具类型 - private String vehicle_type; - //优先级 - private String priority; - //备注 - private String remark; - //扩展参数 - private String params; - //路由类型 - private String route_plan_code; +public class AcsTaskDto extends CreateTaskRequest { } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java index adb02d0..11eb7bb 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/GeneralDefinition.java @@ -6,17 +6,27 @@ package org.nl.wms.sch.task_manage; * @Date: 2023/7/13 */ public class GeneralDefinition { + // 统一编码定义 + /** 窑自动任务开启 */ + public static final String AUTO_KILN_CALL = "auto_kiln_call"; + // 是否 + /**是 */ + public static final String YES = "1"; + /** 否 */ + public static final String NO = "0"; // 载具类型 - /** 空料盅 */ + /** 料盅 */ public static final String MATERIAL_CUP = "1"; /** 钢托盘 */ public static final String STEEL_TRAY = "2"; // 账号定义 /** acs系统 */ public static final String ACS_ID = "2"; + /** acs系统 */ public static final String ACS_NAME = "ACS系统"; /** mes系统 */ public static final String MES_ID = "3"; + /** mes系统 */ public static final String MES_NAME = "MES系统"; // 点位类型 /** 设备位 */ @@ -42,4 +52,9 @@ public class GeneralDefinition { public static final String MES_LMS = "3"; /**LMS->MES**/ public static final String LMS_LMS = "4"; + // 区域定义 + /** 料盅睏料线区域 */ + public static final String LZKLX = "LZKLX"; + /** 干燥窑区域 */ + public static final String GZY = "GZY"; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java index 1c87e13..c3999e7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/AcsUtil.java @@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.config.SpringContextHolder; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.springframework.http.HttpStatus; import java.util.List; @@ -22,7 +23,7 @@ public class AcsUtil { //判断是否连接ACS系统 String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_ACS").getValue(); JSONObject result = new JSONObject(); - if (StrUtil.equals("0", isConnect)) { + if (StrUtil.equals(GeneralDefinition.NO, isConnect)) { result.put("status", HttpStatus.BAD_REQUEST.value()); result.put("message", "未连接ACS!"); result.put("data", new JSONObject()); @@ -42,14 +43,11 @@ public class AcsUtil { String msg = e.getMessage(); //ConnectException: Connection refused: connect //网络不通 - System.out.println(msg); + log.error("连接失败:{}", msg); result.put("status", HttpStatus.BAD_REQUEST); result.put("message", "网络不通,操作失败!"); result.put("data", new JSONObject()); } - //acs抛异常这里 - /* if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value()))) - throw new BadRequestException(result.getString("message"));*/ return result; } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java index 003c6c0..6ed6f1a 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java @@ -1,54 +1,63 @@ -package org.nl.wms.sch.task_manage.task.tasks.auto; - -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: lyd - * @Description: 入窑口叫料 - * @Date: 2023/6/19 - */ -@Component -@TaskType("RYKQLTask") -public class RYKQLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "RYKQLTask"; - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Override - protected void create() throws BadRequestException { - - } - - @Override - @Transactional(rollbackFor = Exception.class) - protected void autoCreate() { +//package org.nl.wms.sch.task_manage.task.tasks.auto; +// +//import cn.hutool.core.util.ObjectUtil; +//import com.alibaba.fastjson.JSONObject; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import org.nl.common.exception.BadRequestException; +//import org.nl.system.service.param.ISysParamService; +//import org.nl.system.service.param.dao.Param; +//import org.nl.wms.pdm.service.IPdmBdWorkorderService; +//import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +//import org.nl.wms.sch.point.service.ISchBasePointService; +//import org.nl.wms.sch.point.service.dao.SchBasePoint; +//import org.nl.wms.sch.task.service.ISchBaseTaskService; +//import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +//import org.nl.wms.sch.task.service.dao.SchBaseTask; +//import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +//import org.nl.wms.sch.task_manage.AbstractTask; +//import org.nl.wms.sch.task_manage.GeneralDefinition; +//import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +//import org.nl.wms.sch.task_manage.task.TaskType; +//import org.nl.wms.sch.task_manage.task.core.TaskStatus; +//import org.nl.wms.util.PointUtils; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Component; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.util.Arrays; +//import java.util.List; +//import java.util.stream.Collectors; +// +///** +// * @Author: lyd +// * @Description: 入窑口叫料 +// * @Date: 2023/6/19 +// */ +//@Component +//@TaskType("RYKQLTask") +//public class RYKQLTask extends AbstractTask { +// private static String TASK_CONFIG_CODE = "RYKQLTask"; +// @Autowired +// private ISchBasePointService pointService; +// @Autowired +// private ISchBaseTaskService taskService; +// @Autowired +// private ISchBaseTaskconfigService taskConfigService; +// @Autowired +// private ISysParamService paramService; +// @Override +// protected void create() throws BadRequestException { +// +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// protected void autoCreate() { // // 自动创建任务 +// Param autoKilnCall = paramService.findByCode(GeneralDefinition.AUTO_KILN_CALL); +// if (autoKilnCall.getValue().equals(GeneralDefinition.NO)) { +// return; +// } // // 判断当前点位有没有任务执行 // List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(TASK_CONFIG_CODE); // if (unFinishTasksByTaskConfig.size() > 0) { @@ -62,7 +71,7 @@ public class RYKQLTask extends AbstractTask { // SchBaseTask task = new SchBaseTask(); // 任务实体 // // 2、创建申请任务 // task.setConfig_code(TASK_CONFIG_CODE); -// task.setCreate_mode("1"); +// task.setCreate_mode(GeneralDefinition.AUTO_CREATION); // task.setTask_status(TaskStatus.APPLY.getCode()); // task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 // // 设置起/终点 @@ -85,71 +94,71 @@ public class RYKQLTask extends AbstractTask { // taskService.create(task); // point.setIng_task_code(task.getTask_code()); // pointService.update(point); - //下发 -// this.renotifyAcs(task); - } - - private SchBasePoint findStartPoint(List startRegionStr) { - // 无需工单 - // 默认认为缓存线有东西 - LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); - lam.in(SchBasePoint::getRegion_code, startRegionStr) - .eq(SchBasePoint::getPoint_type, '2') // 点位类型是缓存输送线出口 - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 - .or() - .eq(SchBasePoint::getIng_task_code, "")) - .eq(SchBasePoint::getIs_used, true); - List schBasePoints = pointService.list(lam); - return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; - } - - @Override - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 获取起点 - SchBasePoint startPointObj = pointService.getById(startPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点解锁 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - pointService.update(startPointObj); - } - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 起点解锁 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - pointService.update(startPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } -} +// //下发 +//// this.renotifyAcs(task); +// } +// +// private SchBasePoint findStartPoint(List startRegionStr) { +// // 无需工单 +// // 默认认为缓存线有东西 +// LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); +// lam.in(SchBasePoint::getRegion_code, startRegionStr) +// .eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT) // 点位类型是缓存输送线出口 +// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 +// .or() +// .eq(SchBasePoint::getIng_task_code, "")) +// .eq(SchBasePoint::getIs_used, true); +// List schBasePoints = pointService.list(lam); +// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; +// } +// +// @Override +// protected void updateStatus(String task_code, TaskStatus status) { +// // 校验任务 +// SchBaseTask taskObj = taskService.getByCode(task_code); +// if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { +// throw new BadRequestException("该任务已完成!"); +// } +// if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { +// throw new BadRequestException("该任务已取消!"); +// } +// // 获取参数 +// String startPoint = taskObj.getPoint_code1(); // 获取起点 +// SchBasePoint startPointObj = pointService.getById(startPoint); +// // 根据传来的类型去对任务进行操作 +// if (status.equals(TaskStatus.EXECUTING)) { // 执行中 +// taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); +// taskObj.setRemark("执行中"); +// } +// if (status.equals(TaskStatus.FINISHED)) { // 完成 +// // 起点解锁 +// if (ObjectUtil.isNotEmpty(startPointObj)) { +// startPointObj.setIng_task_code(""); +// pointService.update(startPointObj); +// } +// // 任务完成 +// taskObj.setTask_status(TaskStatus.FINISHED.getCode()); +// taskObj.setRemark("任务完成"); +// } +// if (status.equals(TaskStatus.CANCELED)) { // 取消 +// // 起点解锁 +// if (ObjectUtil.isNotEmpty(startPointObj)) { +// startPointObj.setIng_task_code(""); +// pointService.update(startPointObj); +// } +// taskObj.setRemark("任务取消"); +// taskObj.setTask_status(TaskStatus.CANCELED.getCode()); +// } +// taskService.update(taskObj); +// } +// +// @Override +// public void forceFinish(String task_code) { +// this.updateStatus(task_code, TaskStatus.FINISHED); +// } +// +// @Override +// public void cancel(String task_code) { +// this.updateStatus(task_code, TaskStatus.CANCELED); +// } +//} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java index bf3c562..d929a0c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java @@ -87,8 +87,8 @@ public class CTQKTask extends AbstractTask { @Override protected void updateStatus(String task_code, TaskStatus status) { -// 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java index de485fb..2272bc8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java @@ -46,8 +46,7 @@ public class DTSKTask extends AbstractTask { private ISysNoticeService noticeService; @Autowired private DTKMapper dtkMapper; - @Autowired - private TaskUtils taskUtils; + @Override protected void create() throws BadRequestException { @@ -57,7 +56,7 @@ public class DTSKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); + TaskUtils.setUpdateByAcs(task); List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 @@ -94,7 +93,7 @@ public class DTSKTask extends AbstractTask { @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -105,7 +104,7 @@ public class DTSKTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -118,7 +117,7 @@ public class DTSKTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -127,7 +126,7 @@ public class DTSKTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -155,7 +154,7 @@ public class DTSKTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -173,7 +172,7 @@ public class DTSKTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java index c9aa21c..b449518 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java @@ -1,11 +1,17 @@ package org.nl.wms.sch.task_manage.task.tasks.fj; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.common.utils.CodeUtil; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -14,11 +20,12 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.*; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper; import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -44,6 +51,12 @@ public class FJMKTask extends AbstractTask { private ISchBaseTaskconfigService taskConfigService; @Autowired private IPdmBdWorkorderService workorderService; + @Autowired + private ISysNoticeService noticeService; + @Autowired + private FJMapper fjMapper; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Override protected void create() throws BadRequestException { // 获取任务 @@ -52,42 +65,119 @@ public class FJMKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + TaskUtils.setUpdateByAcs(task); + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); String requestParam = task.getRequest_param();// 任务的其他数据 JSONObject jsonObject = JSONObject.parseObject(requestParam); // 找终点 SchBasePoint packagePoint = findNextPoint(nextRegionStr, jsonObject); if (ObjectUtil.isEmpty(packagePoint)) { task.setRemark("包装线不可用!"); - taskService.update(task); + taskService.updateById(task); // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); continue; } SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject); if (ObjectUtil.isEmpty(LaminatePoint)) { task.setRemark("覆膜区不可用!"); - taskService.update(task); + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + taskService.updateById(task); // 消息通知 continue; } + // 生产木托盘编码 + String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE"); // 设置终点并修改创建成功状态 task.setPoint_code2(packagePoint.getPoint_code()); - task.setPoint_code3(LaminatePoint.getPoint_code()); + task.setPoint_code3(LaminatePoint.getParent_point_code()); task.setPoint_code4(task.getPoint_code1()); + task.setVehicle_code2(vehicleCode); task.setTask_status(TaskStatus.CREATED.getCode()); - taskService.update(task); + task.setRemark(""); + taskService.updateById(task); packagePoint.setIng_task_code(task.getTask_code()); - pointService.update(packagePoint); - LaminatePoint.setIng_task_code(task.getTask_code()); - pointService.update(LaminatePoint); + PointUtils.setUpdateByAcs(packagePoint); + pointService.updateById(packagePoint); + SchBasePoint basePoint = pointService.getById(LaminatePoint.getParent_point_code()); + basePoint.setIng_task_code(task.getTask_code()); + basePoint.setVehicle_code(vehicleCode); + PointUtils.setUpdateByAcs(basePoint); + pointService.updateById(basePoint); //下发 // this.renotifyAcs(task); } } + @Override + public String setGroupPlate(JSONObject param) { + // 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定 + String vehicleCode = param.getString("vehicle_code"); + if (vehicleCode == null) { + throw new BadRequestException("载具编码不能为空"); + } + String vehicleType = param.getString("vehicle_type"); + String workorderCode = param.getString("workorder_code"); + JSONObject stackParameters = param.getJSONObject("palletize"); + if (vehicleType == null) { + vehicleType = GeneralDefinition.STEEL_TRAY; + } + String deviceCode = param.getString("device_code"); + // 砖块数量 + Integer qty = param.getInteger("qty"); + SchBasePoint basePoint = pointService.getById(deviceCode); + PdmBdWorkorder workorderObject = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + // 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入 + SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.BOUND.getValue(), workorderObject.getMaterial_id()); + if (groupObject != null) { + return groupObject.getGroup_id(); + } + // 要把数据存到组盘表 + SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getMaterial_id() + : ""); + groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getStanding_time() + : 0); + groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getWorkorder_code() + : ""); + groupEntity.setCreate_id(GeneralDefinition.ACS_ID); + groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setVehicle_code(vehicleCode); + groupEntity.setVehicle_type(vehicleType); + groupEntity.setMaterial_qty(qty); + groupEntity.setExt_data(JSONObject.toJSONString(stackParameters)); // 垛型参数 + groupEntity.setPoint_code(basePoint.getPoint_code()); // 对接位 + groupEntity.setPoint_name(basePoint.getPoint_name()); + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setMove_way(basePoint.getPoint_code()); + groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); // todo: ??? + groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + vehiclematerialgroupService.save(groupEntity); + // 将所有当前位置的砖块设置组盘标识 +// baseBrickInfoService.setGroupByCurrentAllBrick(deviceCode, groupEntity.getGroup_id()); + // 返回组盘id记录任务中 + return groupEntity.getGroup_id(); + } + /** * 从覆膜区找个空木托盘 * @param startRegionStr @@ -105,11 +195,12 @@ public class FJMKTask extends AbstractTask { throw new BadRequestException("工单不能为空!"); } String vehicleType = one.getVehicle_type(); - // todo: 向ACS请求所需木托盘在那个栈拆盘机? + // 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可 + SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject() + .fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT)); // todo: 请求ACS释放一个木托盘 // 这个点的父点位为起点 - SchBasePoint point = pointService.getById("FMADJW"); - return point; + return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null; } /** @@ -135,15 +226,50 @@ public class FJMKTask extends AbstractTask { @Override @Transactional protected void updateStatus(String task_code, TaskStatus status) { - // todo: 任务完成需要组盘,包装线解锁,覆膜对接位清空,分拣拆垛对接位设置空盘 + // 任务完成需要组盘,包装线解锁,覆膜对接位清空,分拣拆垛对接位设置空盘 // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } + + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 String bzxPoint = taskObj.getPoint_code2(); // 获取终点1 String fmPoint = taskObj.getPoint_code3(); // 获取起点2 @@ -151,40 +277,53 @@ public class FJMKTask extends AbstractTask { SchBasePoint bzxPointObj = pointService.getById(bzxPoint); SchBasePoint fmPointObj = pointService.getById(fmPoint); SchBasePoint fjcPointObj = pointService.getById(fjcPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (ObjectUtil.isNotEmpty(bzxPointObj)) { + // 包装位: 解锁 PointUtils.clearPoint(bzxPointObj); + // 覆膜位: 解锁 . 清空 PointUtils.clearPoint(fmPointObj); + // 机械手对接位: 赋值 fjcPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); fjcPointObj.setVehicle_qty(1); fjcPointObj.setVehicle_type(taskObj.getVehicle_type()); - pointService.update(fjcPointObj); - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); + PointUtils.setUpdateByType(fjcPointObj, taskFinishedType); + pointService.updateById(fjcPointObj); + // 组盘设置已经解绑 + SchBaseVehiclematerialgroup vehicleMaterialGroupObj = + vehiclematerialgroupService.getById(taskObj.getGroup_id()); + vehicleMaterialGroupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + vehicleMaterialGroupObj.setTask_code(taskObj.getTask_code()); + vehicleMaterialGroupObj.setPoint_code(bzxPointObj.getPoint_code()); // 当前位置 + vehicleMaterialGroupObj.setPoint_name(bzxPointObj.getPoint_name()); + vehicleMaterialGroupObj.setMove_way(vehicleMaterialGroupObj.getMove_way() + " -> " + bzxPointObj.getPoint_code()); + TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); + vehiclematerialgroupService.updateById(vehicleMaterialGroupObj); } - if (status.equals(TaskStatus.CANCELED)) { // 取消 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String bzxPoint = taskObj.getPoint_code2(); // 获取终点1 + String fmPoint = taskObj.getPoint_code3(); // 获取起点2 + SchBasePoint bzxPointObj = pointService.getById(bzxPoint); + SchBasePoint fmPointObj = pointService.getById(fmPoint); + if (ObjectUtil.isNotEmpty(bzxPointObj)) { // 释放点位 fmPointObj.setIng_task_code(""); bzxPointObj.setIng_task_code(""); - pointService.update(fmPointObj); - pointService.update(bzxPointObj); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - taskObj.setRemark("任务取消"); + PointUtils.setUpdateByType(fmPointObj, taskFinishedType); + PointUtils.setUpdateByType(bzxPointObj, taskFinishedType); + pointService.updateById(fmPointObj); + pointService.updateById(bzxPointObj); } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java index 69aadac..f7a7a16 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java @@ -4,9 +4,10 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.common.utils.CodeUtil; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -14,9 +15,15 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper; import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -26,7 +33,7 @@ import java.util.stream.Collectors; /** * @Author: lyd - * @Description: 分拣呼叫空托盘任务 - 2点 + * @Description: 分拣呼叫空木托盘任务 - 2点 * @Date: 2023/6/21 */ @Component @@ -40,9 +47,12 @@ public class FJQKTask extends AbstractTask { @Autowired private ISchBaseTaskconfigService taskConfigService; @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired private IPdmBdWorkorderService workorderService; + + @Autowired + private ISysNoticeService noticeService; + @Autowired + private FJMapper fjMapper; @Override protected void create() throws BadRequestException { // 获取任务 @@ -51,34 +61,51 @@ public class FJQKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + TaskUtils.setUpdateByAcs(task); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); // 找起点 - String extGroupDataStr = task.getExt_group_data(); - JSONObject extGroupData = JSONObject.parseObject(extGroupDataStr); + String requestParam = task.getRequest_param(); + JSONObject extGroupData = JSONObject.parseObject(requestParam); SchBasePoint point = findStartPoint(startRegionStr, extGroupData); if (ObjectUtil.isEmpty(point)) { task.setRemark("未找到所需点位!"); - taskService.update(task); + taskService.updateById(task); // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); continue; } // 设置起点并修改创建成功状态 - task.setPoint_code1(point.getPoint_code()); + task.setPoint_code1(point.getParent_point_code()); task.setTask_status(TaskStatus.CREATED.getCode()); - task.setVehicle_code(point.getVehicle_code()); + // 生产木托盘编码 + String vehicleCode = CodeUtil.getNewCode("VEHICLE_CODE"); + task.setVehicle_code(vehicleCode); + task.setRemark(""); task.setGroup_id(point.getGroup_id()); - taskService.update(task); + taskService.updateById(task); - point.setIng_task_code(task.getTask_code()); - pointService.update(point); + // 父点位锁住 + SchBasePoint basePoint = pointService.getById(point.getParent_point_code()); + basePoint.setIng_task_code(task.getTask_code()); + basePoint.setVehicle_code(vehicleCode); + PointUtils.setUpdateByAcs(basePoint); + pointService.updateById(basePoint); //下发 // this.renotifyAcs(task); } } + /** + * 找到的是覆膜机设备位置,父位才是对接位 + * @param startRegionStr + * @param extGroupData + * @return + */ private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { - // 当前设备的工单 + // 当前设备的工单: 工单的载具是木托盘 String workorderCode = extGroupData.getString("workorder_code"); PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) ? workorderService.getOne(new LambdaQueryWrapper() @@ -88,59 +115,99 @@ public class FJQKTask extends AbstractTask { throw new BadRequestException("工单不能为空!"); } String vehicleType = one.getVehicle_type(); - // todo: 向ACS请求所需木托盘在那个栈拆盘机? + // 向ACS请求所需木托盘在那个栈拆盘机?已经实时更新,故只需要自己查询即可 + SchBasePoint endPointObj = fjMapper.findPointForFJQK(startRegionStr, new JSONObject() + .fluentPut("vehicleType", vehicleType).fluentPut("pointType", GeneralDefinition.DEVICE_POINT)); // todo: 请求ACS释放一个木托盘 // 这个点的父点位为起点 - SchBasePoint point = pointService.getById("FMADJW"); - return point; + return ObjectUtil.isNotEmpty(endPointObj) ? endPointObj : null; } @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - // 载具编码:前面需要根据任务判断,没有载具不能生成任务 - String vehicle_code = taskObj.getVehicle_code(); - String startPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); + // 根据传来的类型去对任务进行操作 if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - pointService.update(startPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - taskService.update(taskObj); } @Override public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); } @Override public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 载具编码:前面需要根据任务判断,没有载具不能生成任务 + String vehicleCode = taskObj.getVehicle_code(); + String vehicleType = taskObj.getVehicle_type(); + String startPoint = taskObj.getPoint_code1(); // 获取终点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + + // 终点设置值 + // 记录库存并解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(vehicleCode); + endPointObj.setVehicle_qty(1); + endPointObj.setVehicle_type(vehicleType); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 载具编码:前面需要根据任务判断,没有载具不能生成任务 + String startPoint = taskObj.getPoint_code1(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 终点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java index f6e553e..e9ba3bf 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java @@ -1,13 +1,16 @@ package org.nl.wms.sch.task_manage.task.tasks.fj; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -17,7 +20,6 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.TaskType; @@ -55,8 +57,9 @@ public class FJQLTask extends AbstractTask { private ISysNoticeService noticeService; @Autowired private FJMapper fjMapper; + @Autowired - private TaskUtils taskUtils; + private IPdmBdProductionProcessTrackingService processTrackingService; @Override protected void create() throws BadRequestException { // 获取任务 @@ -65,7 +68,7 @@ public class FJQLTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); + TaskUtils.setUpdateByAcs(task); List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) .collect(Collectors.toList()); // 找起点 @@ -114,14 +117,14 @@ public class FJQLTask extends AbstractTask { : null; Assert.notNull(workOrder, "工单不能为空!"); // 从所选区域中,选择满料位、无锁、可用的点位 - List points = fjMapper.findPointForFJQL(startRegionStr, workOrder.getMaterial_id()); + List points = fjMapper.findPointForFJQL(startRegionStr, workOrder.getRaw_material_id()); return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; } @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -132,7 +135,7 @@ public class FJQLTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -145,7 +148,7 @@ public class FJQLTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -154,7 +157,7 @@ public class FJQLTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -163,7 +166,9 @@ public class FJQLTask extends AbstractTask { public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); // 除了解锁需要将组盘表中的物料绑定载具设置为已解绑 // 起点设置空位 if (ObjectUtil.isNotEmpty(startPointObj)) { @@ -171,15 +176,27 @@ public class FJQLTask extends AbstractTask { PointUtils.clearPoint(startPointObj); SchBaseVehiclematerialgroup vehicleMaterialGroupObj = vehiclematerialgroupService.getById(taskObj.getGroup_id()); - vehicleMaterialGroupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); - taskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); + // 等到变成空盘才能解除 +// vehicleMaterialGroupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + vehicleMaterialGroupObj.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehicleMaterialGroupObj.setPoint_name(endPointObj.getPoint_name()); + vehicleMaterialGroupObj.setTask_code(taskObj.getTask_code()); + vehicleMaterialGroupObj.setMove_way(vehicleMaterialGroupObj.getMove_way() + " -> " + endPointObj.getPoint_code()); + TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); vehiclematerialgroupService.updateById(vehicleMaterialGroupObj); + // 插入生产过程跟踪表 + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(vehicleMaterialGroupObj.getBuss_move_id()); + processTracking.setProcess_action("钢托盘缓存位到分拣"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -195,7 +212,7 @@ public class FJQLTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java index d1bd220..4b0e979 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java @@ -1,9 +1,16 @@ package org.nl.wms.sch.task_manage.task.tasks.fj; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -12,10 +19,11 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.GeneralDefinition; -import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.*; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -38,6 +46,13 @@ public class FJRKTask extends AbstractTask { private ISchBaseTaskService taskService; @Autowired private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISysNoticeService noticeService; + + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Override protected void create() throws BadRequestException { // 最后一坨不需要呼叫空盘 @@ -47,21 +62,27 @@ public class FJRKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); // 找终点 SchBasePoint point = findNextPoint(nextRegionStr); if (ObjectUtil.isEmpty(point)) { task.setRemark("未找到所需点位!"); - taskService.update(task); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); continue; } // 设置终点并修改创建成功状态 task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); - taskService.update(task); + task.setRemark(""); + taskService.updateById(task); point.setIng_task_code(task.getTask_code()); - pointService.update(point); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); //下发 // this.renotifyAcs(task); @@ -88,60 +109,155 @@ public class FJRKTask extends AbstractTask { @Override public String setGroupPlate(JSONObject param) { // 强制入库组盘 - return super.setGroupPlate(param); + // 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定 + String vehicleCode = param.getString("vehicle_code"); + if (vehicleCode == null) { + throw new BadRequestException("载具编码不能为空"); + } + String vehicleType = param.getString("vehicle_type"); + String workorderCode = param.getString("workorder_code"); + JSONObject stackParameters = param.getJSONObject("palletize"); + if (vehicleType == null) { + vehicleType = GeneralDefinition.STEEL_TRAY; + } + String deviceCode = param.getString("device_code"); + // 砖块数量 + Integer qty = param.getInteger("qty"); + SchBasePoint basePoint = pointService.getById(deviceCode); + PdmBdWorkorder workorderObject = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + // 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入 + SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.BOUND.getValue(), workorderObject.getMaterial_id()); + if (groupObject != null) { + return groupObject.getGroup_id(); + } + // 要把数据存到组盘表 + SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getMaterial_id() + : ""); + groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getStanding_time() + : 0); + groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderObject) + ? workorderObject.getWorkorder_code() + : ""); + groupEntity.setCreate_id(GeneralDefinition.ACS_ID); + groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setVehicle_code(vehicleCode); + groupEntity.setVehicle_type(vehicleType); + groupEntity.setMaterial_qty(qty); + groupEntity.setExt_data(JSONObject.toJSONString(stackParameters)); // 垛型参数 + groupEntity.setPoint_code(basePoint.getPoint_code()); // 对接位 + groupEntity.setPoint_name(basePoint.getPoint_name()); + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setMove_way(basePoint.getPoint_code()); + groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); // todo: ??? + groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + vehiclematerialgroupService.save(groupEntity); + // 将所有当前位置的砖块设置组盘标识 +// baseBrickInfoService.setGroupByCurrentAllBrick(deviceCode, groupEntity.getGroup_id()); + // 返回组盘id记录任务中 + return groupEntity.getGroup_id(); } @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - // 获取参数 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; - // 获取外部参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 设置载具类型、点位状态、释放点位 - if (ObjectUtil.isNotEmpty(endPoint)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 释放点位 - if (ObjectUtil.isNotEmpty(endPoint)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - taskObj.setRemark("任务取消"); + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - taskService.update(taskObj); } @Override public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); } @Override public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String startPoint = taskObj.getPoint_code1(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + + // 组盘设置已经解绑 + SchBaseVehiclematerialgroup vehicleMaterialGroupObj = + vehiclematerialgroupService.getById(taskObj.getGroup_id()); + vehicleMaterialGroupObj.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + vehicleMaterialGroupObj.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehicleMaterialGroupObj.setPoint_name(endPointObj.getPoint_name()); + vehicleMaterialGroupObj.setMove_way(vehicleMaterialGroupObj.getMove_way() + " -> " + endPointObj.getPoint_code()); + TaskUtils.setGroupUpdateByType(vehicleMaterialGroupObj, taskFinishedType); + vehiclematerialgroupService.updateById(vehicleMaterialGroupObj); + } + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java index 1433a1e..56c2c06 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java @@ -5,8 +5,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -15,6 +15,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; @@ -47,10 +48,11 @@ public class FJSKTask extends AbstractTask { private ISchBaseTaskconfigService taskConfigService; @Autowired private FJMapper fjMapper; - @Autowired - private TaskUtils taskUtils; + @Autowired private ISysNoticeService noticeService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Override protected void create() throws BadRequestException { @@ -60,7 +62,7 @@ public class FJSKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); + TaskUtils.setUpdateByAcs(task); List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); // 找终点 SchBasePoint point = findNextPoint(nextRegionStr); @@ -101,7 +103,7 @@ public class FJSKTask extends AbstractTask { @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -112,7 +114,7 @@ public class FJSKTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -123,9 +125,22 @@ public class FJSKTask extends AbstractTask { } } + @Override + public String setGroupPlate(JSONObject param) { + // 查找组盘表信息,不做修改 + String vehicleCode = param.getString("vehicle_code"); + String vehicleType = param.getString("vehicle_type"); + if (vehicleType == null) { + vehicleType = GeneralDefinition.STEEL_TRAY; + } + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroupInfo(vehicleCode, + vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue()); + return ObjectUtil.isNotEmpty(one) ? one.getGroup_id() : ""; + } + @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -134,7 +149,7 @@ public class FJSKTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -153,11 +168,21 @@ public class FJSKTask extends AbstractTask { endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); PointUtils.setUpdateByType(endPointObj, taskFinishedType); pointService.updateById(endPointObj); + + // 将组盘解绑并设置当前位置 + // 组盘表数据改成已绑定 + SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); + TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); } taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { @@ -174,7 +199,7 @@ public class FJSKTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java new file mode 100644 index 0000000..50e7641 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSLTask.java @@ -0,0 +1,234 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣回收剩料 + * @Date: 2023/7/20 + */ +@Component +@TaskType("FJSLHSTask") +public class FJSLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJSLHSTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + + @Autowired + private ISysNoticeService noticeService; + @Override + protected void create() throws BadRequestException { +// 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + // 找终点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("分拣机械手[" + task.getPoint_code1() + "]未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + + //下发 +// this.renotifyAcs(task); + } + } + + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject jsonObject) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.in(SchBasePoint::getRegion_code, nextRegionStr) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true) + .orderByAsc(SchBasePoint::getIn_order_seq) + .orderByAsc(SchBasePoint::getPoint_code); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + public String setGroupPlate(JSONObject param) { + // 组盘,返回组盘标识,设置待绑定,搬运结束就设置已绑定 + // 查找 + String vehicleCode = param.getString("vehicle_code"); + if (vehicleCode == null) { + throw new BadRequestException("载具编码不能为空"); + } + String vehicleType = param.getString("vehicle_type"); + JSONObject stackParameters = param.getJSONObject("palletize"); // 参数 + if (vehicleType == null) { + vehicleType = GeneralDefinition.STEEL_TRAY; + } + // 修改参数 + SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.BOUND.getValue()); + if (ObjectUtil.isEmpty(groupObject)) { + throw new BadRequestException("找不到组盘信息"); + } + groupObject.setIs_full(false); + groupObject.setExt_data(JSONObject.toJSONString(stackParameters)); + TaskUtils.setGroupUpdateByAcs(groupObject); + vehiclematerialgroupService.updateById(groupObject); + return groupObject.getGroup_id(); + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + String vehicleCode = taskObj.getVehicle_code(); + String vehicleType = taskObj.getVehicle_type(); + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + if (ObjectUtil.isNotEmpty(endPointObj)) { + // 终点解锁 + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + // 记录库存并解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(vehicleCode); + endPointObj.setVehicle_qty(1); + endPointObj.setVehicle_type(vehicleType); + endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + // 组盘表数据改成已绑定 + SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); + TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); + } + // 起点清空 + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + PointUtils.clearPoint(startPointObj); + + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java index 5bd2bdc..73cc238 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java @@ -1,5 +1,7 @@ package org.nl.wms.sch.task_manage.task.tasks.fj.mapper; +import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; import org.nl.wms.sch.point.service.dao.SchBasePoint; import java.util.List; @@ -12,4 +14,6 @@ import java.util.List; public interface FJMapper { List findPointForFJQL(List regionCode, String materialId); List findPointForFJSK(List regionCode); + + SchBasePoint findPointForFJQK(List regionCode, @Param("fluentPut") JSONObject fluentPut); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml index d52d09d..1b85661 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml @@ -31,4 +31,17 @@ #{code} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java index 67f004b..a6d6819 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java @@ -6,16 +6,13 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.Data; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; import org.nl.wms.database.material.service.IMdBaseMaterialService; import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.pdm.record.service.IPdmBdRequestMaterialRecordService; -import org.nl.wms.pdm.record.service.dao.PdmBdRequestMaterialRecord; -import org.nl.wms.pdm.record.service.dto.PdmBdRequestMaterialRecordDto; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -69,14 +66,13 @@ public class HNMLTask extends AbstractTask { private IMdBaseMaterialService materialService; @Autowired private HNMapper hnMapper; - @Autowired - private TaskUtils taskUtils; + @Override @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -86,7 +82,7 @@ public class HNMLTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } else if (status.equals(TaskStatus.FINISHED)) { // 完成 this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); @@ -107,7 +103,7 @@ public class HNMLTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); // 修改修改者 List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); String requestParam = task.getRequest_param();// 任务的其他数据 JSONObject jsonObject = JSONObject.parseObject(requestParam); @@ -120,25 +116,25 @@ public class HNMLTask extends AbstractTask { noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode()); continue; } - // 将找到的要料数据删除 - // todo: 可能出现事务问题 - requestMaterialRecordService.removeById(point.getRecord_id()); + // 叫料完成 + requestMaterialRecordService.callMaterialFinish(point.getRecord_id());// todo: 加个组盘标识 // 设置终点并修改创建成功状态 task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); - task.setVehicle_type(GeneralDefinition.STEEL_TRAY); + task.setVehicle_type(GeneralDefinition.MATERIAL_CUP); + // 告知acs去左边右边 + String deviceCode = point.getDevice_code(); + int number = Integer.parseInt(deviceCode.replaceAll("[^0-9]", "")); + // 1左边2右边 + number = (number % 2) == 0 ? 2 : (number % 2); + task.setResponse_param(new JSONObject().fluentPut("direction", number).toJSONString()); taskService.updateById(task); point.setIng_task_code(task.getTask_code()); PointUtils.setUpdateByAcs(point); pointService.updateById(point); - // 告知acs去左边右边 - String deviceCode = point.getDevice_code(); - int number = Integer.parseInt(deviceCode.replaceAll("[^0-9]", "")); - // 1右边2左边 - task.setResponse_param(new JSONObject().fluentPut("direction", (number % 2) + 1).toJSONString()); //下发 // this.renotifyAcs(task); } @@ -157,7 +153,7 @@ public class HNMLTask extends AbstractTask { String materialCode = requestParam.getString("material_code"); Assert.notNull(materialCode, "物料编码不能为空!"); MdBaseMaterial baseMaterialObj = materialService.findByCode(materialCode); - Assert.notNull(materialCode, "物料: "+ materialCode + "未找到!"); + Assert.notNull(materialCode, "物料: " + materialCode + "未找到!"); // 根据工单物料标识寻找点位 List points = hnMapper.findPointForHNML(nextRegionStr, baseMaterialObj.getMaterial_id()); return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; @@ -165,7 +161,7 @@ public class HNMLTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -174,7 +170,7 @@ public class HNMLTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -183,46 +179,63 @@ public class HNMLTask extends AbstractTask { public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 - String vehicleType = taskObj.getVehicle_type(); - if (vehicleType == null) { - vehicleType = GeneralDefinition.MATERIAL_CUP; - } String startPoint = taskObj.getPoint_code1(); // 起点 String endPoint = taskObj.getPoint_code2(); // 终点 - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() : IdUtil.getSnowflake(1, 1).nextIdStr(); SchBasePoint startPointObj = pointService.getById(startPoint); SchBasePoint endPointObj = pointService.getById(endPoint); - // 要把数据存到组盘表 + String responseParam = taskObj.getResponse_param(); + JSONObject responseObj = JSONObject.parseObject(responseParam); + // 要把数据存到组盘表。压制工单放进去, SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getOne( new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getGroup_id, taskObj.getGroup_id())); + .eq(SchBaseVehiclematerialgroup::getGroup_id, taskObj.getGroup_id())); if (ObjectUtil.isEmpty(groupEntity)) { // 找不到组盘信息 throw new BadRequestException("找不到组盘信息"); } - // 跟新组盘数据 - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); - taskUtils.setGroupUpdateByType(groupEntity, taskFinishedType); - vehiclematerialgroupService.updateById(groupEntity); - // 终点去除正在执行的任务, 设置载具编码、载具类型、载具数量 if (ObjectUtil.isNotEmpty(endPointObj)) { endPointObj.setIng_task_code(""); // endPointObj.setVehicle_code(vehicle_code); // endPointObj.setVehicle_type(vehicleType); - endPointObj.setVehicle_qty(1); // endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode()); // 有料 + endPointObj.setVehicle_qty(1); PointUtils.setUpdateByType(endPointObj, taskFinishedType); pointService.updateById(endPointObj); + // 终点为公用点位,需要获取左右方向 + String parentPointCode = endPointObj.getParent_point_code(); + String[] split = parentPointCode.split(","); + if (split.length > 1) { + parentPointCode = split[responseObj.getInteger("direction") - 1]; + } + // 找到父点位 + SchBasePoint serviceOne = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, parentPointCode)); + // 找压机工单 + PdmBdWorkorder one = workorderService.getOne(new LambdaQueryWrapper() + .eq(serviceOne != null, PdmBdWorkorder::getPoint_code, serviceOne.getPoint_code()) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode())); + if (ObjectUtil.isNotEmpty(one)) { + // 给组盘数据设置批次:压制工单+混砂机号+碾次 + groupEntity.setWorkorder_code(one.getWorkorder_code()); + StringBuilder pcsn = new StringBuilder(); + pcsn.append(one.getWorkorder_code()).append(groupEntity.getPoint_code()).append(groupEntity.getMix_times()); + groupEntity.setPcsn(pcsn.toString()); + groupEntity.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + groupEntity.setPoint_name(endPointObj.getPoint_name()); + groupEntity.setMove_way(groupEntity.getMove_way() + " -> " + endPointObj.getPoint_code()); + } } + // 更新组盘数据 + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + TaskUtils.setGroupUpdateByType(groupEntity, taskFinishedType); + vehiclematerialgroupService.updateById(groupEntity); // 起点清空 PointUtils.clearPoint(startPointObj); taskObj.setRemark("任务完成"); taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -240,16 +253,20 @@ public class HNMLTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } // 组盘 @Override public String setGroupPlate(JSONObject param) { + // 吨袋号(泥料号+2位年+月日时分+设备号+碾次)x + // LMS组盘时生成混料批次:压制工单+混砂机号+碾次 String vehicleCode = param.getString("vehicle_code"); String vehicleType = param.getString("vehicle_type"); - String workorderCode = param.getString("workorder_code"); + String materialCode = param.getString("material_code"); + String mixTimes = param.getString("bag_number"); // 碾次 + if (vehicleType == null) { vehicleType = GeneralDefinition.MATERIAL_CUP; } @@ -261,30 +278,35 @@ public class HNMLTask extends AbstractTask { if (vehicleCode == null) { throw new BadRequestException("载具编码不能为空"); } - PdmBdWorkorder workorderObject = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; + MdBaseMaterial material = materialService.findByCode(materialCode); + if (ObjectUtil.isEmpty(material)) { + throw new BadRequestException("物料[" + materialCode + "]不存在"); + } + // 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入 + SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.WAIT_BIND.getValue(), material.getMaterial_id()); + if (groupObject != null) { + return groupObject.getGroup_id(); + } // 要把数据存到组盘表 SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderObject) - ? workorderObject.getMaterial_id() + groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(material) + ? material.getMaterial_id() : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderObject) - ? workorderObject.getStanding_time() + groupEntity.setStanding_time(ObjectUtil.isNotEmpty(material) // 静置时间维护到物料 + ? material.getStanding_time() : 0); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderObject) - ? workorderObject.getWorkorder_code() - : ""); groupEntity.setCreate_id(GeneralDefinition.ACS_ID); groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); groupEntity.setCreate_time(DateUtil.now()); groupEntity.setVehicle_code(vehicleCode); groupEntity.setVehicle_type(vehicleType); - groupEntity.setPoint_code(basePoint.getPoint_code()); // 哪台混料机 + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setPoint_code(basePoint.getPoint_code()); // 当前位置 groupEntity.setPoint_name(basePoint.getPoint_name()); - groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); + groupEntity.setMove_way(basePoint.getPoint_code()); // 头次 + groupEntity.setMix_times(mixTimes); // 碾次 groupEntity.setInstorage_time(DateUtil.now()); groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)// 重量 ? weight diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java index e7108b3..c3ab19b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java @@ -109,7 +109,7 @@ // @Transactional(rollbackFor = Exception.class) // protected void updateStatus(String task_code, TaskStatus status) { // // 校验任务 -// SchBaseTask taskObj = taskService.getById(task_code); +// SchBaseTask taskObj = taskService.getByCode(task_code); // if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { // throw new BadRequestException("该任务已完成!"); // } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml index d797619..91a5a3e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml @@ -9,7 +9,7 @@ r.record_id FROM `sch_base_point` p - LEFT JOIN pdm_bd_request_material_record r ON r.material_id = #{materialId} + LEFT JOIN pdm_bd_request_material_record r ON r.material_id = #{materialId} AND r.is_finish = false WHERE p.point_type = '5' AND p.point_status = '1' AND p.parent_point_code LIKE CONCAT('%', r.device_code, '%') diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java index 8419584..d6341ce 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java @@ -1,11 +1,14 @@ package org.nl.wms.sch.task_manage.task.tasks.yao; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -48,12 +51,14 @@ public class CYZCTask extends AbstractTask { private ISchBaseTaskService taskService; @Autowired private ISchBaseTaskconfigService taskConfigService; - @Autowired - private TaskUtils taskUtils; + @Autowired private ISysNoticeService noticeService; @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; + @Override @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { @@ -81,7 +86,7 @@ public class CYZCTask extends AbstractTask { task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); - taskUtils.setUpdateByAcs(task); + TaskUtils.setUpdateByAcs(task); taskService.updateById(task); point.setIng_task_code(task.getTask_code()); @@ -94,8 +99,22 @@ public class CYZCTask extends AbstractTask { } + @Override + public String setGroupPlate(JSONObject param) { + // 查找组盘表信息,不做修改 + String vehicleCode = param.getString("vehicle_code"); + String vehicleType = param.getString("vehicle_type"); + if (vehicleCode == null) { + vehicleType = GeneralDefinition.STEEL_TRAY; + } + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getGroupInfo(vehicleCode, + vehicleType, GroupBindMaterialStatusEnum.BOUND.getValue()); + return ObjectUtil.isNotEmpty(one) ? one.getGroup_id() : ""; + } + /** * 找终点:到钢托盘缓存区中获取一个空位 + * * @param nextRegionStr * @param extData * @return @@ -117,7 +136,7 @@ public class CYZCTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -129,7 +148,7 @@ public class CYZCTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -142,7 +161,7 @@ public class CYZCTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -151,7 +170,7 @@ public class CYZCTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -176,9 +195,21 @@ public class CYZCTask extends AbstractTask { .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()) .eq(SchBaseVehiclematerialgroup::getIs_firing, false)); + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way() + " -> " + endPointObj.getPoint_code()); one.setIs_firing(true); - taskUtils.setGroupUpdateByType(one, taskFinishedType); + one.setOut_kiln_time(DateUtil.now()); + TaskUtils.setGroupUpdateByType(one, taskFinishedType); vehiclematerialgroupService.updateById(one); + // 插入生产过程跟踪表 + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(one.getBuss_move_id()); + processTracking.setProcess_action("出窑到钢托盘缓存位"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); // 记录库存并解锁 endPointObj.setIng_task_code(""); endPointObj.setVehicle_code(vehicle_code); @@ -192,7 +223,7 @@ public class CYZCTask extends AbstractTask { taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -207,7 +238,7 @@ public class CYZCTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java new file mode 100644 index 0000000..118cdfd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/GZYQLTask.java @@ -0,0 +1,181 @@ +package org.nl.wms.sch.task_manage.task.tasks.yao; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 入窑口任务 + * @Date: 2023/7/20 + */ +@Slf4j +@Component +@TaskType("GZYQLTask") +public class GZYQLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "GZYQLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + + @Autowired + private ISysNoticeService noticeService; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) + .collect(Collectors.toList()); + // 找起点 + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); + SchBasePoint point = findStartPoint(startRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("入窑口[" + task.getPoint_code1() + "]未找到所需点位!"); + taskService.updateById(task); + // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + TaskUtils.setUpdateByAcs(task); + taskService.updateById(task); + + point.setIng_task_code(task.getTask_code()); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); + + //下发 +// this.renotifyAcs(task); + } + } + + private SchBasePoint findStartPoint(List startRegionStr, JSONObject jsonObject) { + // 无需工单 + // 默认认为缓存线有东西 + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getPoint_type, GeneralDefinition.EXIT) // 点位类型是缓存输送线出口 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { +// 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(startPointObj, taskFinishedType); + pointService.updateById(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java index 1bb3f6d..9691a82 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java @@ -15,6 +15,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; @@ -46,8 +47,7 @@ public class YZQKTask extends AbstractTask { private ISchBaseTaskconfigService taskConfigService; @Autowired private ISysNoticeService noticeService; - @Autowired - private TaskUtils taskUtils; + @Override @Transactional(rollbackFor = Exception.class) protected void create() { @@ -57,7 +57,7 @@ public class YZQKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); // 修改修改者 List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")) .collect(Collectors.toList()); // 找起点 @@ -108,7 +108,7 @@ public class YZQKTask extends AbstractTask { @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -119,7 +119,7 @@ public class YZQKTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -132,7 +132,7 @@ public class YZQKTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -141,7 +141,7 @@ public class YZQKTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -151,24 +151,24 @@ public class YZQKTask extends AbstractTask { public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 String startPoint = taskObj.getPoint_code1(); // 获取起点 -// String endPoint = taskObj.getPoint_code2(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 SchBasePoint startPointObj = pointService.getById(startPoint); -// SchBasePoint endPointObj = pointService.getById(endPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); // 起点清空 if (ObjectUtil.isNotEmpty(startPointObj)) { PointUtils.setUpdateByType(startPointObj, taskFinishedType); PointUtils.clearPoint(startPointObj); -// endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); -// endPointObj.setVehicle_type("2"); -// endPointObj.setVehicle_qty(1); -// PointUtils.setUpdateByType(endPointObj, taskFinishedType); -// pointService.update(endPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setVehicle_type("2"); + endPointObj.setVehicle_qty(1); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.update(endPointObj); } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -184,7 +184,7 @@ public class YZQKTask extends AbstractTask { } taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java index d34d7b9..6ceb28c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java @@ -113,7 +113,7 @@ // @Override // protected void updateStatus(String task_code, TaskStatus status) { // // 校验任务 -// SchBaseTask taskObj = taskService.getById(task_code); +// SchBaseTask taskObj = taskService.getByCode(task_code); // if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { // throw new BadRequestException("该任务已完成!"); // } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java index e32fa2d..6e096d6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java @@ -48,11 +48,8 @@ public class YZSKTask extends AbstractTask { @Autowired private ISchBaseTaskconfigService taskConfigService; @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired private ISysNoticeService noticeService; - @Autowired - private TaskUtils taskUtils; + @Override @Transactional(rollbackFor = Exception.class) @@ -63,7 +60,7 @@ public class YZSKTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); // 修改修改者 List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 @@ -127,7 +124,7 @@ public class YZSKTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -138,7 +135,7 @@ public class YZSKTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -151,7 +148,7 @@ public class YZSKTask extends AbstractTask { @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -160,7 +157,7 @@ public class YZSKTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -181,12 +178,13 @@ public class YZSKTask extends AbstractTask { endPointObj.setVehicle_qty(1); endPointObj.setVehicle_code(taskObj.getVehicle_code()); endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); - pointService.update(endPointObj); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); } taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); // 区分完成者 + TaskUtils.setUpdateByType(taskObj, taskFinishedType); // 区分完成者 taskService.updateById(taskObj); } @@ -203,7 +201,7 @@ public class YZSKTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java index 2134715..61b587e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java @@ -9,8 +9,11 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; import org.nl.system.service.notice.ISysNoticeService; -import org.nl.wms.pdm.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.database.brick.service.IMdBaseBrickInfoService; +import org.nl.wms.pdm.track.service.IPdmBdProductionProcessTrackingService; +import org.nl.wms.pdm.track.service.dao.PdmBdProductionProcessTracking; +import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.point.service.ISchBasePointService; @@ -31,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -58,10 +60,13 @@ public class YZSLTask extends AbstractTask { private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired private YZMapper yzMapper; - @Autowired - private TaskUtils taskUtils; + @Autowired private ISysNoticeService noticeService; + @Autowired + private IMdBaseBrickInfoService baseBrickInfoService; + @Autowired + private IPdmBdProductionProcessTrackingService processTrackingService; @Override @Transactional(rollbackFor = Exception.class) @@ -72,7 +77,7 @@ public class YZSLTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - taskUtils.setUpdateByAcs(task); // 修改修改者 + TaskUtils.setUpdateByAcs(task); // 修改修改者 List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) .collect(Collectors.toList()); // 找终点 @@ -91,7 +96,7 @@ public class YZSLTask extends AbstractTask { task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); - taskUtils.setUpdateByAcs(task); + TaskUtils.setUpdateByAcs(task); taskService.updateById(task); point.setIng_task_code(task.getTask_code()); @@ -128,7 +133,17 @@ public class YZSLTask extends AbstractTask { // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 if (one.getIs_urgent()) { regionCode = nextRegionStr.get(1); // 去窑区 + // 判断窑区是否可用 + SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getRegion_code, regionCode) + .eq(SchBasePoint::getPoint_type, GeneralDefinition.ENTRANCE) + .eq(SchBasePoint::getIs_used, true)); + // 如果窑口不能用,还是去双层输送线 + if (ObjectUtil.isEmpty(basePoint)) { + regionCode = nextRegionStr.get(0); + } } + // todo: 双层缓存货架的一上一下的区分 List pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( MapOf.of("regionCode", regionCode, "pointType", GeneralDefinition.ENTRANCE))); return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; @@ -138,7 +153,7 @@ public class YZSLTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } @@ -149,7 +164,7 @@ public class YZSLTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); - taskUtils.setUpdateByAcs(taskObj); + TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -169,20 +184,24 @@ public class YZSLTask extends AbstractTask { } String vehicleType = param.getString("vehicle_type"); String workorderCode = param.getString("workorder_code"); - JSONObject stackParameters = param.getJSONObject("PalletizeDto"); + JSONObject stackParameters = param.getJSONObject("palletize"); if (vehicleType == null) { vehicleType = GeneralDefinition.STEEL_TRAY; } String deviceCode = param.getString("device_code"); // 砖块数量 Integer qty = param.getInteger("qty"); - SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper() - .eq(SchBasePoint::getPoint_code, deviceCode) - .eq(SchBasePoint::getIs_used, true)); + SchBasePoint basePoint = pointService.getById(deviceCode); PdmBdWorkorder workorderObject = ObjectUtil.isNotEmpty(workorderCode) ? workorderService.getOne(new LambdaQueryWrapper() .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) : null; + // 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入 + SchBaseVehiclematerialgroup groupObject = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.WAIT_BIND.getValue(), workorderObject.getMaterial_id()); + if (groupObject != null) { + return groupObject.getGroup_id(); + } // 要把数据存到组盘表 SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); @@ -201,22 +220,27 @@ public class YZSLTask extends AbstractTask { groupEntity.setVehicle_code(vehicleCode); groupEntity.setVehicle_type(vehicleType); groupEntity.setMaterial_qty(qty); - groupEntity.setExt_data(JSONObject.toJSONString(stackParameters)); + groupEntity.setExt_data(JSONObject.toJSONString(stackParameters)); // 垛型参数 groupEntity.setPoint_code(basePoint.getPoint_code()); // 对接位 groupEntity.setPoint_name(basePoint.getPoint_name()); - groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setMove_way(basePoint.getPoint_code()); + groupEntity.setPcsn(DateUtil.format(DateUtil.date(), "yyyyMMdd")); // todo: ??? groupEntity.setInstorage_time(DateUtil.now()); groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.WAIT_BIND.getValue()); // 待绑定 groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 groupEntity.setIs_delete(false); vehiclematerialgroupService.save(groupEntity); + // 将所有当前位置的砖块设置组盘标识 + baseBrickInfoService.setGroupByCurrentAllBrick(deviceCode, groupEntity.getGroup_id()); + // 返回组盘id记录任务中 return groupEntity.getGroup_id(); } @Override public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -225,7 +249,7 @@ public class YZSLTask extends AbstractTask { @Override public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -233,16 +257,6 @@ public class YZSLTask extends AbstractTask { } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - // 获取参数 - JSONObject extGroupData = JSONObject.parseObject(taskObj.getRequest_param()); - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; String startPoint = taskObj.getPoint_code1(); // 获取起点 String endPoint = taskObj.getPoint_code2(); // 获取终点 SchBasePoint startPointObj = pointService.getById(startPoint); @@ -252,20 +266,32 @@ public class YZSLTask extends AbstractTask { endPointObj.setIng_task_code(""); PointUtils.setUpdateByType(endPointObj, taskFinishedType); pointService.updateById(endPointObj); + // 组盘表数据改成已绑定 + SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); + TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); + vehiclematerialgroup.setTask_code(taskObj.getTask_code()); // 当前任务 + vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code()); // 设置链路id,使用任务编码 + vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name()); + vehiclematerialgroup.setMove_way(vehiclematerialgroup.getMove_way() + " -> " + endPointObj.getPoint_code()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); + // 插入生产过程跟踪表 + PdmBdProductionProcessTracking processTracking = new PdmBdProductionProcessTracking(); + processTracking.setBuss_move_id(vehiclematerialgroup.getBuss_move_id()); + processTracking.setProcess_action("压制送料入双层缓存线"); + processTracking.setProcess_location(endPoint); + processTracking.setRecord_time(DateUtil.now()); + processTrackingService.create(processTracking); } // 起点清空 PointUtils.setUpdateByType(startPointObj, taskFinishedType); PointUtils.clearPoint(startPointObj); - // 组盘表数据改成已绑定 - SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id()); - taskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType); - vehiclematerialgroup.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); - vehiclematerialgroupService.updateById(vehiclematerialgroup); // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setRemark("任务完成"); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -282,7 +308,7 @@ public class YZSLTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - taskUtils.setUpdateByType(taskObj, taskFinishedType); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java index 77f1e10..2939914 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/CommonUtils.java @@ -1,5 +1,8 @@ package org.nl.wms.util; +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.ext.acs.service.dto.PalletizeDto; + import java.time.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -24,4 +27,10 @@ public class CommonUtils { LocalDateTime expiryTime = inStorageDateTime.plus(standingDuration); return currentTime.isAfter(expiryTime); } + + public static T toJavaObject(String objectString, Class clazz) { + JSONObject jsonObject = JSONObject.parseObject(objectString); + return jsonObject.toJavaObject(clazz); + } + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index c6ee9df..70c5017 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -23,43 +23,40 @@ import java.util.function.Consumer; * @Description: 任务修改抽取的公用方法 * @Date: 2023/6/13 */ -@Component public class TaskUtils { - @Autowired - private ISchBaseTaskService taskService; - public void setCreateByAcs(SchBaseTask taskObj) { + public static void setCreateByAcs(SchBaseTask taskObj) { taskObj.setCreate_id(GeneralDefinition.ACS_ID); taskObj.setCreate_name(GeneralDefinition.ACS_NAME); taskObj.setCreate_time(DateUtil.now()); } - public void setUpdateByAcs(SchBaseTask taskObj) { + public static void setUpdateByAcs(SchBaseTask taskObj) { taskObj.setUpdate_id(GeneralDefinition.ACS_ID); taskObj.setUpdate_name(GeneralDefinition.ACS_NAME); taskObj.setUpdate_time(DateUtil.now()); } - public void setUpdateByPC(SchBaseTask taskObj) { + public static void setUpdateByPC(SchBaseTask taskObj) { taskObj.setUpdate_id(SecurityUtils.getCurrentUserId()); taskObj.setUpdate_name(SecurityUtils.getCurrentNickName()); taskObj.setUpdate_time(DateUtil.now()); } - public void setGroupUpdateByAcs(SchBaseVehiclematerialgroup groupEntity) { + public static void setGroupUpdateByAcs(SchBaseVehiclematerialgroup groupEntity) { groupEntity.setUpdate_id(GeneralDefinition.ACS_ID); groupEntity.setUpdate_name(GeneralDefinition.ACS_NAME); groupEntity.setUpdate_time(DateUtil.now()); } - public void setGroupUpdateByPC(SchBaseVehiclematerialgroup groupEntity) { + public static void setGroupUpdateByPC(SchBaseVehiclematerialgroup groupEntity) { groupEntity.setUpdate_id(SecurityUtils.getCurrentUserId()); groupEntity.setUpdate_name(SecurityUtils.getCurrentNickName()); groupEntity.setUpdate_time(DateUtil.now()); } // 根据类型去判断谁修改的 - public void setGroupUpdateByType(SchBaseVehiclematerialgroup groupEntity, TaskFinishedTypeEnum taskFinishedType) { + public static void setGroupUpdateByType(SchBaseVehiclematerialgroup groupEntity, TaskFinishedTypeEnum taskFinishedType) { if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { setGroupUpdateByAcs(groupEntity); } else { @@ -68,7 +65,7 @@ public class TaskUtils { } - public void setUpdateAuto(SchBaseTask taskObj) { + public static void setUpdateAuto(SchBaseTask taskObj) { String currentUserId = ObjectUtil.isNotEmpty(SecurityUtils.getCurrentUserId()) ? SecurityUtils.getCurrentUserId() : "2"; @@ -81,7 +78,7 @@ public class TaskUtils { } // 根据类型去判断谁修改的 - public void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + public static void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { setUpdateByAcs(taskObj); } else { @@ -92,7 +89,8 @@ public class TaskUtils { /** * 校验是否有起点终点的任务 */ - public Boolean hasTaskAll(String pointCode) { + public static Boolean hasTaskAll(String pointCode) { + ISchBaseTaskService taskService = SpringContextHolder.getBean(ISchBaseTaskService.class); final String code = pointCode; List list = taskService.list(new LambdaQueryWrapper() .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) diff --git a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java index 4d6c9ca..41c98c7 100644 --- a/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java +++ b/lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java @@ -108,9 +108,9 @@ public class PointCreate { void test04() { // 缓存库位区域 List pointList = new ArrayList<>(); int count = 1; - for (int i = 1; i <= 2; i++) { - for (int j = 1; j <= 29; j++) { - for (int k = 1; k <= 3; k++) { + for (int i = 1; i <= 2; i++) { // 排 + for (int j = 1; j <= 3; j++) { // 层 + for (int k = 1; k <= 29; k++) { // 列 String code = "HCHJ"; String name = "缓存货架"; if (count < 10) { @@ -124,6 +124,11 @@ public class PointCreate { name = name + count; } SchBasePoint point = new SchBasePoint(); + if (j == 3) { + point.setPoint_type("1"); + } else { + point.setPoint_type("2"); + } point.setPoint_code(code); point.setPoint_name(name); point.setRegion_code("GTPHC"); @@ -133,8 +138,8 @@ public class PointCreate { point.setVehicle_max_qty(1); point.setBlock_num(1); point.setRow_num(i); - point.setCol_num(j); - point.setLayer_num(k); + point.setCol_num(k); + point.setLayer_num(j); point.setIn_order_seq(count); point.setOut_order_seq(count); point.setIn_empty_seq(count); diff --git a/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue b/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue index 14ad525..da8ee82 100644 --- a/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue +++ b/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue @@ -154,7 +154,7 @@ export default { presenter(), header(), form(function() { - return Object.assign({ dict: { id: this.dictId }}, defaultForm) + return Object.assign({ code_rule_id: this.dictId }, defaultForm) })], data() { return { diff --git a/lms/nladmin-ui/src/views/wms/basedata/brick/index.vue b/lms/nladmin-ui/src/views/wms/basedata/brick/index.vue new file mode 100644 index 0000000..c50340c --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/basedata/brick/index.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/basedata/brick/mdBaseBrickInfo.js b/lms/nladmin-ui/src/views/wms/basedata/brick/mdBaseBrickInfo.js new file mode 100644 index 0000000..fd94630 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/basedata/brick/mdBaseBrickInfo.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/mdBaseBrickInfo', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/mdBaseBrickInfo/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/mdBaseBrickInfo', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-ui/src/views/wms/pdm/record/index.vue b/lms/nladmin-ui/src/views/wms/pdm/record/index.vue index c7e2d94..279206c 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/record/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/record/index.vue @@ -10,10 +10,10 @@ - + - + @@ -29,9 +29,14 @@ - - + + + + + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js b/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js new file mode 100644 index 0000000..9224888 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/track/pdmBdProductionProcessTracking.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/pdmBdProductionProcessTracking', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/pdmBdProductionProcessTracking/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/pdmBdProductionProcessTracking', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-ui/src/views/wms/sch/group/index.vue b/lms/nladmin-ui/src/views/wms/sch/group/index.vue index 02d037f..7468302 100644 --- a/lms/nladmin-ui/src/views/wms/sch/group/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/group/index.vue @@ -221,8 +221,9 @@ - - + + +