diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java index 01307b7..bccff8e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java @@ -137,6 +137,11 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { Long currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject jsonObject = wo.query("material_code = '" + dto.getMaterial_code() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + throw new BadRequestException("物料柜号不能重复"); + } dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); dto.setCreate_id(currentUserId); @@ -146,7 +151,6 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { dto.setUpdate_time(now); dto.setCreate_time(now); dto.setBase_unit_id(15); - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); wo.insert(json); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index f523cef..e71d39f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -21,10 +21,7 @@ import org.nl.wms.sch.tasks.callMaterial.YqxCallMaterialTask; import org.nl.wms.sch.tasks.sendEmpty.DpxwSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.HtSendEmpVehicleTask; import org.nl.wms.sch.tasks.sendEmpty.YqxSendEmpVehicleTask; -import org.nl.wms.sch.tasks.sendMaterial.GjxSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.HkxSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.HtSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.YqxSendMaterialTask; +import org.nl.wms.sch.tasks.sendMaterial.*; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -171,7 +168,9 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Transactional(rollbackFor = Exception.class) public JSONObject apply(JSONObject whereJson) { String type = whereJson.getString("type"); - String point_code = whereJson.getString("point_code"); + String point_code = ObjectUtil.isNotEmpty(whereJson.getString("point_code")) + ? whereJson.getString("point_code") + : whereJson.getString("device_code"); String vehicle_type = whereJson.getString("vehicle_type"); String vehicle_code = whereJson.getString("vehicle_code"); //载具数量 @@ -194,6 +193,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * 8.豪凯自动线下料入库 * 9.碟盘限位送空盘到输送线 * 10.一楼货梯送料 + * 11.新增包装输送线送料 + * 12.新增包装输送线送料入库 */ if (StrUtil.equals(type, "1")) { // 1.共挤线申请空盘: 调用空托盘出库处理类创建任务 @@ -218,6 +219,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("qty", material_num); // 满料位 param.put("vehicle_type", vehicle_type); param.put("vehicle_code", vehicle_code); + param.put("task_code", whereJson.getString("task_code")); GjxSendMaterialTask taskBean = SpringContextHolder.getBean(GjxSendMaterialTask.class); String task_id = taskBean.createTask(param); // 创建任务 @@ -240,6 +242,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("vehicle_type", vehicle_type); param.put("vehicle_code", vehicle_code); param.put("material_num", material_num); + param.put("task_code", whereJson.getString("task_code")); // 创建任务 YqxCallMaterialTask taskBean = SpringContextHolder.getBean(YqxCallMaterialTask.class); String task_id = taskBean.createTask(param); @@ -281,6 +284,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("vehicle_code", vehicle_code); param.put("vehicle_type", vehicle_type); param.put("qty", material_num); + param.put("task_code", whereJson.getString("task_code")); HkxSendMaterialTask taskBean = SpringContextHolder.getBean(HkxSendMaterialTask.class); String task_id = taskBean.createTask(param); @@ -300,6 +304,22 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { param.put("task_id", whereJson.getString("task_id")); HtSendMaterialTask taskBean = SpringContextHolder.getBean(HtSendMaterialTask.class); String task_id = taskBean.createTask(param); + } else if (StrUtil.equals(type, "11")) { + // 11.新增包装输送线送料 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code); + param.put("vehicle_type", vehicle_type); + param.put("qty", material_num); + param.put("material_id", whereJson.getString("material_id")); + BzssxSendMaterialTask taskBean = SpringContextHolder.getBean(BzssxSendMaterialTask.class); + String task_id = taskBean.createTask(param); + } else if (StrUtil.equals(type, "12")) { + // 12.新增包装输送线送料入库 + JSONObject param = new JSONObject(); + param.put("point_code1", point_code); + param.put("task_id", whereJson.getString("task_id")); + BZXSendMaterialTask taskBean = SpringContextHolder.getBean(BZXSendMaterialTask .class); + String task_id = taskBean.createTask(param); } return null; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToWmsController.java index e0f7a36..ff51ee4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/MesToWmsController.java @@ -23,22 +23,21 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @Api(tags = "mes请求wms") -@RequestMapping("/api/to/wms") +@RequestMapping("/api") @Slf4j @SaIgnore public class MesToWmsController { private final MesToWmsService mesToWmsService; - @PostMapping("/workWorder") + @PostMapping("/workOrder") @Log("mes下发工单") @ApiOperation("mes下发工单") @SaIgnore public ResponseEntity issueWorkOrderForMes(@RequestBody JSONObject param) { - mesToWmsService.issueWorkOrderForMes(param); - return new ResponseEntity<>(HttpStatus.NO_CONTENT); + return new ResponseEntity<>(mesToWmsService.issueWorkOrderForMes(param), HttpStatus.OK); } - @PostMapping("/workWorder/finish") + @PostMapping("/workOrder/finish") @Log("mes获取工单反馈") @ApiOperation("mes获取工单反馈") @SaIgnore @@ -54,11 +53,35 @@ public class MesToWmsController { return new ResponseEntity<>(mesToWmsService.gjxAutomaticForMes(param), HttpStatus.OK); } + @PostMapping("/yqxUp") + @Log("油漆线上料") + @ApiOperation("油漆线上料") + @SaIgnore + public ResponseEntity yqxAutomaticForMes(@RequestBody JSONObject param) { + return new ResponseEntity<>(mesToWmsService.yqxAutomaticForMes(param), HttpStatus.OK); + } + @PostMapping("/hkxDown") - @Log("豪凯自动线下料") - @ApiOperation("豪凯自动线下料") + @Log("1.5成品入库") + @ApiOperation("1.5成品入库") @SaIgnore public ResponseEntity hawKeAutomaticForMes(@RequestBody JSONObject param) { return new ResponseEntity<>(mesToWmsService.hawKeAutomaticForMes(param), HttpStatus.OK); } + + @PostMapping("/finishMaterialOut") + @Log("1.5成品出库") + @ApiOperation("1.5成品出库") + @SaIgnore + public ResponseEntity finishMaterialOut(@RequestBody JSONObject param) { + return new ResponseEntity<>(mesToWmsService.finishMaterialOut(param), HttpStatus.OK); + } + @PostMapping("/releaseCpPointArea") + @Log("成品出库区域释放") + @ApiOperation("成品出库区域释放") + @SaIgnore + public ResponseEntity releaseCpPointArea(@RequestBody JSONObject param) { + return new ResponseEntity<>(mesToWmsService.releaseCpPointArea(param), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/WmsToMesController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/WmsToMesController.java index ca4dc21..6c4cf6a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/WmsToMesController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/rest/WmsToMesController.java @@ -1,6 +1,7 @@ package org.nl.wms.ext.mes.rest; import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -21,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @Api(tags = "wms请求mes") -@RequestMapping("/api/to/wms") +@RequestMapping("/api") @Slf4j @SaIgnore public class WmsToMesController { @@ -45,12 +46,12 @@ public class WmsToMesController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @PostMapping("/device") - @Log("从MES系统获取设备基础信息") - @ApiOperation("从MES系统获取设备基础信息") + @PostMapping("/task/feedback") + @Log("任务反馈") + @ApiOperation("任务反馈") @SaIgnore - public ResponseEntity getDeviceInfoForMes() { - wmsToMesService.getDeviceInfoForMes(); + public ResponseEntity taskFeedback(JSONObject param) { + wmsToMesService.taskFeedback(param); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToWmsService.java index 898bb8a..434ef13 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/MesToWmsService.java @@ -12,11 +12,17 @@ public interface MesToWmsService { /** * mes下发工单 */ - void issueWorkOrderForMes(JSONObject param); + JSONObject issueWorkOrderForMes(JSONObject param); JSONObject feedbackWorkOrderToMes(JSONObject param); JSONObject hawKeAutomaticForMes(JSONObject param); JSONObject gjxAutomaticForMes(JSONObject param); + + JSONObject yqxAutomaticForMes(JSONObject param); + + JSONObject finishMaterialOut(JSONObject param); + + JSONObject releaseCpPointArea(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java index 6b8cb9e..ef6b7ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/WmsToMesService.java @@ -1,5 +1,7 @@ package org.nl.wms.ext.mes.service; +import com.alibaba.fastjson.JSONObject; + /** * @Author: lyd * @Description: wms对接mes的业务层 @@ -17,8 +19,5 @@ public interface WmsToMesService { */ void getUnitInfoForMes(); - /** - * 设备 - */ - void getDeviceInfoForMes(); + void taskFeedback(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java index d3ed894..9d1fb9a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToWmsServiceImpl.java @@ -1,10 +1,28 @@ package org.nl.wms.ext.mes.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.service.MaterialbaseService; +import org.nl.wms.basedata.service.dto.MaterialbaseDto; +import org.nl.wms.ext.acs.service.AcsToWmsService; import org.nl.wms.ext.mes.service.MesToWmsService; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.nl.wms.sch.tasks.callEmpty.GjxCallEmpVehicleTask; +import org.nl.wms.sch.tasks.cpOut.CpOutTask; +import org.slf4j.MDC; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; /** * @Author: lyd @@ -15,28 +33,126 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Slf4j public class MesToWmsServiceImpl implements MesToWmsService { + private final AcsToWmsService acsToWmsService; + private final MaterialbaseService materialbaseService; @Override - public void issueWorkOrderForMes(JSONObject param) { - // + @Transactional + public JSONObject issueWorkOrderForMes(JSONObject param) { + MDC.put("log_file_type", "MES下发工单"); + log.info("mes传来工单信息:" + param); + WQLObject workOrderTab = WQLObject.getWQLObject("pdm_bd_workorder"); + WQLObject deviceTab = WQLObject.getWQLObject("pdm_bi_device"); + if (ObjectUtil.isEmpty(param)) { + throw new BadRequestException("工单不能为空"); + } + MaterialbaseDto materialCode = materialbaseService.findByCode(param.getString("material_code")); + JSONObject deviceCode = deviceTab.query("extend_code = '" + param.getString("device_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(deviceCode)) { + throw new BadRequestException("设备编码错误!"); + } + param.put("workorder_id", IdUtil.getSnowflake(1,1).nextIdStr()); + param.put("plan_qty", param.getString("qty")); + param.put("order_status", param.getString("workorder_status")); + param.put("material_id", materialCode.getMaterial_id()); + param.put("device_id", deviceCode.getString("device_id")); + param.put("device_code", deviceCode.getString("device_code")); + param.put("produce_date", DateUtil.format(new Date(), "yyyy-MM-dd")); + param.put("create_id", "3"); + param.put("create_name", "MES系统"); + param.put("create_time", param.getString("create_time")); + workOrderTab.insert(param); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + MDC.remove("log_file_type"); + return result; } @Override public JSONObject feedbackWorkOrderToMes(JSONObject param) { - return null; + log.info("mes传来工单信息:", param); + WQLObject workOrderTab = WQLObject.getWQLObject("pdm_bd_workorder"); + if (ObjectUtil.isEmpty(param)) { + throw new BadRequestException("工单不能为空"); + } + JSONObject jsonObject = workOrderTab + .query("workorder_code = '" + param.getString("workorder_code") + "'") + .uniqueResult(0); + jsonObject.put("order_status", param.getString("workorder_status")); + jsonObject.put("update_optid", "3"); + jsonObject.put("update_optname", "MES系统"); + jsonObject.put("update_time", DateUtil.now()); + jsonObject.put("realproduceend_date", DateUtil.now()); + workOrderTab.update(jsonObject); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + return result; } @Override public JSONObject hawKeAutomaticForMes(JSONObject param) { - return null; + log.info("mes成品入库参数:" + param); + param.put("type", "8"); + acsToWmsService.apply(param); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + return result; } @Override public JSONObject gjxAutomaticForMes(JSONObject param) { log.info("mes供给线下料参数:" + param); + param.put("type", "2"); + acsToWmsService.apply(param); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + return result; + } + + @Override + public JSONObject yqxAutomaticForMes(JSONObject param) { + log.info("mes油漆线上料参数:" + param); + param.put("type", "4"); + acsToWmsService.apply(param); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + return result; + } + + @Override + public JSONObject finishMaterialOut(JSONObject param) { + // 创建任务 + CpOutTask taskBean = SpringContextHolder.getBean(CpOutTask.class); + taskBean.createTask(param); + JSONObject result = new JSONObject(); + result.put("status", 200); + result.put("message", "操作成功"); + return result; + } + + @Override + public JSONObject releaseCpPointArea(JSONObject param) { + if (ObjectUtil.isEmpty(param) || ObjectUtil.isEmpty(param.getString("out_store_order"))) { + throw new BadRequestException("参数不能为空"); + } + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + JSONObject entity = new JSONObject(); + entity.put("point_status", "1"); + entity.put("material_id", ""); + entity.put("pcsn", ""); + entity.put("ivt_qty", "0"); + entity.put("instorage_time", ""); + entity.put("vehicle_type", ""); + entity.put("vehicle_code", ""); + entity.put("update_time", DateUtil.now()); + pointTab.update(entity, "region_code = 'CPCKQ01' and lock_type = '1'"); JSONObject result = new JSONObject(); result.put("status", 200); result.put("message", "操作成功"); - result.put("data", param); return result; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java index 326d8fb..ccf4912 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/WmsToMesServiceImpl.java @@ -1,6 +1,7 @@ package org.nl.wms.ext.mes.service.impl; import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.wms.ext.mes.service.WmsToMesService; @@ -31,9 +32,13 @@ public class WmsToMesServiceImpl implements WmsToMesService { } @Override - public void getDeviceInfoForMes() { - String url = http + "api/device"; - String result = HttpUtil.post(url, ""); - System.out.println(result); + public void taskFeedback(JSONObject param) { + String url = http + "api/task"; + try { +// String result = HttpUtil.post(url, param); + } catch (Exception e) { + log.error("反馈MES异常"); + } } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/rest/SSXSendMaterialController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/rest/SSXSendMaterialController.java new file mode 100644 index 0000000..41456e5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/rest/SSXSendMaterialController.java @@ -0,0 +1,55 @@ +package org.nl.wms.pda.ssxsendmaterial.rest; + +import cn.dev33.satoken.annotation.SaIgnore; +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.modules.logging.annotation.Log; +import org.nl.wms.pda.ssxsendmaterial.service.SSXSendMaterialService; +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; + +/** + * @Author: lyd + * @Description: 包装输送线送料 + * @Date: 2023/6/15 + */ + +@RestController +@RequiredArgsConstructor +@Api(tags = "手持送料") +@RequestMapping("api/pda/ssx/sendMaterial") +@Slf4j +public class SSXSendMaterialController { + + private final SSXSendMaterialService sendMaterialService; + @PostMapping("/queryMaterial") + @Log("查询物料") + @ApiOperation("查询物料") + @SaIgnore + public ResponseEntity queryMaterial() { + return new ResponseEntity<>(sendMaterialService.queryMaterial(), HttpStatus.OK); + } + + @PostMapping("/queryVehicle") + @Log("查询载具类型") + @ApiOperation("查询载具类型") + @SaIgnore + public ResponseEntity queryVehicle() { + return new ResponseEntity<>(sendMaterialService.queryVehicle(), HttpStatus.OK); + } + + @PostMapping("/confirm") + @Log("送料确定") + @ApiOperation("送料确定") + @SaIgnore + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(sendMaterialService.confirm(whereJson), HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/SSXSendMaterialService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/SSXSendMaterialService.java new file mode 100644 index 0000000..e50b8c5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/SSXSendMaterialService.java @@ -0,0 +1,16 @@ +package org.nl.wms.pda.ssxsendmaterial.service; + +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/6/15 + */ +public interface SSXSendMaterialService { + JSONObject queryMaterial(); + + JSONObject confirm(JSONObject whereJson); + + JSONObject queryVehicle(); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/impl/SSXSendMaterialServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/impl/SSXSendMaterialServiceImpl.java new file mode 100644 index 0000000..89b1eb7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/ssxsendmaterial/service/impl/SSXSendMaterialServiceImpl.java @@ -0,0 +1,77 @@ +package org.nl.wms.pda.ssxsendmaterial.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.ssxsendmaterial.service.SSXSendMaterialService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: lyd + * @Description: 输送线送料 + * @Date: 2023/6/15 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class SSXSendMaterialServiceImpl implements SSXSendMaterialService { + private final AcsToWmsService acsToWmsService; + @Override + public JSONObject queryMaterial() { + JSONObject result = new JSONObject(); + JSONArray mdMeMaterialbase = WQLObject.getWQLObject("md_me_materialbase").query("is_used = '1' and is_delete = '0'").getResultJSONArray(0); + result.put("result", mdMeMaterialbase); + result.put("code", "1"); + result.put("desc", "查询成功"); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject confirm(JSONObject param) { + JSONObject result = new JSONObject(); + String materialId = param.getString("material_id"); + String vehicle_type = param.getString("value"); + String qty = param.getString("qty"); + if (ObjectUtil.isEmpty(materialId)) { + // 物料不能为空 + throw new BadRequestException("物料不能为空"); + } + // 执行创建任务并下发给acs: 1001 -> 1004 + param.put("point_code", "BZSSX1001"); + param.put("material_id", materialId); + param.put("vehicle_type", vehicle_type); + param.put("qty", qty); + param.put("type", "11");// 组盘信息:task_id + // 2、调用接口 + JSONObject json = acsToWmsService.apply(param); + if (ObjectUtil.isEmpty(json) || StrUtil.equals(json.getString("status"), "200")) { + result.put("result", ""); + result.put("code", "1"); + result.put("desc", "操作成功"); + } else { + result.put("result", ""); + result.put("code", "0"); + result.put("desc", "操作失败:" + json.getString("message")); + } + return result; + } + + @Override + public JSONObject queryVehicle() { + JSONObject result = new JSONObject(); + WQLObject dictTab = WQLObject.getWQLObject("sys_dict_detail"); + JSONArray dictSort = dictTab.query("name = 'vehicle_type' and value in ('4','5','6')", "dict_sort").getResultJSONArray(0); + result.put("result", dictSort); + result.put("code", "1"); + result.put("desc", "操作成功"); + return result; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java index e9852b6..e6d5e59 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoTask/YqxhcqCallMaterialTask.java @@ -1,323 +1,323 @@ -package org.nl.wms.sch.tasks.autoTask; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.nl.config.MapOf; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.system.util.CodeUtil; -import org.nl.modules.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.sch.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.util.IdUtil; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @Author: lyd - * @Description: 油漆线缓存区自动叫料 - * @Date: 2023/2/25 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class YqxhcqCallMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = YqxhcqCallMaterialTask.class.getName(); - @Override - public List addTask() { - /* - * 下发给ACS时需要特殊处理 - */ - JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); - - ArrayList acsTaskArr = new ArrayList<>(); - for (int i = 0; i < arr.size(); i++) { - JSONObject json = arr.getJSONObject(i); - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - String point_code = json.getString("point_code1"); - if (ObjectUtil.isEmpty(point_code)) { - // 证明是等待点 - point_code = json.getString("point_code3"); - } - String newPoint = point_code.substring(0, 4) + "2" + point_code.substring(4, 10); - - AcsTaskDto dto = AcsTaskDto.builder() - .task_id(json.getString("task_id")) - .task_code(json.getString("task_code")) - .task_type(json.getString("acs_task_type")) - .start_device_code(newPoint) - .next_device_code(json.getString("point_code2")) - .vehicle_code(json.getString("vehicle_code")) - .vehicle_type(json.getString("vehicle_type")) - .priority(json.getString("priority")) - .remark(json.getString("remark")) - .build(); - acsTaskArr.add(dto); - } - return acsTaskArr; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject task, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - // 物料点 - JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); - //任务取消 - if (StrUtil.equals(status, "0")) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - - if (ObjectUtil.isEmpty(material_point)) return; - // 点位解锁 - material_point.put("lock_type", "1"); - pointTab.update(material_point); - } - - if ("1".equals(status)) { - // 更新任务状态为执行中 - taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("car_no", taskObj.getString("car_no")); - taskTab.update(taskObj); - } - - if (StrUtil.equals(status, "2")) { - //完成后 - // 物料点位解锁 并设置空位 - material_point.put("lock_type", "1"); - material_point.put("point_status", "1"); - material_point.put("material_id", ""); - material_point.put("vehicle_type", ""); - material_point.put("vehicle_code", ""); - pointTab.update(material_point); - - // 油漆线缓存点位更新 - JSONObject yqx_point = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); - yqx_point.put("point_status", "3"); - yqx_point.put("material_id", taskObj.getString("material_id")); - yqx_point.put("vehicle_type", taskObj.getString("vehicle_type")); - yqx_point.put("material_qty", taskObj.getString("material_qty")); - yqx_point.put("vehicle_qty", taskObj.getString("vehicle_qty")); - pointTab.update(yqx_point); - - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "任务完成"); - taskTab.update(taskObj); - - if (ObjectUtil.isEmpty(material_point)) return; - - //区域出入表【st_ivt_regionIO】 - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - JSONObject regionIoObj = new JSONObject(); - regionIoObj.put("iostorinv_id", IdUtil.getLongId()); - regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); - regionIoObj.put("buss_date", DateUtil.today()); - regionIoObj.put("io_type", "2"); - regionIoObj.put("region_id", material_point.getString("region_id")); - regionIoObj.put("region_code", material_point.getString("region_code")); - regionIoObj.put("region_name", material_point.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", taskObj.getString("material_qty")); - regionIoObj.put("bill_status", "3"); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", "2"); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); - regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void autoCreate() { - // 自动叫料 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - // 找终点:四个缓存区按顺序获取一个 - JSONObject endPoint = WQL.getWO("YQX_AUTOTASK").addParamMap(MapOf.of("flag","1")).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) return; - String point_code2 = endPoint.getString("point_code"); - // 判断任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务"); - // 判断工单 - JSONObject workOrderObj = workOrderTab.query("device_code = '" + endPoint.getString("device_code") + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); - if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); - // 创建任务 - SchTaskDto dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("油漆线叫料") - .acs_task_type("2")//2楼AGV普通任务 - .priority("7") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .vehicle_qty(1) - .material_info_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .vehicle_type(workOrderObj.getString("vehicle_type")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .remark("任务创建成功") - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - // 到养生A区找起点:根据物料、载具类型去查找,均在工单中 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); - for (int i = 0; i < taskArr.size(); i++) { - JSONObject taskObj = taskArr.getJSONObject(i); - String material_id = taskObj.getString("material_id"); - String vehicle_type = taskObj.getString("vehicle_type"); - JSONObject queryParam = new JSONObject(); - queryParam.put("flag", "1"); - queryParam.put("material_id", material_id); - queryParam.put("region_code", "YSQA01"); - queryParam.put("vehicle_type", vehicle_type ); - // 查找养生A区,如果最后一个位置有货,直接搬走,如果没货,就作为等待点。先让agv到达等待点 - // 1、根据物料id查找养生A区物料点 - JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(queryParam).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(materialPoint)) { - // 2、判断是否在等待点,如果不是,先去等待点,是直接搬运 - // 2.1、获取当前快排列的等待点 row:排 - JSONObject waitPoint = WQL.getWO("QSCH_yqxCallMAterial_01") - .addParamMap(MapOf.of("flag", "2", "block_num", materialPoint.getString("block_num"), - "row_num", materialPoint.getString("row_num"), - "region_code", "YSQA01")).process() - .uniqueResult(0); - if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("油漆线缓存区判断等待点异常!"); - // 2.2、判断等待点 - if (!waitPoint.getString("waitcol").equals(materialPoint.getString("col_num"))) { - // 获取等待点 - JSONObject waitPoints = pointTab.query("block_num = '" + materialPoint.getString("block_num") + "' " + - "AND row_num = '" + materialPoint.getString("row_num") + "' " + - "AND col_num = '" + waitPoint.getString("waitcol") + "' " + - "AND is_used = '1' " + - "AND is_delete = '0' " + - "AND lock_type = '1' " + - "AND region_code = 'YSQA01'").uniqueResult(0); - if (ObjectUtil.isEmpty(waitPoints)) { - taskObj.put("remark", "等待点已被占用"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - continue; - } - // 等待点上锁 -// waitPoints.put("lock_type", "2"); - pointTab.update(waitPoints); - - taskObj.put("point_code3", waitPoints.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("acs_task_type", "3"); - taskObj.put("remark", "等待点"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - continue; - } - // 是等待点直接搬走 - // 物料点位上锁 - materialPoint.put("lock_type", "2"); - pointTab.update(materialPoint); - - taskObj.put("point_code1", materialPoint.getString("point_code")); - taskObj.put("material_qty", materialPoint.getString("ivt_qty")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("acs_task_type", "2"); - taskObj.put("remark", "等待点搬运物料"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - taskObj.put("remark", "养生A区无所需物料"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } - - } - } - - @Override - public String createTask(JSONObject whereJson) { - return null; - } - - @Override - public void forceFinish(String task_id) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("未找到该任务或者任务已完成!"); - this.updateTaskStatus(taskObj,"2"); - } - - @Override - public void cancel(String task_id) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); - if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("任务已完成不能取消!"); - this.updateTaskStatus(taskObj,"0"); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public String againApply(String task_id) { - // 二次下发任务 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - JSONObject hcTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(hcTask)) throw new BadRequestException("任务ID: " + task_id + "的任务不存在!"); - JSONObject waitPoint = pointTab.query("point_code = '" + hcTask.getString("point_code3") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("油漆线二次下发等待点编码错误!"); - JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(MapOf.of( - "flag", "3", "material_id", hcTask.getString("material_id"), - "region_code", "YSQA01", "vehicle_type", hcTask.getString("vehicle_type"), - "block_num", hcTask.getString("block_num"), "col_num", hcTask.getString("col_num") - )).process().uniqueResult(0); - if (ObjectUtil.isEmpty(materialPoint)) throw new BadRequestException("养生A区暂无所需物料!"); - String pointCode = materialPoint.getString("point_code"); - // 修改任务 - hcTask.put("point_code1", pointCode); - hcTask.put("remark", "养生A区:" + pointCode); - taskTab.update(hcTask); - // 锁住点位 - materialPoint.put("lock_type", "2"); - pointTab.update(materialPoint); - // 点位处理 - //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1)2812 - String newPoint = pointCode.substring(0, 4) + "2" + pointCode.substring(4, 10); - return newPoint; - } -} +//package org.nl.wms.sch.tasks.autoTask; +// +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.core.util.StrUtil; +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONArray; +//import com.alibaba.fastjson.JSONObject; +//import lombok.RequiredArgsConstructor; +//import lombok.extern.slf4j.Slf4j; +//import org.nl.config.MapOf; +//import org.nl.modules.common.exception.BadRequestException; +//import org.nl.modules.common.utils.SecurityUtils; +//import org.nl.modules.system.util.CodeUtil; +//import org.nl.modules.wql.WQL; +//import org.nl.modules.wql.core.bean.WQLObject; +//import org.nl.wms.sch.SchTaskDto; +//import org.nl.wms.sch.manage.AbstractAcsTask; +//import org.nl.wms.sch.manage.TaskStatusEnum; +//import org.nl.wms.sch.tasks.AcsTaskDto; +//import org.nl.wms.util.IdUtil; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +// +//import java.util.ArrayList; +//import java.util.List; +// +///** +// * @Author: lyd +// * @Description: 油漆线缓存区自动叫料 +// * @Date: 2023/2/25 +// */ +//@Service +//@RequiredArgsConstructor +//@Slf4j +//public class YqxhcqCallMaterialTask extends AbstractAcsTask { +// private final String THIS_CLASS = YqxhcqCallMaterialTask.class.getName(); +// @Override +// public List addTask() { +// /* +// * 下发给ACS时需要特殊处理 +// */ +// JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); +// +// ArrayList acsTaskArr = new ArrayList<>(); +// for (int i = 0; i < arr.size(); i++) { +// JSONObject json = arr.getJSONObject(i); +// //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) +// String point_code = json.getString("point_code1"); +// if (ObjectUtil.isEmpty(point_code)) { +// // 证明是等待点 +// point_code = json.getString("point_code3"); +// } +// String newPoint = point_code.substring(0, 4) + "2" + point_code.substring(4, 10); +// +// AcsTaskDto dto = AcsTaskDto.builder() +// .task_id(json.getString("task_id")) +// .task_code(json.getString("task_code")) +// .task_type(json.getString("acs_task_type")) +// .start_device_code(newPoint) +// .next_device_code(json.getString("point_code2")) +// .vehicle_code(json.getString("vehicle_code")) +// .vehicle_type(json.getString("vehicle_type")) +// .priority(json.getString("priority")) +// .remark(json.getString("remark")) +// .build(); +// acsTaskArr.add(dto); +// } +// return acsTaskArr; +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void updateTaskStatus(JSONObject task, String status) { +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); +// WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); +// +// String task_id = task.getString("task_id"); +// JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); +// // 物料点 +// JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); +// //任务取消 +// if (StrUtil.equals(status, "0")) { +// // 取消删除任务 +// if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { +// throw new BadRequestException("已完成不能取消!"); +// } +// taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); +// taskObj.put("remark", "已取消"); +// taskTab.update(taskObj); +// +// if (ObjectUtil.isEmpty(material_point)) return; +// // 点位解锁 +// material_point.put("lock_type", "1"); +// pointTab.update(material_point); +// } +// +// if ("1".equals(status)) { +// // 更新任务状态为执行中 +// taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); +// taskObj.put("update_time", DateUtil.now()); +// taskObj.put("car_no", taskObj.getString("car_no")); +// taskTab.update(taskObj); +// } +// +// if (StrUtil.equals(status, "2")) { +// //完成后 +// // 物料点位解锁 并设置空位 +// material_point.put("lock_type", "1"); +// material_point.put("point_status", "1"); +// material_point.put("material_id", ""); +// material_point.put("vehicle_type", ""); +// material_point.put("vehicle_code", ""); +// pointTab.update(material_point); +// +// // 油漆线缓存点位更新 +// JSONObject yqx_point = pointTab.query("point_code = '" + taskObj.getString("point_code2") + "'").uniqueResult(0); +// yqx_point.put("point_status", "3"); +// yqx_point.put("material_id", taskObj.getString("material_id")); +// yqx_point.put("vehicle_type", taskObj.getString("vehicle_type")); +// yqx_point.put("material_qty", taskObj.getString("material_qty")); +// yqx_point.put("vehicle_qty", taskObj.getString("vehicle_qty")); +// pointTab.update(yqx_point); +// +// // 更改任务状态为完成 +// taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); +// taskObj.put("update_time", DateUtil.now()); +// taskObj.put("remark", "任务完成"); +// taskTab.update(taskObj); +// +// if (ObjectUtil.isEmpty(material_point)) return; +// +// //区域出入表【st_ivt_regionIO】 +// WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); +// JSONObject regionIoObj = new JSONObject(); +// regionIoObj.put("iostorinv_id", IdUtil.getLongId()); +// regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); +// regionIoObj.put("buss_date", DateUtil.today()); +// regionIoObj.put("io_type", "2"); +// regionIoObj.put("region_id", material_point.getString("region_id")); +// regionIoObj.put("region_code", material_point.getString("region_code")); +// regionIoObj.put("region_name", material_point.getString("region_name")); +// regionIoObj.put("material_id", taskObj.getString("material_id")); +// regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); +// regionIoObj.put("qty", taskObj.getString("material_qty")); +// regionIoObj.put("bill_status", "3"); +// regionIoObj.put("start_point_code", taskObj.getString("point_code1")); +// regionIoObj.put("end_point_code", taskObj.getString("point_code2")); +// regionIoObj.put("create_mode", "2"); +// regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); +// regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); +// regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); +// regionIoObj.put("create_time", DateUtil.now()); +// regionIoTab.insert(regionIoObj); +// } +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void autoCreate() { +// // 自动叫料 +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); +// WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); +// // 找终点:四个缓存区按顺序获取一个 +// JSONObject endPoint = WQL.getWO("YQX_AUTOTASK").addParamMap(MapOf.of("flag","1")).process().uniqueResult(0); +// if (ObjectUtil.isEmpty(endPoint)) return; +// String point_code2 = endPoint.getString("point_code"); +// // 判断任务 +// JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); +// if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务"); +// // 判断工单 +// JSONObject workOrderObj = workOrderTab.query("device_code = '" + endPoint.getString("device_code") + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); +// if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); +// // 创建任务 +// SchTaskDto dto = SchTaskDto.builder() +// .task_id(IdUtil.getLongId()) +// .task_code(CodeUtil.getNewCode("TASK_CODE")) +// .task_type("task_type") +// .task_name("油漆线叫料") +// .acs_task_type("2")//2楼AGV普通任务 +// .priority("7") +// .task_status(TaskStatusEnum.SURE_END.getCode()) +// .point_code2(point_code2) +// .vehicle_qty(1) +// .material_info_id(workOrderObj.getLong("workorder_id")) +// .material_id(workOrderObj.getLong("material_id")) +// .vehicle_type(workOrderObj.getString("vehicle_type")) +// .handle_class(THIS_CLASS) +// .create_time(DateUtil.now()) +// .remark("任务创建成功") +// .build(); +// JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); +// taskTab.insert(json); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public void findStartPoint() { +// // 到养生A区找起点:根据物料、载具类型去查找,均在工单中 +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 +// WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 +// JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); +// for (int i = 0; i < taskArr.size(); i++) { +// JSONObject taskObj = taskArr.getJSONObject(i); +// String material_id = taskObj.getString("material_id"); +// String vehicle_type = taskObj.getString("vehicle_type"); +// JSONObject queryParam = new JSONObject(); +// queryParam.put("flag", "1"); +// queryParam.put("material_id", material_id); +// queryParam.put("region_code", "YSQA01"); +// queryParam.put("vehicle_type", vehicle_type ); +// // 查找养生A区,如果最后一个位置有货,直接搬走,如果没货,就作为等待点。先让agv到达等待点 +// // 1、根据物料id查找养生A区物料点 +// JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(queryParam).process().uniqueResult(0); +// if (ObjectUtil.isNotEmpty(materialPoint)) { +// // 2、判断是否在等待点,如果不是,先去等待点,是直接搬运 +// // 2.1、获取当前快排列的等待点 row:排 +// JSONObject waitPoint = WQL.getWO("QSCH_yqxCallMAterial_01") +// .addParamMap(MapOf.of("flag", "2", "block_num", materialPoint.getString("block_num"), +// "row_num", materialPoint.getString("row_num"), +// "region_code", "YSQA01")).process() +// .uniqueResult(0); +// if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("油漆线缓存区判断等待点异常!"); +// // 2.2、判断等待点 +// if (!waitPoint.getString("waitcol").equals(materialPoint.getString("col_num"))) { +// // 获取等待点 +// JSONObject waitPoints = pointTab.query("block_num = '" + materialPoint.getString("block_num") + "' " + +// "AND row_num = '" + materialPoint.getString("row_num") + "' " + +// "AND col_num = '" + waitPoint.getString("waitcol") + "' " + +// "AND is_used = '1' " + +// "AND is_delete = '0' " + +// "AND lock_type = '1' " + +// "AND region_code = 'YSQA01'").uniqueResult(0); +// if (ObjectUtil.isEmpty(waitPoints)) { +// taskObj.put("remark", "等待点已被占用"); +// taskObj.put("update_time", DateUtil.now()); +// taskTab.update(taskObj); +// continue; +// } +// // 等待点上锁 +//// waitPoints.put("lock_type", "2"); +// pointTab.update(waitPoints); +// +// taskObj.put("point_code3", waitPoints.getString("point_code")); +// taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); +// taskObj.put("acs_task_type", "3"); +// taskObj.put("remark", "等待点"); +// taskObj.put("update_time", DateUtil.now()); +// taskTab.update(taskObj); +// continue; +// } +// // 是等待点直接搬走 +// // 物料点位上锁 +// materialPoint.put("lock_type", "2"); +// pointTab.update(materialPoint); +// +// taskObj.put("point_code1", materialPoint.getString("point_code")); +// taskObj.put("material_qty", materialPoint.getString("ivt_qty")); +// taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); +// taskObj.put("acs_task_type", "2"); +// taskObj.put("remark", "等待点搬运物料"); +// taskObj.put("update_time", DateUtil.now()); +// taskTab.update(taskObj); +// } else { +// taskObj.put("remark", "养生A区无所需物料"); +// taskObj.put("update_time", DateUtil.now()); +// taskTab.update(taskObj); +// } +// +// } +// } +// +// @Override +// public String createTask(JSONObject whereJson) { +// return null; +// } +// +// @Override +// public void forceFinish(String task_id) { +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); +// JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); +// if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("未找到该任务或者任务已完成!"); +// this.updateTaskStatus(taskObj,"2"); +// } +// +// @Override +// public void cancel(String task_id) { +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); +// JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); +// if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("任务已完成不能取消!"); +// this.updateTaskStatus(taskObj,"0"); +// } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public String againApply(String task_id) { +// // 二次下发任务 +// WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 +// WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 +// JSONObject hcTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(hcTask)) throw new BadRequestException("任务ID: " + task_id + "的任务不存在!"); +// JSONObject waitPoint = pointTab.query("point_code = '" + hcTask.getString("point_code3") + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("油漆线二次下发等待点编码错误!"); +// JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(MapOf.of( +// "flag", "3", "material_id", hcTask.getString("material_id"), +// "region_code", "YSQA01", "vehicle_type", hcTask.getString("vehicle_type"), +// "block_num", hcTask.getString("block_num"), "col_num", hcTask.getString("col_num") +// )).process().uniqueResult(0); +// if (ObjectUtil.isEmpty(materialPoint)) throw new BadRequestException("养生A区暂无所需物料!"); +// String pointCode = materialPoint.getString("point_code"); +// // 修改任务 +// hcTask.put("point_code1", pointCode); +// hcTask.put("remark", "养生A区:" + pointCode); +// taskTab.update(hcTask); +// // 锁住点位 +// materialPoint.put("lock_type", "2"); +// pointTab.update(materialPoint); +// // 点位处理 +// //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1)2812 +// String newPoint = pointCode.substring(0, 4) + "2" + pointCode.substring(4, 10); +// return newPoint; +// } +//} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java index 1955215..fdd40bd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/GjxCallEmpVehicleTask.java @@ -10,7 +10,6 @@ import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -38,7 +37,6 @@ import java.util.Map; public class GjxCallEmpVehicleTask extends AbstractAcsTask { private final String THIS_CLASS = GjxCallEmpVehicleTask.class.getName(); - @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { @@ -47,7 +45,6 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { String task_id = taskObj.getString("task_id"); JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - if (StrUtil.equals(status, "0")) { /* * 取消删除 @@ -61,6 +58,13 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { String point_code1 = jsonTask.getString("point_code1"); String point_code2 = jsonTask.getString("point_code2"); + if (ObjectUtil.isEmpty(point_code1)) { + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + return; + } + JSONObject jsonEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); // 终点在叠盘架 if (StrUtil.equals(jsonEnd.getString("region_id"), RegionTypeEnum.DPJQB.getId())) { @@ -117,7 +121,12 @@ public class GjxCallEmpVehicleTask extends AbstractAcsTask { // 判断终点在哪里 String point_code1 = jsonTask.getString("point_code1"); String point_code2 = jsonTask.getString("point_code2"); - + if (ObjectUtil.isEmpty(point_code1)) { + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + return; + } JSONObject jsonEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); // 终点在叠盘架 if (StrUtil.equals(jsonEnd.getString("region_id"), RegionTypeEnum.DPJQB.getId())) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java index e58795c..a138fa0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YqxCallMaterialTask.java @@ -8,16 +8,20 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.config.MapOf; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.WmsToMesService; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; import org.nl.wms.util.IdUtil; +import org.slf4j.MDC; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,10 +38,10 @@ import java.util.List; public class YqxCallMaterialTask extends AbstractAcsTask { private final String THIS_CLASS = YqxCallMaterialTask.class.getName(); - @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject task, String status) { + WmsToMesService wmsToMesService = SpringContextHolder.getBean(WmsToMesService.class); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); @@ -45,6 +49,8 @@ public class YqxCallMaterialTask extends AbstractAcsTask { JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); // 物料点 JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); + JSONObject feedback = new JSONObject(); + feedback.put("task_code", taskObj.getString("task_code")); //任务取消 if (StrUtil.equals(status, "0")) { // 取消删除任务 @@ -53,13 +59,11 @@ public class YqxCallMaterialTask extends AbstractAcsTask { } taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("remark", "已取消"); - taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); - // 点位解锁 if (ObjectUtil.isEmpty(material_point)) return; + // 点位解锁 material_point.put("lock_type", "1"); - material_point.put("update_time", DateUtil.now()); pointTab.update(material_point); } @@ -69,15 +73,35 @@ public class YqxCallMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskObj.put("car_no", taskObj.getString("car_no")); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + feedback.put("struct_code", taskObj.getString("point_code1")); + wmsToMesService.taskFeedback(feedback); } if (StrUtil.equals(status, "2")) { + //完成后 + // 物料点位解锁 并设置空位 + material_point.put("lock_type", "1"); + material_point.put("point_status", "1"); + material_point.put("material_id", ""); + material_point.put("vehicle_type", ""); + material_point.put("vehicle_code", ""); + pointTab.update(material_point); + // 更改任务状态为完成 taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "任务完成"); taskTab.update(taskObj); -// JSONObject requestObj = task.getJSONObject("request_param"); + // 通知mes + feedback.put("task_status", TaskStatusEnum.FINISHED.getCode()); + feedback.put("struct_code", taskObj.getString("point_code1")); + wmsToMesService.taskFeedback(feedback); + + + if (ObjectUtil.isEmpty(material_point)) return; //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); @@ -101,26 +125,14 @@ public class YqxCallMaterialTask extends AbstractAcsTask { regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); regionIoObj.put("create_time", DateUtil.now()); regionIoTab.insert(regionIoObj); - - //完成后 - // 物料点位解锁 并设置空位 - if (ObjectUtil.isEmpty(material_point)) return; - material_point.put("lock_type", "1"); - material_point.put("point_status", "1"); - material_point.put("material_id", ""); - material_point.put("vehicle_type", ""); - material_point.put("vehicle_code", ""); - material_point.put("update_time", DateUtil.now()); - pointTab.update(material_point); } } @Override public void findStartPoint() { - /* - * 根据业务找对应的起点 - */ + MDC.put("log_file_type", "YqxCallMaterial"); + // 到养生A区找起点:根据物料、载具类型去查找,均在工单中 WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); @@ -128,28 +140,76 @@ public class YqxCallMaterialTask extends AbstractAcsTask { JSONObject taskObj = taskArr.getJSONObject(i); String material_id = taskObj.getString("material_id"); String vehicle_type = taskObj.getString("vehicle_type"); - // 直接到缓存区获取物料 - JSONObject material_point = pointTab.query("region_code = 'YQXHCQ' AND material_id = '" + material_id + "' " + - "AND vehicle_type = '" + vehicle_type + "' AND is_used = '1' AND lock_type = '1' AND is_delete = '0'", "point_code").uniqueResult(0); - if (ObjectUtil.isNotEmpty(material_point)) { - // 拿到点位 - material_point.put("lock_type", "2"); - pointTab.update(material_point); + JSONObject queryParam = new JSONObject(); + queryParam.put("flag", "1"); + queryParam.put("material_id", material_id); + queryParam.put("region_code", "YSQA01"); + queryParam.put("vehicle_type", vehicle_type ); + // 查找养生A区,如果最后一个位置有货,直接搬走,如果没货,就作为等待点。先让agv到达等待点 + // 1、根据物料id查找养生A区物料点 + JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(queryParam).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(materialPoint)) { + // 2、判断是否在等待点,如果不是,先去等待点,是就直接搬运 + // 2.1、获取当前快排列的等待点 row:排 + JSONObject waitPoint = WQL.getWO("QSCH_yqxCallMAterial_01") + .addParamMap(MapOf.of("flag", "2", "block_num", materialPoint.getString("block_num"), + "row_num", materialPoint.getString("row_num"), + "region_code", "YSQA01")).process() + .uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoint)) { + log.error("油漆线缓存区判断等待点异常!"); + throw new BadRequestException("油漆线缓存区判断等待点异常!"); + } + // 2.2、判断等待点 + if (!waitPoint.getString("waitcol").equals(materialPoint.getString("col_num"))) { + // 获取等待点 + JSONObject waitPoints = pointTab.query("block_num = '" + materialPoint.getString("block_num") + "' " + + "AND row_num = '" + materialPoint.getString("row_num") + "' " + + "AND col_num = '" + waitPoint.getString("waitcol") + "' " + + "AND is_used = '1' " + + "AND is_delete = '0' " + + "AND lock_type = '1' " + + "AND region_code = 'YSQA01'").uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoints)) { + log.info("等待点已被占用"); + taskObj.put("remark", "等待点已被占用"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + // 等待点上锁 +// waitPoints.put("lock_type", "2"); + pointTab.update(waitPoints); - taskObj.put("point_code1", material_point.getString("point_code")); - taskObj.put("material_qty", material_point.getString("ivt_qty")); + taskObj.put("point_code3", waitPoints.getString("point_code")); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("acs_task_type", "3"); + taskObj.put("remark", "等待点"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + // 是等待点直接搬走 + // 物料点位上锁 + materialPoint.put("lock_type", "2"); + pointTab.update(materialPoint); + log.info("等待点搬运物料"); + taskObj.put("point_code1", materialPoint.getString("point_code")); + taskObj.put("material_qty", materialPoint.getString("ivt_qty")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskObj.put("acs_task_type", "2"); - taskObj.put("remark", ""); + taskObj.put("remark", "等待点搬运物料"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } else { - taskObj.put("remark", "油漆线缓存区无所需物料"); + log.info("养生A区无所需物料"); + taskObj.put("remark", "养生A区无所需物料"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } } + MDC.remove("log_file_type"); } @Override @@ -163,14 +223,18 @@ public class YqxCallMaterialTask extends AbstractAcsTask { for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) - String point_code =json.getString("point_code1"); -// String newPoint = point_code.substring(0, 4) + "2" + point_code.substring(4, 10); + String point_code = json.getString("point_code1"); + if (ObjectUtil.isEmpty(point_code)) { + // 证明是等待点 + point_code = json.getString("point_code3"); + } + String newPoint = point_code.substring(0, 4) + "2" + point_code.substring(4, 10); AcsTaskDto dto = AcsTaskDto.builder() .task_id(json.getString("task_id")) .task_code(json.getString("task_code")) .task_type(json.getString("acs_task_type")) - .start_device_code(point_code) + .start_device_code(newPoint) .next_device_code(json.getString("point_code2")) .vehicle_code(json.getString("vehicle_code")) .vehicle_type(json.getString("vehicle_type")) @@ -185,7 +249,10 @@ public class YqxCallMaterialTask extends AbstractAcsTask { @Override public String createTask(JSONObject whereJson) { String point_code2 = whereJson.getString("point_code2"); - + String task_code = CodeUtil.getNewCode("TASK_CODE"); + if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) { + task_code = whereJson.getString("task_code"); + } //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); //任务表【SCH_BASE_Task】 @@ -201,7 +268,7 @@ public class YqxCallMaterialTask extends AbstractAcsTask { SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_code(task_code) .task_type("task_type") .task_name("油漆线叫料") .acs_task_type("2")//2楼AGV普通任务 @@ -239,4 +306,36 @@ public class YqxCallMaterialTask extends AbstractAcsTask { if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("任务已完成不能取消!"); this.updateTaskStatus(taskObj,"0"); } + + @Override + @Transactional(rollbackFor = Exception.class) + public String againApply(String task_id) { + // 二次下发任务 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + JSONObject hcTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(hcTask)) throw new BadRequestException("任务ID: " + task_id + "的任务不存在!"); + JSONObject waitPoint = pointTab.query("point_code = '" + hcTask.getString("point_code3") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(waitPoint)) throw new BadRequestException("油漆线二次下发等待点编码错误!"); + JSONObject materialPoint = WQL.getWO("QSCH_yqxCallMAterial_01").addParamMap(MapOf.of( + "flag", "3", "material_id", hcTask.getString("material_id"), + "region_code", "YSQA01", "vehicle_type", hcTask.getString("vehicle_type"), + "block_num", waitPoint.getString("block_num"), "row_num", waitPoint.getString("row_num") + )).process().uniqueResult(0); + if (ObjectUtil.isEmpty(materialPoint)) { + throw new BadRequestException("养生A区暂无所需物料!"); // 此时车会停止 + } + String pointCode = materialPoint.getString("point_code"); + // 修改任务 + hcTask.put("point_code1", pointCode); + hcTask.put("remark", "养生A区:" + pointCode); + taskTab.update(hcTask); + // 锁住点位 + materialPoint.put("lock_type", "2"); + pointTab.update(materialPoint); + // 点位处理 + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1)2812 + String newPoint = pointCode.substring(0, 4) + "2" + pointCode.substring(4, 10); + return newPoint; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/backup.txt b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/backup.txt new file mode 100644 index 0000000..e58795c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/backup.txt @@ -0,0 +1,242 @@ +package org.nl.wms.sch.tasks.callMaterial; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.SchTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.util.IdUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + + +/** + *油漆线叫料 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class YqxCallMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = YqxCallMaterialTask.class.getName(); + + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject task, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + + String task_id = task.getString("task_id"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + // 物料点 + JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); + //任务取消 + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + throw new BadRequestException("已完成不能取消!"); + } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("remark", "已取消"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + + // 点位解锁 + if (ObjectUtil.isEmpty(material_point)) return; + material_point.put("lock_type", "1"); + material_point.put("update_time", DateUtil.now()); + pointTab.update(material_point); + } + + if ("1".equals(status)) { + // 更新任务状态为执行中 + taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("car_no", taskObj.getString("car_no")); + taskTab.update(taskObj); + } + + if (StrUtil.equals(status, "2")) { + // 更改任务状态为完成 + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + +// JSONObject requestObj = task.getJSONObject("request_param"); + + //区域出入表【st_ivt_regionIO】 + WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); + JSONObject regionIoObj = new JSONObject(); + regionIoObj.put("iostorinv_id", IdUtil.getLongId()); + regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE")); + regionIoObj.put("buss_date", DateUtil.today()); + regionIoObj.put("io_type", "2"); + regionIoObj.put("region_id", material_point.getString("region_id")); + regionIoObj.put("region_code", material_point.getString("region_code")); + regionIoObj.put("region_name", material_point.getString("region_name")); + regionIoObj.put("material_id", taskObj.getString("material_id")); + regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); + regionIoObj.put("qty", taskObj.getString("material_qty")); + regionIoObj.put("bill_status", "3"); + regionIoObj.put("start_point_code", taskObj.getString("point_code1")); + regionIoObj.put("end_point_code", taskObj.getString("point_code2")); + regionIoObj.put("create_mode", "2"); + regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); + regionIoObj.put("create_id", SecurityUtils.getCurrentUserId()); + regionIoObj.put("create_name", SecurityUtils.getCurrentNickName()); + regionIoObj.put("create_time", DateUtil.now()); + regionIoTab.insert(regionIoObj); + + //完成后 + // 物料点位解锁 并设置空位 + if (ObjectUtil.isEmpty(material_point)) return; + material_point.put("lock_type", "1"); + material_point.put("point_status", "1"); + material_point.put("material_id", ""); + material_point.put("vehicle_type", ""); + material_point.put("vehicle_code", ""); + material_point.put("update_time", DateUtil.now()); + pointTab.update(material_point); + } + + } + + @Override + public void findStartPoint() { + /* + * 根据业务找对应的起点 + */ + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject taskObj = taskArr.getJSONObject(i); + String material_id = taskObj.getString("material_id"); + String vehicle_type = taskObj.getString("vehicle_type"); + // 直接到缓存区获取物料 + JSONObject material_point = pointTab.query("region_code = 'YQXHCQ' AND material_id = '" + material_id + "' " + + "AND vehicle_type = '" + vehicle_type + "' AND is_used = '1' AND lock_type = '1' AND is_delete = '0'", "point_code").uniqueResult(0); + if (ObjectUtil.isNotEmpty(material_point)) { + // 拿到点位 + material_point.put("lock_type", "2"); + pointTab.update(material_point); + + taskObj.put("point_code1", material_point.getString("point_code")); + taskObj.put("material_qty", material_point.getString("ivt_qty")); + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("acs_task_type", "2"); + taskObj.put("remark", ""); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } else { + taskObj.put("remark", "油漆线缓存区无所需物料"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + } + + } + } + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + //养生A区发给ACS需要新的点位(2101-03-1----->21011-03-1) + String point_code =json.getString("point_code1"); +// String newPoint = point_code.substring(0, 4) + "2" + point_code.substring(4, 10); + + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(point_code) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; + } + + @Override + public String createTask(JSONObject whereJson) { + String point_code2 = whereJson.getString("point_code2"); + + //生产工单表【PDM_BD_WorkOrder】 + WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); + //任务表【SCH_BASE_Task】 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务"); + //点位基础表【SCH_BASE_Point】 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code"); + JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); + if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); + + SchTaskDto dto = SchTaskDto.builder() + .task_id(IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("task_type") + .task_name("油漆线叫料") + .acs_task_type("2")//2楼AGV普通任务 + .priority("8") + .task_status(TaskStatusEnum.SURE_END.getCode()) + .point_code2(point_code2) + .material_info_id(workOrderObj.getLong("workorder_id")) + .material_id(workOrderObj.getLong("material_id")) + .vehicle_type(workOrderObj.getString("vehicle_type")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .request_param(whereJson.toJSONString()) + .build(); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + + //创建好立即下发 + this.immediateNotifyAcs(); + return String.valueOf(dto.getTask_id()); + } + + @Override + public void forceFinish(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("未找到该任务或者任务已完成!"); + this.updateTaskStatus(taskObj,"2"); + } + + + @Override + public void cancel(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isEmpty(taskObj)) throw new BadRequestException("任务已完成不能取消!"); + this.updateTaskStatus(taskObj,"0"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yqxCallMAterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yqxCallMAterial_01.wql index 5cbe9de..1b34b35 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yqxCallMAterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yqxCallMAterial_01.wql @@ -106,8 +106,8 @@ SCH_BASE_Point p WHERE p.is_used = '1' - AND is_delete = '0' - AND lock_type='1' + AND p.is_delete = '0' + AND p.lock_type='1' OPTION 输入.material_id <> "" p.material_id = 输入.material_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java index 92dbc1f..894850e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java @@ -13,10 +13,13 @@ import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.WmsToMesService; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.tasks.utils.PointUpdateUtil; import org.nl.wms.util.IdUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,13 +41,15 @@ public class CpOutTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject task, String status) { + WmsToMesService wmsToMesService = SpringContextHolder.getBean(WmsToMesService.class); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - + JSONObject requestParam = JSONObject.parseObject(taskObj.getString("request_param")); + JSONObject feedback = new JSONObject(); + feedback.put("task_code", taskObj.getString("task_code")); //任务取消 if (StrUtil.equals(status, "0")) { // 取消删除任务 @@ -76,6 +81,10 @@ public class CpOutTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskObj.put("car_no", taskObj.getString("car_no")); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); } if (StrUtil.equals(status, "2")) { @@ -84,40 +93,32 @@ public class CpOutTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.FINISHED.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); + // 任务表的点位1:成品库区点 String point_code1 = taskObj.getString("point_code1"); // 起点编码 JSONObject point1Obj = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);// 起点 - //table_fk_id = 单据id - JSONObject regionIoObject = regionIoTab.query("iostorinv_id = '" + taskObj.getString("table_fk_id") + "'").uniqueResult(0); - String point_code2 = taskObj.getString("point_code2"); // 终点编码:出库点位 JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);// 终点 - // 修改区域出入库 - 起点点位解锁、点位状态更新 - 终点上锁、更新状态 - //区域出入表【st_ivt_regionIO】 - regionIoObject.put("end_point_code", point_code2); - regionIoObject.put("start_region_id", point1Obj.getString("region_id")); // 起点区域 - regionIoObject.put("end_region_id", point2Obj.getString("region_id")); // 终点区域 - regionIoObject.put("bill_status", "3"); // 单据状态 - regionIoObject.put("task_id", task_id); // 任务id - regionIoObject.put("update_optid", SecurityUtils.getCurrentUserId()); - regionIoObject.put("update_optname", SecurityUtils.getCurrentNickName()); - regionIoObject.put("update_time", DateUtil.now()); - regionIoTab.update(regionIoObject); - //完成后修改点位 // 点位解锁 并设置空位 // 货位点 - point2Obj.put("lock_type", "2"); - point2Obj.put("point_status", "3"); - point2Obj.put("material_id", point1Obj.getString("material_id")); - point2Obj.put("pcsn", point1Obj.getString("pcsn")); - point2Obj.put("ivt_qty", point1Obj.getString("ivt_qty")); - point2Obj.put("instorage_time", point1Obj.getString("instorage_time")); - point2Obj.put("vehicle_type", point1Obj.getString("vehicle_type")); - point2Obj.put("vehicle_code", point1Obj.getString("vehicle_code")); - point2Obj.put("standing_time", point1Obj.getString("standing_time")); + if (ObjectUtil.isNotEmpty(point2Obj)) { + point2Obj.put("lock_type", "1"); + point2Obj.put("point_status", "3"); + point2Obj.put("material_id", point1Obj.getString("material_id")); + point2Obj.put("pcsn", requestParam.getString("out_store_order")); + point2Obj.put("ivt_qty", point1Obj.getString("ivt_qty")); + point2Obj.put("instorage_time", DateUtil.now()); + point2Obj.put("vehicle_type", point1Obj.getString("vehicle_type")); + point2Obj.put("vehicle_code", point1Obj.getString("vehicle_code")); + point2Obj.put("update_time", DateUtil.now()); + } // 起点 point1Obj.put("lock_type", "1"); point1Obj.put("point_status", "1"); @@ -128,6 +129,7 @@ public class CpOutTask extends AbstractAcsTask { point1Obj.put("vehicle_type", ""); point1Obj.put("vehicle_code", ""); point1Obj.put("standing_time", 0); + point1Obj.put("update_time", DateUtil.now()); pointTab.update(point1Obj); pointTab.update(point2Obj); @@ -145,11 +147,10 @@ public class CpOutTask extends AbstractAcsTask { JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); for (int i = 0; i < taskArr.size(); i++) { JSONObject taskObj = taskArr.getJSONObject(i); - String material_id = taskObj.getString("material_id"); + JSONObject requestParam = JSONObject.parseObject(taskObj.getString("request_param")); JSONObject param1 = new JSONObject(); param1.put("flag", "1"); - param1.put("material_id", material_id); - param1.put("region_code", "CPCKQ01"); + param1.put("region_code", requestParam.getString("end_area_code")); //1、找空位的终点 JSONObject endPoint = WQL.getWO("QSCH_cpOut_01").addParamMap(param1).process().uniqueResult(0); if (ObjectUtil.isNotEmpty(endPoint)) { @@ -161,15 +162,14 @@ public class CpOutTask extends AbstractAcsTask { //锁住终点 endPoint.put("task_id", taskObj.getString("task_id")); + taskObj.put("remark", ""); endPoint.put("lock_type", "2"); pointTab.update(endPoint); } else { taskObj.put("remark", "成品出库区无可用货位"); taskObj.put("update_time", DateUtil.now()); } - taskTab.update(taskObj); - } } @@ -202,19 +202,27 @@ public class CpOutTask extends AbstractAcsTask { @Override public String createTask(JSONObject whereJson) { WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - - String point_code1 = whereJson.getString("point_code1"); // 起点 + WQLObject materialTab = WQLObject.getWQLObject("md_me_materialbase"); + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + String point_code1 = whereJson.getString("start_struct_code"); // 起点 String vehicle_code = whereJson.getString("vehicle_code"); - String iostorinv_id = whereJson.getString("iostorinv_id"); - String material_id = whereJson.getString("material_id"); + JSONObject materialCode = materialTab.query("material_code = '" + whereJson.getString("material_code") + "'").uniqueResult(0); + String material_id = materialCode.getString("material_id"); + String taskCode = CodeUtil.getNewCode("TASK_CODE"); + if (ObjectUtil.isNotEmpty(whereJson.get("task_code"))) { + taskCode = whereJson.getString("task_code"); + } + // 校验任务 + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务"); JSONObject point = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); String vehicle_type = point.getString("vehicle_type"); SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_code(taskCode) .task_type("task_type") .task_name("成品区出库") .task_status(TaskStatusEnum.SURE_END.getCode()) @@ -225,23 +233,10 @@ public class CpOutTask extends AbstractAcsTask { .material_id(Long.valueOf(material_id)) .create_time(DateUtil.now()) .request_param(whereJson.toJSONString()) - .table_name("st_ivt_regionIO") - .table_fk("iostorinv_id") - .table_fk_id(Long.valueOf(iostorinv_id)) .build(); - //任务表【SCH_BASE_Task】 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); taskTab.insert(json); - // 单据设置执行中 - JSONObject iostorinv = regionIoTab.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - iostorinv.put("bill_status", "2"); - iostorinv.put("update_optid", SecurityUtils.getCurrentUserId()); - iostorinv.put("update_optname", SecurityUtils.getCurrentNickName()); - iostorinv.put("update_time", DateUtil.now()); - regionIoTab.update(iostorinv); - //创建好立即下发 this.immediateNotifyAcs(); return String.valueOf(dto.getTask_id()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java index 0891f3a..2e3e4ef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/HtSendEmpVehicleTask.java @@ -209,12 +209,6 @@ public class HtSendEmpVehicleTask extends AbstractAcsTask { for (int i = 0; i < taskArr.size(); i++) { JSONObject jsonTask = taskArr.getJSONObject(i); String pointCode1 = jsonTask.getString("point_code1"); - JSONObject jsonObject = pointTab.query("point_code = '" + pointCode1 + "'").uniqueResult(0); - if (jsonObject.getString("lock_type").equals("2")) { // 查看是否被锁住 - jsonTask.put("remark", "货梯已被锁住!"); - taskTab.update(jsonTask); - continue; - } String point_code_ht = ""; // 查找组盘信息 JSONObject groupObj = groupTab.query("vehicle_code = '" + jsonTask.getString("vehicle_code") + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BZXSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BZXSendMaterialTask.java new file mode 100644 index 0000000..9482f8b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BZXSendMaterialTask.java @@ -0,0 +1,199 @@ +package org.nl.wms.sch.tasks.sendMaterial; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.SchTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.util.IdUtil; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: 包装入库->成品区 + * @Date: 2023/6/25 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class BZXSendMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = BZXSendMaterialTask.class.getName(); + @Override + public List addTask() { + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; + } + + @Override + public void updateTaskStatus(JSONObject task, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + String task_id = task.getString("task_id"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String point_code2 = taskObj.getString("point_code2"); + JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + //任务取消 + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + throw new BadRequestException("已完成不能取消!"); + } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("remark", "已取消"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + if (ObjectUtil.isEmpty(endPoint)) return; + endPoint.put("lock_type", "1"); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + + if ("1".equals(status)) { + // 更新任务状态为执行中 + taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("car_no", taskObj.getString("car_no")); + taskTab.update(taskObj); + } + + if (StrUtil.equals(status, "2")) { + // 更改任务状态为完成 + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "任务执行完成"); + taskTab.update(taskObj); + if (ObjectUtil.isNotEmpty(endPoint)) { + // 终点解锁并赋值 + endPoint.put("lock_type", "1"); + endPoint.put("point_status", "3"); + endPoint.put("material_id", taskObj.getString("material_id")); + endPoint.put("vehicle_type", taskObj.getString("vehicle_type")); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + } + } + + @Override + public String createTask(JSONObject whereJson) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + String startPointCode = whereJson.getString("point_code1"); + String taskId = whereJson.getString("task_id"); + // 根据上个任务的载具类型寻找起点 + JSONObject taskObj = taskTab.query("task_id = '" + taskId + "'").uniqueResult(0); + // 找起点 + if (taskObj.getString("vehicle_type").equals("4")) { + // 1.3选择第一位 + startPointCode = startPointCode + "01"; + } else { + startPointCode = startPointCode + "02"; + } + //判断当前点是否有未完成的任务 + JSONObject taskEntity = taskTab.query("is_delete='0' and point_code1 = '" + startPointCode + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskEntity)) throw new BadRequestException("当前点位" + startPointCode + "存在未完成的任务"); + // 创建任务 + SchTaskDto dto = SchTaskDto.builder() + .task_id(IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("task_type") + .task_name("包装输送线入库") + .task_status(TaskStatusEnum.SURE_START.getCode()) + .point_code1(startPointCode) + .acs_task_type("1")//1楼AGV普通任务 + .material_qty(taskObj.getString("material_qty")) + .material_id(taskObj.getLong("material_id")) + .vehicle_type(taskObj.getString("vehicle_type")) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .request_param(whereJson.toJSONString()) + .build(); + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + + //创建好立即下发 + this.immediateNotifyAcs(); + return String.valueOf(dto.getTask_id()); + } + + @Override + public void findNextPoint() { + // 从立库中查找一个空位 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' " + + "and task_status = '2'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject taskObj = taskArr.getJSONObject(i); + JSONObject pointObj = pointTab.query("region_code = 'CPQYA01' AND is_delete = '0' " + + "AND is_used = '1' AND lock_type = '1' AND point_status = '1'").uniqueResult(0); + if (ObjectUtil.isEmpty(pointObj)) { + taskObj.put("remark", "暂无可用的点位!"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("remark", ""); + taskObj.put("point_code2", pointObj.getString("point_code")); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + //锁住相关货位 + pointObj.put("lock_type", "2"); + pointTab.update(pointObj); + } + } + + @Override + public void forceFinish(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "2"); + } else { + throw new BadRequestException("任务已删除或者已完成!"); + } + + } + + @Override + public void cancel(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "0"); + } else { + throw new BadRequestException("任务已完成不能取消!"); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BzssxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BzssxSendMaterialTask.java new file mode 100644 index 0000000..6a41dad --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/BzssxSendMaterialTask.java @@ -0,0 +1,203 @@ +package org.nl.wms.sch.tasks.sendMaterial; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.SchTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.util.IdUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: 包装输送线送料 + * @Date: 2023/6/25 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class BzssxSendMaterialTask extends AbstractAcsTask { + private final String THIS_CLASS = BzssxSendMaterialTask.class.getName(); + @Override + public List addTask() { + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); + + ArrayList acsTaskArr = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + AcsTaskDto dto = AcsTaskDto.builder() + .task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code")) + .vehicle_type(json.getString("vehicle_type")) + .priority(json.getString("priority")) + .remark(json.getString("remark")) + .build(); + acsTaskArr.add(dto); + } + return acsTaskArr; + } + + @Override + public void updateTaskStatus(JSONObject task, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + WQLObject materialtaskgroupTab = WQLObject.getWQLObject("md_pb_materialtaskgroup"); + String task_id = task.getString("task_id"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); + String point_code2 = taskObj.getString("point_code2"); + JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); + //任务取消 + if (StrUtil.equals(status, "0")) { + // 取消删除任务 + if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { + throw new BadRequestException("已完成不能取消!"); + } + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("remark", "已取消"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + if (ObjectUtil.isEmpty(endPoint)) return; + endPoint.put("lock_type", "1"); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + + if ("1".equals(status)) { + // 更新任务状态为执行中 + taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("car_no", taskObj.getString("car_no")); + taskTab.update(taskObj); + // 终点解锁 + endPoint.put("lock_type", "1"); + endPoint.put("update_time", DateUtil.now()); + pointTab.update(endPoint); + } + + if (StrUtil.equals(status, "2")) { + // 更改任务状态为完成 + taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", "任务执行完成"); + taskTab.update(taskObj); + if (ObjectUtil.isNotEmpty(endPoint)) { + // 组盘 + JSONObject group = new JSONObject(); + group.put("task_material_id", cn.hutool.core.util.IdUtil.getSnowflake(1,1).nextIdStr()); + group.put("material_id", taskObj.getString("material_id")); + group.put("task_id", taskObj.getString("task_id")); + group.put("qty", taskObj.getString("material_qty")); + group.put("vehicle_type", taskObj.getString("vehicle_type")); + materialtaskgroupTab.insert(group); + } + } + } + + @Override + public String createTask(JSONObject whereJson) { + String point_code1 = whereJson.getString("point_code1"); + String vehicle_type = whereJson.getString("vehicle_type"); + Long materialId = whereJson.getLong("material_id"); + String qty = whereJson.getString("qty"); + + //任务表【SCH_BASE_Task】 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + //判断当前点是否有未完成的任务 + JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务"); + + SchTaskDto dto = SchTaskDto.builder() + .task_id(IdUtil.getLongId()) + .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_type("task_type") + .task_name("进入包装线") + .task_status(TaskStatusEnum.SURE_START.getCode()) + .point_code1(point_code1) + .acs_task_type("1")//1楼AGV普通任务 + .material_qty(qty) + .material_id(materialId) + .vehicle_type(vehicle_type) + .handle_class(THIS_CLASS) + .create_time(DateUtil.now()) + .request_param(whereJson.toJSONString()) + .build(); + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + taskTab.insert(json); + + //创建好立即下发 + this.immediateNotifyAcs(); + return String.valueOf(dto.getTask_id()); + } + + @Override + @Transactional + public void findNextPoint() { + //判断共挤线是否有执行中的任务,如果任务数>=3,则不生成任务 + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); + JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0); + for (int i = 0; i < taskArr.size(); i++) { + JSONObject taskObj = taskArr.getJSONObject(i); + // 找BZSSX04, 先查看是否锁住 + JSONObject point = pointTab.query("point_code = 'BZSSX1005' AND lock_type = '1' AND is_used = '1' AND is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + taskObj.put("remark", "暂无可用的点位!"); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + continue; + } + taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + taskObj.put("remark", ""); + taskObj.put("point_code2", point.getString("point_code")); + taskObj.put("update_time", DateUtil.now()); + taskTab.update(taskObj); + //锁住相关货位 + point.put("lock_type", "2"); + pointTab.update(point); + } + + } + + @Override + public void forceFinish(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "2"); + } else { + throw new BadRequestException("任务已删除或者已完成!"); + } + + } + + @Override + public void cancel(String task_id) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); + JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0); + if (ObjectUtil.isNotEmpty(taskObj)) { + this.updateTaskStatus(taskObj, "0"); + } else { + throw new BadRequestException("任务已完成不能取消!"); + } + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java index f6ab1b1..471540c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/GjxSendMaterialTask.java @@ -13,6 +13,8 @@ import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.WmsToMesService; import org.nl.wms.log.LokiLogType; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; @@ -45,7 +47,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject task, String status) { - + WmsToMesService wmsToMesService = SpringContextHolder.getBean(WmsToMesService.class); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); WQLObject orderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); @@ -53,6 +55,8 @@ public class GjxSendMaterialTask extends AbstractAcsTask { String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); String workOrderId = taskObj.getString("material_info_id"); + JSONObject feedback = new JSONObject(); + feedback.put("task_code", taskObj.getString("task_code")); //任务取消 if (StrUtil.equals(status, "0")) { // 取消删除任务 @@ -79,6 +83,10 @@ public class GjxSendMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskObj.put("car_no", taskObj.getString("car_no")); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); } if (StrUtil.equals(status, "2")) { @@ -121,6 +129,11 @@ public class GjxSendMaterialTask extends AbstractAcsTask { taskObj.put("remark", "任务执行完成"); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.FINISHED.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); + //区域出入表【st_ivt_regionIO】 WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); JSONObject regionIoObj = new JSONObject(); @@ -163,11 +176,10 @@ public class GjxSendMaterialTask extends AbstractAcsTask { String task_id = taskObj.getString("task_id"); String material_id = taskObj.getString("material_id"); String vehicle_type = taskObj.getString("vehicle_type"); - String workOrderId = taskObj.getString("material_info_id"); // 工单号 // 获取工单判断是去养生区还是货梯口 - JSONObject workOrder = orderTab.query("workorder_id = '" + workOrderId + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(workOrder)) throw new BadRequestException("工单不能为空"); - if (workOrder.getString("workorder_type").equals("1")) { // 机采去货梯扣 + JSONObject areaType = JSONObject.parseObject(taskObj.getString("request_param")); + if (ObjectUtil.isNotEmpty(areaType.getString("end_area_type")) + && areaType.getString("end_area_type").equals("1")) { // 机采去货梯扣 // 更新点位 JSONArray ssxArray = WQL.getWO("QSCH_yqxSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0); PointUpdateUtil.updatePoint(ssxArray); @@ -316,8 +328,12 @@ public class GjxSendMaterialTask extends AbstractAcsTask { public String createTask(JSONObject whereJson) { String point_code1 = whereJson.getString("point_code1"); String vehicle_code = whereJson.getString("vehicle_code"); + String vehicle_type = whereJson.getString("vehicle_type"); String qty = whereJson.getString("qty"); - + String task_code = CodeUtil.getNewCode("TASK_CODE"); + if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) { + task_code = whereJson.getString("task_code"); + } //生产工单表【PDM_BD_WorkOrder】 WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); //点位基础表【SCH_BASE_Point】 @@ -331,14 +347,13 @@ public class GjxSendMaterialTask extends AbstractAcsTask { String device_code = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0).getString("device_code"); - JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0); if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除"); SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_code(task_code) .task_type("task_type") .task_name("共挤线满料") .task_status(TaskStatusEnum.SURE_START.getCode()) @@ -348,7 +363,7 @@ public class GjxSendMaterialTask extends AbstractAcsTask { .material_qty(qty) .material_info_id(workOrderObj.getLong("workorder_id")) .material_id(workOrderObj.getLong("material_id")) - .vehicle_type(workOrderObj.getString("vehicle_type")) + .vehicle_type(vehicle_type) .handle_class(THIS_CLASS) .create_time(DateUtil.now()) .request_param(whereJson.toJSONString()) @@ -374,7 +389,6 @@ public class GjxSendMaterialTask extends AbstractAcsTask { } - @Override public void cancel(String task_id) { WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java index 2daff91..86a8b49 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HkxSendMaterialTask.java @@ -13,6 +13,8 @@ import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.mes.service.WmsToMesService; import org.nl.wms.sch.SchTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; @@ -39,12 +41,14 @@ public class HkxSendMaterialTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject task, String status) { + WmsToMesService wmsToMesService = SpringContextHolder.getBean(WmsToMesService.class); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); String task_id = task.getString("task_id"); JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - + JSONObject feedback = new JSONObject(); + feedback.put("task_code", taskObj.getString("task_code")); //任务取消 if (StrUtil.equals(status, "0")) { // 取消删除任务 @@ -69,6 +73,10 @@ public class HkxSendMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskObj.put("car_no", taskObj.getString("car_no")); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); } if (StrUtil.equals(status, "2")) { @@ -77,9 +85,14 @@ public class HkxSendMaterialTask extends AbstractAcsTask { taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); + // 通知mes + feedback.put("task_status", TaskStatusEnum.FINISHED.getCode()); + feedback.put("struct_code", taskObj.getString("point_code2")); + wmsToMesService.taskFeedback(feedback); + String point_code2 = taskObj.getString("point_code2"); JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = task.getJSONObject("request_param"); + JSONObject requestObj = JSONObject.parseObject(taskObj.getString("request_param")); //工单标识 String workorder_id = requestObj.getString("material_info_id"); //生产工单表【PDM_BD_WorkOrder】 @@ -151,6 +164,7 @@ public class HkxSendMaterialTask extends AbstractAcsTask { taskTab.update(taskObj); } else { taskObj.put("update_time", DateUtil.now()); + taskObj.put("remark", ""); taskObj.put("point_code2", endPoint.getString("point_code")); taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); taskTab.update(taskObj); @@ -197,7 +211,10 @@ public class HkxSendMaterialTask extends AbstractAcsTask { String vehicle_type = whereJson.getString("vehicle_type"); String vehicle_code = whereJson.getString("vehicle_code"); String qty = whereJson.getString("qty"); - + String task_code = CodeUtil.getNewCode("TASK_CODE"); + if (ObjectUtil.isNotEmpty(whereJson.getString("task_code"))) { + task_code = whereJson.getString("task_code"); + } //任务表【SCH_BASE_Task】 WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); @@ -216,7 +233,7 @@ public class HkxSendMaterialTask extends AbstractAcsTask { SchTaskDto dto = SchTaskDto.builder() .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) + .task_code(task_code) .task_type("task_type") .task_name("豪凯线满料") .material_qty(qty) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls index 7c5e2f1..858a3bc 100644 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls and b/lms/nladmin-system/src/main/java/org/nl/wms/wms.xls differ diff --git a/lms/nladmin-system/src/main/resources/config/application-prod.yml b/lms/nladmin-system/src/main/resources/config/application-prod.yml index 61eaff1..a2db56e 100644 --- a/lms/nladmin-system/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/src/main/resources/config/application-prod.yml @@ -59,6 +59,16 @@ spring: password: ${REDIS_PWD:} #连接超时时间 timeout: 5000 + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 # 登录相关配置 login: # 登录缓存 @@ -162,4 +172,4 @@ sa-token: loki: url: http://localhost:3100/loki/api/v1 - systemName: lms \ No newline at end of file + systemName: lms