From de937332ad6e301cf7438e46d09892c0b91d736d Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 16 Aug 2022 19:55:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 237568 -> 238080 bytes .../wms/ext/acs/rest/AcsToLmsController.java | 39 ++ .../wms/ext/acs/service/AcsToLmsService.java | 26 ++ .../acs/service/impl/AcsToLmsServiceImpl.java | 341 ++++++++++++++++++ .../mps/service/dto/ProduceshiftorderDto.java | 180 +++++---- .../impl/ProduceshiftorderServiceImpl.java | 23 +- .../org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql | 10 +- .../org/nl/wms/pdm/rest/DeviceController.java | 46 +-- .../org/nl/wms/pdm/service/DeviceService.java | 14 +- .../org/nl/wms/pdm/service/dto/DeviceDto.java | 98 ++--- .../pdm/service/impl/DeviceServiceImpl.java | 156 +------- .../org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql | 80 +--- .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 233984 -> 232448 bytes .../org/nl/wms/sch/service/dto/PointDto.java | 10 + .../wms/sch/service/wql/QSCH_BASE_POINT.wql | 4 +- .../java/org/nl/wms/sch/service/wql/sch.xls | Bin 168448 -> 205312 bytes .../nl/wms/sch/tasks/CallEmpVehicleTask.java | 66 +++- .../nl/wms/sch/tasks/CallMaterialTask.java | 82 +++-- .../org/nl/wms/sch/tasks/RegionTypeEnum.java | 26 +- .../nl/wms/sch/tasks/SendEmpVehicleTask.java | 114 ++++-- .../nl/wms/sch/tasks/SendMaterialTask.java | 91 +++-- .../service/impl/RegionioInServiceImpl.java | 20 +- .../nl/wms/st/inbill/wql/ST_REGION_IN_01.wql | 24 ++ .../wms/st/outbill/wql/ST_REGION_OUT_01.wql | 33 ++ .../st/vehiclebill/wql/ST_VEHICLE_IN_02.wql | 26 ++ .../st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql | 31 ++ mes/qd/src/api/wms/pdm/device.js | 10 +- mes/qd/src/views/wms/mps/device/AddDtl.vue | 134 ------- .../src/views/wms/mps/device/CopyDialog.vue | 257 ------------- .../views/wms/mps/device/DeviceInfoDialog.vue | 234 ------------ .../views/wms/mps/device/DeviceItemDialog.vue | 252 ------------- mes/qd/src/views/wms/mps/device/index.vue | 135 ++----- mes/qd/src/views/wms/mps/produce/index.vue | 137 ++----- mes/qd/src/views/wms/pub/DeviceDialog.vue | 175 +++++++++ mes/qd/src/views/wms/sch/point/index.vue | 26 +- 35 files changed, 1322 insertions(+), 1578 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToLmsController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToLmsService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToLmsServiceImpl.java delete mode 100644 mes/qd/src/views/wms/mps/device/AddDtl.vue delete mode 100644 mes/qd/src/views/wms/mps/device/CopyDialog.vue delete mode 100644 mes/qd/src/views/wms/mps/device/DeviceInfoDialog.vue delete mode 100644 mes/qd/src/views/wms/mps/device/DeviceItemDialog.vue create mode 100644 mes/qd/src/views/wms/pub/DeviceDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index a35d13ee98e60e597bebae55dc03317b7a30a27b..9f1614cafeb39e33a2f27ca9a322a6d2eee3586e 100644 GIT binary patch delta 10615 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 delta 10623 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 BRFMDx diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToLmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToLmsController.java new file mode 100644 index 0000000..1374af4 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToLmsController.java @@ -0,0 +1,39 @@ +package org.nl.wms.ext.acs.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.wms.ext.acs.service.AcsToLmsService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequiredArgsConstructor +@Api(tags = "acs接收wms") +@RequestMapping("/api/acsToLms/task") +@Slf4j +public class AcsToLmsController { + private final AcsToLmsService acsToLmsService; + + @PostMapping("/taskResult") + @Log("任务反馈") + @ApiOperation("任务反馈") + public ResponseEntity taskResult(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToLmsService.taskResult(whereJson), HttpStatus.OK); + } + + @PostMapping("/apply") + @Log("申请任务") + @ApiOperation("申请任务") + public ResponseEntity apply(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToLmsService.apply(whereJson), HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToLmsService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToLmsService.java new file mode 100644 index 0000000..81de6d0 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToLmsService.java @@ -0,0 +1,26 @@ +package org.nl.wms.ext.acs.service; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +public interface AcsToLmsService { + + /** + * ACS客户端--->LMS服务端 + * 任务反馈 + * + * @param whereJson 条件 + * @return JSONObject + */ + JSONObject taskResult(JSONObject whereJson); + + /** + * ACS客户端--->LMS服务端 + * 任务申请 + * + * @param whereJson 条件 + * @return JSONObject + */ + JSONObject apply(JSONObject whereJson); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToLmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToLmsServiceImpl.java new file mode 100644 index 0000000..fc85099 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToLmsServiceImpl.java @@ -0,0 +1,341 @@ +package org.nl.wms.ext.acs.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.security.SecurityUtil; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SecurityUtils; +import org.nl.utils.SpringContextHolder; +import org.nl.wms.ext.acs.service.AcsToLmsService; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.tasks.CallEmpVehicleTask; +import org.nl.wms.sch.tasks.CallMaterialTask; +import org.nl.wms.sch.tasks.SendEmpVehicleTask; +import org.nl.wms.sch.tasks.SendMaterialTask; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.core.engine.object.WO; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class AcsToLmsServiceImpl implements AcsToLmsService { + + @Override + public JSONObject taskResult(JSONObject whereJson) { + return null; + } + + @Override + @Transactional + public JSONObject apply(JSONObject whereJson) { + String type = whereJson.getString("type"); + String point_code = whereJson.getString("point_code"); + String vehicle_num = whereJson.getString("vehicle_num"); + String vehicle_type = whereJson.getString("vehicle_type"); + String vehicle_code = whereJson.getString("vehicle_code"); + String qty = whereJson.getString("qty"); + + if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); + if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); + + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord");// 空载具作业记录表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");// 空载具作业记录表 + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); // 区域出入库表 + + /* + * 根据type判断是什么业务类型: + * 1.共挤线申请空盘 + * 2.共挤线满托入库 + * 3.油漆线申请空盘 + * 4.油漆线申请物料 + * 5.油漆线空盘入库 + * 6.一楼空盘入库 (有载具号) + */ + JSONObject resuft = new JSONObject(); + try { + if (StrUtil.equals(type, "1")) { + // 1.共挤线申请空盘: 调用空托盘出库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("next_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + String task_id = SpringContextHolder.getBean(CallEmpVehicleTask.class).createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty",vehicle_num); + jsonEmpParam.put("task_id",task_id); + jsonEmpParam.put("io_type","1"); + this.createEmp(jsonEmpParam); + //TODO 下发 + + // 成功返回 + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "2")) { + // 2.共挤线满托入库: 调用物料入库处理类创建任务 + if (ObjectUtil.isEmpty(qty)) throw new BadRequestException("物料数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + String task_id = SpringContextHolder.getBean(SendMaterialTask.class).createTask(param); + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 插入区域出入库表 + param.put("next_point_code", jsonTask.getString("next_point_code")); + param.put("qty", qty); + param.put("task_id", task_id); + param.put("io_type", "0"); + JSONObject json = this.inCreateRegion(param); + // 回显任务载具类型 + jsonTask.put("vehicle_type", json.getString("vehicle_type")); + taskTab.update(jsonTask); + //TODO 下发 + + // 返回成功 + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "3")) { + // 3.油漆线申请空盘: 调用空托盘出库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("next_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + String task_id = SpringContextHolder.getBean(CallEmpVehicleTask.class).createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty",vehicle_num); + jsonEmpParam.put("task_id",task_id); + jsonEmpParam.put("io_type","1"); + this.createEmp(jsonEmpParam); + //TODO 下发 + + // 成功返回 + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "4")) { + // 4.油漆线申请物料: 调用物料出库库处理类创建任务 + JSONObject param = new JSONObject(); + param.put("next_point_code",point_code); + param.put("io_type","1"); + // 插入区域出库单 + JSONObject json = this.outCreateRegion(param); + + param.put("vehicle_type", json.getString("vehicle_type")); + param.put("material_id", json.getString("material_id")); + param.put("create_mode", json.getString("create_mode")); + param.put("iostorinv_id", json.getString("iostorinv_id")); + // 创建任务 + String task_id = SpringContextHolder.getBean(CallMaterialTask.class).createTask(param); + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 回显出库单:起始点位、起始区域、任务id + JSONObject jsonRegion = regionTab.query("iostorinv_id = '" + json.getString("iostorinv_id") + "'").uniqueResult(0); + jsonRegion.put("start_point_code", jsonTask.getString("start_point_code")); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("start_point_code")).getRegion_id(); + jsonRegion.put("start_region_id", String.valueOf(start_region_id)); + jsonRegion.put("task_id", Long.valueOf(task_id)); + regionTab.update(jsonRegion); + //TODO 下发 + + // 成功返回 + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "5")) { + // 5.油漆线空盘入库: 调用空托盘入库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + param.put("qty", vehicle_num); + // 创建任务 + String task_id = SpringContextHolder.getBean(SendEmpVehicleTask.class).createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty",vehicle_num); + jsonEmpParam.put("task_id",task_id); + jsonEmpParam.put("io_type","0"); + this.createEmp(jsonEmpParam); + //TODO 下发 + + // 成功返回 + resuft.put("status", "200"); + resuft.put("message", ""); + } else if (StrUtil.equals(type, "6")) { + // 6.一楼空盘入库 (有载具号): 调用空托盘入库处理类创建任务 + if (ObjectUtil.isEmpty(vehicle_num)) throw new BadRequestException("数量不能为空"); + if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("载具号不能为空"); + + JSONObject param = new JSONObject(); + param.put("start_point_code", point_code); + param.put("qty", vehicle_num); + param.put("vehicle_code", vehicle_code); + // 创建任务 + String task_id = SpringContextHolder.getBean(SendEmpVehicleTask.class).createTask(param); + + // 插入空载具作业记录表 + JSONObject jsonEmpParam = new JSONObject(); + jsonEmpParam.put("vehicle_qty",vehicle_num); + jsonEmpParam.put("task_id",task_id); + jsonEmpParam.put("io_type","0"); + this.createEmp(jsonEmpParam); + //TODO 下发 + + // 成功返回 + resuft.put("status", "200"); + resuft.put("message", ""); + } + } catch (Exception e) { + resuft.put("status",((BadRequestException) e).getStatus()); + resuft.put("message",e.getMessage()); + } + return resuft; + } + + @Transactional + public void createEmp(JSONObject json) { + String vehicle_qty = json.getString("vehicle_qty"); + String task_id = json.getString("task_id"); + String io_type = json.getString("io_type"); + + WQLObject empTab = WQLObject.getWQLObject("st_ivt_EmptyVehicleRecord");// 空载具作业记录表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");// 空载具作业记录表 + + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + + JSONObject jsonEmp = new JSONObject(); + jsonEmp.put("record_uuid", IdUtil.getSnowflake(1,1).nextId()); + jsonEmp.put("bill_code", CodeUtil.getNewCode("KZJ_BILL_CODE")); + jsonEmp.put("io_type", io_type); + jsonEmp.put("bill_status", "20"); + jsonEmp.put("vehicle_qty", vehicle_qty); + jsonEmp.put("start_point_code", jsonTask.getString("start_point_code")); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("start_point_code")).getRegion_id(); + jsonEmp.put("start_region_id", start_region_id); + jsonEmp.put("next_point_code", jsonTask.getString("next_point_code")); + Long next_region_id = SpringContextHolder.getBean(PointService.class).findByCode(jsonTask.getString("next_point_code")).getRegion_id(); + jsonEmp.put("end_region_id", next_region_id); + jsonEmp.put("task_uuid", task_id); + jsonEmp.put("create_id", SecurityUtils.getCurrentUserId()); + jsonEmp.put("create_name", SecurityUtils.getNickName()); + jsonEmp.put("create_time", DateUtil.now()); + empTab.insert(jsonEmp); + } + + @Transactional + public JSONObject inCreateRegion(JSONObject json) { + String start_point_code = json.getString("start_point_code"); + String next_point_code = json.getString("next_point_code"); + String qty = json.getString("qty"); + Long task_id = json.getLongValue("task_id"); + String io_type = json.getString("io_type"); + + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + + + JSONObject jsonRegion = new JSONObject(); + jsonRegion.put("iostorinv_id",IdUtil.getSnowflake(1,1).nextId()); + jsonRegion.put("bill_code",CodeUtil.getNewCode("IN_STORE_CODE")); + jsonRegion.put("io_type",io_type); + jsonRegion.put("bill_status","20"); + // 根据起点点位找到起点设备,根据设备找到对应工单, 根据工单找到对应物料及托盘类型 + String device_code = start_point_code.substring(0, start_point_code.indexOf("-")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + jsonRegion.put("material_id",jsonOrder.getString("material_id")); + jsonRegion.put("qty",qty); + JSONObject jsonMater = materTab.query("material_id ='" + jsonOrder.getString("material_id") + "'").uniqueResult(0); + jsonRegion.put("qty_unit_id",jsonMater.getString("base_unit_id")); + + jsonRegion.put("start_point_code",start_point_code); + Long start_region_id = SpringContextHolder.getBean(PointService.class).findByCode(start_point_code).getRegion_id(); + jsonRegion.put("start_region_id",String.valueOf(start_region_id)); + jsonRegion.put("end_point_code",next_point_code); + Long end_region_id = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code).getRegion_id(); + jsonRegion.put("end_region_id",String.valueOf(end_region_id)); + + jsonRegion.put("create_mode","02"); + jsonRegion.put("task_id",task_id); + jsonRegion.put("create_id",SecurityUtils.getCurrentUserId()); + jsonRegion.put("create_name",SecurityUtils.getNickName()); + jsonRegion.put("create_time",DateUtil.now()); + regionTab.insert(jsonRegion); + + JSONObject resuft = new JSONObject(); + resuft.put("vehicle_type", jsonOrder.getString("vehicle_type")); + resuft.put("material_id", jsonRegion.getString("material_id")); + resuft.put("create_mode", jsonRegion.getString("create_mode")); + return resuft; + } + + @Transactional + public JSONObject outCreateRegion(JSONObject json) { + String next_point_code = json.getString("next_point_code"); + String io_type = json.getString("io_type"); + + WQLObject regionTab = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); + + JSONObject jsonRegion = new JSONObject(); + jsonRegion.put("iostorinv_id",IdUtil.getSnowflake(1,1).nextId()); + jsonRegion.put("bill_code",CodeUtil.getNewCode("OUT_STORE_CODE")); + jsonRegion.put("io_type",io_type); + jsonRegion.put("bill_status","20"); + // 根据起点点位找到起点设备,根据设备找到对应工单, 根据工单找到对应物料及托盘类型 + String device_code = next_point_code.substring(0, next_point_code.indexOf("-")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + jsonRegion.put("material_id",jsonOrder.getString("material_id")); + jsonRegion.put("qty","100"); // 暂时先按照100 + JSONObject jsonMater = materTab.query("material_id ='" + jsonOrder.getString("material_id") + "'").uniqueResult(0); + jsonRegion.put("qty_unit_id",jsonMater.getString("base_unit_id")); + + jsonRegion.put("end_point_code",next_point_code); + Long end_region_id = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code).getRegion_id(); + jsonRegion.put("end_region_id",String.valueOf(end_region_id)); + + jsonRegion.put("create_mode","02"); + jsonRegion.put("create_id",SecurityUtils.getCurrentUserId()); + jsonRegion.put("create_name",SecurityUtils.getNickName()); + jsonRegion.put("create_time",DateUtil.now()); + regionTab.insert(jsonRegion); + + // 需回显起始点位、起始区域、任务id + JSONObject resuft = new JSONObject(); + resuft.put("iostorinv_id",jsonRegion.getString("iostorinv_id")); + resuft.put("vehicle_type",jsonOrder.getString("vehicle_type")); + resuft.put("create_mode",jsonRegion.getString("create_mode")); + resuft.put("material_id",jsonOrder.getString("material_id")); + return resuft; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java index 7445e36..3bb51b8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java @@ -8,98 +8,152 @@ import java.io.Serializable; import java.math.BigDecimal; /** -* @description / -* @author qinx -* @date 2022-05-24 -**/ + * @author qinx + * @description / + * @date 2022-05-24 + **/ @Data public class ProduceshiftorderDto implements Serializable { - /** 生产班次工单标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long produceorder_id; + /** 生产班次工单标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long produceorder_id; - /** 生产班次工单编号 */ - private String produceorder_code; + /** + * 生产班次工单编号 + */ + private String produceorder_code; - /** 机台工单号 */ - private String producedeviceorder_code; + /** + * 机台工单号 + */ + private String producedeviceorder_code; - /** 班次类型 */ - private String shift_type_scode; + /** + * 班次类型 + */ + private String shift_type_scode; - /** 工序标识 */ - private Long workprocedure_id; + /** + * 生产日期 + */ + private String produce_date; - /** 生产日期 */ - private String produce_date; + /** + * 计划数量 + */ + private BigDecimal plan_qty; - /** 计划数量 */ - private BigDecimal plan_qty; + /** + * 实际数量 + */ + private BigDecimal real_qty; - /** 实际数量 */ - private BigDecimal real_qty; + /** + * 报工数量 + */ + private BigDecimal report_qty; - /** 报工数量 */ - private BigDecimal report_qty; + /** + * 物料标识 + */ + private Long material_id; - /** 物料标识 */ - private Long material_id; + /** + * 物料单重 + */ + private BigDecimal material_weight; - /** 物料单重 */ - private BigDecimal material_weight; + /** + * 托盘类型 + */ + private String vehicle_type; - /** 计划生产开始时间 */ - private String planproducestart_date; + /** + * 计划生产开始时间 + */ + private String planproducestart_date; - /** 计划生产结束时间 */ - private String planproduceend_date; + /** + * 计划生产结束时间 + */ + private String planproduceend_date; - /** 实际生产开始时间 */ - private String realproducestart_date; + /** + * 实际生产开始时间 + */ + private String realproducestart_date; - /** 实际生产结束时间 */ - private String realproduceend_date; + /** + * 实际生产结束时间 + */ + private String realproduceend_date; - /** 工单状态 */ - private String order_status; + /** + * 工单状态 + */ + private String order_status; - /** 是否搬运 */ - private String is_needmove; + /** + * 是否搬运 + */ + private String is_needmove; - /** 工单类型 */ - private String order_type_scode; + /** + * 工单类型 + */ + private String order_type_scode; - /** 创建人 */ - private Long create_id; + /** + * 创建人 + */ + private Long create_id; - /** 创建人姓名 */ - private String create_name; + /** + * 创建人姓名 + */ + private String create_name; - /** 创建时间 */ - private String create_time; + /** + * 创建时间 + */ + private String create_time; - /** 修改人 */ - private Long update_optid; + /** + * 修改人 + */ + private Long update_optid; - /** 修改人姓名 */ - private String update_optname; + /** + * 修改人姓名 + */ + private String update_optname; - /** 修改时间 */ - private String update_time; + /** + * 修改时间 + */ + private String update_time; - /** 部门ID */ - private Long sysdeptid; + /** + * 部门ID + */ + private Long sysdeptid; - /** 公司ID */ - private Long syscompanyid; + /** + * 公司ID + */ + private Long syscompanyid; - /** 是否删除 */ - private String is_delete; + /** + * 是否删除 + */ + private String is_delete; - private String is_canupdate_update; + private String is_canupdate_update; - private Long device_id; - private Long sale_id; + private Long device_id; + private Long sale_id; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java index 3b4a8d3..89579f0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -51,9 +51,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { String order_type_scode = MapUtil.getStr(whereJson, "order_type_scode"); String order_status = MapUtil.getStr(whereJson, "order_status"); String shift_type_scode = MapUtil.getStr(whereJson, "shift_type_scode"); - String parent_id = MapUtil.getStr(whereJson, "product_series"); String sale_id = MapUtil.getStr(whereJson, "sale_id"); - String product_series = ""; JSONObject map = new JSONObject(); map.put("flag", "1"); map.put("order_type_scode", order_type_scode); @@ -70,10 +68,6 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { map.put("unFinish", "-1"); map.put("order_status", order_status.replace("-1", "")); } - if (StrUtil.isNotEmpty(parent_id)) { - product_series = classstandardService.getChildIdStr(parent_id); - map.put("product_series", product_series); - } if (StrUtil.isNotEmpty(produceorder_code)) { map.put("produceorder_code", "%" + produceorder_code + "%"); } @@ -185,12 +179,19 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { Long currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getNickName(); String now = DateUtil.now(); + WQLObject wo = WQLObject.getWQLObject("mps_bd_produceshiftorder"); - param.put("order_status", "01"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); + JSONObject json = wo.query("produceorder_id = '" + param.getString("produceorder_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json.getString("device_id"))) throw new BadRequestException("请先绑定设备"); + + JSONArray orderArr = wo.query("device_id = '" + param.getString("device_id") + "' and order_status = '02'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(orderArr)) throw new BadRequestException("当前设备正在生产中"); + + json.put("order_status", "02"); + json.put("update_optid", currentUserId); + json.put("update_optname", nickName); + json.put("update_time", now); + wo.update(json); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql index dba05de..4e7ed7c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql @@ -60,14 +60,13 @@ material.material_name, material.material_spec, material.product_series, - WorkProcedure.workprocedure_code, - WorkProcedure.workprocedure_name, classstandard.class_id, - classstandard.class_name + classstandard.class_name, + device.device_name FROM MPS_BD_ProduceShiftOrder ShiftOrder LEFT JOIN md_me_materialbase material ON material.material_id = ShiftOrder.material_id - LEFT JOIN PDM_BI_WorkProcedure WorkProcedure ON WorkProcedure.workprocedure_id = ShiftOrder.workprocedure_id + LEFT JOIN pdm_bi_device device ON ShiftOrder.device_id = device.device_id LEFT JOIN md_pb_classstandard classstandard ON classstandard.class_id = material.product_series WHERE ShiftOrder.is_delete = '0' @@ -82,9 +81,6 @@ ENDOPTION OPTION 输入.shift_type_scode <> "" ShiftOrder.shift_type_scode = 输入.shift_type_scode - ENDOPTION - OPTION 输入.product_series <> "" - material.product_series in 输入.product_series ENDOPTION OPTION 输入.begin_time <> "" ShiftOrder.produce_date >= 输入.begin_time diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java index b49c14b..eebf463 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java @@ -66,46 +66,12 @@ public class DeviceController { return new ResponseEntity<>(HttpStatus.OK); } - @GetMapping("/getWorkprocedure") - @Log("工序下拉") - @ApiOperation("工序下拉") - //@PreAuthorize("@el.check('device:list')") - public ResponseEntity getWorkprocedure(){ - return new ResponseEntity<>(deviceService.getWorkprocedure(),HttpStatus.OK); - } - - @PostMapping("/getItemByDevice") - @Log("获取设备下的项点") - @ApiOperation("获取设备下的项点") - //@PreAuthorize("@el.check('device:list')") - public ResponseEntity getItemByDevice(@RequestBody JSONObject param){ - return new ResponseEntity<>(deviceService.getItemByDevice(param),HttpStatus.OK); - } - - @PostMapping("/savaDeviceItem") - @Log("保存设备项点") - @ApiOperation("保存设备项点") - //@PreAuthorize("@el.check('device:list')") - public ResponseEntity savaDeviceItem(@RequestBody JSONObject param){ - deviceService.savaDeviceItem(param); - return new ResponseEntity<>(HttpStatus.OK); - } - - @PostMapping("/getItemByDeviceId") - @Log("动态获取表格列") - @ApiOperation("动态获取表格列") - //@PreAuthorize("@el.check('dcBaseDevice:list')") - public ResponseEntity getItemByDeviceId(@RequestBody JSONObject param){ - return new ResponseEntity<>(deviceService.getItemByDeviceId(param),HttpStatus.OK); - } - - @PostMapping("/copyAdd") - @Log("复制新增") - @ApiOperation("复制新增") - //@PreAuthorize("@el.check('dcBaseDevice:list')") - public ResponseEntity copyAdd(@RequestBody JSONObject param){ - deviceService.copyAdd(param); - return new ResponseEntity<>(HttpStatus.OK); + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + public ResponseEntity changeActive(@RequestBody JSONObject json) { + deviceService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java index cde190b..ed999be 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java @@ -64,18 +64,6 @@ public interface DeviceService { */ void deleteAll(Long[] ids); - JSONArray getWorkprocedure(); - JSONArray getItemByDevice(JSONObject param); - - void savaDeviceItem(JSONObject param); - - /** - * 查询设备类型 - * @param param - * @return - */ - Map getItemByDeviceId(JSONObject param); - - void copyAdd(JSONObject param); + void changeActive(JSONObject json); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java index e54f279..e191895 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/DeviceDto.java @@ -8,64 +8,72 @@ import java.io.Serializable; import java.math.BigDecimal; /** -* @description / -* @author geng by -* @date 2022-05-25 -**/ + * @author geng by + * @description / + * @date 2022-05-25 + **/ @Data public class DeviceDto implements Serializable { - /** 设备标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) - private Long device_id; + /** 设备标识 */ + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long device_id; - /** 设备编码 */ - private String device_code; + /** + * 设备编码 + */ + private String device_code; - /** 设备名称 */ - private String device_name; + /** + * 设备名称 + */ + private String device_name; - /** 设备型号 */ - private String device_model; + /** + * 设备型号 + */ + private String device_model; - /** 工序标识 */ - private Long workprocedure_id; + /** + * 外部编码 + */ + private String extend_code; - /** 外部编码 */ - private String extend_code; + /** + * 备注 + */ + private String remark; - /** 设备档案标识 */ - private Long devicebill_id; + /** + * 是否启用 + */ + private String is_active; - /** 备注 */ - private String remark; + /** + * 创建人 + */ + private Long create_id; - /** 是否启用 */ - private String is_active; + /** + * 创建人姓名 + */ + private String create_name; - /** 创建人 */ - private Long create_id; + /** + * 创建时间 + */ + private String create_time; - /** 创建人姓名 */ - private String create_name; + /** + * 是否删除 + */ + private String is_delete; - /** 创建时间 */ - private String create_time; - - /** 是否删除 */ - private String is_delete; - - - /** 物料标识 */ - private Long material_id; - - /** 生产班次工单标识 */ - private Long produceorder_id; - - /** 生产班次工单编号 */ - private String produceorder_code; - - /** 设备产能 */ + /** + * 设备产能 + */ private BigDecimal productivity; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java index 699334d..951ccc9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java @@ -38,54 +38,13 @@ public class DeviceServiceImpl implements DeviceService { @Override public Map queryAll(Map whereJson, Pageable page) { - String workprocedure_id = MapUtil.getStr(whereJson, "workprocedure_id"); String search = MapUtil.getStr(whereJson, "search"); - JSONObject map2 = new JSONObject(); - map2.put("flag", "3"); - map2.put("workprocedure_id", workprocedure_id); + JSONObject map = new JSONObject(); + map.put("flag", "1"); if (!StrUtil.isEmpty(search)) { - map2.put("search", "%" + search + "%"); + map.put("search", "%" + search + "%"); } - //根据工序获取设备信息 - JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map2).pageQuery(WqlUtil.getHttpContext(page), "device.create_time desc"); - JSONArray jsonArray = json.getJSONArray("content"); - JSONArray newContent = new JSONArray(); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - JSONObject map = new JSONObject(); - String device_id = jsonObject.getString("device_id"); - map.put("flag", "4"); - map.put("device_id", device_id); - //获取设备所拥有的项点信息 - JSONArray itemArray = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).process().getResultJSONArray(0); - JSONObject newMap = new JSONObject(); - newMap.put("device_id", jsonObject.getString("device_id")); - newMap.put("device_code", jsonObject.getString("device_code")); - newMap.put("device_name", jsonObject.getString("device_name")); - newMap.put("device_model", jsonObject.getString("device_model")); - newMap.put("productivity", jsonObject.getString("productivity")); - newMap.put("workprocedure_id", jsonObject.getString("workprocedure_id")); - newMap.put("extend_code", jsonObject.getString("extend_code")); - newMap.put("devicebill_id", jsonObject.getString("devicebill_id")); - newMap.put("remark", jsonObject.getString("remark")); - newMap.put("is_active", jsonObject.getString("is_active")); - newMap.put("is_delete", jsonObject.getString("is_delete")); - //循环每个设备的项点信息,将项点所对应的键设为项点编码,对应动态表格的prop - for (int j = 0; j < itemArray.size(); j++) { - JSONObject itemObject = itemArray.getJSONObject(j); - if (itemObject.getString("data_type").equals("01")){ - if (itemObject.getString("item_value").equals("0")){ - newMap.put(itemObject.getString("item_code"), "否"); - }else { - newMap.put(itemObject.getString("item_code"), "是"); - } - }else { - newMap.put(itemObject.getString("item_code"), itemObject.getString("item_value")); - } - } - newContent.add(newMap); - } - json.put("content", newContent); + JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.create_time DESC"); return json; } @@ -168,109 +127,14 @@ public class DeviceServiceImpl implements DeviceService { } } - @Override - public JSONArray getWorkprocedure() { - WQLObject wo = WQLObject.getWQLObject("pdm_bi_workprocedure"); - final JSONArray resultJSONArray = wo.query("is_delete = '0'").getResultJSONArray(0); - return resultJSONArray; - } - - @Override - public JSONArray getItemByDevice(JSONObject param) { - JSONObject map = new JSONObject(); - map.put("flag", "1"); - map.put("device_id", param.getString("device_id")); - final JSONArray resultJSONArray = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).addParamMap(map).process().getResultJSONArray(0); - return resultJSONArray; - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void savaDeviceItem(JSONObject param) { - WQLObject wo = WQLObject.getWQLObject("PDM_BI_DeviceItemValue"); - final JSONObject row = param.getJSONObject("row"); - final JSONArray rows = param.getJSONArray("rows"); - final String device_id = row.getString("device_id"); - wo.delete("device_id = '" + device_id + "'"); - for (int i = 0; i < rows.size(); i++) { - final JSONObject jsonObject = rows.getJSONObject(i); - final String item_id = jsonObject.getString("item_id"); - JSONObject map = new JSONObject(); - map.put("deviceitem_id", IdUtil.getSnowflake(1, 1).nextId()); - map.put("device_id", device_id); - map.put("item_id", item_id); - map.put("item_value", jsonObject.getString("item_value")); - map.put("order_seq", i + 1); - wo.insert(map); - } - } - - @Override - public Map getItemByDeviceId(JSONObject param) { - //动态获取设备类型下对应的项点信息 - String workprocedure_id = param.getString("workprocedure_id"); - String search = param.getString("search"); - JSONObject map = new JSONObject(); - map.put("flag", "2"); - map.put("workprocedure_id", workprocedure_id); - if (StrUtil.isNotEmpty(search)) { - map.put("search", "%" + search + "%"); - } - final JSONArray jsonArray = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).process().getResultJSONArray(0); - JSONArray newArray = new JSONArray(); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - String item_name = jsonObject.getString("item_name"); - JSONObject json = new JSONObject(); - json.put("label", item_name); - //将表格prop设置为项点编码 - json.put("prop", jsonObject.getString("item_code")); - json.put("show", true); - if (item_name.length() >= 6) { - json.put("width", "150"); - } - newArray.add(json); - } - JSONObject resultMap = new JSONObject(); - resultMap.put("newArray", newArray); - return resultMap; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void copyAdd(JSONObject param) { - - WQLObject wo = WQLObject.getWQLObject("PDM_BI_Device"); - WQLObject wo_value = WQLObject.getWQLObject("PDM_BI_DeviceItemValue"); - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getNickName(); - String now = DateUtil.now(); - String device_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - JSONObject row = param.getJSONObject("row"); - //编码唯一性校验 - String device_code = row.getString("device_code"); - DeviceDto byCode = this.findByCode(device_code); - if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); - - row.put("device_id", device_id); - row.put("create_id", currentUserId); - row.put("create_name", nickName); - row.put("create_time", now); - wo.insert(row); - JSONArray rows = param.getJSONArray("rows"); - if (rows.size() > 0) { - for (int i = 0; i < rows.size(); i++) { - JSONObject jsonObject = rows.getJSONObject(i); - JSONObject map = new JSONObject(); - map.put("deviceitem_id", IdUtil.getSnowflake(1, 1).nextId()); - map.put("device_id", device_id); - map.put("item_id", jsonObject.getString("item_id")); - map.put("item_value", jsonObject.getString("default_value")); - map.put("order_seq", i + 1); - wo_value.insert(map); - } + public void changeActive(JSONObject json) { + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; } + json.put("is_used", is_used); + WQLObject.getWQLObject("PDM_BI_Device").update(json); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql index 5994da0..0578a92 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/PDM_BI_DEVICE01.wql @@ -15,8 +15,6 @@ ################################################# 输入.flag TYPEAS s_string 输入.search TYPEAS s_string - 输入.device_id TYPEAS s_string - 输入.workprocedure_id TYPEAS s_string [临时表] @@ -42,79 +40,19 @@ ########################################## IF 输入.flag = "1" - QUERY + PAGEQUERY SELECT - deviceitem.*, - deviceitemvalue.item_value, - '1' as is_show + device.* FROM - PDM_BI_DeviceItemValue deviceitemvalue - left join PDM_BI_DeviceItem deviceitem on deviceitemvalue.item_id = deviceitem.item_id + PDM_BI_Device device WHERE - deviceitemvalue.device_id = 输入.device_id - order by - deviceitemvalue.order_seq - ENDSELECT - ENDQUERY - ENDIF + device.is_delete = '0' - IF 输入.flag = "2" - QUERY - SELECT - deviceitem.* - FROM - `pdm_bi_deviceitemvalue` deviceitemvalue - LEFT JOIN pdm_bi_device device ON deviceitemvalue.device_id = device.device_id - LEFT JOIN pdm_bi_deviceitem deviceitem ON deviceitemvalue.item_id = deviceitem.item_id - where - 1 = 1 - OPTION 输入.workprocedure_id <> "" - device.workprocedure_id = 输入.workprocedure_id - ENDOPTION OPTION 输入.search <> "" - (device.device_code like 输入.search or device.device_name like 输入.search) + (device.device_code like 输入.search or + device.device_name like 输入.search) ENDOPTION - GROUP BY - deviceitem.item_code + ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - PAGEQUERY - SELECT - device.* - FROM - PDM_BI_Device device - WHERE - 1 = 1 - OPTION 输入.workprocedure_id <> "" - device.workprocedure_id = 输入.workprocedure_id - ENDOPTION - OPTION 输入.search <> "" - (device.device_code like 输入.search or - device.device_name like 输入.search) - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "4" - QUERY - SELECT - deviceItemValue.device_id, - deviceItemValue.item_id, - deviceItemValue.item_value, - item.item_code, - item.data_type - FROM - PDM_BI_DeviceItemValue deviceItemValue - LEFT JOIN PDM_BI_Device device ON deviceItemValue.device_id = device.device_id - LEFT JOIN PDM_BI_DeviceItem item ON deviceItemValue.item_id = item.item_id - where - deviceItemValue.device_id = 输入.device_id - ENDSELECT - ENDQUERY - ENDIF - - + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 0edb77890b7d871a311248cf73bd11d94228538b..f81b57f213b28de0f304067c92f76ea7812c3405 100644 GIT binary patch delta 34999 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 delta 35567 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 jzKimk?pOlV)*Jjz<68GHQX1D(X_H}R? diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java index 5fdaa00..3fc8fef 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java @@ -61,6 +61,16 @@ public class PointDto implements Serializable { */ private Integer vehicle_qty; + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 是否专机 + */ + private String is_host; + /** * 来源标识 */ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql index 15e78ec..3fed283 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_BASE_POINT.wql @@ -74,7 +74,9 @@ point.create_name, point.create_time, point.update_optname, - point.update_time + point.update_time, + point.vehicle_type, + point.is_host FROM sch_base_point point LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/sch.xls index 47ecd12e57a3ec20d15e8af440a7066a94a696b4..bf2bc1fe613927fa33b0f20b0272e19d9bba3cc7 100644 GIT binary patch delta 51344 zcmcG12Vhi1{{PI|-DF7*1PGyRLV$!4(tw1TPEbk^R8W)z2uUE2K%#<$4T{K#CAi8% zPXsK89e!BQQwb+3qBJX3z;dGJonSe!=KuLldHXgApx*r_nfGSC^PO*-KJU%jhI>OA zc7-(#NO3a8IJ|ICjO8KVfd8$zxmf}kt3cpmcrQ0=vw7Us+8g*ShLhjE&1E>a>mj7v z;R|O88%q*SEp(T13u>;9uu#J;d_?Y$)Wg=F zj_~yR^%ugE_`XH1^LV@&J(+hfqb76bwj-`E7w5izg>>%14ZiBa$rIC94Eq4tV_2gQ zeg*f94sMki?N1#a+9H*+O!lk+5)65-YME-V&i=fQv`l5lYw`WCWh!T*{glJQIz#eb z+xf5SgDE^;z~>7%u6Dg1M|rp{3fuOE703E6>Rs&X*t>Y!eZAKj&PVvV{o8Vr_GXm! zx{DMrIG;Y#yp~0=0rykf$*(J)Rr%ejh&cqS+ah7L33gK!1^aZ@+uWgD>B8 zb9H0;X7(cBR!wBnZp|4PclNJ-1%(E&5B(jC<~L7G`#>n)RRFw@kWWY+h8S_U)n<%#AMG)_Bg#kDVLc z@!dx+Eu4RS$h_#4(Yehzvr`^<_wj?rzW@2dANIXgxO~HjupLi-e&-d>e|^Od*$IoH zOYR7I<6-0NJJ#+Vcz)v2lZT?C$NW2gLT=9|s&~)XP#L-EyWt66zw_1JOA0>ycF_4z z-kb@ZxA}&Dmi&;rc1~jA>(50!S75F?F#Mc8?H_#cyuW0w&2smPzkf=?)K|;mS3FdE z;p`RrUay?{7 z#N)G`PUmM2{W^R2@W1|0|47)v`j7YAd*8yu{_S3^TevXo>n`5^`|6Gx?(hEU>V+q- z{U*Ea>FFP3R4*Cw_mt)94`27({&WC<;tJ7CqD4)&zt9ayZrlt=W_SmKYISwxjR;@{L8eWL3MXrF)QtX+d`(a zzisUeW7oa**ogJsZ%@Aajk&&N$N4+wj;tK;sP~bZK0op1*vB7XXDwT_q5WEZ0lRBy z?^H+0OS9(990m{g1H3=G)u98*$guo4@8k%aR-J{rZMI)n@jOUv*4+ zW9z6H2j08$9~)BIjWhPf({lDEjBKr7?pB}i_`~ABo4!@uG*qigZzqbE_>F++Y=i%f9_1VAl|Ml?G>7!UN9wjhM^tyZDOoiwi&acv^mkl5ySdxMo{<#DDgj``NQ?p`9+j@1sYrd3xHIZk~x-ZYtWa_TulCZuxfMKIi^hw@q0RbLGgAanE}{tav|a zhjC=YlV0bDP7g#Z-ZwHl?3(1Acf4Wt9P!Er-|f6;{m2im_~4xdzce>ZdaZ2N>g*q0 zSXZ<8v$sa39d5tR_g%_GAA2uc(7br}ul4=Xu0ChvzT5A;^uZm&fB0_a_uGEE^6AGi zdfXMaenWH9;L#TkEC2iAdEfqX)aL~=m%iZq@$={J`f{=1%ImV{ozA;I>b1kW^pWc> zz2^Ma?(f|ke)QQNZ#?>A;{@Y{oPkYs&xIWS<=Ff04E^xwPhPCQ|KA6n3O=$e##K2w z=uQ4>&KsZYsq0^nazjdmdHF-0$Ab6W@N}2{U5?-Rz?acO?-}uA#udh2_a0d|{l~8> zomXDC<>d=*yKLZHUz=Y}+xE?qgZ_EQ`6j#ftcG7^?5q8Tr}}Q1n-d)8S%x0BZrfXP zi`?6i>khT|@#{Uetf=%=8r_^U;P_S=1s)0vMl&7)KNLQTnlxa;a32ou`)Wm|#7=aK z2&0q>0KJe>s;^Ti_d1HhDdj3am%@8}KVG-0M^GyIm$@zs8@N|Ol=l(-9{xk>#(a0L z?BA(@(Xh8Tx!~!J6&Dvgov?S>uRk=#`AVEI=5iO0ikh-6dE9UL)5os+vM#@%DyPU7 z{Fn1RErG4FFa1kDo@Fk~=3Q3TrfiG9e!nw}x?;}4*a+4ubla~t#fJDAmjyeg&OCIf z?~Yr#247lUSv9M=+;@0w$01#q3j;Gd|H8$SDpw9;QK@yTp4G5LtPCS_IlC0Tl2x%; ztQw&iNL#{cS-CIT?BHv>)qPgkqFI$?i_((@ClkLe!lobx7s8xG_)>|{27*&^9yF)V zlnxVyRrvNT>+G$nn^9R)S5LHpY_yu$<=o9)oXr4d?A&t3?!^7FD#o726ytH+f5tsy zE@PL&;1A+{0{12J7;A#@*H<(4k6^|M<}&y}Z>;e$ zb_{_9wTwLx3Z#XMRe|IG;r=7;6^j^qG#q1K9b;!lFjkHGHrzkJy%z?guuB-545jDd zz7_X(aPJX~Y0ssM{RQ_&aQ_bX-HREEjDg@wAUN(fT+Y}V9T~gHdj(@}bz3rK zG8T&Jbxs$?212mQI=hbT%Ymb>v({jdwJ*e5& zGS(N>am01d5LGf_C2BoJu^(|yfW`RrjP--1`mADXA}rNu*$prsOf~l=RCt(X!_ADn z60+?tckB%d8Mz+TxCer5+E#l1a>M%tiU0+`I$=u3*_SQ;+(?OK;L!q3cy9J9st5S7 ze~LkwXaphj&lZ1@2E=IrCp@=T5J9OR0@Z{dVW%X5QfrHdpwU63(cn&kbT}mql$4D| zu#(pI#e;Pn{voEd&$ITdD?$Fh8` zEf)mkZAOK9)VJm7Chqnvd}ipji?%)!#QC<^?FL6hCWq=mF36Yk^wN+Ux1!=SG4}Zj z+qOKN=9~U-u2)@d7{KYu-`D-|&?+y})<-dhaabulcUSHP83O&aVAyK!-{> z40YfFHWCzN%!OF3l@^3fW|VKx-@A_4r!c~y-UXQCO8jtG^8%J*#fVm}6(d^y7}3h} zt^Rvg?_PxwA!y}WF``vq#fX+ajcEB}M5_>(ON|hklA`NFL&+fxB4MBv>;*+7QgA4; zV#Hw#8mmw?QmF1vBo_V{u_y*6v7nBUSPT#>qQK&M_IE`kDnN-SVGylEl;EJnj$%>? z@Fz*5(55QbSj7U}j$n}@SVV)xG`3T*hz5%b*;!W1f!Ntr%o&j83Wx=P$~a(>676v( zB~pFKyF$n8Q2E;n@yA;+vd{!8MrAP3ijnyK7)f8^yJA<@>`4lvgOKwaD@Jlowqhiw zKaJ#^;@iKg_n5a7MvRc;Tq{PBoM**I5`P*=;*XIe=lh1g*mcZQh2K%o(z13Gg`&0U zC0FnH3{i{ut4k=_`AwtM^TX5er(?81khgv5>3UqD4J>wUs*-70(_EV)HOz zkhKD%m#7s(MZN2SdN+s7Ry4bS!&FP3F5obgU5MH%4ABKF?1`>`7>P@jjVc}nMiI^u zEaC)@ zeANF>g*9}HSoqV3g+E40%m*fMz$h*_4DV`7#o2#3U zzQ%X(;eC2EJOA6m3 zXw_RWqIHQCBU=76qUDbfElkfuS;XT`m20#p?Rb>-e0G_l5-&Jl0w?5)M~T$1CH<_Z z6DIa2x&mUv;&NZRSG$fmsPGd6F--adu>=rXz^=4nM2prKWX1%T(HwjV?lKBOC}=IWVx;7?R*d9YVZ}%;e~f5d=Nt4| z*D;u43dwte)*|*7E9PKz7~OQ5Ga%+dfvmF9f>3lf_*R3~jSALB(7MTr5v`l87}4^_ zh*qPOMzmJ@zJ0BZJAAKw*Q-N!4CIb57?mbGVfb^oeCzhk@{QXP8R7u2;d92OeBmp- z|4!c%2QIi}-&C&&=vsJM`EA7gukd%muY723a;V*)J6!Bf~Tj00C{~!D|_{ZU&fPWIR@ptwO=8yQo_YZO(0EB9guV8$gQ7T$;dd@!j-oGT-If{_Rk&k5W;64E)Vvw^}g=Vz*f_Ct_=?mVs6Cluwv~HBcr?ne%+u{66?2Z!FQ8*$fkcXHuXEkiod6c=eEE6 zC&j_<^lksK7hmW5;KwvCSx*Z&UD#2^92golSZPkgHd-+kVq|G8PV^dE`mQk zn$l=#@~bEZ88g_$qC{lOf#GeF?}ndpBdK%<=0uJeY_snJz^J4M<^rsYJ?I)H7*5u-vd zaHrZP3&DWIN7)S22@;g*;-_r7IWUxW<%i6%p?rMbQkCXF+IrC>xIrd%pb1kR2MT5b z`^bEbkjoUZ6Udv`#fT9ym7GL&BD|9wHPgcQ_{bAVJ{OR0W8auJhVjmQzXg!;xbSzI zVBo@lX|k^@QHd4(GiiM=4Q)u%^9(y=+bk z=V_5Ystm!%u!a3(-X1O#eIlF>3Pn-FNO3HfwKI?Q;9bp-2p$vpi^|~^Ies+%@&j9j#vvYe?s1H>dt%KIHc~F;39BoyoXjS`G5%OV$ zObeS$>8^g*-y;tVr&^Y!u)I5G4pT8(Dw_Kfz~CP*lfj;)+Mreby6%lbmYA|YnGh^g*i%t zPEv!}9ic%1VAOnroAj(qUwB9(`hAg{1cm4}uf zdqf^ue!R#IK~OR$Ek9mS@F4aQ`^xO!i4Tq(qlnNd;{{f1)^y^XyL_bbVA~TbY?7-B zswL%Fk33_>sywu8*w4;VjN`!gfIyBDjA_gz#&IC>l7b5&fYTOIoOyF+-o?!94E4`e z6ls;PpN&%#X_X);c9p7_HJyd}*L8;a<5eD-{qJWJR34iB%RJozq@bC1t7Ln}*B!0$L3Dgq#iHZ;m!d$E{mty(=8jn2 zb?^u!4bAH%g&v~o{Mtem6s#Cktm9^67t}=E71M;Dy5fmlY+Z3r(34$p&j5NoArW=O zH+JFIb#LGgF}D$g*)T&R%7Q42X;?3FXE5*Ji`wHfcLnn(-+_mnW{jIhnbmQ81Wz`j z-Mj$?nL?Oe5awZ~M}1mW-NC*`Dlw&H)$M{!F9>soB}^{}qv2$BEle+H z{0P&tgkEx%09r1Rrk7b34pSr|PNoxB89 z$JRj~b9Fzwtl{zS_Ol*idM4CY(9|=bz81~Cpoy7~qS@D?+1H{;M(hitNM3zmkS&Y@ zpXNh-F&|py;e*Qc8V8C>8pqx%x!q^u$DS*=IiV35pK&7|Y z1<;<9NP$t`W*1tqo(?Sf!>lOvl!uU$ESmzIHk*@r@y=#L0`GL;pa8OiKz1_=S2+iP z>}G~_qR2T2W%YnyHz=Sk4kC&Q9s~^PiKy=#WS&UiUA(D^fm_I(3I^L*q+*Z?2J2ar zVvq_3je<}r7;IqC7TksX4$?CfMc`+UiXzyEHTgRH-7Eg?Q=>_m;u)3mYbvs(f$43m zy<(aMrkhv?MLf-7nkKZ0F%KqUmf6ulcC$CxRK%zYOB1uq;pvKej8G|EQ17HNqzmeu z74>wBdb*;1QEwadbX1!+#XwHf( zSr;G^^$bD1idq;|qi%wFrl20DsAq!uZR|WnJrmSrUy=#xn^{*2uKS)$t2n4|GEp3u zH-R=iG|V)clX&MUn$i$Ek6<@gu%oRS$}m{4!)pVgdJVSN4Gv&8*y;)f2e2C)z;3W$ zci|AlEuJGV*o+|YhJf9(%mX;p<{{=) zeNdZ+Dh7#y!B8;p&zFXRfq%X<)Y4}t82IN)L!pnHMGOT4xdT8AbEwdV7!O6c`R7YR z^$db05MFEm$_Z1J5~Pn1BnyIUX7NhXEC_-LxY8&Kg2;B8B@CNj!F9XM5}N9*h%5+# z89C@vIcAAUbUWr6G+{Ht`tp#fY{ffC@XiMBhgmPhI~%<3V2O%HHh9ZfN;Y`kfjt>n z*x4|GhU+FxBS$uP)8>}soo#yi^3KDDAxd>fJ`Now*!5QIh6#3k6uV&-yJ3P|UvpA2 z@7zw$28Wp^`l1YnD|+(T=Wx)wjU_31!$EHo!>c8tP7Vh>*&_`Hy)~?#1=merxTurb zbi+j%_P1zJ`x}55wZGxk^ye>$JiLmg=A@K-IyyoKF;Hb30U>T
($2qD|y2qDBE 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
    G9N>gu|rsGtE& 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 '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); @@ -133,6 +141,7 @@ public class CallEmpVehicleTask extends AbstractAcsTask { jsonTask.put("start_point_code", start_point_code); jsonTask.put("next_point_code", next_point_code); jsonTask.put("handle_class", THIS_CLASS); + jsonTask.put("vehicle_type", vehicle_type); jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); jsonTask.put("create_time", DateUtil.now()); @@ -169,7 +178,7 @@ public class CallEmpVehicleTask extends AbstractAcsTask { } - public String findBeginPoint(JSONObject json) { + public JSONObject findBeginPoint(JSONObject json) { String next_point_code = json.getString("next_point_code"); String vehicle_qty = json.getString("vehicle_qty"); if (ObjectUtil.isEmpty(next_point_code)) throw new BadRequestException("终点不能为空"); @@ -177,48 +186,89 @@ public class CallEmpVehicleTask extends AbstractAcsTask { WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); // 根据终点区域判断优先的起点区域 JSONObject jsonPointEnd = pointTab.query("point_code = '" + next_point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointEnd)) throw new BadRequestException("终点点位不存在"); JSONObject jsonRegionEnd = regionTab.query("region_id ='" + jsonPointEnd.getString("region_id") + "'").uniqueResult(0); + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = next_point_code.substring(0, next_point_code.indexOf("-")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); /* * 空托盘出库任务: * 1.叠盘架B区、养生A区 --> 共挤线 (优先级:1叠盘架B区 2养生A区) * 2.叠盘架A区、养生A区 --> 油漆线 (优先级:1叠盘架A区 2养生A区) */ String start_point_code = ""; - HashMap map = new HashMap<>(); + JSONObject map = new JSONObject(); if (StrUtil.equals(jsonRegionEnd.getString("region_code"),RegionTypeEnum.GJQY.getCode())) { // 共挤线呼叫空托盘业务:查找叠盘架B区是否有满足条件的点位 map.put("flag", "1"); map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); map.put("region_code", RegionTypeEnum.DPJQB.getCode()); JSONObject jsonStartPointDPB = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonStartPointDPB)) { start_point_code = jsonStartPointDPB.getString("point_code"); } else { - // 为空说明叠盘架B区没有,则去养生A区找 + // 为空说明叠盘架B区没有,则去养生A区找 : 只能找数量为1的空托盘 + map.put("flag", "3"); map.put("region_code", RegionTypeEnum.YSQA.getCode()); JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); - start_point_code = jsonStartPointYSA.getString("point_code"); + + if (ObjectUtil.isNotEmpty(jsonStartPointYSA)) { + start_point_code = jsonStartPointYSA.getString("point_code"); + } else { + throw new BadRequestException("没有满足需求数量的点位"); + /* // 如果没有则需要从养生区A区里找到 > 1的货位 出库到叠盘架B中 + map.put("flag", "1"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + // 起点 + JSONObject jsonStart = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonStart)) throw new BadRequestException("没有满足需求数量的点位"); + // 终点 + JSONObject jsonEnd = pointTab.query("region_id = '" + RegionTypeEnum.DPJQB.getId() + "' and point_status = '00' and lock_type = '00' and is_used = '1' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEnd)) throw new BadRequestException("叠盘架B货位不足"); + + JSONObject parem = new JSONObject(); + parem.put("start_point_code",jsonStart.getString("point_code")); + parem.put("next_point_code",jsonEnd.getString("point_code")); + parem.put("qty",jsonStart.getString("vehicle_qty")); + parem.put("vehicle_type",jsonStart.getString("vehicle_qty")); + String task_id = this.createTask(parem); + + // 生成 叠盘架 -> 共挤线的任务 返回叠盘架B的点位code + start_point_code = jsonEnd.getString("point_code");*/ + } + } } else if (StrUtil.equals(jsonRegionEnd.getString("region_code"),RegionTypeEnum.YQQY.getCode())) { // 油漆线呼叫空托盘业务:查找叠盘架A区是否有满足条件的点位 map.put("flag", "1"); map.put("vehicle_qty", vehicle_qty); + map.put("vehicle_type", jsonOrder.getString("vehicle_type")); map.put("region_code", RegionTypeEnum.DPJQA.getCode()); JSONObject jsonStartPointDPA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonStartPointDPA)) { start_point_code = jsonStartPointDPA.getString("point_code"); } else { // 为空说明叠盘架A区没有,则去养生A区找 + map.put("flag", "3"); map.put("region_code", RegionTypeEnum.YSQA.getCode()); JSONObject jsonStartPointYSA = WQL.getWO("ST_VEHICLE_OUT_02").addParamMap(map).process().uniqueResult(0); if (ObjectUtil.isEmpty(jsonStartPointYSA)) throw new BadRequestException("没有满足需求数量的点位"); start_point_code = jsonStartPointYSA.getString("point_code"); } } - return start_point_code; + JSONObject resuft = new JSONObject(); + resuft.put("start_point_code",start_point_code); + resuft.put("vehicle_type",jsonOrder.getString("vehicle_type")); + return resuft; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java index b489d22..71391f9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java @@ -15,6 +15,7 @@ import org.nl.wms.basedata.st.StoreIvtServiceImpl; import org.nl.wms.common.StructFindUtil; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; import org.nl.wms.sch.service.impl.PointServiceImpl; import org.nl.wql.WQL; @@ -99,6 +100,7 @@ public class CallMaterialTask extends AbstractAcsTask { startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); + startPointObj.put("vehicle_type", ""); pointTab.update(startPointObj); taskTab.update(jsonTask); } @@ -153,17 +155,20 @@ public class CallMaterialTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject form) { - //请求参数 终点不能为空 物料,数量,客户,批次,创建方式,托盘,是否满托不能为空! 起点点位不为空时,单据编号不能为空! + //请求参数 载具、起点、终点 + String vehicle_code = form.getString("vehicle_code"); String start_point_code = form.getString("start_point_code"); String next_point_code = form.getString("next_point_code"); - String vehicle_code = form.getString("vehicle_code"); + String vehicle_type = form.getString("vehicle_type"); + String task_status = TaskStatusEnum.START_AND_POINT.getCode(); String material_id = form.getString("material_id"); - String create_mode = form.getString("create_mode"); - String pcsn = form.getString("pcsn"); - WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); String iostorinv_id = form.getString("iostorinv_id"); + + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject regionTable = WQLObject.getWQLObject("ST_IVT_regionIO"); + if (StrUtil.isEmpty(next_point_code)) { throw new BadRequestException("终点不能为空!"); } @@ -183,30 +188,27 @@ public class CallMaterialTask extends AbstractAcsTask { PointServiceImpl pointService = SpringContextHolder.getBean(PointServiceImpl.class); String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; String start_area = ""; - String startArea_type = ""; - String bill_type = ""; String qty = ""; String qty_unit_id = ""; - String ivt_workprocedure_id = ""; - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); - if (StrUtil.isNotEmpty(start_point_code)) { - if (StrUtil.isEmpty(iostorinv_id)) { - throw new BadRequestException("入库单据号不能为空!"); - } - JSONObject IosObj = iosTable.query("iostorinv_id='" + iostorinv_id + "'").uniqueResult(0); - IosObj.put("bill_status", "20"); - iosTable.update(IosObj); - PointDto StartPoint = pointService.findByCode(start_point_code); - JSONObject ivtObj = WQLObject.getWQLObject("ST_IVT_StructIvt").query("struct_id='" + StartPoint.getPoint_id() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(ivtObj)) { - throw new BadRequestException("仓位为'" + StartPoint.getPoint_code() + "'的库存信息不存在!"); - } + + if (StrUtil.isEmpty(start_point_code)) { + // 起点为空找到对应的起点 + JSONObject param = new JSONObject(); + param.put("next_point_code",next_point_code); + param.put("vehicle_type",vehicle_type); + param.put("material_id",material_id); + JSONObject ivtObj = this.findBeginPoint(param); + qty = ivtObj.getString("canuse_qty"); qty_unit_id = ivtObj.getString("qty_unit_id"); - + start_point_code = ivtObj.getString("struct_code"); + } else { + // 不能空则为点对点,查找对应出入库单据 + if (ObjectUtil.isEmpty(iostorinv_id)) throw new BadRequestException("出库单id不能为空"); + JSONObject jsonRegion = regionTable.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + qty = jsonRegion.getString("qty"); + qty_unit_id = jsonRegion.getString("qty_unit_id"); } - PointDto nextPoint = pointService.findByCode(next_point_code); - task_status = TaskStatusEnum.START_AND_POINT.getCode(); PointDto startPoint = pointService.findByCode(start_point_code); //起点点加锁 @@ -263,4 +265,36 @@ public class CallMaterialTask extends AbstractAcsTask { public void cancel(String task_id) { } + + @Transactional + public JSONObject findBeginPoint(JSONObject json) { + String next_point_code = json.getString("next_point_code"); + String vehicle_type = json.getString("vehicle_type"); + String material_id = json.getString("material_id"); + + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + + // 根据起点判断是什么区域 然后要入到什么区 + PointDto endDto = SpringContextHolder.getBean(PointService.class).findByCode(next_point_code); + if (ObjectUtil.isEmpty(endDto)) throw new BadRequestException("终点点位不存在"); + JSONObject jsonEndRegion = regionTab.query("region_id = '" + endDto.getRegion_id() + "'").uniqueResult(0); + + /* + * 物料出库业务:目前只有1个业务,如果区域不正确则报错 + * 1.养生A区 --> 油漆线 + */ + JSONObject resuft = new JSONObject(); + if (StrUtil.equals(jsonEndRegion.getString("region_code"),RegionTypeEnum.YQQY.getCode())) { + JSONObject map = new JSONObject(); + map.put("flag", "3"); + map.put("vehicle_type", vehicle_type); + map.put("material_id", material_id); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + resuft = WQL.getWO("ST_REGION_OUT_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(resuft)) throw new BadRequestException("库存不足"); + } else { + throw new BadRequestException("业务类型错误"); + } + return resuft; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java index d5849d1..d1f456e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/RegionTypeEnum.java @@ -4,19 +4,20 @@ package org.nl.wms.sch.tasks; * 任务状态枚举 */ public enum RegionTypeEnum { - CPQY(1, "CPQY01", "成品区域"), - YSQA(2, "YSQA01", "养生A区"), - YSQB(3, "YSQB01", "养生B区"), - GJQY(4, "GJQY01", "共挤区"), - YQQY(5, "YQQY01", "油漆区"), - DPJQA(6, "DPJQA01", "叠盘架A区"), - DPJQB(7, "DPJQB01", "叠盘架B区"), - KTPHCQA(8, "KTPHCQA01", "空托盘缓存A区"), - KTPHCQB(8, "KTPHCQB01", "空托盘缓存B区"); + CPQY(1, "CPQY01", "成品区域","1557538851726168064"), + YSQA(2, "YSQA01", "养生A区","1557539288307077120"), + YSQB(3, "YSQB01", "养生B区","1557539423292362752"), + GJQY(4, "GJQY01", "共挤区","1557539744848678912"), + YQQY(5, "YQQY01", "油漆区","1557913112412295168"), + DPJQA(6, "DPJQA01", "叠盘架A区","1558015562792177664"), + DPJQB(7, "DPJQB01", "叠盘架B区","1558015634472833024"), + KTPHCQA(8, "KTPHCQA01", "空托盘缓存A区","1558015810096730112"), + KTPHCQB(8, "KTPHCQB01", "空托盘缓存B区","1558015870570205184"); private int index; private String code; private String name; + private String id; public String getCode() { return code; @@ -26,8 +27,13 @@ public enum RegionTypeEnum { return name; } - RegionTypeEnum(int index, String code, String name) { + public String getId() { + return id; + } + + RegionTypeEnum(int index, String code, String name, String id) { this.index = index; + this.id = id; this.code = code; this.name = name; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java index acb6f62..bcb256e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendEmpVehicleTask.java @@ -13,6 +13,10 @@ import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; import org.nl.utils.SecurityUtils; import org.nl.utils.SpringContextHolder; +import org.nl.wms.basedata.master.service.StoragevehicleinfoService; +import org.nl.wms.basedata.master.service.dto.StoragevehicleinfoDto; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.PointService; @@ -46,23 +50,27 @@ public class SendEmpVehicleTask extends AbstractAcsTask { jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); + String start_point_code = jsonTask.getString("start_point_code"); + PointService point = SpringContextHolder.getBean(PointService.class); // 校验起点是否存在 - PointDto start_point_code = point.findByCode(jsonTask.getString("start_point_code")); - if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("未找到可用点位:" + start_point_code); + PointDto startDto = point.findByCode(start_point_code); + if (ObjectUtil.isEmpty(startDto)) throw new BadRequestException("未找到可用点位:" + startDto); // 校验终点是否存在 - PointDto next_point_code = point.findByCode(jsonTask.getString("next_point_code")); - if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("未找到可用点位:" + next_point_code); + PointDto nextDto = point.findByCode(jsonTask.getString("next_point_code")); + if (ObjectUtil.isEmpty(nextDto)) throw new BadRequestException("未找到可用点位:" + nextDto); // 1.更新点位数量 2.解锁点位 JSONObject jsonEmp = empTab.query("task_uuid = '" + taskObj.getString("task_id") + "'").uniqueResult(0); - int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(next_point_code)).getIntValue("vehicle_qty"); + int vehicle_qty = JSONObject.parseObject(JSON.toJSONString(nextDto)).getIntValue("vehicle_qty"); BigDecimal vehicle_qty_point = NumberUtil.add(String.valueOf(vehicle_qty), String.valueOf(jsonEmp.getIntValue("vehicle_qty"))); - next_point_code.setVehicle_qty(Integer.valueOf(vehicle_qty_point.toString())); - next_point_code.setPoint_status("01"); - next_point_code.setLock_type("00"); - pointTab.update(JSONObject.parseObject(JSON.toJSONString(next_point_code))); + nextDto.setVehicle_qty(Integer.valueOf(vehicle_qty_point.toString())); + nextDto.setPoint_status("01"); + nextDto.setLock_type("00"); + nextDto.setVehicle_type(jsonTask.getString("vehicle_type")); + nextDto.setVehicle_code(jsonTask.getString("vehicle_code")); + pointTab.update(JSONObject.parseObject(JSON.toJSONString(nextDto))); // 完成单据状态 jsonEmp.put("bill_status", "50"); @@ -91,9 +99,11 @@ public class SendEmpVehicleTask extends AbstractAcsTask { String start_point_code = form.getString("start_point_code"); String next_point_code = form.getString("next_point_code"); + String vehicle_code = form.getString("vehicle_code"); String qty = form.getString("qty"); String record_uuid = form.getString("record_uuid"); + String vehicle_type = ""; // 入库起点不能为空 if (ObjectUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空"); @@ -114,7 +124,10 @@ public class SendEmpVehicleTask extends AbstractAcsTask { JSONObject param = new JSONObject(); param.put("start_point_code",start_point_code); param.put("vehicle_qty",qty); - next_point_code = this.findEndPoint(param); + param.put("vehicle_code",vehicle_code); + JSONObject json = this.findEndPoint(param); + next_point_code = json.getString("EndPoint_code"); + vehicle_type = json.getString("vehicle_type"); } else { // 判断终点是否是空位 JSONObject jsonPoint = pointTab.query("point_code = '" + next_point_code + "' and lock_type = '00' and point_status <> '02' and is_delete = '0' and is_used = '1'").uniqueResult(0); @@ -132,6 +145,8 @@ public class SendEmpVehicleTask extends AbstractAcsTask { jsonTask.put("task_status", "01"); jsonTask.put("start_point_code", start_point_code); jsonTask.put("next_point_code", next_point_code); + jsonTask.put("vehicle_type", vehicle_type); + jsonTask.put("vehicle_code", vehicle_code); jsonTask.put("handle_class", THIS_CLASS); jsonTask.put("create_name", SecurityUtils.getCurrentUsername()); jsonTask.put("create_id", SecurityUtils.getCurrentUserId()); @@ -169,17 +184,47 @@ public class SendEmpVehicleTask extends AbstractAcsTask { } - public String findEndPoint(JSONObject json) { + public JSONObject findEndPoint(JSONObject json) { String start_point_code = json.getString("start_point_code"); String vehicle_qty = json.getString("vehicle_qty"); + String vehicle_code = json.getString("vehicle_code"); + if (ObjectUtil.isEmpty(start_point_code)) throw new BadRequestException("起点不能为空"); if (ObjectUtil.isEmpty(vehicle_qty)) throw new BadRequestException("载具数量不能为空"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); // 区域表 + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); //空载具记录表 + WQLObject velicleTab = WQLObject.getWQLObject("md_pb_storagevehicleinfo"); // 载具表 // 根据起点区域判断优先的终点区域 JSONObject jsonPointStart = pointTab.query("point_code = '" + start_point_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonPointStart)) throw new BadRequestException("起点点位不存在"); JSONObject jsonRegionStart = regionTab.query("region_id ='" + jsonPointStart.getString("region_id") + "'").uniqueResult(0); + + // 根据起点找到对应设备,根据设备查询工单表中 - 正在运行的工单中的载具类型 + String device_code = ""; + if (ObjectUtil.isEmpty(vehicle_code)) { + device_code = start_point_code.substring(0, start_point_code.indexOf("-")); + } + + String vehicle_type = ""; + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) { + // 如果说明是货梯业务:则判断载具号是否为空 + if (ObjectUtil.isEmpty(vehicle_code)) throw new BadRequestException("起点点位错误"); + // 根据载具号找对应的载具类型 + StoragevehicleinfoDto vehicleDto = SpringContextHolder.getBean(StoragevehicleinfoService.class).findByCode(vehicle_code); + if (ObjectUtil.isEmpty(vehicleDto)) throw new BadRequestException("载具不存在"); + vehicle_type = vehicleDto.getStoragevehicle_type(); + } else { + // 不为空说明不是货梯业务:则根据工单找到对应类型 + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + vehicle_type = jsonOrder.getString("vehicle_type"); + } + /* * 空托盘入库业务: * 1.油漆线 --> 叠盘架A区、养生区A区 (优先级:1叠盘架A区 2.养生A区) @@ -191,35 +236,56 @@ public class SendEmpVehicleTask extends AbstractAcsTask { // 油漆线入库:查找叠盘架A区是否有满足的空位 map.put("flag", "1"); map.put("vehicle_qty",vehicle_qty); + map.put("vehicle_type",vehicle_type); map.put("region_code",RegionTypeEnum.DPJQA.getCode()); JSONObject jsonEndPointDPA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonEndPointDPA)) { EndPoint_code = jsonEndPointDPA.getString("point_code"); } else { - // 为空说明叠盘架A区上货位不足,则需要入库到养生A区 + // 为空说明没有相同的载具类型 map.put("flag", "2"); - map.put("region_code",RegionTypeEnum.YSQA.getCode() ); - JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); - EndPoint_code = jsonEndPointYSA.getString("point_code"); + map.put("vehicle_type",""); + JSONObject jsonEndPointDPA2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPA2)) { + EndPoint_code = jsonEndPointDPA2.getString("point_code"); + } else { + // 为空说明叠盘架A区上货位不足,则需要入库到养生A区 + map.put("flag", "3"); + map.put("region_code",RegionTypeEnum.YSQA.getCode() ); + JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); + EndPoint_code = jsonEndPointYSA.getString("point_code"); + } } } else { // 货梯入库:查找叠盘架B区是否有满足的空位 map.put("flag", "1"); map.put("vehicle_qty",vehicle_qty); + map.put("vehicle_type",vehicle_type); map.put("region_code",RegionTypeEnum.DPJQB.getCode()); JSONObject jsonEndPointDPB = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonEndPointDPB)) { EndPoint_code = jsonEndPointDPB.getString("point_code"); } else { - // 为空说明叠盘架B区上货位不足,则需要入库到养生A区 + // 为空说明没有相同的载具类型 map.put("flag", "2"); - map.put("region_code", RegionTypeEnum.YSQA.getCode()); - JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); - if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); - EndPoint_code = jsonEndPointYSA.getString("point_code"); + map.put("vehicle_type",""); + JSONObject jsonEndPointDPB2 = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonEndPointDPB2)) { + EndPoint_code = jsonEndPointDPB2.getString("point_code"); + } else { + // 为空说明叠盘架B区上货位不足,则需要入库到养生A区 + map.put("flag", "3"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonEndPointYSA = WQL.getWO("ST_VEHICLE_IN_02").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonEndPointYSA)) throw new BadRequestException("没有满足需求的空位"); + EndPoint_code = jsonEndPointYSA.getString("point_code"); + } } } - return EndPoint_code; + JSONObject resuft = new JSONObject(); + resuft.put("EndPoint_code",EndPoint_code); + resuft.put("vehicle_type",vehicle_type); + return resuft; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java index 26017a9..473801e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java @@ -130,14 +130,16 @@ public class SendMaterialTask extends AbstractAcsTask { endpointObj.put("lock_type", "00"); endpointObj.put("point_status", "02"); endpointObj.put("vehicle_code", vehicle_code); + endpointObj.put("vehicle_type", jsonTask.getString("vehicle_type")); pointTab.update(endpointObj); + taskTab.update(jsonTask); - JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); + /* JSONObject startPointObj = pointTab.query("point_code='" + jsonTask.getString("start_point_code") + "'").uniqueResult(0); startPointObj.put("lock_type", "00"); startPointObj.put("point_status", "00"); startPointObj.put("vehicle_code", ""); pointTab.update(startPointObj); - taskTab.update(jsonTask); + taskTab.update(jsonTask);*/ } } @@ -194,17 +196,14 @@ public class SendMaterialTask extends AbstractAcsTask { public String createTask(JSONObject form) { //请求参数 载具、起点、终点 String vehicle_code = form.getString("vehicle_code"); + String vehicle_type = form.getString("vehicle_type"); String start_point_code = form.getString("start_point_code"); String next_point_code = form.getString("next_point_code"); - String material_id = form.getString("material_id"); - String stewing_time = form.getString("stewing_time"); - String producetask_id = form.getString("producetask_id"); - String is_full = form.getString("is_full"); - String qty = form.getString("qty"); - String cust_id = form.getString("cust_id"); - String create_mode = form.getString("create_mode"); - String pcsn = form.getString("pcsn"); + WQLObject taskTable = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); + + if (StrUtil.isEmpty(start_point_code)) { throw new BadRequestException("起点不能为空!"); } @@ -215,44 +214,42 @@ public class SendMaterialTask extends AbstractAcsTask { if (ObjectUtil.isNotEmpty(beforTaskObj)) { throw new BadRequestException("存在指令号为'" + beforTaskObj.getString("task_code") + "' 未完成!"); } - PointService pointService = SpringContextHolder.getBean(PointService.class); - PointDto startPoint = pointService.findByCode(start_point_code); - String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; - String qty_unit_id = ""; - String endArea_type = ""; - String bill_type = ""; - WQLObject iosTable = WQLObject.getWQLObject("ST_IVT_regionIO"); - //如果给了终点,更新入库单据,给pc、手持调用 - if (StrUtil.isNotEmpty(next_point_code)) { - String iostorinv_id = form.getString("iostorinv_id"); - if (StrUtil.isEmpty(iostorinv_id)) { - throw new BadRequestException("入库单据号不能为空!"); - } - JSONObject IosObj = iosTable.query("iostorinv_id='" + iostorinv_id + "'").uniqueResult(0); - IosObj.put("bill_status", "20"); - iosTable.update(IosObj); + + + if (StrUtil.isEmpty(next_point_code)) { + // 终点为空需要找终点 + JSONObject param = new JSONObject(); + param.put("start_point_code",start_point_code); + JSONObject endPoint = this.findEndPoint(param); + next_point_code = endPoint.getString("next_point_code"); } - String task_status = TaskStatusEnum.START_AND_POINT.getCode(); - PointDto nextPoint = pointService.findByCode(next_point_code); + //终点点加锁 WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); JSONObject endPointObj = pointTable.query("point_code='" + next_point_code + "'").uniqueResult(0); endPointObj.put("lock_type", "01"); pointTable.update(endPointObj); - CodeUtil.getNewCode("TASK_CODE"); + // 创建任务 + PointService pointService = SpringContextHolder.getBean(PointService.class); + JSONObject taskObj = new JSONObject(); + CodeUtil.getNewCode("TASK_CODE"); + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; taskObj.put("task_id", task_id); taskObj.put("taskdtl_id", task_id); taskObj.put("task_code", CodeUtil.getNewCode("TASK_CODE")); taskObj.put("task_type", "01"); + taskObj.put("vehicle_type", vehicle_type); taskObj.put("taskdtl_type", "01"); taskObj.put("acs_task_type", "1"); - taskObj.put("task_status", task_status); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("start_point_code", start_point_code); + PointDto startPoint = pointService.findByCode(start_point_code); taskObj.put("start_area", startPoint.getRegion_id()); taskObj.put("request_param", form.toJSONString()); taskObj.put("next_point_code", next_point_code); + PointDto nextPoint = pointService.findByCode(next_point_code); taskObj.put("next_area", nextPoint.getRegion_id()); taskObj.put("vehicle_code", vehicle_code); taskObj.put("handle_class", THIS_CLASS); @@ -282,4 +279,38 @@ public class SendMaterialTask extends AbstractAcsTask { } + @Transactional + public JSONObject findEndPoint(JSONObject json) { + String start_point_code = json.getString("start_point_code"); + + WQLObject regionTab = WQLObject.getWQLObject("SCH_BASE_Region"); + + // 根据起点判断是什么区域 然后要入到什么区 + PointDto startDto = SpringContextHolder.getBean(PointService.class).findByCode(start_point_code); + if (ObjectUtil.isEmpty(startDto)) throw new BadRequestException("起点点位不存在"); + JSONObject jsonStartRegion = regionTab.query("region_id = '" + startDto.getRegion_id() + "'").uniqueResult(0); + + /* + * 物料入库业务:目前只有1个业务,如果区域不正确则报错 + * 1.共挤线 --> 养生区A + */ + String next_point_code = ""; + if (StrUtil.equals(jsonStartRegion.getString("region_code"),RegionTypeEnum.GJQY.getCode())) { + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("region_code", RegionTypeEnum.YSQA.getCode()); + JSONObject jsonEndPoint = WQL.getWO("ST_REGION_IN_01").addParamMap(map).process().uniqueResult(0); + + if (ObjectUtil.isEmpty(jsonEndPoint)) throw new BadRequestException("仓位不足"); + next_point_code = jsonEndPoint.getString("point_code"); + } else { + throw new BadRequestException("业务类型错误"); + } + + JSONObject resuft = new JSONObject(); + resuft.put("next_point_code",next_point_code); + return resuft; + } + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java index 18b8344..32ebe54 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RegionioInServiceImpl.java @@ -7,6 +7,9 @@ import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import org.nl.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SpringContextHolder; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; import org.nl.wms.sch.tasks.SendMaterialTask; import org.nl.wms.st.inbill.service.RegionioInService; import org.nl.wms.st.inbill.service.dto.RegionioDto; @@ -187,13 +190,17 @@ public class RegionioInServiceImpl implements RegionioInService { @Transactional(rollbackFor = Exception.class) public void createTask(JSONObject jsonObject) { String iostorinv_id = jsonObject.getString("iostorinv_id"); + WQLObject wo = WQLObject.getWQLObject("ST_IVT_regionIO"); + WQLObject orderTab = WQLObject.getWQLObject("mps_bd_produceshiftorder"); + JSONObject jsonIn = wo.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + String start_point_code = jsonIn.getString("start_point_code"); // 准备参数 并调用入库处理类中的创建任务方法 JSONObject form = new JSONObject(); form.put("vehicle_code", jsonIn.getString("vehicle_code")); - form.put("start_point_code", jsonIn.getString("start_point_code")); + form.put("start_point_code", start_point_code); form.put("next_point_code", jsonIn.getString("end_point_code")); form.put("material_id", jsonIn.getString("material_id")); form.put("qty", jsonIn.getString("qty")); @@ -201,6 +208,17 @@ public class RegionioInServiceImpl implements RegionioInService { form.put("create_mode", jsonIn.getString("create_mode")); form.put("pcsn", jsonIn.getString("pcsn")); form.put("iostorinv_id", iostorinv_id); + + // 根据起点点位 找到对应设备,根据设备找到对应工单,根据工单获取载具类型 + String device_code = start_point_code.substring(0, start_point_code.indexOf("-")); + + DeviceService deviceBean = SpringContextHolder.getBean(DeviceService.class); + DeviceDto deviceDto = deviceBean.findByCode(device_code); + if (ObjectUtil.isEmpty(deviceDto)) throw new BadRequestException("此设备不存在"); + JSONObject jsonOrder = orderTab.query("device_id = '" + deviceDto.getDevice_id() + "' and order_status = '02' and is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonOrder)) throw new BadRequestException("此设备未在生产中或不存在"); + + form.put("vehicle_type", jsonOrder.getString("vehicle_type")); SendMaterialTask sendMaterialTask = new SendMaterialTask(); String task_id = sendMaterialTask.createTask(form); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql index 02b7b0b..31114c0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/ST_REGION_IN_01.wql @@ -23,6 +23,7 @@ 输入.end_point_code TYPEAS s_string 输入.start_region_code TYPEAS s_string 输入.end_region_code TYPEAS s_string + 输入.region_code TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -113,3 +114,26 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.point_status = '00' + AND point.lock_type = '00' + AND point.is_used = '1' + AND point.is_delete = '0' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql index 163ac53..81c7662 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_REGION_OUT_01.wql @@ -18,12 +18,15 @@ 输入.bill_status TYPEAS s_string 输入.vehicle_code TYPEAS s_string 输入.material_code TYPEAS s_string + 输入.material_id TYPEAS s_string 输入.pcsn TYPEAS s_string 输入.start_point_code TYPEAS s_string 输入.end_point_code TYPEAS s_string 输入.start_region_code TYPEAS s_string 输入.end_region_code TYPEAS s_string 输入.region_id TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.region_code TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -145,3 +148,33 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "3" + PAGEQUERY + SELECT + ivt.* + FROM + ST_IVT_StructIvt ivt + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + LEFT JOIN SCH_BASE_Region region ON region.region_id = point.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '02' + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.material_id <> "" + ivt.material_id = 输入.material_id + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql index 7991174..bdbbfb4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_IN_02.wql @@ -16,6 +16,7 @@ 输入.flag TYPEAS s_string 输入.vehicle_qty TYPEAS s_string 输入.region_code TYPEAS s_string + 输入.vehicle_type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -54,6 +55,10 @@ region.region_code = 输入.region_code ENDOPTION + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + order by point.vehicle_qty DESC ENDSELECT @@ -61,6 +66,27 @@ ENDIF IF 输入.flag = "2" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND IFNULL(point.vehicle_qty,0) = '0' + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + order by point.vehicle_qty DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" QUERY SELECT point.* diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql index 4d27792..c49d544 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/vehiclebill/wql/ST_VEHICLE_OUT_02.wql @@ -15,6 +15,7 @@ ################################################# 输入.flag TYPEAS s_string 输入.vehicle_qty TYPEAS s_string + 输入.vehicle_type TYPEAS s_string 输入.region_code TYPEAS s_string [临时表] @@ -55,12 +56,42 @@ region.region_code = 输入.region_code ENDOPTION + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + order by point.vehicle_qty ASC ENDSELECT ENDQUERY ENDIF + IF 输入.flag = "3" + QUERY + SELECT + point.* + FROM + sch_base_point point + LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id + WHERE + point.lock_type = '00' + AND point.point_status = '01' + AND IFNULL(point.vehicle_qty,0) == 输入.vehicle_qty + + OPTION 输入.region_code <> "" + region.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.vehicle_type <> "" + point.vehicle_type = 输入.vehicle_type + ENDOPTION + + order by point.point_code DESC + + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "2" QUERY SELECT diff --git a/mes/qd/src/api/wms/pdm/device.js b/mes/qd/src/api/wms/pdm/device.js index fc9c05d..b901755 100644 --- a/mes/qd/src/api/wms/pdm/device.js +++ b/mes/qd/src/api/wms/pdm/device.js @@ -63,4 +63,12 @@ export function copyAdd(data) { }) } -export default { add, edit, del, getWorkprocedure, getItemByDevice, savaDeviceItem, getItemByDeviceId, copyAdd } +export function changeActive(data) { + return request({ + url: 'api/device/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getWorkprocedure, getItemByDeviceId, copyAdd, changeActive } diff --git a/mes/qd/src/views/wms/mps/device/AddDtl.vue b/mes/qd/src/views/wms/mps/device/AddDtl.vue deleted file mode 100644 index 8386860..0000000 --- a/mes/qd/src/views/wms/mps/device/AddDtl.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - diff --git a/mes/qd/src/views/wms/mps/device/CopyDialog.vue b/mes/qd/src/views/wms/mps/device/CopyDialog.vue deleted file mode 100644 index a84111d..0000000 --- a/mes/qd/src/views/wms/mps/device/CopyDialog.vue +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - diff --git a/mes/qd/src/views/wms/mps/device/DeviceInfoDialog.vue b/mes/qd/src/views/wms/mps/device/DeviceInfoDialog.vue deleted file mode 100644 index c66abc0..0000000 --- a/mes/qd/src/views/wms/mps/device/DeviceInfoDialog.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - - - diff --git a/mes/qd/src/views/wms/mps/device/DeviceItemDialog.vue b/mes/qd/src/views/wms/mps/device/DeviceItemDialog.vue deleted file mode 100644 index 7b93aae..0000000 --- a/mes/qd/src/views/wms/mps/device/DeviceItemDialog.vue +++ /dev/null @@ -1,252 +0,0 @@ - - - - - diff --git a/mes/qd/src/views/wms/mps/device/index.vue b/mes/qd/src/views/wms/mps/device/index.vue index 13f4b73..0442dbf 100644 --- a/mes/qd/src/views/wms/mps/device/index.vue +++ b/mes/qd/src/views/wms/mps/device/index.vue @@ -13,52 +13,10 @@ style="width: 220px;" class="filter-item" /> - - - - - - 设备扩展项 - - - 设备详情 - - - 复制新增 - @@ -75,22 +33,9 @@ - - - - - - @@ -105,18 +50,19 @@ + - - + + + + @@ -142,14 +85,11 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -import DeviceItemDialog from '@/views/wms/mps/device/DeviceItemDialog' -import DeviceInfoDialog from '@/views/wms/mps/device/DeviceInfoDialog' -import CopyDialog from '@/views/wms/mps/device/CopyDialog' const defaultForm = { device_id: null, device_code: null, device_name: null, device_model: null, workprocedure_id: null, extend_code: null, devicebill_id: null, remark: null, is_active: null, create_id: null, create_name: null, create_time: null, is_delete: null, productivity: null } export default { name: 'Device', - components: { pagination, crudOperation, rrOperation, udOperation, DeviceItemDialog, CopyDialog, DeviceInfoDialog }, + components: { pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ title: '生产设备', url: 'api/device', idField: 'device_id', sort: 'device_id,desc', @@ -166,8 +106,6 @@ export default { return { permission: { }, - workList: [], - tableLabel: [], rules: { device_code: [ { required: true, message: '设备编码不能为空', trigger: 'blur' } @@ -178,42 +116,33 @@ export default { } } }, - created() { - this.getWorkprocedure() - }, methods: { - changeHeader(search, workprocedure_id) { - this.getHeader(search, workprocedure_id) - this.crud.toQuery() - }, // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { - this.getHeader(this.query.search, this.query.workprocedure_id) return true }, - getWorkprocedure() { - crudDevice.getWorkprocedure().then(res => { - this.workList = res + changeEnabled(data, val) { + let msg = '此操作将停用设备,是否继续!' + if (val !== '1') { + msg = '此操作将启用设备,是否继续!' + } + this.$confirm(msg, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + crudDevice.changeActive(data).then(res => { + this.crud.toQuery() + this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) + }).catch(() => { + data.is_used = !data.is_used + }) + }).catch(() => { }) }, - addItem(data) { - this.$refs.child.setForm(data) + format_is_used(is_used) { + return is_used === '1' }, - deviceInfo(data) { - this.$refs.child1.setForm(data) - }, - copyAdd(data) { - const d = JSON.parse(JSON.stringify(data)) - this.$refs.copyChiled.setForm(d) - }, - querytable() { - this.crud.toQuery() - }, - getHeader(search, workprocedure_id) { - crudDevice.getItemByDeviceId({ search: search, workprocedure_id: workprocedure_id }).then(res => { - this.tableLabel = res.newArray - }) - } } } diff --git a/mes/qd/src/views/wms/mps/produce/index.vue b/mes/qd/src/views/wms/mps/produce/index.vue index cba88d0..39376f7 100644 --- a/mes/qd/src/views/wms/mps/produce/index.vue +++ b/mes/qd/src/views/wms/mps/produce/index.vue @@ -98,16 +98,6 @@ /> - - - - 下发 + 开工 - - - - - + + + + + + + + - + - + + + @@ -365,13 +357,9 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -import crudWorkProcedure from '@/api/wms/basedata/pdm/workProcedure' import MaterDtl from '@/views/wms/pub/MaterDialog' -import Treeselect, {LOAD_CHILDREN_OPTIONS} from '@riophae/vue-treeselect' -import '@riophae/vue-treeselect/dist/vue-treeselect.css' -import crudMaterialbase from '@/api/wms/basedata/master/materialbase' import ViewDialog from '@/views/wms/mps/produce/ViewDialog' -import crudClassstandard from '@/api/wms/basedata/master/classstandard' +import DeviceDialog from '@/views/wms/pub/DeviceDialog' const defaultForm = { produceorder_id: null, @@ -386,6 +374,7 @@ const defaultForm = { material_id: null, material_code: null, material_weight: null, + vehicle_type: null, planproducestart_date: null, planproduceend_date: null, realproducestart_date: null, @@ -404,15 +393,16 @@ const defaultForm = { is_delete: null, material_name: null, device_id: null, + device_code: null, is_canupdate_update: '1', material_spec: null, sale_id: null } export default { name: 'Produceshiftorder', - components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl, Treeselect, ViewDialog }, + components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl, ViewDialog, DeviceDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], - dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'is_used', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT'], + dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'is_used', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT', 'storagevehicle_type'], cruds() { return CRUD({ title: '工单', url: 'api/produceshiftorder', idField: 'produceorder_id', sort: 'produceorder_id,desc', @@ -434,6 +424,7 @@ export default { classes3: [], materType: '01', materialShow: false, + deviceShow: false, workprocedureList: [], order_status: ['-1'], permission: {}, @@ -447,9 +438,6 @@ export default { shift_type_scode: [ { required: true, message: '班次类型不能为空', trigger: 'blur' } ], - workprocedure_id: [ - { required: true, message: '工序标识不能为空', trigger: 'blur' } - ], produce_date: [ { required: true, message: '生产日期不能为空', trigger: 'blur' } ], @@ -484,59 +472,8 @@ export default { } }, created() { - this.getworkprocedure() - this.initClass3() }, methods: { - queryClassId() { - const param = { - 'class_idStr': this.class_idStr - } - crudClassstandard.queryClassById(param).then(res => { - this.classes = res.content.map(obj => { - if (obj.hasChildren) { - obj.children = null - } - return obj - }) - }) - }, - buildTree(classes) { - classes.forEach(data => { - if (data.children) { - this.buildTree(data.children) - } - if (data.hasChildren && !data.children) { - data.children = null // 重点代码 - } - }) - }, - // 获取子节点数据 - loadChildNodes({ action, parentNode, callback }) { - if (action === LOAD_CHILDREN_OPTIONS) { - crudClassstandard.getClass({ pid: parentNode.id }).then(res => { - parentNode.children = res.content.map(function(obj) { - if (obj.hasChildren) { - obj.children = null - } - return obj - }) - setTimeout(() => { - callback() - }, 100) - }) - } - }, - initClass3() { - const param = { - parent_class_code: '07' - } - crudClassstandard.getClassType(param).then(res => { - const data = res.content - this.buildTree(data) - this.classes3 = data - }) - }, // 工单状态多选搜索 handTaskStatus(value) { this.$forceUpdate() @@ -579,11 +516,9 @@ export default { this.form.material_name = row.material_name this.form.material_spec = row.material_spec }, - getworkprocedure() { - // 查询工序 - crudWorkProcedure.downSelect({}).then(res => { - this.workprocedureList = res - }) + tableChanged(row) { + this.form.device_id = row.device_id + this.form.device_code = row.device_code }, // 下发 submits(row) { diff --git a/mes/qd/src/views/wms/pub/DeviceDialog.vue b/mes/qd/src/views/wms/pub/DeviceDialog.vue new file mode 100644 index 0000000..fe2e805 --- /dev/null +++ b/mes/qd/src/views/wms/pub/DeviceDialog.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/mes/qd/src/views/wms/sch/point/index.vue b/mes/qd/src/views/wms/sch/point/index.vue index ab2c0b6..69781bc 100644 --- a/mes/qd/src/views/wms/sch/point/index.vue +++ b/mes/qd/src/views/wms/sch/point/index.vue @@ -174,6 +174,15 @@ + + + {{ item.label }} + + + + + + + + +