diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java index 25cbc41..171c793 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java @@ -25,7 +25,9 @@ public enum DriverTypeEnum { AGV_NDC_TWO(8, "agv_ndc_two", "NDC2楼AGV", "agv"), - XGAGV(9, "xg_agv", "xg_agv", "agv"); + XGAGV(9, "xg_agv", "xg_agv", "agv"), + + AUTODOOR(10, "standard_autodoor", "标准版-自动门", "autodoor"); //驱动索引 private int index; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java index 192cfa6..fa681a3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java @@ -11,7 +11,8 @@ import com.alibaba.fastjson.JSONObject; */ public enum RequestMethodEnum { apply_mjxl(1, "MJXLTask", "涂板线满架下料","1"), - feedback_task_status(2, "feedback_task_status", "反馈任务状态","1"); + feedback_task_status(2, "feedback_task_status", "反馈任务状态","1"), + apply_bpsl(3, "BPSLTask", "包片上料","1"); //驱动索引 diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java index 1aca9c4..8a30c13 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/standard_inspect_site/StandardInspectSiteDeviceDriver.java @@ -446,6 +446,9 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp if (devicecode.startsWith("TBX")) { request.setRequest_medthod_code(RequestMethodEnum.apply_mjxl.getCode()); request.setRequest_medthod_name(RequestMethodEnum.apply_mjxl.getName()); + }else if(devicecode.startsWith("BP")){ + request.setRequest_medthod_code(RequestMethodEnum.apply_bpsl.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_bpsl.getName()); } String resp = acsToWmsService.applyTask(request); JSONObject res_jo = JSONObject.parseObject(resp); diff --git a/acs/nladmin-ui/src/views/acs/device/config.vue b/acs/nladmin-ui/src/views/acs/device/config.vue index 4f95dc4..91a8fc8 100644 --- a/acs/nladmin-ui/src/views/acs/device/config.vue +++ b/acs/nladmin-ui/src/views/acs/device/config.vue @@ -73,6 +73,7 @@ import crud from '@/mixins/crud' import { get, selectDriverCodeList } from '@/api/acs/device/driverConfig' import { getDicts } from '@/views/system/dict/dict' +import standard_autodoor from '@/views/acs/device/driver/standard_autodoor' import standard_inspect_site from './driver/standard_inspect_site' import standard_ordinary_site from './driver/standard_ordinary_site' import standard_storage from '@/views/acs/device/driver/standard_storage' @@ -88,9 +89,11 @@ import agv_ndc_one from '@/views/acs/device/driver/agv/agv_ndc_one' import agv_ndc_two from '@/views/acs/device/driver/agv/agv_ndc_two' import xg_agv from '@/views/acs/device/driver/agv/xg_agv' + export default { name: 'DeviceConfig', components: { + standard_autodoor, standard_ordinary_site, standard_inspect_site, standard_storage, diff --git a/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue b/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue new file mode 100644 index 0000000..41e2f46 --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/standard_autodoor.vue @@ -0,0 +1,352 @@ +<template> + <!--自动门--> + <div> + + <el-card class="box-card" shadow="never"> + <div slot="header" class="clearfix"> + <span class="role-span">设备协议:</span> + </div> + + <el-row> + <el-col :span="12"> + OpcServer: + <el-select + v-model="opc_id" + placeholder="无" + clearable + @change="changeOpc" + > + <el-option + v-for="item in dataOpcservers" + :key="item.opc_id" + :label="item.opc_name" + :value="item.opc_id" + /> + </el-select> + </el-col> + <el-col :span="12"> + PLC: + <el-select + v-model="plc_id" + placeholder="无" + clearable + @change="changePlc" + > + <el-option + v-for="item in dataOpcPlcs" + :key="item.plc_id" + :label="item.plc_name" + :value="item.plc_id" + /> + </el-select> + </el-col> + </el-row> + + </el-card> + + <el-card class="box-card" shadow="never"> + <div slot="header" class="clearfix"> + <span class="role-span">输送系统:</span> + </div> + <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px"> + <el-row> + <el-col :span="8"> + <el-form-item label="电气调度号" label-width="150px"> + <el-switch v-model="form.OPCServer" /> + </el-form-item> + </el-col> + </el-row> + </el-form> + </el-card> + + <el-card class="box-card" shadow="never"> + <div slot="header" class="clearfix"> + <span class="role-span">PLC读取字段:</span> + </div> + <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px"> + <el-table + v-loading="false" + :data="data1" + :max-height="550" + size="small" + style="width: 100%;margin-bottom: 15px" + > + + <el-table-column prop="name" label="用途" /> + <el-table-column prop="code" label="别名要求" /> + <el-table-column prop="db" label="DB块"> + <template slot-scope="scope"> + <el-input + v-model="data1[scope.$index].db" + size="mini" + class="edit-input" + @input="finishReadEdit(data1[scope.$index])" + /> + </template> + </el-table-column> + <el-table-column prop="dbr_value"> + <template slot="header"> + <el-link type="primary" :underline="false" @click.native="test_read1()">测试读</el-link> + </template> + <template slot-scope="scope"> + <el-input v-model="data1[scope.$index].dbr_value" size="mini" class="edit-input" /> + </template> + </el-table-column> + </el-table> + </el-form> + </el-card> + + <el-card class="box-card" shadow="never"> + <div slot="header" class="clearfix"> + <span class="role-span">PLC写入字段:</span> + </div> + <el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px"> + <el-table + v-loading="false" + :data="data2" + :max-height="550" + size="small" + style="width: 100%;margin-bottom: 15px" + > + + <el-table-column prop="name" label="用途" /> + <el-table-column prop="code" label="别名要求" /> + <el-table-column prop="db" label="DB块"> + <template slot-scope="scope"> + <el-input + v-model="data2[scope.$index].db" + size="mini" + class="edit-input" + @input="finishWriteEdit(data2[scope.$index])" + /> + </template> + </el-table-column> + <el-table-column prop="dbw_value"> + <template slot="header"> + <el-link type="primary" :underline="false" @click.native="test_write1()">测试写</el-link> + </template> + <template slot-scope="scope"> + <el-input v-model="data2[scope.$index].dbw_value" size="mini" class="edit-input" /> + </template> + </el-table-column> + </el-table> + </el-form> + </el-card> + + <el-card class="box-card" shadow="never"> + <div slot="header" class="clearfix"> + <span class="role-span" /> + <el-button + :loading="false" + icon="el-icon-check" + size="mini" + style="float: right; padding: 6px 9px" + type="primary" + @click="doSubmit" + >保存 + </el-button> + </div> + </el-card> + + </div> +</template> + +<script> +import { + queryDriverConfig, + updateConfig, + testRead, + testwrite +} from '@/api/acs/device/driverConfig' +import { selectOpcList } from '@/api/acs/device/opc' +import { selectPlcList } from '@/api/acs/device/opcPlc' +import { selectListByOpcID } from '@/api/acs/device/opcPlc' + +import crud from '@/mixins/crud' + +export default { + name: 'StandardAutodoor', + mixins: [crud], + props: { + parentForm: { + type: Object, + require: true + } + }, + data() { + return { + device_code: '', + device_id: '', + plc_id: '', + plc_code: '', + opc_id: '', + opc_code: '', + configLoading: false, + dataOpcservers: [], + dataOpcPlcs: [], + data1: [], + data2: [], + form: { + inspect_in_stocck: true, + ignore_pickup_check: true, + ignore_release_check: true, + apply_task: true, + manual_create_task: true, + is_pickup: true, + is_release: true + }, + rules: {} + } + }, + created() { + this.$nextTick(() => { + // 从父表单获取设备编码 + this.device_id = this.$props.parentForm.device_id + this.device_code = this.$props.parentForm.device_code + queryDriverConfig(this.device_id, this.$props.parentForm.driver_code).then(data => { + // 给表单赋值,并且属性不能为空 + if (data.form) { + const arr = Object.keys(data.form) + // 不为空 + if (arr.length > 0) { + this.form = data.form + } + } + + // 给表单赋值,并且属性不能为空 + if (data.parentForm) { + const arr = Object.keys(data.parentForm) + // 不为空 + if (arr.length > 0) { + this.opc_code = data.parentForm.opc_code + this.plc_code = data.parentForm.plc_code + } + } + this.data1 = data.rs + this.data2 = data.ws + this.sliceItem() + }) + selectPlcList().then(data => { + this.dataOpcPlcs = data + this.plc_id = this.$props.parentForm.opc_plc_id + }) + selectOpcList().then(data => { + this.dataOpcservers = data + this.opc_id = this.$props.parentForm.opc_server_id + }) + }) + }, + methods: { + changeOpc(val) { + this.dataOpcservers.forEach(item => { + if (item.opc_id === val) { + this.opc_code = item.opc_code + } + }) + selectListByOpcID(val).then(data => { + this.dataOpcPlcs = data + this.plc_id = '' + this.plc_code = '' + if (this.dataOpcPlcs && this.dataOpcPlcs.length > 0) { + this.plc_id = this.dataOpcPlcs[0].plc_id + this.plc_code = this.dataOpcPlcs[0].plc_code + } + this.sliceItem() + }) + }, + finishReadEdit(data) { + // 编辑的是code列,并且值包含mode + if (data.code.indexOf('mode') !== -1) { + const dbValue = data.db + // .之前的字符串 + const beforeStr = dbValue.match(/(\S*)\./)[1] + // .之后的字符串 + const afterStr = dbValue.match(/\.(\S*)/)[1] + // 取最后数字 + const endNumber = afterStr.substring(1) + // 最后为非数字 + if (isNaN(parseInt(endNumber))) { + return + } + for (const val in this.data1) { + if (this.data1[val].code.indexOf('action') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 1) + } + if (this.data1[val].code.indexOf('error') !== -1) { + this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2) + } + } + } + }, + changePlc(val) { + this.dataOpcPlcs.forEach(item => { + if (item.plc_id === val) { + this.plc_code = item.plc_code + this.sliceItem() + return + } + }) + }, + test_read1() { + testRead(this.data1, this.opc_id).then(data => { + this.data1 = data + this.notify('操作成功!', 'success') + }).catch(err => { + console.log(err.response.data.message) + }) + }, + test_write1() { + testwrite(this.data2, this.opc_id).then(data => { + this.notify('操作成功!', 'success') + }).catch(err => { + console.log(err.response.data.message) + }) + }, + doSubmit() { + this.$refs['form'].validate((valid) => { + if (valid) { + this.configLoading = true + // 根据驱动类型判断是否为路由设备 + const parentForm = this.parentForm + parentForm.is_route = true + parentForm.plc_id = this.plc_id + parentForm.opc_id = this.opc_id + updateConfig(parentForm, this.form, this.data1, this.data2).then(res => { + this.notify('保存成功', 'success') + this.configLoading = false + }).catch(err => { + this.configLoading = false + console.log(err.response.data.message) + }) + } + }) + }, + sliceItem() { // 拼接DB的Item值 + this.data1.forEach(item => { + const str = item.code + // 是否包含. + if (str.search('.') !== -1) { + // 截取最后一位 + item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1) + } else { + item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code + } + }) + this.data2.forEach(item => { + const str = item.code + // 是否包含. + if (str.search('.') !== -1) { + // 截取最后一位 + item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1) + } else { + item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code + } + }) + } + } +} +</script> + +<style scoped> + +</style> diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java index 147429b..8845fb6 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/BPSLTask.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -19,6 +20,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; import org.nl.wms.sch.task_manage.task.TaskType; @@ -58,7 +60,9 @@ public class BPSLTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; @Override // @Transactional(rollbackFor = Exception.class) @@ -69,72 +73,64 @@ public class BPSLTask extends AbstractTask { SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 + // 找起点 + SchBasePoint nextPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() + .eq(SchBasePoint::getPoint_code, task.getPoint_code2())); String extGroupData = task.getExt_group_data(); JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + String materialType = jsonObject.getString("material_type"); + SchBasePoint point = findNextPoint(jsonObject); if (ObjectUtil.isEmpty(point)) { task.setRemark("未找到所需点位!"); taskService.update(task); // 消息通知 + log.info("包片上料未找到当前符合条件的点位materialType:{},",materialType); continue; } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); + // 设置起点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); task.setRemark(""); taskService.update(task); + //发起任务时先把点位占用,防止发起重复任务 point.setIng_task_code(task.getTask_code()); + point.setVehicle_qty(point.getVehicle_qty() - 1); + point.setVehicle_type(materialType); pointService.update(point); //下发 -// this.renotifyAcs(task); + this.renotifyAcs(task); } } /** - * 判断是否加急:是->入窑口,否->双层缓存线 + * 判断目标点位 + * 从10-1查找可以物料一致且有货的点位 * - * @param nextRegionStr * @param extGroupData * @return */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 + private SchBasePoint findNextPoint(JSONObject extGroupData) { + String regionCode = "HCQ1"; + String materialType = extGroupData.getString("material_type"); + List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); + for(int i=schBasePointList.size()-1;i>=0;i--){ + SchBasePoint schBasePoint=schBasePointList.get(i); + if (schBasePoint.getVehicle_qty()!=0 + &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) + &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ + log.info("包片上料任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); + return schBasePoint; + } } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + return null; } + /** + * 1.取货完毕后起点减少最后一份组盘,,并且该组盘视为已结束 + * 2.包片机LMS不记录点位信息,由人工对组盘进行操作 + */ @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { @@ -146,18 +142,6 @@ public class BPSLTask extends AbstractTask { if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; String startPoint = taskObj.getPoint_code1(); // 获取起点 String endPoint = taskObj.getPoint_code2(); // 获取终点 SchBasePoint startPointObj = pointService.getById(startPoint); @@ -168,46 +152,40 @@ public class BPSLTask extends AbstractTask { taskObj.setRemark("执行中"); } if (status.equals(TaskStatus.FINISHED)) { // 完成 + List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); + String vehicleCode=vehicleCodeList.get(vehicleCodeList.size()-1); + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() + .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, + GroupBindMaterialStatusEnum.BOUND.getValue())); + if (ObjectUtil.isEmpty(one)) { + throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); + } + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateById(one); // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); + if (vehicleCodeList.size()==1) { + startPointObj.setVehicle_code(""); + }else{ + StringBuilder vehicle_code=new StringBuilder(); + for(int i=0;i<=vehicleCodeList.size()-2;i++){ + vehicle_code.append(vehicleCodeList.get(i)).append(','); + } + startPointObj.setVehicle_code(vehicle_code.toString()); } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - + startPointObj.setIng_task_code(""); + startPointObj.setUpdate_time(DateUtil.now()); + pointService.updateById(startPointObj); // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); + taskObj.setGroup_id(one.getGroup_id()); taskObj.setRemark("任务完成"); } if (status.equals(TaskStatus.CANCELED)) { // 取消 @@ -216,6 +194,12 @@ public class BPSLTask extends AbstractTask { endPointObj.setIng_task_code(""); pointService.update(endPointObj); } + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + startPointObj.setVehicle_qty(startPointObj.getVehicle_qty()+1); + pointService.update(endPointObj); + } taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java index a7811f0..2a72516 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/KGHJRKTask.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -58,168 +59,24 @@ public class KGHJRKTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; @Override // @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { - // 获取任务 - List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - //下发 -// this.renotifyAcs(task); - } } - /** - * 判断是否加急:是->入窑口,否->双层缓存线 - * - * @param nextRegionStr - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 - } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + + private SchBasePoint findNextPoint(SchBasePoint startPoint) { + return null; } @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); } @Override @@ -231,4 +88,4 @@ public class KGHJRKTask extends AbstractTask { public void cancel(String task_code) { this.updateStatus(task_code, TaskStatus.CANCELED); } -} +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java index c1190a8..d9a42d0 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/MJXLTask.java @@ -78,7 +78,7 @@ public class MJXLTask extends AbstractTask { task.setRemark("未找到所需点位!"); taskService.update(task); // 消息通知 - log.info("未找到当前符合条件的点位materialType:{},",materialType); + log.info("满架下料未找到当前符合条件的点位materialType:{},",materialType); continue; } // 设置终点并修改创建成功状态 @@ -206,6 +206,7 @@ public class MJXLTask extends AbstractTask { groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 groupEntity.setIs_delete(false); + groupEntity.setMove_way(startPoint); vehiclematerialgroupService.save(groupEntity); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java index 75752a2..8b4315f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/TBXBKJTask.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -58,168 +59,24 @@ public class TBXBKJTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; @Override // @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { - // 获取任务 - List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - //下发 -// this.renotifyAcs(task); - } } - /** - * 判断是否加急:是->入窑口,否->双层缓存线 - * - * @param nextRegionStr - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 - } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + + private SchBasePoint findNextPoint(SchBasePoint startPoint) { + return null; } @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); } @Override @@ -231,4 +88,4 @@ public class TBXBKJTask extends AbstractTask { public void cancel(String task_code) { this.updateStatus(task_code, TaskStatus.CANCELED); } -} +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java index 3316762..9f950f2 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/XSCKTask.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -58,168 +59,24 @@ public class XSCKTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; @Override // @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { - // 获取任务 - List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - //下发 -// this.renotifyAcs(task); - } } - /** - * 判断是否加急:是->入窑口,否->双层缓存线 - * - * @param nextRegionStr - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 - } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + + private SchBasePoint findNextPoint(SchBasePoint startPoint) { + return null; } @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); } @Override @@ -231,4 +88,4 @@ public class XSCKTask extends AbstractTask { public void cancel(String task_code) { this.updateStatus(task_code, TaskStatus.CANCELED); } -} +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java index e90d441..0ae7ac9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ZJBZKDDTask.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -58,168 +59,24 @@ public class ZJBZKDDTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; @Override // @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { - // 获取任务 - List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - //下发 -// this.renotifyAcs(task); - } } - /** - * 判断是否加急:是->入窑口,否->双层缓存线 - * - * @param nextRegionStr - * @param extGroupData - * @return - */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); - } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); - } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 - } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + + private SchBasePoint findNextPoint(SchBasePoint startPoint) { + return null; } @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - String startPoint = taskObj.getPoint_code1(); // 获取起点 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - SchBasePoint startPointObj = pointService.getById(startPoint); - SchBasePoint endPointObj = pointService.getById(endPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 起点清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - - // 任务完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); - taskObj.setRemark("任务完成"); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 终点解锁 - if (ObjectUtil.isNotEmpty(endPointObj)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setRemark("任务取消"); - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - } - taskService.update(taskObj); } @Override @@ -231,4 +88,4 @@ public class ZJBZKDDTask extends AbstractTask { public void cancel(String task_code) { this.updateStatus(task_code, TaskStatus.CANCELED); } -} +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java index c2d526a..8060f56 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSFMTask.java @@ -242,7 +242,7 @@ public class GHSFMTask extends AbstractTask { one.setTask_code(taskObj.getTask_code()); one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 one.setPoint_name(endPointObj.getPoint_name()); - one.setMove_way(one.getMove_way() + " -> " + endPointObj.getPoint_code()); + one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); one.setUpdate_id(GeneralDefinition.ACS_ID); one.setUpdate_name(GeneralDefinition.ACS_NAME); one.setUpdate_time(DateUtil.now()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java index de04a1b..3506ab8 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/ghs/GHSQHTask.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.task_manage.task.tasks.ghs; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; @@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.MapOf; +import org.nl.wms.ext.service.WmsToAcsService; import org.nl.wms.pdm.service.IPdmBdWorkorderService; import org.nl.wms.pdm.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -19,6 +21,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; import org.nl.wms.sch.task_manage.task.TaskType; @@ -58,83 +61,141 @@ public class GHSQHTask extends AbstractTask { @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired - private PointMapper yzMapper; + private PointMapper pointMapper; + @Autowired + private WmsToAcsService wmsToAcsService; + /** + * 1.扫描每个允许取货的固化室从1-10的顺序开始进行取货 + */ @Override // @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { - // 获取任务 - List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() - .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); - for (SchBaseTask task : tasks) { - List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置终点并修改创建成功状态 - task.setPoint_code2(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setRemark(""); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - //下发 -// this.renotifyAcs(task); + List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion("GHS","3"); + if (schBasePointList.size()==0) { + // 消息通知 + log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); + return; + } + SchBasePoint schBasePoint=null; + //按顺序查找第一个符合条件的固化室位置,发起任务 + for(SchBasePoint schBasePoint1:schBasePointList){ + if (schBasePoint1.getVehicle_qty()==3&&ObjectUtil.isEmpty(schBasePoint1.getIng_task_code())) { + schBasePoint=schBasePoint1; + break; + } } + if (ObjectUtil.isEmpty(schBasePoint)) { + // 消息通知 + log.info("未找到当前符合允许取货的固化室点位,暂不生成任务"); + return; + } + SchBasePoint nextPoint=this.findNextPoint(schBasePoint); + if (ObjectUtil.isEmpty(nextPoint)) { + // 消息通知 + log.info("未找到当前符合允许放货的缓存点,暂不生成任务Vehicle_type:{}",schBasePoint.getVehicle_type()); + return; + } + this.createTask(schBasePoint,nextPoint.getPoint_code()); + } /** - * 判断是否加急:是->入窑口,否->双层缓存线 + * 创建任务并下发 * - * @param nextRegionStr - * @param extGroupData + * @param schBasePoint + * @param endPoint * @return */ - private SchBasePoint findNextPoint(List<String> nextRegionStr, JSONObject extGroupData) { - // 需要获取nextRegionStr - if (nextRegionStr.size() < 2) { - throw new BadRequestException("压制送料任务的配置文件有错!"); + private void createTask(SchBasePoint schBasePoint,String endPoint) { + // 申请任务 + SchBaseTask task = new SchBaseTask(); // 任务实体 + String apply_point_code =schBasePoint.getPoint_code(); // 请求点 + String config_code = "GHSQHTask"; + // 1、校验数据 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() + .eq(SchBaseTaskconfig::getConfig_code, config_code)); + Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); + // 最大任务数 + Integer tcmn = taskConfig.getTask_create_max_num(); + // 获取执行中的任务 + List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( + taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); + + Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, + "该点位申请的任务未完成数已超过上限,无法申请任务"); + // 获取对接位点位对象 + SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>() + .eq(SchBasePoint::getPoint_code, apply_point_code)); + // 校验是否需要自动agv + if (!pointObj.getIs_auto()) { + // 如果不需要自动,则不创建任务 + return; } - String regionCode = nextRegionStr.get(0); - // 当前设备的工单 - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - if (one == null) { - throw new BadRequestException("压制机的工单不能为空!"); + // 2、创建申请任务 + task.setConfig_code(config_code); + task.setCreate_mode(GeneralDefinition.ACS_CREATION); + task.setVehicle_code(schBasePoint.getVehicle_code()); + task.setVehicle_qty(schBasePoint.getVehicle_qty()); + task.setTask_status(TaskStatus.APPLY.getCode()); + task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 + task.setPoint_code2(endPoint); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + // 设置起/终点 + this.setTaskPoint(taskConfig, task, apply_point_code); + taskService.create(task); + + //下发 + this.renotifyAcs(task); + } + + /** + * 1.根据当前固化室所处区域,判断到哪个区的缓存位 + * 2.从1010列到0101列倒叙判断当前列物料类型是否与起点一致且存在空位 + * 3.将当前点位设置为目标点 + * 4.如果没有符合条件的点位,跳过执行暂时等待 + */ + private SchBasePoint findNextPoint(SchBasePoint startPoint) { + String regionCode = null; + String materialType = startPoint.getVehicle_type(); + if ("GHS1".equals(startPoint.getRegion_code())) { + //HCQ1找A区 + regionCode = "HCQ1"; + + } else if ("GHS2".equals(startPoint.getRegion_code())) { + //GHS2找B区 + regionCode = "HCQ2"; } - // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 - if (one.getIs_urgent()) { - regionCode = nextRegionStr.get(1); // 去窑区 + List<SchBasePoint> schBasePointList = pointMapper.findPointByRegion(regionCode,"2"); + for(int i=schBasePointList.size()-1;i>=0;i--){ + SchBasePoint schBasePoint=schBasePointList.get(i); + SchBasePoint temp=null; + if (schBasePoint.getVehicle_qty()==0 + &&ObjectUtil.isEmpty(schBasePoint.getIng_task_code()) + &&(ObjectUtil.isEmpty(schBasePoint.getVehicle_type())||materialType.equals(schBasePoint.getVehicle_type()))){ + //发现有空位时暂存当前位置,检查当前列前面是否存在已放货位置,找最前面无货的位置 + //如果当列其他位置均已放满,则继续找下一列 + List<SchBasePoint> tempList = pointMapper.findPointByParentPoint(schBasePoint.getParent_point_code()); + for(SchBasePoint tempPoint:tempList){ + if(tempPoint.getVehicle_qty()!=0||ObjectUtil.isNotEmpty(schBasePoint.getIng_task_code())){ + if(temp!=null){ + return temp; + } + temp=tempPoint; + } + } + log.info("固化室取货任务找到当前符合条件的缓存区位置{}",schBasePoint.getPoint_code()); + return temp; + } } - List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( - MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); - return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; - // ?? -// LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>(); -// lam.eq(SchBasePoint::getRegion_code, regionCode) -// .eq(SchBasePoint::getPoint_type, ENTRANCE) -// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 -// .or() -// .eq(SchBasePoint::getIng_task_code, "")) -// .eq(SchBasePoint::getIs_used, true); -// List<SchBasePoint> schBasePoints = pointService.list(lam); -// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + return null; } + /** + * 1.如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕 + */ @Override // @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { @@ -146,18 +207,6 @@ public class GHSQHTask extends AbstractTask { if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - // 获取参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) - ? taskObj.getVehicle_code() - : IdUtil.getSnowflake(1, 1).nextIdStr(); - PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; String startPoint = taskObj.getPoint_code1(); // 获取起点 String endPoint = taskObj.getPoint_code2(); // 获取终点 SchBasePoint startPointObj = pointService.getById(startPoint); @@ -168,47 +217,54 @@ public class GHSQHTask extends AbstractTask { taskObj.setRemark("执行中"); } if (status.equals(TaskStatus.FINISHED)) { // 完成 + StringBuilder group_id= new StringBuilder(); + // 终点解锁 + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(startPointObj.getVehicle_code()); + endPointObj.setVehicle_type(startPointObj.getVehicle_type()); + endPointObj.setVehicle_code(startPointObj.getVehicle_code()); + endPointObj.setVehicle_qty(startPointObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.update(endPointObj); + List<String> vehicleCodeList = Arrays.stream(startPointObj.getVehicle_code().split(",")).collect(Collectors.toList()); + for(String vehicleCode:vehicleCodeList) { + SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>() + .eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicleCode) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, + GroupBindMaterialStatusEnum.BOUND.getValue())); + if (ObjectUtil.isEmpty(one)) { + throw new BadRequestException(vehicleCode + " => " + startPointObj.getVehicle_type() + "的组盘信息未找到"); + } + one.setTask_code(taskObj.getTask_code()); + one.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + one.setPoint_name(endPointObj.getPoint_name()); + one.setMove_way(one.getMove_way()==null?"":(one.getMove_way() + " -> ") + endPointObj.getPoint_code()); + one.setUpdate_id(GeneralDefinition.ACS_ID); + one.setUpdate_name(GeneralDefinition.ACS_NAME); + one.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateById(one); + group_id.append(one.getGroup_id()).append(','); + } // 起点清空 if (ObjectUtil.isNotEmpty(startPointObj)) { PointUtils.clearPoint(startPointObj); } - // 终点解锁 - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - // 要把数据存到组盘表 -> 改造公共方法,返回id - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); - groupEntity.setCreate_id("2"); - groupEntity.setCreate_name("ACS"); - groupEntity.setCreate_time(DateUtil.now()); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_qty") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(startPoint); - groupEntity.setPoint_name(startPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.save(groupEntity); - // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setGroup_id(groupEntity.getGroup_id()); + taskObj.setGroup_id(group_id.toString()); taskObj.setRemark("任务完成"); + + //如果起点点位为10结尾视为最后该固化室最后一个任务,取完后通知acs取货完毕 + if(taskObj.getPoint_code1().endsWith("10")) { + String middle = taskObj.getPoint_code1().substring(taskObj.getPoint_code1().length() - 4, taskObj.getPoint_code1().length() - 2); + //通知acs已经放满,固化室可以进行固化 + String device_code = "ZDM" + middle; + log.info("当前固化室已经全部取完,通知固化室的自动门{}取货完毕", device_code); + JSONObject map = new JSONObject(); + map.put("device_code", device_code); + map.put("type", "2"); + wmsToAcsService.notifyAcs(map); + } } if (status.equals(TaskStatus.CANCELED)) { // 取消 // 终点解锁 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java index 5322087..9735d4c 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.java @@ -11,8 +11,9 @@ import java.util.List; * @Date: 2023/10/9 */ public interface PointMapper { - List<SchBasePoint> findPointByRegion(String regionCode,String point_state); - List<SchBasePoint> findPointByPoint(String pointCode); + List<SchBasePoint> findPointByRegion(String regionCode,String point_status); + + List<SchBasePoint> findPointByParentPoint(String pointCode); void updatePointStatus(String device_code,String state); List<SchBasePoint> findPointForYZSL(JSONObject param); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml index 56f464d..c1e408e 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/PointMapper.xml @@ -7,16 +7,16 @@ FROM `sch_base_point` p WHERE p.region_code like CONCAT('%', #{regionCode}, '%') - and p.point_state = #{point_state} + and p.point_status = #{point_status} ORDER BY region_code </select> - <select id="findPointByRegion" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"> + <select id="findPointByParentPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"> SELECT p.* FROM `sch_base_point` p - WHERE p.point_code like CONCAT('%', #{pointCode}, '%') + WHERE p.parent_point_code like CONCAT('%', #{pointCode}, '%') ORDER BY point_code </select> diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java index 4e51460..279b027 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/PointUtils.java @@ -42,7 +42,6 @@ public class PointUtils { point.setVehicle_code(""); point.setIng_task_code(""); point.setVehicle_qty(0); - point.setVehicle_type(""); point.setUpdate_time(DateUtil.now()); pointService.updateById(point); } diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index e4bc86a..91406d2 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -247,7 +247,7 @@ <el-table-column prop="point_name" label="点位名称" :min-width="flexWidth('point_name',crud.data,'点位名称')" /> <el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('region_code',crud.data,'区域编码')" /> <el-table-column prop="region_name" label="区域名称" :min-width="flexWidth('region_name',crud.data,'区域名称')" /> - <el-table-column prop="point_type_name" label="点位类型" :min-width="flexWidth('point_type_name',crud.data,'点位类型')" /> + <!-- <el-table-column prop="point_type_name" label="点位类型" :min-width="flexWidth('point_type_name',crud.data,'点位类型')" /> --> <el-table-column prop="point_status_name" label="点位状态" :min-width="flexWidth('point_status_name',crud.data,'点位类型')" /> <!-- <el-table-column prop="point_type" label="点位类型" :min-width="flexWidth('point_type',crud.data,'点位类型')" />--> <!-- <el-table-column prop="point_status" label="点位状态" :min-width="flexWidth('point_status',crud.data,'点位状态')" />--> @@ -256,6 +256,7 @@ {{ dict.label.vehicle_type[scope.row.vehicle_type] }} </template> </el-table-column> --> + <el-table-column prop="vehicle_type" label="物料类型" :min-width="flexWidth('vehicle_type',crud.data,'物料类型')" /> <el-table-column prop="vehicle_code" label="载具编码" :min-width="flexWidth('vehicle_code',crud.data,'载具编码')" /> <el-table-column prop="vehicle_qty" label="载具数量" :min-width="flexWidth('vehicle_qty',crud.data,'载具数量')" /> <el-table-column label="是否锁定" :min-width="flexWidth('vehicle_qty',crud.data,'是否锁定')">