diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java index 4551e63..ce3d3d8 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java @@ -567,4 +567,17 @@ public class LnshRGVDeviceDriver extends AbstractOpcDeviceDriver implements Devi ReadUtil.write(itemMap, server); } + + public void writeMap(Map map) { + HashMap writeMap = new HashMap<>(); + for (Map.Entry e : map.entrySet()) { + String key = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + e.getKey(); + writeMap.put(key, e.getValue()); + } + + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + ReadUtil.write(writeMap, server); + } } diff --git a/acs/nladmin-system/src/main/resources/config/application-dev.yml b/acs/nladmin-system/src/main/resources/config/application-dev.yml index 88b1a59..1d3349c 100644 --- a/acs/nladmin-system/src/main/resources/config/application-dev.yml +++ b/acs/nladmin-system/src/main/resources/config/application-dev.yml @@ -6,10 +6,10 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:lnsh_acs2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lnsh_acs2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:yongyu_acs2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:Root.123456} + password: ${DB_PWD:zjw123} # password: ${DB_PWD:Root.123456} # 初始连接数 initial-size: 5 diff --git a/acs/nladmin-system/src/main/resources/config/application.yml b/acs/nladmin-system/src/main/resources/config/application.yml index 7e3fbea..a4d00ab 100644 --- a/acs/nladmin-system/src/main/resources/config/application.yml +++ b/acs/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: prod jackson: time-zone: GMT+8 data: diff --git a/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json b/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json deleted file mode 100644 index 0c91cb5..0000000 --- a/lms/nladmin-system/doc/永裕家居LMS系统.postman_collection.json +++ /dev/null @@ -1,489 +0,0 @@ -{ - "info": { - "_postman_id": "584232a7-9ae4-4ca2-b4e5-d9e66870957e", - "name": "永裕家居LMS系统", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "示例", - "description": "", - "item": [ - { - "name": "LMS登录", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "56672d9d-9bac-4f23-b77e-809647ef5df4", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "48d9e766-7014-4243-80de-81d63be07da5", - "type": "text/javascript", - "exec": [ - "//postman使用:https://blog.csdn.net/wangyiyan315/article/details/122441791", - "", - "var JsonData = JSON.parse(responseBody); //定义一个变量,并且将请求返回的内容赋给该变量", - "pm.globals.set(\"lms_token\", JsonData.token.slice(7)); //7代表去掉token前面的Bearer加空格", - "" - ] - } - } - ], - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\n\t\n\t\"username\":\"admin\",\n\t\"password\":\"uefvHbyUCADkudW1MV+/yw9XBWR2Z+KDyq+dqQ+ozr1loClUgqm4XQPsUl87IsXetYBWRDLo7HC++20VHlW80g==\"\n}" - }, - "url": { - "raw": "{{lms_url}}/mobile/auth/login", - "host": [ - "{{lms_url}}" - ], - "path": [ - "mobile", - "auth", - "login" - ] - }, - "description": "LMS登录并设置返回的token" - }, - "response": [] - }, - { - "name": "系统参数分页查询-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "GET", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "/api/param" - }, - "url": { - "raw": "{{lms_url}}/api/param?sort=id,desc&size=10&page=0", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ], - "query": [ - { - "key": "sort", - "value": "id,desc" - }, - { - "key": "size", - "value": "10" - }, - { - "key": "page", - "value": "0" - }, - { - "key": null, - "value": null - }, - { - "key": null, - "value": null - } - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "根据编码获取值-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "IS_CONNECT_ACS" - }, - "url": { - "raw": "{{lms_url}}/api/param/getValueByCode", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param", - "getValueByCode" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "删除参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "DELETE", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "[\"0c1d96d335cd4dd6aa0a4bee4b1c45fe\"]" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "新增参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"1\",\"remark\":\"test11\",\"name\":\"test11\",\"value\":\"test11\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "修改参数-示例", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"8\",\"create_time\":\"2022-10-14 13:33:52\",\"remark\":\"888\",\"update_time\":\"2022-10-14 13:33:52\",\"update_optname\":\"管理员\",\"create_id\":1,\"name\":\"888\",\"id\":\"3f1901b5814d40908bad602854b22aa6\",\"value\":\"8888\",\"update_optid\":1,\"create_name\":\"管理员\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - } - ] - }, - { - "name": "ACS请求LMS", - "description": "", - "item": [ - { - "name": "共挤线申请空盘", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"type\":\"1\",\"point_code\":\"GJX01_K\",\"vehicle_code\":\"001\",\"qty\":\"100\",\"vehicle_type\":\"01\",\"vehicle_num\":\"1\"}" - }, - "url": { - "raw": "{{lms_url}}/api/wms/task/apply", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "wms", - "task", - "apply" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - }, - { - "name": "油漆线空盘入库", - "event": [ - { - "listen": "prerequest", - "script": { - "id": "4f07b550-ab9c-41a4-8dbf-f889ae50b246", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{lms_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - } - ], - "body": { - "mode": "raw", - "raw": "{\"code\":\"test22\",\"is_active\":\"1\",\"remark\":\"test11\",\"name\":\"test11\",\"value\":\"test11\"}" - }, - "url": { - "raw": "{{lms_url}}/api/param", - "host": [ - "{{lms_url}}" - ], - "path": [ - "api", - "param" - ] - }, - "description": "求方法参数:{\"whereJson\":{\"sort\":\"id,desc\",\"size\":\"10\",\"page\":\"0\"}}" - }, - "response": [] - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "id": "32f60779-6a66-4d77-80e3-1bc0040e7650", - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "id": "fb339152-4984-49bb-8955-3e24baac67ae", - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "id": "9b318f5e-373b-4f36-93a5-d131f4f76446", - "key": "lms_url", - "value": "http://localhost:8010", - "type": "string", - "description": "" - }, - { - "id": "5557e8ff-f6ac-45b0-a950-4a8c139d1ae0", - "key": "acs_url", - "value": "http://localhost:8010", - "type": "string", - "description": "" - } - ] -} \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/AppRun.java b/lms/nladmin-system/src/main/java/org/nl/AppRun.java index 2fa3edd..557183a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/lms/nladmin-system/src/main/java/org/nl/AppRun.java @@ -11,6 +11,7 @@ import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactor import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.RestController; * @date 2021/2/22 9:20:19 */ @EnableAsync +@EnableAspectJAutoProxy @RestController @Api(hidden = true) @SpringBootApplication(exclude = { diff --git a/lms/nladmin-system/src/main/java/org/nl/config/PdaAspect.java b/lms/nladmin-system/src/main/java/org/nl/config/PdaAspect.java new file mode 100644 index 0000000..97e3784 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/config/PdaAspect.java @@ -0,0 +1,22 @@ +package org.nl.config; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.pda.util.PdaUtils; +import org.springframework.stereotype.Component; + +@Component +@Aspect +public class PdaAspect { + + @Around("@annotation(org.nl.wms.pda.anno.PdaAnnotation)") + private Object around(ProceedingJoinPoint pjp) { + try { + return pjp.proceed(); + } catch (Throwable e) { + return PdaUtils.buildFailResultJSON(e.getMessage()); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/api/CommonResult.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/api/CommonResult.java index 3536868..e47ff19 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/api/CommonResult.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/api/CommonResult.java @@ -7,135 +7,135 @@ package org.nl.modules.common.api; * @date 2023-03-02 */ public class CommonResult { - private long code; - private String desc; - private T result; + private long code; + private String desc; + private T result; - public CommonResult() { - } + public CommonResult() { + } - protected CommonResult(T result) { - this.result = result; - this.desc = ResultCode.SUCCESS.getDesc(); - this.code = ResultCode.SUCCESS.getCode(); - } + protected CommonResult(T result) { + this.result = result; + this.desc = ResultCode.SUCCESS.getDesc(); + this.code = ResultCode.SUCCESS.getCode(); + } - protected CommonResult(long code, String desc, T result) { - this.code = code; - this.desc = desc; - this.result = result; - } + protected CommonResult(long code, String desc, T result) { + this.code = code; + this.desc = desc; + this.result = result; + } - /** - * 成功返回结果 + /** + * 成功返回结果 - */ - public static CommonResult success() { - return new CommonResult<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getDesc(), null); - } + */ + public static CommonResult success() { + return new CommonResult<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getDesc(), null); + } - /** - * 成功返回结果 - * - * @param result 获取的数据 - */ - public static CommonResult success(T result) { - return new CommonResult<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getDesc(), result); - } + /** + * 成功返回结果 + * + * @param result 获取的数据 + */ + public static CommonResult success(T result) { + return new CommonResult<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getDesc(), result); + } - /** - * 成功返回结果 - * - * @param result 获取的数据 - * @param desc 提示信息 - */ - public static CommonResult success(T result, String desc) { - return new CommonResult<>(ResultCode.SUCCESS.getCode(), desc, result); - } + /** + * 成功返回结果 + * + * @param result 获取的数据 + * @param desc 提示信息 + */ + public static CommonResult success(T result, String desc) { + return new CommonResult<>(ResultCode.SUCCESS.getCode(), desc, result); + } - /** - * 失败返回结果 - * @param errorCode 错误码 - */ - public static CommonResult failed(IErrorCode errorCode) { - return new CommonResult<>(errorCode.getCode(), errorCode.getDesc(), null); - } + /** + * 失败返回结果 + * @param errorCode 错误码 + */ + public static CommonResult failed(IErrorCode errorCode) { + return new CommonResult<>(errorCode.getCode(), errorCode.getDesc(), null); + } - /** - * 失败返回结果 - * @param errorCode 错误码 - * @param desc 错误信息 - */ - public static CommonResult failed(IErrorCode errorCode,String desc) { - return new CommonResult<>(errorCode.getCode(), desc, null); - } + /** + * 失败返回结果 + * @param errorCode 错误码 + * @param desc 错误信息 + */ + public static CommonResult failed(IErrorCode errorCode,String desc) { + return new CommonResult<>(errorCode.getCode(), desc, null); + } - /** - * 失败返回结果 - * @param desc 提示信息 - */ - public static CommonResult failed(String desc) { - return new CommonResult<>(ResultCode.FAILED.getCode(), desc, null); - } + /** + * 失败返回结果 + * @param desc 提示信息 + */ + public static CommonResult failed(String desc) { + return new CommonResult<>(ResultCode.FAILED.getCode(), desc, null); + } - /** - * 失败返回结果 - */ - public static CommonResult failed() { - return failed(ResultCode.FAILED); - } + /** + * 失败返回结果 + */ + public static CommonResult failed() { + return failed(ResultCode.FAILED); + } - /** - * 参数验证失败返回结果 - */ - public static CommonResult validateFailed() { - return failed(ResultCode.VALIDATE_FAILED); - } + /** + * 参数验证失败返回结果 + */ + public static CommonResult validateFailed() { + return failed(ResultCode.VALIDATE_FAILED); + } - /** - * 参数验证失败返回结果 - * @param desc 提示信息 - */ - public static CommonResult validateFailed(String desc) { - return new CommonResult<>(ResultCode.MISS_PARAMETER.getCode(), desc, null); - } + /** + * 参数验证失败返回结果 + * @param desc 提示信息 + */ + public static CommonResult validateFailed(String desc) { + return new CommonResult<>(ResultCode.MISS_PARAMETER.getCode(), desc, null); + } - /** - * 未登录返回结果 - */ - public static CommonResult unauthorized(T result) { - return new CommonResult<>(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getDesc(), result); - } + /** + * 未登录返回结果 + */ + public static CommonResult unauthorized(T result) { + return new CommonResult<>(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getDesc(), result); + } - /** - * 未授权返回结果 - */ - public static CommonResult forbidden(T result) { - return new CommonResult<>(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getDesc(), result); - } + /** + * 未授权返回结果 + */ + public static CommonResult forbidden(T result) { + return new CommonResult<>(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getDesc(), result); + } - public long getCode() { - return code; - } + public long getCode() { + return code; + } - public void setCode(long code) { - this.code = code; - } + public void setCode(long code) { + this.code = code; + } - public String getDesc() { - return desc; - } + public String getDesc() { + return desc; + } - public void setDesc(String desc) { - this.desc = desc; - } + public void setDesc(String desc) { + this.desc = desc; + } - public T getResult() { - return result; - } + public T getResult() { + return result; + } - public void setResult(T result) { - this.result = result; - } + public void setResult(T result) { + this.result = result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/api/RestBusinessTemplate.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/api/RestBusinessTemplate.java index b915ffd..d552619 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/api/RestBusinessTemplate.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/api/RestBusinessTemplate.java @@ -11,75 +11,69 @@ import org.nl.modules.common.exception.BizCoreException; * @date 2023-03-02 */ @Slf4j -public class RestBusinessTemplate{ - public static CommonResult execute(Callback callback) { - CommonResult result = new CommonResult<>(); - try { - result.setCode(ResultCode.SUCCESS.getCode()); - result.setDesc(ResultCode.SUCCESS.getDesc()); - T object = callback.doExecute(); - if(object != null) { - result.setResult(object); - } - } - catch(BizCoreException e) { - String errorMsg; - if(StringUtils.isNotBlank(e.getErrorMsg())) { - errorMsg = e.getErrorMsg(); - } - else if(e.getCode() != null) { - errorMsg = e.getCode().getDesc(); - } - else{ - errorMsg = e.getMessage(); - } - log.error(e.getErrorMsg()); - ResultCode code = e.getCode() == null ? ResultCode.FAILED : e.getCode(); - result.setCode(code.getCode()); - result.setDesc(errorMsg); - } - catch(Exception e) { - log.error("execute error", e); - result.setCode(ResultCode.FAILED.getCode()); - result.setDesc(ResultCode.FAILED.getDesc()); - } - return result; - } +public class RestBusinessTemplate { + public static CommonResult execute(Callback callback) { + CommonResult result = new CommonResult<>(); + try { + result.setCode(ResultCode.SUCCESS.getCode()); + result.setDesc(ResultCode.SUCCESS.getDesc()); + T object = callback.doExecute(); + if (object != null) { + result.setResult(object); + } + } catch (BizCoreException e) { + String errorMsg; + if (StringUtils.isNotBlank(e.getErrorMsg())) { + errorMsg = e.getErrorMsg(); + } else if (e.getCode() != null) { + errorMsg = e.getCode().getDesc(); + } else { + errorMsg = e.getMessage(); + } + log.error(e.getErrorMsg()); + ResultCode code = e.getCode() == null ? ResultCode.FAILED : e.getCode(); + result.setCode(code.getCode()); + result.setDesc(errorMsg); + } catch (Exception e) { + log.error("execute error", e); + result.setCode(ResultCode.FAILED.getCode()); + result.setDesc(ResultCode.FAILED.getDesc()); + } + return result; + } - public static CommonResult execute(VoidCallback callback) { - CommonResult result = new CommonResult<>(); - try { - callback.execute(); - result.setCode(ResultCode.SUCCESS.getCode()); - result.setDesc(ResultCode.SUCCESS.getDesc()); - } - catch(BizCoreException e) { - log.error("", e); - ResultCode code = e.getCode() == null ? ResultCode.FAILED : e.getCode(); - result.setCode(code.getCode()); - result.setDesc(StringUtils.isBlank(e.getMessage()) ? code.getDesc() : e.getMessage()); - } - catch(Exception e) { - log.error("execute error", e); - result.setCode(ResultCode.FAILED.getCode()); - result.setDesc(ResultCode.FAILED.getDesc()); - } - return result; - } + public static CommonResult execute(VoidCallback callback) { + CommonResult result = new CommonResult<>(); + try { + callback.execute(); + result.setCode(ResultCode.SUCCESS.getCode()); + result.setDesc(ResultCode.SUCCESS.getDesc()); + } catch (BizCoreException e) { + log.error("", e); + ResultCode code = e.getCode() == null ? ResultCode.FAILED : e.getCode(); + result.setCode(code.getCode()); + result.setDesc(StringUtils.isBlank(e.getMessage()) ? code.getDesc() : e.getMessage()); + } catch (Exception e) { + log.error("execute error", e); + result.setCode(ResultCode.FAILED.getCode()); + result.setDesc(ResultCode.FAILED.getDesc()); + } + return result; + } - /** - * 执行回调 - * - * @param - */ - public interface Callback{ - T doExecute(); - } + /** + * 执行回调 + * + * @param + */ + public interface Callback { + T doExecute(); + } - /** - * 执行回调 - */ - public interface VoidCallback{ - void execute(); - } + /** + * 执行回调 + */ + public interface VoidCallback { + void execute(); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/CommonUtils.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/CommonUtils.java new file mode 100644 index 0000000..e8cb864 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/CommonUtils.java @@ -0,0 +1,24 @@ +package org.nl.modules.common.utils; + +/** + * @author zhangjiangwei + * @date 2023/04/05 15:05 + */ +public class CommonUtils { + + public static String idsArrayToInStr(Long[] ids) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < ids.length; i++) { + if (i == 0) { + sb.append("("); + } + sb.append("'").append(ids[i]).append("'"); + if (i == ids.length - 1) { + sb.append(")"); + } else { + sb.append(","); + } + } + return sb.toString(); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/PointStatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/PointStatusEnum.java index 1398d90..9af3319 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/PointStatusEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/PointStatusEnum.java @@ -6,57 +6,57 @@ package org.nl.modules.common.utils.enums; * @since 2023-03-01 */ public enum PointStatusEnum{ - /** - * 暂停 - */ - STOP("暂停", "1"), - /** - * 运行 - */ - RUN("运行中", "2"), - /** - * 故障 - */ - FAULT("故障", "3"), - /** - * 关机 - */ - SHUTDOWN("关机", "4"); - private String name; - private String index; + /** + * 暂停 + */ + STOP("暂停", "1"), + /** + * 运行 + */ + RUN("运行中", "2"), + /** + * 故障 + */ + FAULT("故障", "3"), + /** + * 关机 + */ + SHUTDOWN("关机", "4"); + private String name; + private String index; - PointStatusEnum(String name, String index) { - this.name = name; - this.index = index; - } + PointStatusEnum(String name, String index) { + this.name = name; + this.index = index; + } - public static String getName(String index) { - for(PointStatusEnum c : PointStatusEnum.values()) { - if(c.getIndex().equals(index)) { - return c.name; - } - } - return null; - } + public static String getName(String index) { + for(PointStatusEnum c : PointStatusEnum.values()) { + if(c.getIndex().equals(index)) { + return c.name; + } + } + return null; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public String getIndex() { - return index; - } + public String getIndex() { + return index; + } - public void setIndex(String index) { - this.index = index; - } + public void setIndex(String index) { + this.index = index; + } - @Override - public String toString() { - return this.index + "_" + this.name; - } + @Override + public String toString() { + return this.index + "_" + this.name; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/ProductionStatisticsEnum.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/ProductionStatisticsEnum.java index abca936..7560c22 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/ProductionStatisticsEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/ProductionStatisticsEnum.java @@ -6,53 +6,53 @@ package org.nl.modules.common.utils.enums; * @since 2023-03-01 */ public enum ProductionStatisticsEnum{ - /** - * 今日压制量 - */ - CRUSH("今日压制量", "2"), - /** - * 今日干燥量 - */ - DRY("今日干燥量", "3"), - /** - * 今日成品量 - */ - FINISHED("今日成品量", "4"); - private String name; - private String index; + /** + * 今日压制量 + */ + CRUSH("今日压制量", "2"), + /** + * 今日干燥量 + */ + DRY("今日干燥量", "3"), + /** + * 今日成品量 + */ + FINISHED("今日成品量", "4"); + private String name; + private String index; - ProductionStatisticsEnum(String name, String index) { - this.name = name; - this.index = index; - } + ProductionStatisticsEnum(String name, String index) { + this.name = name; + this.index = index; + } - public static String getName(String index) { - for(ProductionStatisticsEnum c : ProductionStatisticsEnum.values()) { - if(c.getIndex().equals(index)) { - return c.name; - } - } - return null; - } + public static String getName(String index) { + for(ProductionStatisticsEnum c : ProductionStatisticsEnum.values()) { + if(c.getIndex().equals(index)) { + return c.name; + } + } + return null; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public String getIndex() { - return index; - } + public String getIndex() { + return index; + } - public void setIndex(String index) { - this.index = index; - } + public void setIndex(String index) { + this.index = index; + } - @Override - public String toString() { - return this.index + "_" + this.name; - } + @Override + public String toString() { + return this.index + "_" + this.name; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java deleted file mode 100644 index 89f9a32..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/modules/security/rest/DesUtil.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.nl.modules.security.rest; - -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - - -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; - -import javax.crypto.Cipher; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.DESKeySpec; -import javax.crypto.spec.IvParameterSpec; -import java.io.IOException; -import java.security.SecureRandom; - -/** - * Des加密解密算法工具类 - */ -public class DesUtil { - //加密算法是des - private static final String ALGORITHM = "DES"; - //转换格式 - private static final String TRANSFORMATION = "DES/CBC/PKCS5Padding"; - - /** - * 加密 - * - * @param src 数据源 - * @param key 密钥,长度必须是8的倍数 - * @return 返回加密后的数据 - * @throws Exception 出错 - */ - public static byte[] encrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - // 从原始密匙数据建立 DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - // 建立一个密匙工厂,然后用它把DESKeySpec转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); - SecretKey securekey = keyFactory.generateSecret(dks); - // Cipher对象实际完成加密操作 - Cipher cipher = Cipher.getInstance(TRANSFORMATION); - // 用密匙原始化Cipher对象 - cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(key)); - // 现在,获取数据并加密 - // 正式执行加密操作 - return cipher.doFinal(src); - } - - /** - * 解密 - * - * @param src 数据源 - * @param key 密钥,长度必须是8的倍数 - * @return 返回解密后的原始数据 - * @throws Exception 出错 - */ - public static byte[] decrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - // 从原始密匙数据建立一个DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - // 建立一个密匙工厂,然后用它把DESKeySpec对象转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); - SecretKey securekey = keyFactory.generateSecret(dks); - // Cipher对象实际完成解密操作 - Cipher cipher = Cipher.getInstance(TRANSFORMATION); - // 用密匙原始化Cipher对象 - cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(key)); - // 现在,获取数据并解密 - // 正式执行解密操作 - return cipher.doFinal(src); - } - - /** - * Description 根据键值进行加密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws Exception - */ - public static String encrypt(String data, String key) throws Exception { - byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8")); - - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(bt); - - //return new String(Base64.encodeBase64(bt), "UTF-8"); - } - - /** - * Description 根据键值进行解密 - * - * @param data - * @param key 加密键byte数组 - * @return - * @throws IOException - * @throws Exception - */ - public static String decrypt(String data, String key) throws Exception { - if (data == null) - return null; - BASE64Decoder decoder = new BASE64Decoder(); - byte[] buf = decoder.decodeBuffer(data); - - byte[] bt = decrypt(buf, key.getBytes("UTF-8")); - return new String(bt, "UTF-8"); - } - - - public static void main(String[] args) throws Exception { - //uL8fXioyU2M= - String key = "11111111"; - String pp = encrypt("123456", key); - System.out.println("加密:" + pp); - - String mm2 = decrypt(pp, key); - System.out.println("解密:" + mm2); - - } - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java index a49dd33..541e59e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GenCodeServiceImpl.java @@ -14,6 +14,8 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashMap; @@ -95,8 +97,9 @@ public class GenCodeServiceImpl implements GenCodeService { WQLObject.getWQLObject("sys_code_rule").update(json); } + @Transactional(propagation = Propagation.REQUIRES_NEW) @Override - public synchronized String codeDemo(Map form) { + public String codeDemo(Map form) { String code = (String) form.get("code"); String id = this.queryIdByCode(code); //如果flag=1就执行更新数据库的操作 diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java index 1c12c85..2a39a39 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/system/util/CodeUtil.java @@ -7,12 +7,14 @@ import java.util.HashMap; public class CodeUtil { - public static String getNewCode(String ruleCode){ - String flag = "1"; - HashMap map = new HashMap<>(); - map.put("flag",flag); - map.put("code",ruleCode); - return SpringContextHolder.getBean(GenCodeService.class).codeDemo(map); + public static String getNewCode(String ruleCode){ + synchronized (ruleCode) { + String flag = "1"; + HashMap map = new HashMap<>(); + map.put("flag", flag); + map.put("code", ruleCode); + return SpringContextHolder.getBean(GenCodeService.class).codeDemo(map); + } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/start/Init.java b/lms/nladmin-system/src/main/java/org/nl/start/Init.java index 9417a40..121bec5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/start/Init.java +++ b/lms/nladmin-system/src/main/java/org/nl/start/Init.java @@ -18,8 +18,10 @@ import org.springframework.stereotype.Component; public class Init implements ApplicationRunner { @Override - public void run(ApplicationArguments args) throws Exception { - System.out.println("项目启动成功!"); + public void run(ApplicationArguments args) { + System.out.println(">>================================================================<<\n" + + ">> 项目启动成功 <<\n" + + ">>================================================================<<"); } private void initPoint() { @@ -42,7 +44,7 @@ public class Init implements ApplicationRunner { } - String point_code = 2+""+block_num + col_numS+"-" + row_numS +"-"+ "01"; + String point_code = 2 + "" + block_num + col_numS + "-" + row_numS + "-" + "01"; String point_name = col_num + "排" + row_num + "列1层"; json.put("point_code", point_code); json.put("point_name", point_name); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/LNSHMaterialUnit.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/LNSHMaterialUnit.java new file mode 100644 index 0000000..85508bf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/LNSHMaterialUnit.java @@ -0,0 +1,26 @@ +package org.nl.wms.basedata.eum; + +import lombok.RequiredArgsConstructor; + +/** + * @author zhangjiangwei + * @date 2023/04/05 17:28 + */ +@RequiredArgsConstructor +public enum LNSHMaterialUnit { + + BLOCK("块", "0"), + TON("吨", "1"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/TrueOrFalse.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/TrueOrFalse.java new file mode 100644 index 0000000..d8ef9ff --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/TrueOrFalse.java @@ -0,0 +1,31 @@ +package org.nl.wms.basedata.eum; + +import lombok.RequiredArgsConstructor; + +/** + * @author zhangjiangwei + * @date 2023/03/03 10:05 + */ +@RequiredArgsConstructor +public enum TrueOrFalse { + + FALSE("否", "0"), + TRUE("是", "1"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } + + + public static boolean trueOrFalse(String value) { + return TRUE.value.equals(value); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleStatus.java new file mode 100644 index 0000000..d556037 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleStatus.java @@ -0,0 +1,26 @@ +package org.nl.wms.basedata.eum; + +import lombok.RequiredArgsConstructor; + +/** + * @author zhangjiangwei + * @date 2023/03/02 15:33 + */ +@RequiredArgsConstructor +public enum VehicleStatus { + + EMPTY("无货", "0"), + NOT_EMPTY("有货", "1"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleType.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleType.java new file mode 100644 index 0000000..e67b576 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/eum/VehicleType.java @@ -0,0 +1,32 @@ +package org.nl.wms.basedata.eum; + +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * @author zhangjiangwei + * @date 2023/03/02 15:27 + */ +@RequiredArgsConstructor +public enum VehicleType { + + CUP("料盅", "1"), + STEEL_TRAY("钢托盘", "2"); + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } + + public static VehicleType get(String value) { + return Arrays.stream(VehicleType.values()).filter(vt -> vt.value.equals(value)).collect(Collectors.toList()).get(0); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleController.java index 5a0e830..5859307 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/VehicleController.java @@ -3,27 +3,27 @@ package org.nl.wms.basedata.rest; import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; import org.nl.wms.basedata.service.VehicleService; import org.nl.wms.basedata.service.dto.VehicleDto; import org.springframework.data.domain.Pageable; -import lombok.RequiredArgsConstructor; -import org.nl.modules.logging.annotation.Log; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.*; + import java.util.Map; -import lombok.extern.slf4j.Slf4j; /** -* @author lyd -* @date 2022-10-18 -**/ + * @author lyd + * @date 2022-10-18 + **/ @RestController @RequiredArgsConstructor -@Api(tags = "载具维护管理") +@Api(tags = "载具管理") @RequestMapping("/api/vehicle") @Slf4j public class VehicleController { @@ -31,27 +31,27 @@ public class VehicleController { private final VehicleService vehicleService; @GetMapping - @Log("查询载具维护") - @ApiOperation("查询载具维护") + @Log("查询载具") + @ApiOperation("查询载具") //@SaCheckPermission("@el.check('vehicle:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(vehicleService.queryAll(whereJson,page),HttpStatus.OK); + public ResponseEntity query(@RequestParam Map param, Pageable page) { + return new ResponseEntity<>(vehicleService.queryAll(param, page), HttpStatus.OK); } @PostMapping - @Log("新增载具维护") - @ApiOperation("新增载具维护") + @Log("新增载具") + @ApiOperation("新增载具") //@SaCheckPermission("@el.check('vehicle:add')") - public ResponseEntity create(@Validated @RequestBody JSONObject WhereJson){ - - return new ResponseEntity<>(vehicleService.create(WhereJson),HttpStatus.CREATED); + public ResponseEntity create(@RequestBody JSONObject param) { + vehicleService.create(param); + return new ResponseEntity<>(HttpStatus.CREATED); } @PutMapping @Log("修改载具维护") @ApiOperation("修改载具维护") //@SaCheckPermission("@el.check('vehicle:edit')") - public ResponseEntity update(@Validated @RequestBody VehicleDto dto){ + public ResponseEntity update(@RequestBody VehicleDto dto) { vehicleService.update(dto); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -70,6 +70,6 @@ public class VehicleController { @ApiOperation("获取起始载具号") public ResponseEntity getVehicle(@PathVariable String code) { JSONObject json = vehicleService.getVehicle(code); - return new ResponseEntity<>(json,HttpStatus.OK); + return new ResponseEntity<>(json, HttpStatus.OK); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleService.java index 0840abd..b295e0d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/VehicleService.java @@ -5,10 +5,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.wms.basedata.service.dto.VehicleDto; import org.springframework.data.domain.Pageable; -import java.util.Map; + import java.util.List; -import java.io.IOException; -import javax.servlet.http.HttpServletResponse; +import java.util.Map; /** * @description 服务接口 @@ -19,11 +18,11 @@ public interface VehicleService { /** * 查询数据分页 - * @param whereJson 条件 + * @param param 条件 * @param page 分页参数 * @return Map */ - Map queryAll(Map whereJson, Pageable page); + Map queryAll(Map param, Pageable page); /** * 查询所有数据不分页 @@ -49,9 +48,9 @@ public interface VehicleService { /** * 创建 - * @param WhereJson / + * @param param / */ - JSONArray create(JSONObject WhereJson); + void create(JSONObject param); /** * 编辑 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java index 379afec..caa2692 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/MaterialbaseDto.java @@ -21,56 +21,21 @@ public class MaterialbaseDto implements Serializable { @JsonSerialize(using = ToStringSerializer.class) private Long material_id; - /** - * 物料编码 - */ private String material_code; - /** - * 物料名称 - */ - private String material_name; + private Integer standing_time; - private String material_spec; + private Integer threshold_time; - private String material_model; + private Integer product_code; - private String english_name; + private Integer a; - private long base_unit_id; + private Integer b; - private long assist_unit_id; - private String base_unit_name; + private Integer h; - private String approve_fileno; - - private String print_no; - - /** - * 物料分类 - */ - private Long material_type_id; - - private Long len_unit_id; - - private BigDecimal length; - - private BigDecimal width; - - private BigDecimal height; - - /** - * 计量单位 - */ - private Long weight_unit_id; - - private BigDecimal gross_weight; - - private BigDecimal net_weight; - - private Long cubage_unit_id; - - private BigDecimal cubage; + private Integer w; private Long create_id; @@ -84,26 +49,10 @@ public class MaterialbaseDto implements Serializable { private String update_time; - private String is_used_time; - /** * 是否启用 */ private String is_used; - private String is_delete; - - private String ext_id; - - private String material_height_type; - - private String AlongSide; // A长边 - private String BshortSide; // B短边 - private String Htrapezoidal; // H梯形高 - private String Wthickness; // W厚度 - - private Long ass_unit_id; - - - private Integer standing_time; + private Double weight; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDto.java index c8fe954..82369de 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/dto/VehicleDto.java @@ -1,75 +1,70 @@ package org.nl.wms.basedata.service.dto; import lombok.Data; - import java.math.BigDecimal; + +import java.math.BigDecimal; import java.io.Serializable; - import com.fasterxml.jackson.databind.annotation.JsonSerialize; - import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; /** -* @description / -* @author lyd -* @date 2022-10-18 -**/ + * @author lyd + * @description / + * @date 2022-10-18 + **/ @Data public class VehicleDto implements Serializable { /** 载具标识 */ - /** 防止精度丢失 */ - @JsonSerialize(using= ToStringSerializer.class) + /** + * 防止精度丢失 + */ + @JsonSerialize(using = ToStringSerializer.class) private Long vehicle_id; - /** 载具编码 */ + /** + * 载具编码 + */ private String vehicle_code; - /** 载具名称 */ - private String vehicle_name; - - /** 一维码 */ - private String one_code; - - /** 二维码 */ - private String two_code; - - /** RFID编码 */ - private String rfid_code; - - /** 载具类型 */ + /** + * 载具类型 + */ private String vehicle_type; - /** 载具宽度 */ - private BigDecimal vehicle_width; + /** + * 载具状态 + */ + private String vehicle_status; - /** 载具长度 */ - private BigDecimal vehicle_long; - - /** 载具高度 */ - private BigDecimal vehicle_height; - - /** 载具超仓位类型 */ - private String overstruct_type; - - /** 占仓位数 */ - private BigDecimal occupystruct_qty; - - /** 外部标识 */ - private String ext_id; - - /** 创建人 */ + /** + * 创建人 + */ private Long create_id; - /** 创建人 */ + /** + * 创建人 + */ private String create_name; - /** 创建时间 */ + /** + * 创建时间 + */ private String create_time; - /** 修改人 */ + /** + * 修改人 + */ private Long update_optid; - /** 修改人 */ + /** + * 修改人 + */ private String update_optname; - /** 修改时间 */ + /** + * 修改时间 + */ private String update_time; } 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 8b69b3f..546303c 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 @@ -13,6 +13,7 @@ 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.CommonUtils; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -44,59 +45,13 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { @Override public Map queryAll(Map whereJson, Pageable page) { - String search = MapUtil.getStr(whereJson, "search"); - //物料限制的时候使用,初始化页面 - String class_idStr = MapUtil.getStr(whereJson, "class_idStr"); - String material_type_id = MapUtil.getStr(whereJson, "material_type_id"); - String class_code = MapUtil.getStr(whereJson, "class_code"); - String ids = MapUtil.getStr(whereJson, "ids"); - + String name = MapUtil.getStr(whereJson, "name"); HashMap map = new HashMap<>(); map.put("flag", "1"); + map.put("search", name); - if (!StrUtil.isEmpty(search)) { - //处理转义字符 - if (search.contains("\\")) { - search = search.replace("\\", "\\\\\\"); - } - map.put("search", "%" + search + "%"); - } - - //处理物料当前节点的所有子节点 - if (!StrUtil.isEmpty(material_type_id)) { - map.put("material_type_id", material_type_id); - String classIds = classstandardService.getChildIdStr(material_type_id); - map.put("classIds", classIds); - } else if (ObjectUtil.isNotEmpty(class_idStr)) { - String classIds = classstandardService.getAllChildIdStr(class_idStr); - map.put("classIds", classIds); - } - - if (!StrUtil.isEmpty(class_code)) { - map.put("class_code", class_code + "%"); - } - - StringBuffer where = new StringBuffer(); - if (StrUtil.isNotEmpty(ids)) { - ids = ids.replaceAll("\'", ""); - String[] strs = ids.split(","); - where.append("("); - for (int i = 0; i < strs.length; ) { - where.append("class.class_code like '" + strs[i] + "%'"); - i++; - if (i < strs.length) { - where.append(" or "); - } - } - where.append(")"); - map.put("idssql", where.toString()); - } else { - map.put("idssql", "1=1"); - } - - JSONObject jo = WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id"); - return jo; + return WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "create_time DESC"); } @Override @@ -134,20 +89,55 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { @Override @Transactional(rollbackFor = Exception.class) public void create(MaterialbaseDto dto) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + String material_code = dto.getMaterial_code(); + JSONObject material = wo.query("material_code = '" + material_code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(material)) { + throw new BadRequestException("物料编码 [" + material_code + "] 已存在!"); + } + Long currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); + long id = IdUtil.getSnowflake(1, 1).nextId(); + dto.setMaterial_id(id); dto.setCreate_id(currentUserId); dto.setCreate_name(nickName); dto.setUpdate_optid(currentUserId); dto.setUpdate_optname(nickName); dto.setUpdate_time(now); dto.setCreate_time(now); - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); wo.insert(json); + + // 解析物料编码 ZLMCZ1001C122211GM001BD20-8 + JSONObject material_detail = new JSONObject(); + material_detail.put("material_id", id); + material_detail.put("material_code", material_code); + WQLObject dict_detail_table = WQLObject.getWQLObject("sys_dict_detail"); + String furnace_code = material_code.substring(0, 2); + JSONObject furnace_name = dict_detail_table.query("name = 'furnace' AND value = '" + furnace_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(furnace_name)) { + throw new BadRequestException("物料编码解析错误:未知炉型!"); + } + material_detail.put("product_name", furnace_name.getString("label") + "镁碳砖"); + material_detail.put("order_number", material_code.substring(11, 16)); + material_detail.put("customer_name", material_code.substring(16, 21)); + String product_grade_code = material_code.substring(21, 23); + JSONObject product_grade = dict_detail_table.query("name = 'product_grade' AND value = '" + product_grade_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(product_grade)) { + throw new BadRequestException("物料编码解析错误:未知牌号!"); + } + material_detail.put("product_grade", product_grade.getString("label")); + material_detail.put("brick_type", material_code.substring(23)); + material_detail.put("create_id", currentUserId); + material_detail.put("create_name", nickName); + material_detail.put("create_time", now); + material_detail.put("update_optid", currentUserId); + material_detail.put("update_optname", nickName); + material_detail.put("update_time", now); + WQLObject.getWQLObject("md_me_material_detail").insert(material_detail); } @Override @@ -173,38 +163,13 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - for (Long material_id : ids) { - JSONObject param = new JSONObject(); - param.put("material_id", String.valueOf(material_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); - } + String ids_str = CommonUtils.idsArrayToInStr(ids); + WQLObject.getWQLObject("md_me_materialbase").delete("material_id IN " + ids_str); + WQLObject.getWQLObject("md_me_material_detail").delete("material_id IN " + ids_str); } @Override public boolean isAlongMaterType(String materOpt_code, String material_id, String material_type_id) { - if (ObjectUtil.isNotEmpty(material_id)) { - Long long_mater = Long.parseLong(material_id); - material_type_id = this.findById(long_mater).getMaterial_type_id() + ""; - } - if (ObjectUtil.isEmpty(material_type_id)) { - throw new BadRequestException("物料类型不能为空!"); - } - String class_idStr = MaterOptTypeEnum.getObj(materOpt_code).getString("class_idStr"); - - Set set = classstandardService.getAllChildIdSet(class_idStr); - if (ObjectUtil.isNotEmpty(set)) { - return set.contains(material_type_id); - } - return false; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java index 8fdd0c7..3b32fa5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/VehicleServiceImpl.java @@ -2,13 +2,15 @@ package org.nl.wms.basedata.service.impl; -import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson.JSON; import lombok.RequiredArgsConstructor; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.CommonUtils; import org.nl.modules.system.service.impl.GenCodeServiceImpl; -import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.basedata.eum.VehicleStatus; +import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.basedata.service.VehicleService; import org.nl.wms.basedata.service.dto.VehicleDto; import org.springframework.stereotype.Service; @@ -16,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Pageable; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -25,37 +28,31 @@ import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.wql.core.bean.ResultBean; import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; import lombok.extern.slf4j.Slf4j; import cn.hutool.core.util.ObjectUtil; /** -* @description 服务实现 -* @author lyd -* @date 2022-10-18 -**/ + * @author lyd + * @description 服务实现 + * @date 2022-10-18 + **/ @Service @RequiredArgsConstructor @Slf4j public class VehicleServiceImpl implements VehicleService { @Override - public Map queryAll(Map whereJson, Pageable page){ - String vehicle_code = MapUtil.getStr(whereJson, "vehicle_code"); - - JSONObject map = new JSONObject(); - map.put("flag", "1"); - map.put("vehicle_type", MapUtil.getStr(whereJson, "vehicle_type")); - if (ObjectUtil.isNotEmpty(vehicle_code)) map.put("vehicle_code","%"+vehicle_code+"%"); - - JSONObject json = WQL.getWO("QMD_PB_VEHICLE").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "create_time DESC"); - return json; + public Map queryAll(Map param, Pageable page) { + return WQL + .getWO("QMD_PB_VEHICLE") + .addParam("flag", "1") + .addParamMap(param) + .pageQuery(WqlUtil.getHttpContext(page), "create_time DESC"); } @Override - public List queryAll(Map whereJson){ + public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("md_pb_vehicle"); JSONArray arr = wo.query().getResultJSONArray(0); if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(VehicleDto.class); @@ -66,63 +63,38 @@ public class VehicleServiceImpl implements VehicleService { public VehicleDto findById(Long vehicle_id) { WQLObject wo = WQLObject.getWQLObject("md_pb_vehicle"); JSONObject json = wo.query("vehicle_id = '" + vehicle_id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)){ - return json.toJavaObject( VehicleDto.class); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(VehicleDto.class); } return null; } @Override - public VehicleDto findByCode(String code) { + public VehicleDto findByCode(String code) { WQLObject wo = WQLObject.getWQLObject("md_pb_vehicle"); - JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(json)){ - return json.toJavaObject( VehicleDto.class); + JSONObject json = wo.query("vehicle_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(VehicleDto.class); } return null; } @Override @Transactional(rollbackFor = Exception.class) - public JSONArray create(JSONObject WhereJson) { + public void create(JSONObject param) { + WQLObject vehicle_table = WQLObject.getWQLObject("md_pb_vehicle"); - WQLObject wo = WQLObject.getWQLObject("md_pb_vehicle"); - - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - String vehicle_type = WhereJson.getString("vehicle_type"); - String code = ""; - switch (vehicle_type) { - case "01": - code = "1m3_ttp"; - break; - case "02": - code = "1m6_ttp"; - break; - case "03": - code = "1m9_ttp"; - break; + String vehicle_code = param.getString("vehicle_code"); + String vehicle_type = param.getString("vehicle_type"); + if (ObjectUtil.isNotEmpty(vehicle_table.query("vehicle_code = '" + vehicle_code + "' AND vehicle_type = '" + vehicle_type + "'").uniqueResult(0))) { + throw new BadRequestException(VehicleType.get(vehicle_type).label() + " [" + vehicle_code + "] 已存在!"); } - JSONArray resultCodeArr = new JSONArray(); - int num = WhereJson.getIntValue("num"); - for (int i = 0; i < num; i++) { - VehicleDto dto = new VehicleDto(); - dto.setVehicle_id(IdUtil.getSnowflake(1,1).nextId()); - dto.setVehicle_code(CodeUtil.getNewCode(code)); - dto.setVehicle_name(dto.getVehicle_code()); - dto.setVehicle_type(vehicle_type); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setCreate_time(now); - - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - resultCodeArr.add(dto.getVehicle_code()); - } - return resultCodeArr; + param.put("vehicle_id", IdUtil.getSnowflake().nextId()); + param.put("create_id", SecurityUtils.getCurrentUserId()); + param.put("create_name", SecurityUtils.getCurrentNickName()); + param.put("create_time", DateUtil.now()); + vehicle_table.insert(param); } @Override @@ -131,6 +103,8 @@ public class VehicleServiceImpl implements VehicleService { VehicleDto entity = this.findById(dto.getVehicle_id()); if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + // todo 更新前检查载具是否真的有货 + Long currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); @@ -147,20 +121,8 @@ public class VehicleServiceImpl implements VehicleService { @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("md_pb_vehicle"); - for (Long vehicle_id: ids) { - JSONObject param = new JSONObject(); - param.put("vehicle_id", String.valueOf(vehicle_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); - } + String ids_str = CommonUtils.idsArrayToInStr(ids); + WQLObject.getWQLObject("md_pb_vehicle").delete("vehicle_id IN " + ids_str); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql index abae5b6..34abc0f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_ME_MATERIAL.wql @@ -44,32 +44,18 @@ IF 输入.flag = "1" PAGEQUERY SELECT - mb.*, - class.class_code, - class.class_name, - unit_name, - '50' as standard_weight, - unit_name as base_unit_id_name + mb.* FROM md_me_materialbase mb - LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id - LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mb.base_unit_id WHERE - mb.is_delete = '0' - and 输入.idssql - OPTION 输入.search <> "" - ( - mb.material_code like 输入.search - OR - mb.material_name like 输入.search - ) - ENDOPTION - OPTION 输入.class_code <> "" - class.class_code like 输入.class_code - ENDOPTION - OPTION 输入.classIds <> "" - class.class_id in 输入.classIds - ENDOPTION + 1 = 1 + OPTION 输入.search <> "" + ( + mb.material_code like '%' 输入.search '%' + OR + mb.material_name like '%' 输入.search '%' + ) + ENDOPTION ENDSELECT ENDPAGEQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE.wql index 214993c..bd8f199 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/wql/QMD_PB_VEHICLE.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 载具分页查询 + 交易名: 载具 所属模块: 功能简述: 版权所有: @@ -13,9 +13,10 @@ ################################################# ## 表字段对应输入参数 ################################################# - 输入.flag TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - 输入.vehicle_code TYPEAS s_string + 输入.flag TYPEAS s_string + 输入.vehicle_code TYPEAS s_string + 输入.vehicle_type TYPEAS s_string + 输入.vehicle_status TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -46,19 +47,16 @@ FROM md_pb_vehicle WHERE - 1=1 - + 1 = 1 OPTION 输入.vehicle_code <> "" - vehicle_code like 输入.vehicle_code + vehicle_code LIKE '%' 输入.vehicle_code '%' ENDOPTION - OPTION 输入.vehicle_type <> "" - vehicle_type = 输入.vehicle_type + vehicle_type = 输入.vehicle_type ENDOPTION - + OPTION 输入.vehicle_status <> "" + vehicle_status = 输入.vehicle_status + ENOPTION ENDSELECT ENDPAGEQUERY ENDIF - - - diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceDetailDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceDetailDto.java index a9f1720..77ec134 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceDetailDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceDetailDto.java @@ -21,102 +21,102 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -public class DeviceDetailDto extends DeviceStatusDto{ - /** - * 混碾机,压力机,窑外层弹出框已生产数量 - */ - @ApiModelProperty(value = "/**已生产数量*/") - private String real_qty; - /** - * 载具 - */ - @ApiModelProperty(value = "/**载具*/") - private String vehicle_code; - /** - * 入库时间 - */ - @ApiModelProperty(value = "/**入库时间*/") - private String instorage_time; - /** - * 搬运托盘数 - */ - @ApiModelProperty(value = "/**搬运托盘数*/") - private String pallet_qty; - /** - * 搬入准备车道 - */ - @ApiModelProperty(value = "/**搬入准备车道*/") - private String ready_lane; - /** - * 窑1窑车数 - */ - @ApiModelProperty(value = "/**窑1窑车数*/") - private String first_kiln_qty; - /** - * 窑2窑车数 - */ - @ApiModelProperty(value = "/**窑2窑车数*/") - private String second_kiln_qty; - /** - * 搬入1号窑 - */ - @ApiModelProperty(value = "/**搬入1号窑*/") - private String move_first_kiln; - /** - * 搬入2号窑 - */ - @ApiModelProperty(value = "/**搬入2号窑*/") - private String move_second_kiln; - /** - * 当前窑车数 - */ - @ApiModelProperty(value = "/**当前窑车数*/") - private String present_kiln_qty; - /** - * 容量 - */ - @ApiModelProperty(value = "/**容量*/") - private String volume; - /** - * 故障信息 - */ - @ApiModelProperty(value = "/**故障信息*/") - private String faulty_info; - /** - * 完成托盘数 - */ - @ApiModelProperty(value = "/**完成托盘数*/") - private String finish_pallet_qty; - /** - * 机械手完成托盘数 - */ - @ApiModelProperty(value = "/**机械手完成托盘数*/") - private String mechanical_pallet_qty; - /** - * 机械手完成数量 - */ - @ApiModelProperty(value = "/**机械手完成数量*/") - private String mechanical_arm_qty; - /** - * 包装机完成数量 - */ - @ApiModelProperty(value = "/**包装机完成数量*/") - private String pack_qty; - /** - * 完成跺数 - */ - @ApiModelProperty(value = "/**完成跺数*/") - private String finish_pile_qty; - /** - * 混碾机,破碎机本日生产信息 - */ - List mixingList; - /** - * 压力机,机械手本日生产信息 - */ - List crushingList; - /** - * 窑本日生产信息 - */ - List mKilnList; +public class DeviceDetailDto extends DeviceStatusDto { + /** + * 混碾机,压力机,窑外层弹出框已生产数量 + */ + @ApiModelProperty(value = "/**已生产数量*/") + private String real_qty; + /** + * 载具 + */ + @ApiModelProperty(value = "/**载具*/") + private String vehicle_code; + /** + * 入库时间 + */ + @ApiModelProperty(value = "/**入库时间*/") + private String instorage_time; + /** + * 搬运托盘数 + */ + @ApiModelProperty(value = "/**搬运托盘数*/") + private String pallet_qty; + /** + * 搬入准备车道 + */ + @ApiModelProperty(value = "/**搬入准备车道*/") + private String ready_lane; + /** + * 窑1窑车数 + */ + @ApiModelProperty(value = "/**窑1窑车数*/") + private String first_kiln_qty; + /** + * 窑2窑车数 + */ + @ApiModelProperty(value = "/**窑2窑车数*/") + private String second_kiln_qty; + /** + * 搬入1号窑 + */ + @ApiModelProperty(value = "/**搬入1号窑*/") + private String move_first_kiln; + /** + * 搬入2号窑 + */ + @ApiModelProperty(value = "/**搬入2号窑*/") + private String move_second_kiln; + /** + * 当前窑车数 + */ + @ApiModelProperty(value = "/**当前窑车数*/") + private String present_kiln_qty; + /** + * 容量 + */ + @ApiModelProperty(value = "/**容量*/") + private String volume; + /** + * 故障信息 + */ + @ApiModelProperty(value = "/**故障信息*/") + private String faulty_info; + /** + * 完成托盘数 + */ + @ApiModelProperty(value = "/**完成托盘数*/") + private String finish_pallet_qty; + /** + * 机械手完成托盘数 + */ + @ApiModelProperty(value = "/**机械手完成托盘数*/") + private String mechanical_pallet_qty; + /** + * 机械手完成数量 + */ + @ApiModelProperty(value = "/**机械手完成数量*/") + private String mechanical_arm_qty; + /** + * 包装机完成数量 + */ + @ApiModelProperty(value = "/**包装机完成数量*/") + private String pack_qty; + /** + * 完成跺数 + */ + @ApiModelProperty(value = "/**完成跺数*/") + private String finish_pile_qty; + /** + * 混碾机,破碎机本日生产信息 + */ + List mixingList; + /** + * 压力机,机械手本日生产信息 + */ + List crushingList; + /** + * 窑本日生产信息 + */ + List mKilnList; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceStatusDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceStatusDto.java index 6e76042..1a1af3d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceStatusDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/dto/DeviceStatusDto.java @@ -18,57 +18,57 @@ import java.math.BigDecimal; @NoArgsConstructor @AllArgsConstructor public class DeviceStatusDto implements Serializable{ - /** - * 点位标识 - */ - @JsonSerialize(using = ToStringSerializer.class) - private Long point_id; - /** - * 点位编码 - */ - private String point_code; - /** - * 设备名称 - */ - private String point_name; - /** - * 设备状态枚举 - */ - private String point_status; - /** - * 设备状态:1未生产2已下发3生产中4暂停5完成 - */ - private String point_status_name; - /** - * 当前生产物料ID - */ - private Long material_id; - /** - * 当前生产名称 - */ - private String material_name; - /** - * 重量(如混料 24.00*0.89,0.89为重量) - */ - private BigDecimal ivt_weight; - /** - * 已工作时间 - */ - private String work_time; - /** - * 已生产数量 - */ - private BigDecimal ivt_qty; - /** - * 载具数量(当前窑车数) - */ - private Integer vehicle_qty; - /** - * 容量 - */ - private BigDecimal vehicle_max_qty; - /** - * 设备图片 - */ - private String device_url; + /** + * 点位标识 + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long point_id; + /** + * 点位编码 + */ + private String point_code; + /** + * 设备名称 + */ + private String point_name; + /** + * 设备状态枚举 + */ + private String point_status; + /** + * 设备状态:1未生产2已下发3生产中4暂停5完成 + */ + private String point_status_name; + /** + * 当前生产物料ID + */ + private Long material_id; + /** + * 当前生产名称 + */ + private String material_name; + /** + * 重量(如混料 24.00*0.89,0.89为重量) + */ + private BigDecimal ivt_weight; + /** + * 已工作时间 + */ + private String work_time; + /** + * 已生产数量 + */ + private BigDecimal ivt_qty; + /** + * 载具数量(当前窑车数) + */ + private Integer vehicle_qty; + /** + * 容量 + */ + private BigDecimal vehicle_max_qty; + /** + * 设备图片 + */ + private String device_url; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 3c5796f..1aa6346 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -86,7 +86,6 @@ public class AcsToWmsController { @PostMapping("/ispackage") @Log("ACS给WMS请求是否优先包装") @ApiOperation("ACS给WMS请求是否优先包装") - public ResponseEntity ispackage(@RequestBody Map whereJson) { return new ResponseEntity<>(acsToWmsService.ispackage(whereJson), HttpStatus.OK); } @@ -131,4 +130,20 @@ public class AcsToWmsController { public ResponseEntity againApply(@RequestBody String task_id) { return new ResponseEntity<>(acsToWmsService.againApply(task_id), HttpStatus.OK); } + + @PostMapping("/feedbackVehicleType") + @Log("更新覆膜机条码") + @ApiOperation("更新覆膜机条码") + @SaIgnore + public ResponseEntity feedbackVehicleType(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.feedbackVehicleType(param), HttpStatus.OK); + } + + @PostMapping("/getVehicleInfo") + @Log("根据载具编码获取托盘信息") + @ApiOperation("根据载具编码获取托盘信息") + @SaIgnore + public ResponseEntity getVehicleInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToWmsService.getVehicleInfo(whereJson), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 2752bd7..c185173 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -46,10 +46,10 @@ public interface AcsToWmsService { * ACS客户端--->LMS服务端 * 任务申请 * - * @param whereJson 条件 + * @param param 条件 * @return JSONObject */ - JSONObject apply(JSONObject whereJson) ; + JSONObject apply(JSONObject param) ; /** * ACS机械手给WMS发送任务 @@ -100,4 +100,8 @@ public interface AcsToWmsService { * @return Map */ Map getVehicleInfoByDeviceCode(Map jsonObject); + + JSONObject feedbackVehicleType(JSONObject param); + + JSONObject getVehicleInfo(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java index 7cd3033..7987298 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java @@ -62,4 +62,8 @@ public interface WmsToAcsService { * @return */ JSONObject getTray(JSONArray whereJson); + + /** + * 获取点位 + */ } 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 f9ff307..0f82680 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 @@ -13,30 +13,25 @@ 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.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleStatus; +import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.basedata.service.dto.VehicleDto; import org.nl.wms.ext.acs.service.AcsToWmsService; - import org.nl.wms.sch.manage.*; -import org.nl.wms.sch.service.TaskService; -import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; -import org.nl.wms.sch.tasks.callEmpty.HnCallEmptyVehicleTask; -import org.nl.wms.sch.tasks.callEmpty.YzjCallEmptyVehicleTask; -import org.nl.wms.sch.tasks.callMaterial.FjCallMaterialTask; -import org.nl.wms.sch.tasks.callMaterial.YzjCallMaterialTask; -import org.nl.wms.sch.tasks.sendEmpty.DpSendEmpVehicleTask; -import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask; -import org.nl.wms.sch.tasks.sendEmpty.YzjSendEmpVehicleTask; -import org.nl.wms.sch.tasks.sendMaterial.FjSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.HnSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.SzSendMaterialTask; -import org.nl.wms.sch.tasks.sendMaterial.YzjSendMaterialTask; +import org.nl.wms.sch.task.call.empty.HLCallEmptyTask; +import org.nl.wms.sch.task.call.empty.YZCallEmptyTask; +import org.nl.wms.sch.task.call.material.SZCallMaterialTask; +import org.nl.wms.sch.task.send.material.HLSendMaterialTask; +import org.nl.wms.sch.task.send.material.SZSendMaterialTask; +import org.nl.wms.sch.task.send.material.YZSendMaterialTask; +import org.nl.wms.sch.task.util.TaskUtils; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -45,19 +40,28 @@ import java.util.concurrent.TimeUnit; @RequiredArgsConstructor @Slf4j public class AcsToWmsServiceImpl implements AcsToWmsService { - private final TaskService taskService; private final RedissonClient redissonClient; + private final HLCallEmptyTask hlCallEmptyTask; + + private final HLSendMaterialTask hlSendMaterialTask; + + private final YZCallEmptyTask yzCallEmptyTask; + + private final YZSendMaterialTask yzSendMaterialTask; + + private final SZSendMaterialTask szSendMaterialTask; + /** * task_id:任务标识 * task_code:任务编码 * task_status:1:执行中,2:完成 ,3:acs取消 * * @param string 条件 - * @returnzss + * @return zss */ - + @Transactional(rollbackFor = Exception.class) @Override public Map receiveTaskStatusAcs(String string) { JSONArray array = JSONArray.parseArray(string); @@ -65,10 +69,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONArray errArr = new JSONArray(); for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); - String task_id = row.getString("ext_task_uuid"); - if (ObjectUtil.isEmpty(task_id)) throw new BadRequestException("任务号不能为空"); - row.put("task_id", task_id); - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + String task_code = row.getString("task_code"); + if (ObjectUtil.isEmpty(task_code)) throw new BadRequestException("任务编码不能为空!"); + String task_id = row.getString("task_id"); + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_code = '" + task_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("未找到任务编码为 [" + task_code + "] 的任务"); + } // 任务处理类 String processing_class = taskObj.getString("handle_class"); //1:执行中,2:完成 ,3:acs取消 @@ -76,40 +83,27 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String message = ""; String status = ""; if ("1".equals(acs_task_status)) { - status = UpdateTaskStatusEnum.EXECUTION.getCode(); + status = TaskStatus.EXECUTING.value(); } if ("2".equals(acs_task_status)) { - status = UpdateTaskStatusEnum.FORCEFINISH.getCode(); + status = TaskStatus.FINISHED.value(); } if ("3".equals(acs_task_status)) { - status = UpdateTaskStatusEnum.CANCEL.getCode(); + status = TaskStatus.CANCELLED.value(); } // 任务处理类 try { Class clz = Class.forName(processing_class); - Object obj = clz.newInstance(); - // 调用每个任务类的updateTaskStatus()强制结束方法 - Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class); - m.invoke(obj, row, status); - } catch (InvocationTargetException e) { - e.printStackTrace(); - //空指针 - if (ObjectUtil.isNull(e.getTargetException().getMessage())) { - message = e.getTargetException().toString(); + AbstractAcsTask task_bean = (AbstractAcsTask) SpringContextHolder.getBean(clz); + if ("4".equals(acs_task_status)) { + task_bean.pickUpComplete(taskObj); } else { - message = e.getTargetException().getMessage(); + task_bean.updateTaskStatus(taskObj, status); } - log.info("任务状态更新失败:{}", message); - - JSONObject json = new JSONObject(); - json.put("task_id", task_id); - json.put("message", message); - errArr.add(json); - } catch (Exception e) { e.printStackTrace(); message = e.getMessage(); - log.info("任务状态更新失败:{}", message); + log.error("任务状态更新失败:{}", message); JSONObject json = new JSONObject(); json.put("task_id", task_id); @@ -120,7 +114,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); + result.put("message", "任务状态反馈成功!"); result.put("data", new JSONObject()); result.put("errArr", errArr); return result; @@ -131,7 +125,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public String againApply(String task_id) { log.info("输入参数:" + task_id); WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status <> '" + TaskStatus.FINISHED.value() + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonTask)) throw new BadRequestException("任务已删除或已完成!"); String point_code = ""; @@ -182,166 +176,113 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override @Transactional(rollbackFor = Exception.class) - public JSONObject apply(JSONObject whereJson) { - String type = whereJson.getString("type"); - String point_code = whereJson.getString("device_code"); - String vehicle_code = whereJson.getString("vehicle_code"); - String is_full = whereJson.getString("is_full"); - String weight = whereJson.getString("weight"); - String qty = whereJson.getString("qty"); - - RLock lock = redissonClient.getLock("acs_to_wms:" + type); - boolean tryLock = false; + public JSONObject apply(JSONObject param) { + String point_code = param.getString("device_code"); + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); + } + RLock lock = redissonClient.getFairLock("acs_to_wms:" + point_code); + boolean try_lock = false; try { - tryLock = lock.tryLock(5, TimeUnit.SECONDS); - if (tryLock) { - if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空"); - if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空"); + try_lock = lock.tryLock(5, TimeUnit.SECONDS); + if (try_lock) { + JSONObject point = param.getJSONObject("point"); + if (ObjectUtil.isEmpty(point)) { + point = WQLObject + .getWQLObject("sch_base_point") + .query("is_used = '1' AND point_code = '" + point_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("[" + point_code + "] 已删除或未启用!"); + } + } + TaskUtils.isLocked(point); - /** - * 类型映射 - * 1: 送料入库 - * 2: 叫料出库 - * 3: 送空托盘 - * 4: 叫空托盘 - */ - String regionId = WQLObject - .getWQLObject("sch_base_point") - .query("point_code = '" + point_code + "'") - .uniqueResult(0) - .getString("region_id"); + String type = param.getString("type"); + if (StrUtil.isBlank(type)) { + throw new BadRequestException("任务类型不能为空!"); + } - RegionEnum regionEnum = RegionEnum.get(regionId); + Region region = Region.get(point.getString("region_code")); - // 参数统一获取 - JSONObject param = new JSONObject(); - param.put("vehicle_code", vehicle_code); - param.put("is_full", is_full); - param.put("weight", weight); - param.put("qty", qty); - - /* - * 根据type判断是什么业务类型: - * 1.混碾机送料入库-困料货架 - * 2.混碾机呼叫空托盘 - * 3.压制机上料位叫料出库 - * 4.压制机上料位送空盅 - * 5.压制机满料入库 - * 6.压制机呼叫空钢托盘 - * 8.烧制送料入库 - * 9.分拣叫料出库 - * 10.分拣送空钢托盘 - * 11.分拣送料入库 - * 12.分拣呼叫木托盘 - * 13.叠盘区送空钢托盘 - */ + JSONObject method_param = new JSONObject(); + method_param.put("point", point); + method_param.put("create_mode", CreateMode.ACSSQ.value()); + String request_param = param.getString("request_param"); + if (StrUtil.isBlank(request_param)) { + request_param = param.toJSONString(); + } + method_param.put("request_param", request_param); + method_param.put("create_id", ACSSystem.id); + method_param.put("create_name", ACSSystem.nick_name); switch (type) { case "1": - switch (regionEnum) { - case HNQ: - // 1.混碾机送料入库:混碾机物料送到困料货架 - // 创建任务 - param.put("point_code1", point_code); // 起点 - SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param); + // 送料 + String vehicle_code = param.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code) || "0".equals(vehicle_code)) { + throw new BadRequestException("载具号不能为空!"); + } + method_param.put("vehicle_code", TaskUtils.formatVehicleCode(vehicle_code)); + + switch (region) { + case HL: + hlSendMaterialTask.createTask(method_param); break; - case YZQ: - // 5.压制机满料入库 - param.put("point_code1", point_code); // 起点 - param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的 - // 创建任务 - SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param); + case YZ: + method_param.put("workorder", param.getJSONObject("workorder")); + method_param.put("vd", param.getJSONObject("vd")); + yzSendMaterialTask.createTask(method_param); break; - case YQ: - // 8.烧制送料入库 - param.put("point_code1", point_code); // 起点 - SpringContextHolder.getBean(SzSendMaterialTask.class).createTask(param); - break; - case ZDCDX: - // 11.分拣送料入库 - param.put("point_code1", point_code); // 起点 - param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的 - SpringContextHolder.getBean(FjSendMaterialTask.class).createTask(param); + case SZ: + szSendMaterialTask.createTask(method_param); break; default: - throw new BadRequestException("ACS任务类型错误"); + throw new BadRequestException("[" + region.label() + "] 不存在送料任务!"); } break; case "2": - switch (regionEnum) { - case YZQ: - // 3.压制机叫料任务 - param.put("point_code2", point_code); // 终点 - // 创建任务 - SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param); - break; - case ZDCDX: - // 9.分拣叫料出库 - param.put("point_code2", point_code); // 终点 - SpringContextHolder.getBean(FjCallMaterialTask.class).createTask(param); + // 叫料 + switch (region) { + case FJ: break; default: - throw new BadRequestException("ACS任务类型错误"); + throw new BadRequestException("[" + region.label() + "] 不存在叫料任务!"); } break; case "3": - switch (regionEnum) { - case YZQ: - // 4.压制机送空盅 - param.put("point_code1", point_code); // 起点 - // 创建任务 - SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param); - break; - case ZDCDX: - // 10.分拣送钢托盘 - param.put("point_code1", point_code); // 起点 - SpringContextHolder.getBean(FjSendEmpVehicleTask.class).createTask(param); - break; - case KGTDPQ: - // 13.叠盘区送空钢托盘 - param.put("point_code1", point_code); // 起点 - SpringContextHolder.getBean(DpSendEmpVehicleTask.class).createTask(param); - break; - default: - throw new BadRequestException("ACS任务类型错误"); - } + // 送空 break; case "4": - switch (regionEnum) { - case HNQ: - // 2.混碾机呼叫空托盘 - param.put("point_code2", point_code); // 终点 - // 创建任务 - SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param); + // 叫空 + switch (region) { + case HL: + hlCallEmptyTask.createTask(method_param); break; - case YZQ: - // 6.压制机呼叫空托盘 - param.put("point_code2", point_code); // 终点 - // 创建任务 - SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param); + case YZ: + yzCallEmptyTask.createTask(method_param); break; - case ZDCDX: - // 12.分拣呼叫木托盘 - param.put("point_code2", point_code); // 起点 - SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); + case GTK: break; default: - throw new BadRequestException("ACS任务类型错误"); + throw new BadRequestException("[" + region.label() + "] 不存在叫空任务!"); } break; default: - throw new BadRequestException("ACS任务类型错误"); + throw new BadRequestException("未知任务类型!"); } - - } - } catch (Exception e) { - e.printStackTrace(); + } catch (InterruptedException e) { + log.error("lock fail!", e); } finally { - if (tryLock) { + if (try_lock) { lock.unlock(); } } - return null; + + JSONObject result = new JSONObject(); + result.put("message", "申请任务成功!"); + result.put("status", HttpStatus.OK.value()); + return result; } /** @@ -350,97 +291,135 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { * * @param jsonObject */ + @Transactional(rollbackFor = Exception.class) @Override public void manipulatorApply(JSONObject jsonObject) { - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - //组盘 - JSONObject produceInfoByCode = new JSONObject(); - String device_code = jsonObject.getString("device_code"); // 对接位 - // vehicle_code 载具编码 - String vehicle_code = String.format("%04d", jsonObject.getIntValue("vehicle_code")); - String qty = String.valueOf(jsonObject.get("qty")); - produceInfoByCode = this.getProduceInfoByCode(device_code); // 获取设备的 - String material_id = produceInfoByCode.getString("material_id"); - String cust_id = produceInfoByCode.getString("cust_id"); - String producetask_id = produceInfoByCode.getString("workorder_id"); - // 物料 - JSONObject materialObj = WQLObject - .getWQLObject("MD_ME_MaterialBase") - .query("material_id = '" + material_id + "'") + String point_code = jsonObject.getString("device_code"); // 对接位 + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); + } + String vehicle_code = jsonObject.getString("vehicle_code"); + vehicle_code = TaskUtils.formatVehicleCode(vehicle_code); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + String qty = jsonObject.getString("qty"); + if (StrUtil.isBlank(qty)) { + throw new BadRequestException("数量不能为空!"); + } + String weight = jsonObject.getString("weight"); + if (StrUtil.isBlank(weight)) { + throw new BadRequestException("重量不能为空!"); + } + String is_full = jsonObject.getString("is_full"); + if (StrUtil.isBlank(is_full)) { + throw new BadRequestException("是否满拖不能为空!"); + } + + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("is_used = '1' AND point_code = '" + point_code + "'") .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("[" + point_code + "] 已删除或未启用!"); + } + TaskUtils.isLocked(point); - groupTab.delete("vehicle_code = '" + vehicle_code + "'"); + JSONObject work_order = TaskUtils.hasWorkOrder(point); + + String vehicle_type = null; + if (work_order.getString("device_code").startsWith("FJ")) { + vehicle_type = work_order.getString("vehicle_type"); + } else if (work_order.getString("device_code").startsWith("YZ")) { + vehicle_type = VehicleType.STEEL_TRAY.value(); + } else if (work_order.getString("device_code").startsWith("HL")) { + vehicle_type = VehicleType.CUP.value(); + } + + WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + JSONObject vd_update = new JSONObject(); + vd_update.put("is_delete", TrueOrFalse.TRUE.value()); + vd_table.update(vd_update, "vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'"); + + JSONObject vd = new JSONObject(); + vd.put("vd_id", IdUtil.getSnowflake(1, 1).nextId()); + vd.put("vehicle_type", VehicleType.STEEL_TRAY.value()); + vd.put("vehicle_code", vehicle_code); + vd.put("material_id", work_order.getString("material_id")); + vd.put("qty", qty); + vd.put("weight", weight); + vd.put("is_full", is_full); + vd.put("workorder_id", work_order.getString("workorder_id")); + vd.put("point_code", point_code); + vd.put("tray_high", jsonObject.get("tray_high")); + vd.put("crib_category", jsonObject.get("crib_category")); + vd.put("palletX1_line", jsonObject.get("palletX1_line")); + vd.put("palletY1_row", jsonObject.get("palletY1_row")); + vd.put("palletA1_angle", jsonObject.get("palletA1_angle")); + vd.put("palletX2_line", jsonObject.get("palletX2_line")); + vd.put("palletY2_row", jsonObject.get("palletY2_row")); + vd.put("palletA2_angle", jsonObject.get("palletA2_angle")); + vd.put("palletX3_line", jsonObject.get("palletX3_line")); + vd.put("palletY3_row", jsonObject.get("palletY3_row")); + vd.put("palletA3_angle", jsonObject.get("palletA3_angle")); + vd.put("pressCribX1_line", jsonObject.get("pressCribX1_line")); + vd.put("pressCribY1_row", jsonObject.get("pressCribY1_row")); + vd.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle")); + vd.put("pressCribX2_line", jsonObject.get("pressCribX2_line")); + vd.put("pressCribY2_row", jsonObject.get("pressCribY2_row")); + vd.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle")); + vd.put("pressCribX3_line", jsonObject.get("pressCribX3_line")); + vd.put("pressCribY3_row", jsonObject.get("pressCribY3_row")); + vd.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle")); + vd.put("Zoffset", jsonObject.get("Zoffset")); + vd.put("pallet_layerQty", jsonObject.get("pallet_layerQty")); + vd.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); + vd.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval")); + vd.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval")); + vd.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval")); + vd.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval")); + vd.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); + vd.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval")); + vd.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset")); + vd.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset")); + vd.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset")); + vd.put("codeLayerY2_offset", jsonObject.get("codeLayerY2_offset")); + vd.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset")); + vd.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset")); + vd.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval")); + vd.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval")); + vd.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval")); + vd.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval")); + vd.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval")); + vd.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval")); + vd.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset")); + vd.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset")); + vd.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset")); + vd.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset")); + vd.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset")); + vd.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset")); + vd.put("tool_coordinate", jsonObject.get("tool_coordinate")); + vd.put("create_id", ACSSystem.id); + vd.put("create_name", ACSSystem.nick_name); + vd.put("create_time", DateUtil.now()); + vd.put("is_delete", TrueOrFalse.FALSE.value()); + vd.put("is_fire", TrueOrFalse.FALSE.value()); + vd.put("is_in_kiln", TrueOrFalse.trueOrFalse(is_full) ? TrueOrFalse.TRUE.value() : TrueOrFalse.FALSE.value()); + vd_table.insert(vd); + + JSONObject vehicle_update = new JSONObject(); + vehicle_update.put("vehicle_status", VehicleStatus.NOT_EMPTY.value()); + WQLObject.getWQLObject("md_pb_vehicle").update(vehicle_update, "vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'"); - JSONObject groupObj = new JSONObject(); - groupObj.put("group_id", IdUtil.getSnowflake(1, 1).nextId()); - groupObj.put("vehicle_code", vehicle_code); - groupObj.put("material_uuid", material_id); - groupObj.put("material_code", materialObj.getString("material_code")); - groupObj.put("material_name", materialObj.getString("material_name")); - groupObj.put("cust_id", cust_id); - groupObj.put("qty", qty); - groupObj.put("producetask_id", producetask_id); - groupObj.put("tray_qty", jsonObject.get("tray_qty")); - groupObj.put("crib_category", jsonObject.get("crib_category")); - groupObj.put("tray_high", jsonObject.get("tray_high")); - groupObj.put("palletX1_line", jsonObject.get("palletX1_line")); - groupObj.put("palletY1_row", jsonObject.get("palletY1_row")); - groupObj.put("palletA1_angle", jsonObject.get("palletA1_angle")); - groupObj.put("palletX2_line", jsonObject.get("palletX2_line")); - groupObj.put("palletY2_row", jsonObject.get("palletY2_row")); - groupObj.put("palletA2_angle", jsonObject.get("palletA2_angle")); - groupObj.put("palletX3_line", jsonObject.get("palletX3_line")); - groupObj.put("palletY3_row", jsonObject.get("palletY3_row")); - groupObj.put("pressCribX1_line", jsonObject.get("pressCribX1_line")); - groupObj.put("palletA3_angle", jsonObject.get("palletA3_angle")); - groupObj.put("pressCribY1_row", jsonObject.get("pressCribY1_row")); - groupObj.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle")); - groupObj.put("pressCribX2_line", jsonObject.get("pressCribX2_line")); - groupObj.put("pressCribY2_row", jsonObject.get("pressCribY2_row")); - groupObj.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle")); - groupObj.put("pressCribX3_line", jsonObject.get("pressCribX3_line")); - groupObj.put("pressCribY3_row", jsonObject.get("pressCribY3_row")); - groupObj.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle")); - groupObj.put("Zoffset", jsonObject.get("Zoffset")); - groupObj.put("pallet_layerQty", jsonObject.get("pallet_layerQty")); - groupObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); - groupObj.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval")); - groupObj.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval")); - groupObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty")); - groupObj.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval")); - groupObj.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval")); - groupObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); - groupObj.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval")); - groupObj.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset")); - groupObj.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset")); - groupObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval")); - groupObj.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset")); - groupObj.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset")); - groupObj.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset")); - groupObj.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval")); - groupObj.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval")); - groupObj.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval")); - groupObj.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval")); - groupObj.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval")); - groupObj.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval")); - groupObj.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset")); - groupObj.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset")); - groupObj.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset")); - groupObj.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset")); - groupObj.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset")); - groupObj.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset")); - groupObj.put("one_cribTotal", jsonObject.get("one_cribTotal")); - groupObj.put("two_cribTotal", jsonObject.get("two_cribTotal")); - groupObj.put("one_qty", jsonObject.get("one_qty")); - groupObj.put("two_qty", jsonObject.get("two_qty")); - groupObj.put("tool_coordinate", jsonObject.get("tool_coordinate")); - groupObj.put("create_id", "22"); - groupObj.put("create_name", "ACS系统"); - groupObj.put("create_time", DateUtil.now()); - groupTab.insert(groupObj); // 入库 - jsonObject.put("type", "1"); - this.apply(jsonObject); + JSONObject param = new JSONObject(); + param.put("device_code", point.getString("point_code")); + param.put("point", point); + param.put("workorder", work_order); + param.put("vd", vd); + param.put("type", "1"); + param.put("request_param", jsonObject); + this.apply(param); } /** @@ -491,7 +470,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { String now = DateUtil.now(); dto.setVehicle_code(vehicle_code); dto.setCreate_id(currentUserId); - dto.setVehicle_name(vehicle_code); dto.setCreate_name(nickName); dto.setUpdate_optid(currentUserId); dto.setUpdate_optname(nickName); @@ -528,54 +506,55 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Override @Transactional(rollbackFor = Exception.class) public Map sureWorkOrder(Map jsonObject) { - // 工单编号、设备编号、物料编号、数量、类型 - String workorder_code = (String) jsonObject.get("workorder_code"); - String device_code = (String) jsonObject.get("device_code"); - String material_code = (String) jsonObject.get("material_code"); - String qty = String.valueOf(jsonObject.get("qty")); String type = (String) jsonObject.get("type"); if (StrUtil.isEmpty(type)) { throw new BadRequestException("类型不能为空!"); } - WQLObject taskTable = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - JSONObject orderObj = taskTable.query("workorder_code = '" + workorder_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(orderObj)) { - throw new BadRequestException("未找到工单号为'" + workorder_code + "'的工单信息!"); + String workorder_code = (String) jsonObject.get("workorder_code"); + if (StrUtil.isEmpty(type)) { + throw new BadRequestException("工单编码不能为空!"); } - JSONObject materialObj = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("当前物料不存在!"); - //1为确认 - //2为生产中 - //3为完成 - if (StrUtil.equals(type, "1")) { - if (StrUtil.isEmpty(workorder_code)) { - throw new BadRequestException("工单号不能为空!"); + WQLObject workorder_table = WQLObject.getWQLObject("pdm_bd_workorder"); + JSONObject workorder = workorder_table + .query("workorder_code = '" + workorder_code + "'") + .uniqueResult(0); + + if ("1".equals(type)) { + // 排产确认 + if (workorder.getIntValue("order_status") < 3) { + workorder.put("order_status", WorkOrderEnum.ORDER_STATUS_PRODUCING.value()); + workorder.put("realproducestart_date", DateUtil.now()); + workorder_table.update(workorder); } - if (StrUtil.isEmpty(device_code)) { - throw new BadRequestException("设备点位不能为空!"); - } - if (StrUtil.isEmpty(material_code)) { - throw new BadRequestException("物料编码不能为空!"); + } else if ("2".equals(type)) { + // 工单完成 + String qty = (String) jsonObject.get("qty"); + if (StrUtil.isBlank(qty)) { + throw new BadRequestException("数量不能为空!"); } - if (!StrUtil.equals(materialObj.getString("material_id"), orderObj.getString("material_id"))) { - throw new BadRequestException("物料标识不一样!"); - } - orderObj.put("order_status", WorkOrderEnum.ORDER_STATUS_DELIVERED.getCode()); + if (workorder.getIntValue("order_status") < 5) { + workorder.put("order_status", WorkOrderEnum.ORDER_STATUS_FINISH.value()); + workorder.put("real_qty", qty); + String unqualified_qty = (String) jsonObject.get("unqualified_qty"); + if (StrUtil.isNotBlank(unqualified_qty) && !"0".equals(unqualified_qty)) { + workorder.put("unqualified_qty", unqualified_qty); + } + String qualified_qty = (String) jsonObject.get("qualified_qty"); + if (StrUtil.isNotBlank(qualified_qty) && !"0".equals(qualified_qty)) { + workorder.put("qualified_qty", qualified_qty); + } else { + workorder.put("qualified_qty", Integer.parseInt(qty) - workorder.getIntValue("unqualified_qty")); + } + workorder.put("realproduceend_date", DateUtil.now()); + workorder_table.update(workorder); + } } - if (StrUtil.equals("2", type)) { - orderObj.put("producetask_status", WorkOrderEnum.ORDER_STATUS_PRODUCING.getCode()); - } - if (StrUtil.equals("3", type)) { - orderObj.put("producetask_status", WorkOrderEnum.ORDER_STATUS_FINISH.getCode()); - orderObj.put("real_qty", qty); - } - taskTable.update(orderObj); + JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); - result.put("message", "任务状态反馈成功!"); - result.put("data", new JSONObject()); + result.put("message", "反馈工单状态成功"); return result; } @@ -638,33 +617,45 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { */ @Override public Map getVehicleInfoByDeviceCode(Map jsonObject) { - JSONObject vehicleObj = new JSONObject(); - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject materialTab = WQLObject.getWQLObject("MD_ME_MaterialBase"); - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); String point_code = (String) jsonObject.get("device_code"); - JSONObject point = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(point)) throw new BadRequestException("未找到点位编码为'" + point_code + "'的点位信息"); - String group_id = point.getString("group_id"); - JSONObject vehicleObj2 = groupTab.query("group_id = '" + group_id + "' AND is_delete='0'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(vehicleObj2)) vehicleObj = vehicleObj2; - // 获取工单 - String device_code = point.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("该设备当前未生产或者已删除"); - // 还需要返回砖型 - String material_id = workOrderObj.getString("material_id"); - JSONObject materialObj = materialTab.query("material_id = '" + material_id + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("物料不能为空"); - vehicleObj.put("AlongSide", materialObj.get("alongside")); - vehicleObj.put("BshortSide", materialObj.get("bshortside")); - vehicleObj.put("Htrapezoidal", materialObj.get("htrapezoidal")); - vehicleObj.put("Wthickness", materialObj.get("wthickness")); + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); + } + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("is_used = '1' AND point_code = '" + point_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("[" + point_code + "] 已删除或未启用!"); + } + TaskUtils.isLocked(point); + String vehicle_type = point.getString("vehicle_type"); + String vehicle_code = point.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_type) || StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("[" + point_code + "] 上缺少载具类型或载具编码!"); + } + + JSONObject data = null; + if (!"0000".equals(vehicle_code)) { + data = WQLObject + .getWQLObject("st_ivt_vehicle_detail") + .query("is_delete = '0' AND vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'") + .uniqueResult(0); + } + if (ObjectUtil.isNotEmpty(data)) { + assert data != null; + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_id = " + data.getString("material_id")).uniqueResult(0); + data.put("product_code", material.getString("product_code")); + data.put("AlongSide", material.getString("a")); + data.put("BshortSide", material.getString("b")); + data.put("Htrapezoidal", material.getString("h")); + data.put("Wthickness", material.getString("w")); + } + JSONObject result = new JSONObject(); result.put("status", HttpStatus.OK.value()); - result.put("message", "反馈成功!"); - result.put("data", vehicleObj); + result.put("message", "获取托盘信息成功!"); + result.put("data", data); return result; } @@ -682,4 +673,91 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } return productTaskObj; } + + @Override + public JSONObject feedbackVehicleType(JSONObject param) { + String point_code = param.getString("device_code"); + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); + } + String vehicle_type = param.getString("vehicle_type"); + if (StrUtil.isBlank(vehicle_type)) { + throw new BadRequestException("载具类型不能为空!"); + } + + JSONObject update = new JSONObject(); + update.put("vehicle_type", String.valueOf(Integer.parseInt(vehicle_type) + 2)); + WQLObject + .getWQLObject("sch_base_point") + .update(update, "point_code = '" + point_code + "'"); + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "反馈成功"); + return result; + } + + @Override + public JSONObject getVehicleInfo(JSONObject whereJson) { + String point_code = whereJson.getString("device_code"); + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); + } + String vehicle_code = whereJson.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code) || "0".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + JSONObject point = WQLObject + .getWQLObject("sch_base_point") + .query("is_used = '1' AND point_code = '" + point_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("[" + point_code + "] 已删除或未启用!"); + } + TaskUtils.isLocked(point); + + String region_code = point.getString("region_code"); + String vehicle_type = null; + if (Region.HL.value().equals(region_code)) { + vehicle_type = VehicleType.CUP.value(); + } else if (Region.YZ.value().equals(region_code)) { + vehicle_type = VehicleType.STEEL_TRAY.value(); + } else if (Region.FJ.value().equals(region_code)) { + if ("1".equals(point.getString("point_type"))) { + // 拆垛对接位 + vehicle_type = VehicleType.STEEL_TRAY.value(); + } else if ("2".equals(point.getString("point_type"))) { + // 码垛对接位 + JSONObject workorder = TaskUtils.hasWorkOrder(point); + vehicle_type = workorder.getString("vehicle_type"); + } + } + + if (StrUtil.isBlank(vehicle_type)) { + throw new BadRequestException("未知载具类型! b "); + } + + JSONObject data = null; + if (!"0000".equals(vehicle_code)) { + data = WQLObject + .getWQLObject("st_ivt_vehicle_detail") + .query("is_delete = '0' AND vehicle_type = '" + vehicle_type + "' AND vehicle_code = '" + vehicle_code + "'") + .uniqueResult(0); + } + if (ObjectUtil.isNotEmpty(data)) { + assert data != null; + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_id = " + data.getString("material_id")).uniqueResult(0); + data.put("product_code", material.getString("product_code")); + data.put("AlongSide", material.getString("a")); + data.put("BshortSide", material.getString("b")); + data.put("Htrapezoidal", material.getString("h")); + data.put("Wthickness", material.getString("w")); + } + + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "获取托盘信息成功!"); + result.put("data", data); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java deleted file mode 100644 index 7614ba1..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/auto/AutoQueryTask.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.nl.wms.ext.auto; - -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.wql.WQL; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.SpringContextHolder; -import org.nl.wms.ext.acs.service.WmsToAcsService; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.tasks.PointToPointTask; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Slf4j -public class AutoQueryTask { - - private final WmsToAcsService wmsToAcsService; - - @Transactional - public void run() { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - - PointToPointTask pointTaskBean = SpringContextHolder.getBean(PointToPointTask.class); - - // 1.查找起点为油漆线 物料下料位的任务 - JSONArray taskArr = WQL.getWO("AUTO_QUERYTASK").addParam("flag", "1").process().getResultJSONArray(0); - - for (int i = 0; i < taskArr.size(); i++) { - JSONObject jsonTask = taskArr.getJSONObject(i); - /* - * 1.查找输送线有没有空位 输送线1对1关系 调用获取点位状态接口 - * 2.判断有空位的输送线是否有任务:起点和终点都要判断 - * 输送线点位:SSX01A1 - SSX01A2 ,SSX02A1 - SSX02A2 - */ - // 2.查找输送线空位,调用获取点位状态接口 - JSONArray paramArr = new JSONArray(); - - JSONObject pointA1 = new JSONObject(); - pointA1.put("device_code", "SSX01A1"); - paramArr.add(pointA1); - - JSONObject pointA2 = new JSONObject(); - pointA2.put("device_code", "SSX01A2"); - paramArr.add(pointA2); - - JSONObject pointB1 = new JSONObject(); - pointB1.put("device_code", "SSX02A1"); - paramArr.add(pointB1); - - JSONObject pointB2 = new JSONObject(); - pointB2.put("device_code", "SSX02A2"); - paramArr.add(pointB2); - - JSONObject result = wmsToAcsService.getPointStatus(paramArr); - - if (StrUtil.equals(result.getString("status"), "200")) { - JSONObject jsonPointAfter = new JSONObject(); // 处理后的json - - JSONArray dataArr = result.getJSONArray("data"); - // 3.处理返回的数据,处理后为json,key为点位编码,value为状态 - for (int j = 0; j < dataArr.size(); j++) { - JSONObject jsonObject = dataArr.getJSONObject(j); - - String device_code = jsonObject.getString("device_code"); - switch (device_code) { - case "SSX01A1" : - jsonPointAfter.put("SSX01A1",jsonObject.getString("move")); - break; - case "SSX01A2" : - jsonPointAfter.put("SSX01A2",jsonObject.getString("move")); - break; - case "SSX02A1" : - jsonPointAfter.put("SSX02A1",jsonObject.getString("move")); - break; - case "SSX02A2" : - jsonPointAfter.put("SSX02A2",jsonObject.getString("move")); - break; - } - } - JSONObject map = new JSONObject(); - // 4.1判断SSX01A1 、 SSX01A2是否是空位 无任务 - if (StrUtil.equals(jsonPointAfter.getString("SSX01A1"), "0") && StrUtil.equals(jsonPointAfter.getString("SSX01A2"), "0")) { - // 4.2如果都是空位 则判断是否有正在进行的任务 - map.put("flag", "2"); - map.put("point_code1", "('SSX01A1','SSX01A2')"); - // 查找起点是否有任务 - JSONArray is_stara = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); - // 查询终点是否有任务 - map.put("flag", "3"); - map.put("end_point_code", "('SSX01A1','SSX01A2')"); - JSONArray is_end = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); - - if (ObjectUtil.isEmpty(is_stara) && ObjectUtil.isEmpty(is_end)) { - // 4.3.更新任务终点点位 - jsonTask.put("point_code2", "SSX01A1"); - taskTab.update(jsonTask); - // 4.4.下发ACS - JSONObject jsonResultAcs = pointTaskBean.notifyAcs(jsonTask.getString("task_id")); - - if (StrUtil.equals(jsonResultAcs.getString("status"), "200")) { - // 4.5.下发成功、更新任务状态 - jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode()); - taskTab.update(jsonTask); - } - // 5.1判断SSX02A1 、 SSX02A2是否是空位 无任务 - } else if (StrUtil.equals(jsonPointAfter.getString("SSX02A1"), "0") && StrUtil.equals(jsonPointAfter.getString("SSX02A2"), "0")) { - // 5.2如果都是空位 则判断是否有正在进行的任务 - map.put("flag", "2"); - map.put("point_code1", "('SSX02A1','SSX02A2')"); - // 查找起点是否有任务 - JSONArray is_stara2 = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); - // 查询终点是否有任务 - map.put("flag", "3"); - map.put("end_point_code", "('SSX02A1','SSX02A2')"); - JSONArray is_end2 = WQL.getWO("AUTO_QUERYTASK").addParamMap(map).process().getResultJSONArray(0); - - if (ObjectUtil.isEmpty(is_stara2) && ObjectUtil.isEmpty(is_end2)) { - // 5.3.更新任务终点点位 - jsonTask.put("point_code2", "SSX02A1"); - taskTab.update(jsonTask); - // 5.4.下发ACS - JSONObject jsonResultAcs = pointTaskBean.notifyAcs(jsonTask.getString("task_id")); - - if (StrUtil.equals(jsonResultAcs.getString("status"), "200")) { - // 4.5.下发成功、更新任务状态 - jsonTask.put("task_status", TaskStatusEnum.ISSUE.getCode()); - taskTab.update(jsonTask); - } - } - } - } - } - } - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql deleted file mode 100644 index 616375a..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/wql/AUTO_QUERYTASK.wql +++ /dev/null @@ -1,92 +0,0 @@ -[交易说明] - 交易名: 二楼到一楼业务 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.point_code1 TYPEAS f_string - 输入.end_point_code TYPEAS f_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - task.* - FROM - SCH_BASE_Task task - WHERE - task.is_delete = '0' - AND task.task_status = '1' - AND task.point_code1 in ('YQX01_WX','YQX02_WX') - - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - task.* - FROM - SCH_BASE_Task task - WHERE - task.is_delete = '0' - AND task.task_status <> '99' - - OPTION 输入.point_code1 <> "" - task.point_code1 in 输入.point_code1 - ENDOPTION - - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - QUERY - SELECT - task.* - FROM - SCH_BASE_Task task - WHERE - task.is_delete = '0' - AND task.task_status <> '99' - - OPTION 输入.end_point_code <> "" - task.point_code2 in 输入.end_point_code - ENDOPTION - - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/anno/PdaAnnotation.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/anno/PdaAnnotation.java new file mode 100644 index 0000000..ab92352 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/anno/PdaAnnotation.java @@ -0,0 +1,8 @@ +package org.nl.wms.pda.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +public @interface PdaAnnotation { +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java index e08029e..1570563 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java @@ -6,11 +6,11 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.logging.annotation.Log; -import org.nl.wms.pda.service.PdaService; import org.nl.wms.pda.util.PdaUtils; -import org.nl.wms.sch.manage.RegionEnum; -import org.springframework.http.ResponseEntity; +import org.nl.wms.pda.anno.PdaAnnotation; +import org.nl.wms.pda.service.PdaService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -31,192 +31,41 @@ public class PdaController { private final PdaService pdaService; - @PostMapping("/warehouse") - @Log("查询所有库区") - @ApiOperation("查询所有库区") - public ResponseEntity warehouse() { - log.info("辽宁晟华手持 [查询所有库区] 接口被请求"); - - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.warehouse()); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } + @PostMapping("/queryRegion") + @Log("查询区域") + @ApiOperation("查询区域") + @PdaAnnotation + public JSONObject queryRegion() { + return PdaUtils.buildSuccessResultJSON(pdaService.queryRegion()); } - @PostMapping("/point") - @Log("根据区域查询点位") - @ApiOperation("根据区域查询点位") - public ResponseEntity point(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [根据区域查询点位] 接口被请求, 请求参数-{}", param); - - String region_code = param.getString("region_code"); - if (StrUtil.isEmpty(region_code)) { - return PdaUtils.buildFailResponseEntity("区域不能为空"); - } - - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.point(region_code)); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); + @PostMapping("/queryPoint") + @Log("查询对接位") + @ApiOperation("查询对接位") + @PdaAnnotation + public JSONObject queryPoint(@RequestBody JSONObject request_body) { + String type = request_body.getString("type"); + if (StrUtil.isBlank(type)) { + throw new BadRequestException("未知界面!"); } + return PdaUtils.buildSuccessResultJSON(pdaService.queryPoint(type)); } - @PostMapping("/pointInfo") - @Log("查询点位详细信息") - @ApiOperation("查询点位详细信息") - public ResponseEntity pointInfo(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [查询点位详细信息] 接口被请求, 请求参数-{}", param); - - String region_code = param.getString("region_code"); - if (StrUtil.isEmpty(region_code)) { - return PdaUtils.buildFailResponseEntity("区域不能为空"); + @PostMapping("/createTask") + @Log("创建任务") + @ApiOperation("创建任务") + @PdaAnnotation + public JSONObject createTask(@RequestBody JSONObject request_body) { + String type = request_body.getString("type"); + if (StrUtil.isBlank(type)) { + throw new BadRequestException("未知任务类型!"); } - String point_code = param.getString("point_code"); - if (StrUtil.isEmpty(point_code)) { - return PdaUtils.buildFailResponseEntity("点位不能为空"); + String point_code = request_body.getString("point_code"); + if (StrUtil.isBlank(point_code)) { + throw new BadRequestException("点位不能为空!"); } - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.pointInfo(region_code, point_code)); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/material") - @Log("查询物料") - @ApiOperation("查询物料") - public ResponseEntity material(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [查询物料] 接口被请求, 请求参数-{}", param); - - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.material( - param.getString("condition") - )); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/stockOperation") - @Log("库存操作") - @ApiOperation("库存操作") - public ResponseEntity stockOperation(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [库存操作] 接口被请求, 请求参数-{}", param); - - try { - String type = param.getString("type"); - if (StrUtil.isEmpty(type)) { - return PdaUtils.buildFailResponseEntity("请点击确认或清空"); - } else { - String region_code = param.getString("region_code"); - if (StrUtil.isEmpty(region_code)) { - return PdaUtils.buildFailResponseEntity("区域不能为空"); - } - String point_code = param.getString("point_code"); - if (StrUtil.isEmpty(point_code)) { - return PdaUtils.buildFailResponseEntity("点位不能为空"); - } - - switch (type) { - case "1": - // 确认 - String vehicle_code = param.getString("vehicle_code"); - if (!StrUtil.equals(region_code, RegionEnum.RYZCQ.getCode()) && StrUtil.isEmpty(vehicle_code)) { - return PdaUtils.buildFailResponseEntity("载具编码不能为空"); - } - String qty = param.getString("qty"); - if (StrUtil.isEmpty(qty)) { - return PdaUtils.buildFailResponseEntity("物料数量/重量不能为空"); - } - String is_full = param.getString("is_full"); - if (StrUtil.isEmpty(is_full)) { - return PdaUtils.buildFailResponseEntity("是否满托不能为空"); - } - - pdaService.updateStock(region_code, point_code, vehicle_code, qty, is_full); - break; - case "2": - // 清空 - pdaService.emptyStock(point_code); - break; - default: - return PdaUtils.buildFailResponseEntity("操作错误"); - } - - return PdaUtils.buildSuccessResponseEntity(null); - } - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/queryYZCallMaterialPoint") - @Log("查询压制叫料点位") - @ApiOperation("查询压制叫料点位") - public ResponseEntity queryYZCallMaterialPoint() { - log.info("辽宁晟华手持 [查询压制叫料点位] 接口被请求"); - - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.queryYZCallMaterialPoint()); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/yzCallMaterial") - @Log("压制叫料") - @ApiOperation("压制叫料") - public ResponseEntity yzCallMaterial(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [压制叫料] 接口被请求, 请求参数-{}", param); - - String point_code = param.getString("point_code"); - if (StrUtil.isEmpty(point_code)) { - return PdaUtils.buildFailResponseEntity("点位不能为空"); - } - - try { - pdaService.yzCallMaterial(point_code); - return PdaUtils.buildSuccessResponseEntity(null); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/queryEmptyCupPoint") - @Log("查询空盅点位") - @ApiOperation("查询空盅点位") - public ResponseEntity queryEmptyCupPoint() { - log.info("辽宁晟华手持 [查询空盅点位] 接口被请求"); - - try { - return PdaUtils.buildSuccessResponseEntity(pdaService.queryEmptyCupPoint()); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } - } - - @PostMapping("/sendEmptyCup") - @Log("送空盅") - @ApiOperation("送空盅") - public ResponseEntity sendEmptyCup(@RequestBody JSONObject param) { - log.info("辽宁晟华手持 [送空盅] 接口被请求, 请求参数-{}", param); - - String point_code = param.getString("point_code"); - if (StrUtil.isEmpty(point_code)) { - return PdaUtils.buildFailResponseEntity("点位不能为空"); - } - String vehicle_code = param.getString("vehicle_code"); - if (StrUtil.isEmpty(vehicle_code)) { - return PdaUtils.buildFailResponseEntity("料盅编码不能为空"); - } - - try { - pdaService.sendEmptyCup(point_code, vehicle_code); - return PdaUtils.buildSuccessResponseEntity(null); - } catch (Exception e) { - return PdaUtils.buildFailResponseEntity(e.getMessage()); - } + pdaService.createTask(request_body); + return PdaUtils.buildSuccessResultJSON(null); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java index b17209f..133fe42 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/PdaService.java @@ -1,6 +1,5 @@ package org.nl.wms.pda.service; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -12,82 +11,10 @@ import com.alibaba.fastjson.JSONObject; */ public interface PdaService { - /** - * 查询所有区域 - * - * @return 所有区域的编码和名称 - */ - JSONArray warehouse(); - /** - * 根据区域查询点位 - * - * @param region_code 区域编码 - * @return 该区域下的点位编码、名称和状态 - */ - JSONArray point(String region_code); + JSONArray queryRegion(); - /** - * 查询点位详细信息 - * - * @param region_code 区域编码 - * @param point_code 点位编码 - * @return 点位上的组盘信息 - */ - JSONObject pointInfo(String region_code, String point_code); + JSONArray queryPoint(String type); - /** - * 查询所有物料 - * - * @param condition 查询条件, 用于模糊查询 - * @return 物料的编码和名称 - */ - JSONArray material(String condition); - - /** - * 库存操作-点击确认 - * - * @param region_code 区域编码 - * @param point_code 点位编码 - * @param vehicle_code 载具编码, 如果是入窑暂存区该参数将被无视 - * @param qty 物料数量/重量 - * @param is_full 是否满托 - */ - void updateStock(String region_code, String point_code, String vehicle_code, String qty, String is_full); - - /** - * 库存操作-点击清空 - * - * @param point_code 点位编码 - */ - void emptyStock(String point_code); - - /** - * 查询压制叫料点位 - * - * @return 压制叫料点位编码和名称 - */ - JSONArray queryYZCallMaterialPoint(); - - /** - * 压制叫料 - * - * @param point_code 点位编码 - */ - void yzCallMaterial(String point_code); - - /** - * 查询空盅点位 - * - * @return 空盅点位编码和名称 - */ - JSONArray queryEmptyCupPoint(); - - /** - * 送空盅 - * - * @param point_code 点位编码 - * @param vehicle_code 料盅编码 - */ - void sendEmptyCup(String point_code, String vehicle_code); + void createTask(JSONObject request_param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java index 803368a..6d79e68 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/PdaServiceImpl.java @@ -1,19 +1,18 @@ package org.nl.wms.pda.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.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.pda.service.PdaService; -import org.nl.wms.sch.manage.RegionEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.tasks.callMaterial.YzjCallMaterialTask; -import org.nl.wms.sch.tasks.sendEmpty.YzjSendEmpVehicleTask; +import org.nl.wms.sch.manage.CreateMode; +import org.nl.wms.sch.task.send.material.HLSendMaterialTask; +import org.nl.wms.sch.task.util.TaskUtils; import org.springframework.stereotype.Service; /** @@ -25,177 +24,65 @@ import org.springframework.stereotype.Service; @Slf4j public class PdaServiceImpl implements PdaService { - private final YzjCallMaterialTask yzjCallMaterialTask; - - private final YzjSendEmpVehicleTask yzjSendEmpVehicleTask; + private final HLSendMaterialTask hlSendMaterialTask; /** * 查询所有区域 * - * @return 所有区域的编码和名称 + * @return 所有区域信息 */ @Override - public JSONArray warehouse() { - return WQL.getWO("LNSH_PDA").addParam("flag", "1").process().getResultJSONArray(0); + public JSONArray queryRegion() { + return WQLObject + .getWQLObject("sch_base_region") + .query() + .getResultJSONArray(0); } /** - * 根据区域查询点位 + * 查询对接位 * - * @param region_code 区域编码 - * @return 该区域下的点位编码、名称和状态 + * @param type 手持界面 HLSL-混料送料 + * @return 对接位信息 */ @Override - public JSONArray point(String region_code) { + public JSONArray queryPoint(String type) { return WQL - .getWO("LNSH_PDA") - .addParam("flag", "2") - .addParam("region_code", region_code) + .getWO("PDA") + .addParam("flag", "1") + .addParam("type", type) .process() .getResultJSONArray(0); } /** - * 查询点位详细信息 + * 创建任务 * - * @param region_code 区域编码 - * @param point_code 点位编码 - * @return 点位上的组盘信息 + * @param request_param 请求带的参数 */ @Override - public JSONObject pointInfo(String region_code, String point_code) { - JSONObject info = WQL - .getWO("LNSH_PDA") - .addParam("flag", "3") - .addParam("point_code", point_code) - .process() - .uniqueResult(0); - - // 如果区域位于入窑暂存区 则不展示载具编码 - if (StrUtil.equals(region_code, RegionEnum.RYZCQ.getCode())) { - info.put("has_vehicle_code", "0"); - } - - return info; - } - - /** - * 查询所有物料 - * - * @param condition 查询条件, 用于模糊查询 - * @return 物料的编码和名称 - */ - @Override - public JSONArray material(String condition) { - return WQL - .getWO("LNSH_PDA") - .addParam("flag", "4") - .addParam("condition", condition) - .process() - .getResultJSONArray(0); - } - - /** - * 库存操作-点击确认 - * - * @param region_code 区域编码 - * @param point_code 点位编码 - * @param vehicle_code 载具编码, 如果是入窑暂存区该参数将被无视 - * @param qty 物料数量/重量 - * @param is_full 是否满托 - */ - @Override - public void updateStock(String region_code, String point_code, String vehicle_code, String qty, String is_full) { - - } - - /** - * 库存操作-点击清空 - * - * @param point_code 点位编码 - */ - @Override - public void emptyStock(String point_code) { - - } - - /** - * 查询压制叫料点位 - * - * @return 压制叫料点位编码和名称 - */ - @Override - public JSONArray queryYZCallMaterialPoint() { - return WQL.getWO("LNSH_PDA").addParam("flag", "5").process().getResultJSONArray(0); - } - - /** - * 压制叫料 - * - * @param point_code 点位编码 - */ - @Override - public void yzCallMaterial(String point_code) { - isAvailable(point_code); - - yzjCallMaterialTask.createTask(new JSONObject() {{ - put("point_code2", point_code); - }}); - } - - /** - * 查询空盅点位 - * - * @return 空盅点位编码和名称 - */ - @Override - public JSONArray queryEmptyCupPoint() { - return WQL.getWO("LNSH_PDA").addParam("flag", "6").process().getResultJSONArray(0); - } - - /** - * 送空盅 - * - * @param point_code 点位编码 - */ - @Override - public void sendEmptyCup(String point_code, String vehicle_code) { - JSONObject point = isAvailable(point_code); - - yzjSendEmpVehicleTask.createTask(new JSONObject() {{ - put("point_code1", point_code); - put("vehicle_code", vehicle_code); - put("vehicle_type", StrUtil.equals(point.getString("point_type"), "2") ? "2" : "1"); - }}); - } - - /** - * 查询点位是否可用 - * 如果点位未被删除 且 未被禁用 且 不存在未完成的任务 即为可用 - * 不可用将报错 - * - * @param point_code 点位编码 - * @return 点位 - */ - private JSONObject isAvailable(String point_code) { + public void createTask(JSONObject request_param) { + String type = request_param.getString("type"); JSONObject point = WQLObject .getWQLObject("sch_base_point") - .query("is_delete = '0' AND is_used = '1' AND point_code = '" + point_code + "'") + .query("is_delete = '0' AND is_used = '1' AND point_code = '" + request_param.getString("point_code") + "'") .uniqueResult(0); if (ObjectUtil.isEmpty(point)) { - throw new BadRequestException("该点位已被删除或已禁用"); + throw new BadRequestException("点位已删除或未启用!"); } - - JSONObject task = WQLObject - .getWQLObject("sch_base_task") - .query("is_delete = '0' " + - "AND ( point_code1 = '" + point_code + "' OR point_code2 = '" + point_code + "' ) " + - "AND task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'") - .uniqueResult(0); - if (ObjectUtil.isNotEmpty(task)) { - throw new BadRequestException("该点位存在未完成的任务"); + JSONObject method_param = new JSONObject(); + method_param.put("create_mode", CreateMode.SCCJ.value()); + method_param.put("request_param", request_param); + method_param.put("create_id", SecurityUtils.getCurrentUserId()); + method_param.put("create_name", SecurityUtils.getCurrentNickName()); + switch (type) { + case "1": + // 混料机送料 + method_param.put("point", point); + method_param.put("vehicle_code", TaskUtils.formatVehicleCode(request_param.getString("vehicle_code"))); + hlSendMaterialTask.createTask(method_param); + break; + case "2": } - - return point; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java index 6789736..bbd7edf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/util/PdaUtils.java @@ -2,8 +2,6 @@ package org.nl.wms.pda.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; /** * 辽宁晟华手持工具类 @@ -13,28 +11,6 @@ import org.springframework.http.ResponseEntity; */ public final class PdaUtils { - /** - * 控制层调用方法 - * 创建操作成功返回的 ResponseEntity 并携带需要返回的数据 - * - * @param result 需要返回的数据, 可为 NULL - * @return 携带了返回数据的 ResponseEntity - */ - public static ResponseEntity buildSuccessResponseEntity(JSON result) { - return new ResponseEntity<>(buildSuccessJSON(result), HttpStatus.OK); - } - - /** - * 控制层调用方法 - * 创建操作失败返回的 ResponseEntity - * - * @param desc 错误提示, 可为 NULL - * @return 自定义错误提示的 ResponseEntity - */ - public static ResponseEntity buildFailResponseEntity(String desc) { - return new ResponseEntity<>(buildFailJSON(desc), HttpStatus.OK); - } - /** * 服务层调用方法 * 创建操作成功的 JSONObject 并携带需要返回的数据 @@ -42,7 +18,7 @@ public final class PdaUtils { * @param result 返回数据, 可为 NULL * @return 携带了返回数据的 JSONObject */ - public static JSONObject buildSuccessJSON(JSON result) { + public static JSONObject buildSuccessResultJSON(JSON result) { JSONObject resultJSON = new JSONObject(); resultJSON.put("code", "1"); resultJSON.put("desc", "操作成功"); @@ -57,7 +33,7 @@ public final class PdaUtils { * @param desc 错误提示, 可为 NULL * @return 自定义错误提示的 JSONObject */ - public static JSONObject buildFailJSON(String desc) { + public static JSONObject buildFailResultJSON(String desc) { JSONObject resultJSON = new JSONObject(); resultJSON.put("code", "0"); resultJSON.put("desc", desc); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql deleted file mode 100644 index 79f22cf..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/LNSH_PDA.wql +++ /dev/null @@ -1,141 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.point_code TYPEAS s_string - 输入.condition TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "1" - QUERY - SELECT - region_code, - region_name - FROM - sch_base_region - WHERE - region_code IN ( 'KLHJ', 'RYZCQ', 'CYZCQ', 'BZZCQ' ) - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - point.point_code, - point.point_name, - IF ( task1.task_code IS NULL AND task2.task_code IS NULL, point.point_status, '4' ) AS 'point_status' - FROM - sch_base_point point - LEFT JOIN sch_base_task task1 ON point.point_code = task1.point_code1 AND task1.task_status < '7' - LEFT JOIN sch_base_task task2 ON point.point_code = task2.point_code2 AND task1.task_status < '7' - WHERE - point.is_delete = '0' - AND point.is_used = '1' - AND point.region_code = 输入.region_code - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - QUERY - SELECT - point.vehicle_code, - `group`.material_code, - `group`.material_name, - `group`.qty, - `group`.is_full - FROM - sch_base_point point - INNER JOIN st_buss_vehiclegroup `group` ON point.group_id = `group`.group_id - WHERE - point.is_delete = '0' - AND point.is_used = '1' - AND point.point_code = 输入.point_code - ENDSELECT - ENDQEURY - ENDIF - - IF 输入.flag = "4" - QUERY - SELECT - material_code, - material_name - FROM - md_me_materialbase - WHERE - is_delete = '0' - OPTION 输入.condition <> "" - material_code LIKE CONCAT ( '%', 输入.condition, '%' ) - OR material_name LIKE CONCAT ( '%', 输入.condition, '%' ) - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "5" - QUERY - SELECT - point_code, - point_name - FROM - sch_base_point - WHERE - is_used = '1' - AND is_delete = '0' - AND region_code = 'KLHJ' - AND point_type = '3' - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "6" - QUERY - SELECT - point_code, - point_name - FROM - `sch_base_point` - WHERE - is_used = '1' - AND is_delete = '0' - AND region_code = 'KLHJ' - AND point_type IN ( '2', '4' ) - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_szSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql similarity index 58% rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_szSendMaterial_01.wql rename to lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql index 46428f1..30562c4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_szSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 烧制入库 + 交易名: 手持 所属模块: 功能简述: 版权所有: @@ -13,11 +13,8 @@ ################################################# ## 表字段对应输入参数 ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - + 输入.flag TYPEAS s_string + 输入.type TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -40,23 +37,23 @@ ########################################## # 3、业务主过程 # ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name + + IF 输入.flag = "1" + QUERY + SELECT + point_id, + point_code, + point_name FROM - SCH_BASE_Point p + sch_base_point WHERE - lock_type = '1' + is_delete = '0' AND is_used = '1' - AND is_delete = '0' - AND point_status = '1' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ORDER BY col_num,row_num,layer_num - ENDSELECT - ENDQUERY - ENDIF + AND lock_type = '1' + OPTION 输入.type = "HL" + region_code = 'HL' + AND point_type IN ('1', '2') + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java new file mode 100644 index 0000000..7dfbfbf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/rest/DeviceController.java @@ -0,0 +1,77 @@ + +package org.nl.wms.pdm.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** +* @author geng by +* @date 2022-05-25 +**/ +@RestController +@RequiredArgsConstructor +@Api(tags = "生产设备管理") +@RequestMapping("/api/device") +@Slf4j +public class DeviceController { + + private final DeviceService deviceService; + + @GetMapping + @Log("查询生产设备") + @ApiOperation("查询生产设备") + //@SaCheckPermission("device:list") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增生产设备") + @ApiOperation("新增生产设备") + //@SaCheckPermission("device:add") + public ResponseEntity create(@Validated @RequestBody DeviceDto dto){ + deviceService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改生产设备") + @ApiOperation("修改生产设备") + //@SaCheckPermission("device:edit") + public ResponseEntity update(@Validated @RequestBody DeviceDto dto){ + deviceService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除生产设备") + @ApiOperation("删除生产设备") + //@SaCheckPermission("device:del") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + deviceService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改点位启用状态") + @ApiOperation("修改点位启用状态") + public ResponseEntity changeActive(@RequestBody JSONObject json) { + deviceService.changeActive(json); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java new file mode 100644 index 0000000..147b5b8 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/DeviceService.java @@ -0,0 +1,68 @@ + +package org.nl.wms.pdm.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** +* @description 服务接口 +* @author geng by +* @date 2022-05-25 +**/ +public interface DeviceService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 根据ID查询 + * @param device_id ID + * @return Device + */ + DeviceDto findById(Long device_id); + + /** + * 根据编码查询 + * @param code code + * @return Device + */ + DeviceDto findByCode(String code); + + + /** + * 创建 + * @param dto / + */ + void create(DeviceDto dto); + + /** + * 编辑 + * @param dto / + */ + void update(DeviceDto dto); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + + + void changeActive(JSONObject json); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java index 867232a..9ccfb31 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/dto/WorkorderDto.java @@ -100,4 +100,12 @@ public class WorkorderDto implements Serializable { /** 阈值时间 */ private String warn_time; + + private Long device_id; + + private String is_urgent; + + private String is_pri; + + private String ext_code; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..9105e33 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/DeviceServiceImpl.java @@ -0,0 +1,138 @@ + +package org.nl.wms.pdm.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +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.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.pdm.service.DeviceService; +import org.nl.wms.pdm.service.dto.DeviceDto; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * @author geng by + * @description 服务实现 + * @date 2022-05-25 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class DeviceServiceImpl implements DeviceService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String search = MapUtil.getStr(whereJson, "search"); + JSONObject map = new JSONObject(); + map.put("flag", "1"); + if (!StrUtil.isEmpty(search)) { + map.put("search", "%" + search + "%"); + } + JSONObject json = WQL.getWO("PDM_BI_DEVICE01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "device.device_model, device.device_code"); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + JSONArray arr = wo.query().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(DeviceDto.class); + return null; + } + + @Override + public DeviceDto findById(Long device_id) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + JSONObject json = wo.query("device_id = '" + device_id + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceDto.class); + } + return null; + } + + @Override + public DeviceDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + JSONObject json = wo.query("device_code ='" + code + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(json)) { + return json.toJavaObject(DeviceDto.class); + } + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(DeviceDto dto) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //编码唯一性校验 + String device_code = dto.getDevice_code(); + DeviceDto byCode = this.findByCode(device_code); + if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!"); + dto.setDevice_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(DeviceDto dto) { + DeviceDto entity = this.findById(dto.getDevice_id()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + //编码唯一性校验 + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + String where = "is_delete = '0' and device_code = '" + dto.getDevice_code() + "' and device_id != '" + dto.getDevice_id() + "'"; + + JSONObject jsonObject = wo.query(where).uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonObject)) { + throw new BadRequestException("编码已存在!"); + } + + + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + WQLObject wo = WQLObject.getWQLObject("pdm_bi_device"); + for (Long device_id : ids) { + wo.delete("device_id = '" + device_id + "'"); + } + } + + @Override + public void changeActive(JSONObject json) { + String is_used = "1"; + if (StrUtil.equals("1", json.getString("is_used"))) { + is_used = "0"; + } + json.put("is_used", is_used); + WQLObject.getWQLObject("PDM_BI_Device").update(json); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java index a0c2f2f..e375477 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java @@ -11,22 +11,20 @@ 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.common.utils.dto.CurrentUser; 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.WqlUtil; -import org.nl.wms.basedata.service.ClassstandardService; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pdm.service.WorkordeService; import org.nl.wms.pdm.service.dto.WorkorderDto; - +import org.nl.wms.sch.manage.WorkOrderEnum; import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -51,14 +49,9 @@ public class WorkorderServiceImpl implements WorkordeService { String material = MapUtil.getStr(whereJson, "material"); String begin_time = MapUtil.getStr(whereJson, "begin_time"); String end_time = MapUtil.getStr(whereJson, "end_time"); - String order_type_scode = MapUtil.getStr(whereJson, "order_type_scode"); String order_status = MapUtil.getStr(whereJson, "order_status"); - String shift_type_scode = MapUtil.getStr(whereJson, "shift_type_scode"); JSONObject map = new JSONObject(); map.put("flag", "1"); - map.put("order_type_scode", order_type_scode); - //map.put("order_status", order_status); - map.put("shift_type_scode", shift_type_scode); map.put("begin_time", begin_time); map.put("end_time", end_time); if (StrUtil.isNotEmpty(order_status)) { @@ -76,8 +69,6 @@ public class WorkorderServiceImpl implements WorkordeService { if (StrUtil.isNotEmpty(material)) { map.put("material", "%" + material + "%"); } - // 工序名称 - map.put("workorder_procedure", whereJson.get("workorder_procedure")); JSONObject jsonObject = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ShiftOrder.update_time desc"); return jsonObject; } @@ -113,25 +104,40 @@ public class WorkorderServiceImpl implements WorkordeService { @Override @Transactional(rollbackFor = Exception.class) public void create(WorkorderDto dto) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); + JSONObject work_order = new JSONObject(); + work_order.put("workorder_id", IdUtil.getSnowflake().nextId()); + work_order.put("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); + work_order.put("plan_qty", dto.getPlan_qty()); + work_order.put("planproducestart_date", dto.getPlanproducestart_date()); + work_order.put("planproduceend_date", dto.getPlanproduceend_date()); + work_order.put("material_id", dto.getMaterial_id()); + String device_code = dto.getDevice_code(); + String vehicle_type = dto.getVehicle_type(); + if (!device_code.startsWith("FJ")) { + if (device_code.startsWith("YZJ")) { + vehicle_type = VehicleType.STEEL_TRAY.value(); + } else if (device_code.startsWith("HLJ")) { + vehicle_type = VehicleType.CUP.value(); + } + } + work_order.put("vehicle_type", vehicle_type); + work_order.put("device_id", dto.getDevice_id()); + work_order.put("device_code", device_code); + work_order.put("order_status", WorkOrderEnum.ORDER_STATUS_UNPRODUCED.value()); + work_order.put("is_urgent", dto.getIs_urgent()); + work_order.put("is_pri", dto.getIs_pri()); + work_order.put("ext_code", dto.getExt_code()); + work_order.put("is_delete", TrueOrFalse.FALSE.value()); + Long user_id = SecurityUtils.getCurrentUserId(); + String nick_name = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); - CurrentUser currentUser = SecurityUtils.getCurrentUser(); - Long deptId = currentUser.getUser().getDeptId(); - String newCode = CodeUtil.getNewCode("PDM_SHIFTORDER"); - dto.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setWorkorder_code(newCode); - dto.setCreate_id(currentUserId); - dto.setCreate_time(now); - dto.setCreate_name(nickName); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(nickName); - dto.setUpdate_time(now); - WQLObject wo = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - json.put("sysdeptid", deptId); - json.put("syscompanyid", deptId); - wo.insert(json); + work_order.put("create_id", user_id); + work_order.put("create_name", nick_name); + work_order.put("create_time", now); + work_order.put("update_optid", user_id); + work_order.put("update_optname", nick_name); + work_order.put("update_time", now); + WQLObject.getWQLObject("pdm_bd_workorder").insert(work_order); } @Override @@ -175,22 +181,43 @@ public class WorkorderServiceImpl implements WorkordeService { @Override @Transactional(rollbackFor = Exception.class) public void submits(JSONObject param) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); + String workorder_id = param.getString("workorder_id"); + JSONObject submit_obj = WQL + .getWO("MPS_PRODUCEDURE001") + .addParam("flag", "5") + .addParam("workorder_id", workorder_id) + .process() + .uniqueResult(0); + if (submit_obj.getIntValue("order_status") > 1) { + throw new BadRequestException("工单已开工!"); + } - WQLObject wo = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - JSONObject json = wo.query("workorder_id = '" + param.getString("workorder_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(json.getString("device_id"))) throw new BadRequestException("请先绑定设备"); + JSONObject workorder = WQLObject + .getWQLObject("pdm_bd_workorder") + .query("is_delete = '0' AND device_code = '" + submit_obj.getString("workorder_code") + "' AND order_status IN ('2', '3')") + .uniqueResult(0); + if (ObjectUtil.isNotEmpty(workorder)) { + throw new BadRequestException("该设备正在执行其它工单!"); + } - JSONArray orderArr = wo.query("device_id = '" + param.getString("device_id") + "' and order_status = '02'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(orderArr)) throw new BadRequestException("当前设备正在生产中"); + JSONArray request = new JSONArray(); + request.add(submit_obj); + Map result; + try { + result = wmsToAcsService.order(request); + } catch (Exception e) { + log.error("工单开工报错!", e); + throw new RuntimeException(e); + } + if (HttpStatus.OK.value() != MapUtil.getInt(result, "status")) { + throw new BadRequestException(String.valueOf(result.get("message"))); + } - json.put("order_status", "02"); - json.put("update_optid", currentUserId); - json.put("update_optname", nickName); - json.put("update_time", now); - wo.update(json); + JSONObject order_status = new JSONObject(); + order_status.put("order_status", WorkOrderEnum.ORDER_STATUS_DELIVERED.value()); + WQLObject + .getWQLObject("pdm_bd_workorder") + .update(order_status, "workorder_id = " + workorder_id); } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql index cea81bf..ea15295 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/MPS_PRODUCEDURE001.wql @@ -55,11 +55,19 @@ SELECT ShiftOrder.*, material.material_code, +<<<<<<< Updated upstream material.material_name, material.material_spec FROM PDM_BD_WORKORDER ShiftOrder LEFT JOIN md_me_materialbase material ON material.material_id = ShiftOrder.material_id +======= + device.device_name + FROM + PDM_BD_WORKORDER ShiftOrder + LEFT JOIN md_me_materialbase material ON material.material_id = ShiftOrder.material_id + LEFT JOIN pdm_bi_device device ON ShiftOrder.device_id = device.device_id +>>>>>>> Stashed changes WHERE ShiftOrder.is_delete = '0' OPTION 输入.unFinish <> "" @@ -67,27 +75,19 @@ ENDOPTION OPTION 输入.order_status <> "" find_in_set( ShiftOrder.order_status, 输入.order_status) - ENDOPTION - OPTION 输入.shift_type_scode <> "" - ShiftOrder.shift_type_scode = 输入.shift_type_scode - ENDOPTION - OPTION 输入.workorder_procedure <> "" - ShiftOrder.workorder_procedure = 输入.workorder_procedure ENDOPTION OPTION 输入.begin_time <> "" - ShiftOrder.produce_date >= 输入.begin_time + ShiftOrder.planproducestart_date >= 输入.begin_time ENDOPTION OPTION 输入.end_time <> "" - ShiftOrder.produce_date <= 输入.end_time + ShiftOrder.planproduceend_date <= 输入.end_time ENDOPTION OPTION 输入.produceorder_code <> "" ShiftOrder.produceorder_code like 输入.produceorder_code ENDOPTION OPTION 输入.material <> "" ( - material.material_code like 输入.material or - material.material_name like 输入.material or - material.material_spec like 输入.material + material.material_code like '%' 输入.material '%' ) ENDOPTION ENDSELECT @@ -116,7 +116,6 @@ shiftOrder.*, workprocedure.workprocedure_name, material.material_code, - material.material_name, material.material_spec FROM PDM_BD_WORKORDER shiftOrder @@ -165,3 +164,26 @@ ENDQUERY ENDIF + IF 输入.flag = "6" + QUERY + SELECT + workorder.workorder_code, + workorder.plan_qty, + workorder.device_code, + workorder.order_status, + material.material_code, + material.product_code, + material.a, + material.b, + material.h, + material.w + FROM + pdm_bd_workorder workorder + LEFT JOIN md_me_materialbase material ON workorder.material_id = material.material_id + WHERE + workorder.is_delete = '0' + AND workorder.workorder_id = 输入.workorder_id + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java index 6884c31..c9aef1b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/AcsUtil.java @@ -41,8 +41,7 @@ public class AcsUtil { //网络不通 System.out.println(msg); result.put("status", HttpStatus.BAD_REQUEST); - result.put("message", "网络不通,操作失败!"); - result.put("data", new JSONObject()); + result.put("message", msg); } //acs抛异常这里 /*if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value()))) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/ACSSystem.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/ACSSystem.java new file mode 100644 index 0000000..3c06f99 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/ACSSystem.java @@ -0,0 +1,14 @@ +package org.nl.wms.sch.manage; + +/** + * @author zhangjiangwei + * @date 2023/03/03 10:42 + */ +public class ACSSystem { + + public static final long id = 20L; + + public static final String username = "acs"; + + public static final String nick_name = "ACS系统"; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index 1473a84..280abb6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -1,12 +1,18 @@ package org.nl.wms.sch.manage; +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 org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.AcsUtil; -import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.task.AcsTaskDTO; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; /** @@ -24,7 +30,7 @@ public abstract class AbstractAcsTask { * @author ldjun * @created 2020年6月12日 下午5:55:25 */ - public List schedule() { + public List schedule() { this.autoCreate(); this.findStartPoint(); this.findNextPoint(); @@ -36,7 +42,34 @@ public abstract class AbstractAcsTask { * * @return */ - public abstract List addTask(); + public List addTask() { + JSONArray tasks = WQLObject + .getWQLObject("sch_base_task") + .query("is_delete = '0' AND task_status = " + TaskStatus.START_AND_END.value() + " AND handle_class = '" + this.getClass().getName() + "'") + .getResultJSONArray(0); + + ArrayList acsTasks = new ArrayList<>(); + for (Object o : tasks) { + JSONObject task = (JSONObject) o; + + AcsTaskDTO acsTask = AcsTaskDTO + .builder() + .task_id(task.getString("task_id")) + .task_code(task.getString("task_code")) + .task_type(task.getString("acs_task_type")) + .start_device_code(task.getString("point_code1")) + .next_device_code(task.getString("point_code2")) + .vehicle_code(task.getString("vehicle_code")) + .vehicle_type(task.getString("vehicle_type")) + .priority(task.getString("priority")) + .remark(task.getString("remark")) + .build(); + + acsTasks.add(acsTask); + } + + return acsTasks; + }; /** * @param taskObj 代表一条任务对象 @@ -107,15 +140,60 @@ public abstract class AbstractAcsTask { /** * */ - public JSONObject immediateNotifyAcs() { - List taskList = this.schedule(); - if (ObjectUtil.isNotEmpty(taskList)) { + public JSONObject immediateNotifyAcs(String taskId) { + WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = taskTable + .query("task_id = " + taskId) + .getResultJSONArray(0); - JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); - return AcsUtil.notifyAcs("api/wms/task", arr); + if (ObjectUtil.isNotEmpty(tasks)) { + String taskStatus = ((JSONObject) tasks.get(0)).getString("task_status"); + if (!StrUtil.equals(taskStatus, TaskStatus.START_AND_END.value())) { + throw new BadRequestException("只能下发已确认起点和终点的任务"); + } + + JSONObject result = AcsUtil.notifyAcs("api/wms/task", tasks); + + String status = result.getString("status"); + String message = result.getString("message"); + //发送失败的任务JSON集合:task_id,message + JSONArray errArr = result.getJSONArray("errArr"); + + //任务下发以后,更新任务状态 + //成功 + if ("200".equals(status)) { + tasks.forEach(item -> { + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", ((JSONObject) item).getString("task_id")); + taskObj.put("task_status", TaskStatus.ISSUE.value()); + taskObj.put("remark", "下发成功"); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + }); + } else {//下发失败 + tasks.forEach(item -> { + JSONObject taskObj = new JSONObject(); + taskObj.put("task_id", ((JSONObject) item).getString("task_id")); +// taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); + taskObj.put("remark", "下发失败:" + message); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + }); + } + //处理下发错误的任务 + if (ObjectUtil.isNotEmpty(errArr)) { + //处理下发失败的任务 + for (int i = 0; i < errArr.size(); i++) { + JSONObject taskObj = errArr.getJSONObject(i); + taskObj.put("remark", "下发失败:"+taskObj.getString("message")); + taskObj.put("update_time", DateUtil.now()); + taskTable.update(taskObj); + } + } + + return result; } return null; - } /** @@ -142,4 +220,23 @@ public abstract class AbstractAcsTask { return null; } + /** + * 取货完成 + */ + @Transactional(rollbackFor = Exception.class) + public void pickUpComplete(JSONObject task) { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + point_table.update(point1); + } + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreate.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreate.java new file mode 100644 index 0000000..d85dabd --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreate.java @@ -0,0 +1,14 @@ +package org.nl.wms.sch.manage; + +/** + * @author zhangjiangwei + * @date 2023/04/12 21:44 + */ +public class AutoCreate { + + public static final long id = 21L; + + public static final String username = "auto"; + + public static final String nick_name = "自动"; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java index a299f32..507fe0a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoCreateTask.java @@ -8,13 +8,12 @@ import com.alibaba.fastjson.JSONObject; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.sch.AcsUtil; -import org.nl.wms.sch.tasks.AcsTaskDto; +import org.nl.wms.sch.task.AcsTaskDTO; import org.reflections.Reflections; import org.springframework.stereotype.Component; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -23,7 +22,7 @@ import java.util.Set; @Component public class AutoCreateTask { // 下发acs的任务集合 - private List taskList = null; + private List taskList = null; private Set> subTypes = null; WQLObject taskTab = null; @@ -31,7 +30,7 @@ public class AutoCreateTask { @SneakyThrows public void run() { if (ObjectUtil.isNull(subTypes) || subTypes.isEmpty()) { - Reflections reflections = new Reflections("org.nl.wms.sch.tasks"); + Reflections reflections = new Reflections("org.nl.wms.sch.task"); subTypes = reflections.getSubTypesOf(AbstractAcsTask.class); } if (ObjectUtil.isNull(taskTab)) taskTab = WQLObject.getWQLObject("sch_base_task"); @@ -45,16 +44,10 @@ public class AutoCreateTask { subTypes.forEach(clz -> { // 调用AbstractAcsTask类的每个子类的schedule()方法 try { - Object obj = clz.newInstance(); - //Method m = obj.getClass().getDeclaredMethod("schedule"); - Method m = obj.getClass().getMethod("schedule"); - List tasks = (List) m.invoke(obj); + List tasks = SpringContextHolder.getBean(clz).schedule(); if (ObjectUtil.isNotEmpty(tasks)) { taskList.addAll(tasks); } - } catch (InvocationTargetException e) { - e.printStackTrace(); - log.info("定时器执行失败:{}", e.getTargetException().getMessage()); } catch (Exception e) { e.printStackTrace(); log.info("定时器执行失败:{}", e.getMessage()); @@ -88,7 +81,7 @@ public class AutoCreateTask { taskList.forEach(item -> { JSONObject taskObj = new JSONObject(); taskObj.put("task_id", item.getTask_id()); - taskObj.put("task_status", TaskStatusEnum.ISSUE.getCode()); + taskObj.put("task_status", TaskStatus.ISSUE.value()); taskObj.put("remark", "下发成功"); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); @@ -108,7 +101,7 @@ public class AutoCreateTask { //处理下发失败的任务 for (int i = 0; i < errArr.size(); i++) { JSONObject taskObj = errArr.getJSONObject(i); - taskObj.put("remark", "下发失败:"+taskObj.getString("message")); + taskObj.put("remark", "下发失败:" + taskObj.getString("message")); taskObj.put("update_time", DateUtil.now()); taskTab.update(taskObj); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/CreateMode.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/CreateMode.java new file mode 100644 index 0000000..3800c29 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/CreateMode.java @@ -0,0 +1,32 @@ +package org.nl.wms.sch.manage; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 生成方式枚举类 + * + * @author 张江玮 + * @date 2022/11/01 15:57 + */ +@AllArgsConstructor +public enum CreateMode { + + PCCS("PC产生", "1"), + ACSSQ("ACS申请", "2"), + SCCJ("手持创建", "3"), + WBJK("外部接口", "4"), + ZDSC("自动生成", "5"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java deleted file mode 100644 index a64986f..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/FinishTypeEnum.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.nl.wms.sch.manage; - -/** - * 完成方式:00自动,01:手动 - */ -public enum FinishTypeEnum { - AUTO("00", "自动"), - WCS_DELETE("01", "手动"); - private String name; - private String code; - - private FinishTypeEnum(String code, String name) { - this.code = code; - this.name = name; - } - - public String getName() { - return name; - } - - public String getCode() { - return code; - } -} - diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/LockType.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/LockType.java new file mode 100644 index 0000000..89915d5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/LockType.java @@ -0,0 +1,34 @@ +package org.nl.wms.sch.manage; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * @author zhangjiangwei + * @date 2023/03/03 9:41 + */ +@RequiredArgsConstructor +public enum LockType { + + UNLOCKED("未锁定", "1"), + TASK_LOCKED("任务锁定", "2"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } + + public static LockType get(String value) { + return Arrays.stream(LockType.values()).filter(lt -> lt.value.equals(value)).collect(Collectors.toList()).get(0); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/OperationType.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/OperationType.java new file mode 100644 index 0000000..3307a0b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/OperationType.java @@ -0,0 +1,24 @@ +package org.nl.wms.sch.manage; + +import lombok.RequiredArgsConstructor; + +/** + * 操作类型 + */ +@RequiredArgsConstructor +public enum OperationType { + AUTO("自动", "1"), + MANUAL("手动", "2"); + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/PointStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/PointStatus.java new file mode 100644 index 0000000..528c9dd --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/PointStatus.java @@ -0,0 +1,29 @@ +package org.nl.wms.sch.manage; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 任务状态 + * + * @author zhangjiangwei + * @date 2023/03/03 9:26 + */ +@RequiredArgsConstructor +public enum PointStatus { + + EMPTY("无货", "0"), + NOT_EMPTY("有货", "1"); + + private final String label; + + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/Region.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/Region.java new file mode 100644 index 0000000..24ce965 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/Region.java @@ -0,0 +1,41 @@ +package org.nl.wms.sch.manage; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * 区域枚举类 + * + * @author 张江玮 + * @date 2022/11/22 16:16 + */ +@RequiredArgsConstructor +public enum Region { + + HL("混料区", "HL"), + KLHJ("困料货架", "KLHJ"), + YZ("压制区", "YZ"), + CPHJ("成品货架", "CPHJ"), + SZ("烧制区", "SZ"), + FJ("分拣区", "FJ"), + BTHC("半托缓存区", "BTHC"), + GTK("钢托库", "GTK"); + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } + + public static Region get(String value) { + return Arrays.stream(Region.values()).filter(r -> r.value.equals(value)).collect(Collectors.toList()).get(0); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionEnum.java deleted file mode 100644 index c41ade8..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionEnum.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.nl.wms.sch.manage; - -import cn.hutool.core.util.StrUtil; -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 区域枚举类 - * - * @author 张江玮 - * @date 2022/11/22 16:16 - */ -@AllArgsConstructor -@Getter -public enum RegionEnum { - - KLHJ("1590223405414748160", "KLHJ", "困料货架"), - RYZCQ("1590223672247980032", "RYZCQ", "入窑暂存区"), - CYZCQ("1590223771673956352", "CYZCQ", "出窑暂存区"), - BZZCQ("1590223846013800448", "BZZCQ", "包装暂存区"), - HNQ("1590223931246252032", "HNQ", "混碾区"), - YZQ("1590223991732310016", "YZQ", "压制区"), - YYJLZJ("1590224119046213632", "YYJLZJ", "液压机料盅架"), - YQ("1590224197186097152", "YQ", "窑区域"), - KGTCPQ("1590224331051503616", "KGTCPQ", "空钢托拆盘区"), - ZDCDX("1590224431970652160", "ZDCDX", "自动拆垛线"), - RGCPQ("1590224498601365504", "RGCPQ", "人工拆盘区域"), - BZQ("1590224549646045184", "BZQ", "包装区"), - KGTDPQ("1590224679409422336", "KGTDPQ", "空钢托叠盘区"); - - private String id; - private String code; - private String name; - - public static RegionEnum get(String id) { - for (RegionEnum regionEnum : RegionEnum.values()) { - if (StrUtil.equals(regionEnum.id, id)) { - return regionEnum; - } - } - return null; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatus.java new file mode 100644 index 0000000..06a9ae5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatus.java @@ -0,0 +1,26 @@ +package org.nl.wms.sch.manage; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum TaskStatus { + CREATED("生成", "1"), + SURE_START("确定起点", "2"), + SURE_END("确定终点", "3"), + START_AND_END("起点终点确认", "4"), + ISSUE("下发", "5"), + EXECUTING("执行中", "6"), + FINISHED("完成", "7"), + CANCELLED("取消", "8"); + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java deleted file mode 100644 index 8afd41e..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.nl.wms.sch.manage; - -public enum TaskStatusEnum { - CREATED("1", "生成"), - SURE_START("2", "确定起点"), - SURE_END("3", "确定终点"), - START_AND_POINT("4", "起点终点确认"), - ISSUE("5", "下发"), - EXECUTING("6", "执行中"), - FINISHED("7", "完成"); - - private String name; - private String code; - - private TaskStatusEnum(String code, String name) { - this.code = code; - this.name = name; - } - - public String getName() { - return name; - } - - public String getCode() { - return code; - } -} - diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java new file mode 100644 index 0000000..fbad602 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskType.java @@ -0,0 +1,30 @@ +package org.nl.wms.sch.manage; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * @author zhangjiangwei + * @date 2023/03/03 10:21 + */ +@RequiredArgsConstructor +public enum TaskType { + + SEND_MATERIAL("送料", "1"), + CALL_MATERIAL("叫料", "2"), + SEND_EMPTY("送空", "3"), + CALL_EMPTY("叫空", "4"); + + private final String label; + private final String value; + + public String label() { + return this.label; + } + + public String value() { + return this.value; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatus.java new file mode 100644 index 0000000..a781445 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatus.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.manage; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * acs反馈任务状态 + * + * @author zhangjiangwei + * @date 2023/03/07 11:27 + */ +@RequiredArgsConstructor +@Getter +public enum UpdateTaskStatus { + CANCEL("任务取消", "0"), + EXECUTION("任务执行", "1"), + FINISHED("任务完成", "2"); + + private final String label; + private final String value; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatusEnum.java deleted file mode 100644 index 2b99f83..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/UpdateTaskStatusEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.nl.wms.sch.manage; - -/** - * @author: lyd - * @description: 更新任务状态:ACS回传任务时任务状态 - * @Date: 2022/11/15 - */ -public enum UpdateTaskStatusEnum { - CANCEL("0","取消任务"), - EXECUTION("1","任务执行中"), - FORCEFINISH("2", "强制完成任务"); - - private final String code; - private final String name; - - UpdateTaskStatusEnum(String code, String name) { - this.code = code; - this.name = name; - } - - public String getCode() { - return code; - } - - public String getName() { - return name; - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java index f5297a0..0169e03 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/WorkOrderEnum.java @@ -1,10 +1,13 @@ package org.nl.wms.sch.manage; +import lombok.RequiredArgsConstructor; + /** * @author: lyd * @description: 工单枚举 * @Date: 2022/11/17 */ +@RequiredArgsConstructor public enum WorkOrderEnum { // 工单状态 ORDER_STATUS_UNPRODUCED("1", "未生产"), @@ -17,19 +20,14 @@ public enum WorkOrderEnum { IS_MIXIN_MATERIAL("2", "混料"), IS_OLD_MATERIAL("3", "旧料") ; - private final String code; - private final String name; + private final String value; + private final String label; - WorkOrderEnum(String code, String name) { - this.code = code; - this.name = name; + public String value() { + return this.value; } - public String getCode() { - return code; - } - - public String getName() { - return name; + public String label() { + return this.label; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java index ee3eb00..8dd392e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java @@ -71,6 +71,7 @@ public class PointController { pointService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } + @PutMapping("/changeActive") @Log("修改点位启用状态") @ApiOperation("修改点位启用状态") @@ -92,14 +93,15 @@ public class PointController { @Log("查询点位管理") @ApiOperation("查询点位管理") //@SaCheckPermission("Point:list") - public ResponseEntity selectPoint(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(pointService.selectPoint(whereJson,page),HttpStatus.OK); + public ResponseEntity selectPoint(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(pointService.selectPoint(whereJson, page), HttpStatus.OK); } + @GetMapping("/getRegion") @Log("获取区域") @ApiOperation("获取区域") - public ResponseEntity getRegion(){ - return new ResponseEntity<>(pointService.getRegion(),HttpStatus.OK); + public ResponseEntity getRegion() { + return new ResponseEntity<>(pointService.getRegion(), HttpStatus.OK); } @Log("启动与禁用") @@ -119,36 +121,14 @@ public class PointController { } @GetMapping("/add") - @SaIgnore public ResponseEntity add() { - WQLObject sch_base_point = WQLObject.getWQLObject("SCH_BASE_Point"); - - String code = ""; - String name = "1排"; - for (int i = 1; i <= 10; i++) { - if (i < 10) { - code = "BTHC" + "0" + i; - } else { - code = "BTHC" + i; - } - JSONObject object = new JSONObject(); - object.put("point_id", IdUtil.getSnowflake(1, 1).nextId()); - object.put("point_code", code); - object.put("point_name", "半托缓存" + i); - object.put("region_id", "1590223846013800448"); - object.put("region_code", "BZZCQ"); - object.put("region_name", "包装暂存区"); - object.put("lock_type", "1"); - object.put("vehicle_max_qty", "0"); - object.put("vehicle_qty", "0"); - object.put("create_id", SecurityUtils.getCurrentUserId()); - object.put("update_optid", SecurityUtils.getCurrentUserId()); - object.put("create_name", SecurityUtils.getCurrentNickName()); - object.put("update_optname", SecurityUtils.getCurrentNickName()); - object.put("create_time", DateUtil.now()); - object.put("update_time", DateUtil.now()); - sch_base_point.insert(object); - } return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + + @PostMapping("/getDevice") + @Log("获取设备列表") + @ApiOperation("获取设备列表") + public ResponseEntity getDevice() { + return new ResponseEntity<>(pointService.getDevice(), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java index cafc411..90ea8d6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/TaskController.java @@ -9,8 +9,8 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.logging.annotation.Log; -import org.nl.wms.sch.manage.FinishTypeEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.OperationType; +import org.nl.wms.sch.manage.TaskStatus; import org.nl.wms.sch.service.TaskService; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -44,12 +44,12 @@ public class TaskController { @Log("获取任务状态列表") @ApiOperation("获取任务状态列表") public ResponseEntity getTaskStatus() { - TaskStatusEnum[] values = TaskStatusEnum.values(); + TaskStatus[] values = TaskStatus.values(); JSONArray arr = new JSONArray(); - for (TaskStatusEnum value : values) { + for (TaskStatus value : values) { JSONObject json = new JSONObject(); - json.put("code", value.getCode()); - json.put("name", value.getName()); + json.put("code", value.value()); + json.put("name", value.label()); arr.add(json); } //增加未完成状态 @@ -65,12 +65,12 @@ public class TaskController { @Log("获取任务类型列表") @ApiOperation("获取任务类型列表") public ResponseEntity getFinishType() { - FinishTypeEnum[] values = FinishTypeEnum.values(); + OperationType[] values = OperationType.values(); JSONArray arr = new JSONArray(); - for (FinishTypeEnum value : values) { + for (OperationType value : values) { JSONObject json = new JSONObject(); - json.put("code", value.getCode()); - json.put("name", value.getName()); + json.put("code", value.value()); + json.put("name", value.label()); arr.add(json); } return new ResponseEntity<>(arr, HttpStatus.OK); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java index d4eec70..5d112fb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/PointService.java @@ -96,4 +96,6 @@ public interface PointService { * @param jsonObject */ void changeLock(JSONObject jsonObject); + + JSONArray getDevice(); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java index a27e6c7..68062d7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/dto/PointDto.java @@ -46,54 +46,18 @@ public class PointDto implements Serializable { /** 设备编码 */ private String device_code; - /** MES设备编码 */ - private String mes_device_code; - - /** 允许的载具类型 */ - private String can_vehicle_type; - /** 载具类型 */ private String vehicle_type; /** 载具编码 */ private String vehicle_code; - /** 载具数量 */ - private String vehicle_qty; - - /** 块 */ - private BigDecimal block_num; - - /** 排 */ - private BigDecimal row_num; - - /** 列 */ - private BigDecimal col_num; - - /** 层 */ - private BigDecimal layer_num; - - /** 点位组编码 */ - private String point_group_code; - - /** 是否建工单 */ - private String is_have_workder; - /** 备注 */ private String remark; - /** 来源标识 */ - private Long source_id; - - /** 是否有光电 */ - private String is_light; - /** 是否启用 */ private String is_used; - /** 是否删除 */ - private String is_delete; - /** 创建人 */ private Long create_id; @@ -111,52 +75,4 @@ public class PointDto implements Serializable { /** 修改时间 */ private String update_time; - - /** 载具允许最大数量 */ - private BigDecimal vehicle_max_qty; - - /** 入库顺序 */ - private BigDecimal in_order_seq; - - /** 出库顺序 */ - private BigDecimal out_order_seq; - - /** 入空载具顺序 */ - private BigDecimal in_empty_seq; - - /** 出空载具顺序 */ - private BigDecimal out_empty_seq; - - /** 在执行的任务标识 */ - private Long task_id; - - /** 物料标识 */ - private String material_id; - - /** 批次 */ - private String pcsn; - - /** 库存数 */ - private BigDecimal ivt_qty; - - /** 计量单位标识 */ - private Long qty_unit_id; - - /** 库存数 */ - private BigDecimal ivt_weight; - - /** 计量单位标识 */ - private Long weight_unit_id; - - /** 入库时间 */ - private String instorage_time; - - /** 静置时间(分钟) */ - private BigDecimal standing_time; - - /** 是否关联库存表 */ - private String is_ref_ivt; - - /** 组盘标识 */ - private Long group_id; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index a3dd7f3..5f47843 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -11,6 +11,7 @@ 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.CommonUtils; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -19,13 +20,11 @@ import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.RegionService; import org.nl.wms.sch.service.dto.PointDto; import org.nl.wms.sch.service.dto.RegionDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,7 +42,7 @@ public class PointServiceImpl implements PointService { @Override public Map queryAll(Map whereJson, Pageable page) { - HashMap map = new HashMap(); + JSONObject map = new JSONObject(); map.put("flag", "1"); map.put("region_id", whereJson.get("region_id")); map.put("ids", whereJson.get("ids")); @@ -59,26 +58,14 @@ public class PointServiceImpl implements PointService { for (int i = 0; i < content.size(); i++) { JSONObject object = content.getJSONObject(i); Long region_id = object.getLong("region_id"); - String point_status = object.getString("point_status"); String point_type = object.getString("point_type"); RegionDto regionDto = regionService.findById(region_id); - String point_status_explain = regionDto.getPoint_status_explain(); String point_type_explain = regionDto.getPoint_type_explain(); - // 获取点位状态名称 - /*if (!ObjectUtil.isEmpty(point_status)) { - JSONObject statusArr = new JSONObject(); - String[] split = point_status_explain.split(","); - for ( int j = 0; j < split.length; j++) { - String[] status = split[j].split("-"); - statusArr.put(status[0], status[1]); - } - object.put("point_status_name", statusArr.getString(point_status)); - }*/ // 获取点位类型 if (!ObjectUtil.isEmpty(point_type)) { JSONObject typeArr = new JSONObject(); String[] split = point_type_explain.split(","); - for ( int j = 0; j < split.length; j++) { + for (int j = 0; j < split.length; j++) { String[] types = split[j].split("-"); typeArr.put(types[0], types[1]); } @@ -94,19 +81,17 @@ public class PointServiceImpl implements PointService { public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("sch_base_point"); JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(PointDto.class); - return list; + return arr.toJavaList(PointDto.class); } @Override public PointDto findById(Long point_id) { WQLObject wo = WQLObject.getWQLObject("sch_base_point"); - JSONObject json = wo.query("point_id =" + point_id + "").uniqueResult(0); + JSONObject json = wo.query("point_id = " + point_id).uniqueResult(0); if (ObjectUtil.isNotEmpty(json)) { return json.toJavaObject(PointDto.class); } - final PointDto obj = json.toJavaObject(PointDto.class); - return obj; + return null; } @@ -169,27 +154,11 @@ public class PointServiceImpl implements PointService { String pointStatus = dto.getPoint_status(); if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals("1")) { // 空位 - dto.setMaterial_id(""); dto.setVehicle_type(""); dto.setVehicle_code(""); - dto.setVehicle_qty(""); - dto.setPcsn(""); - dto.setTask_id(null); - dto.setIvt_qty(BigDecimal.valueOf(0)); - dto.setInstorage_time(null); - dto.setStanding_time(BigDecimal.valueOf(0)); // PointUpdateUtil.clearPoint(dto.getPoint_code()); } else if (pointStatus.equals("2")) { // 空载具 - dto.setMaterial_id(null); - dto.setInstorage_time(now); - dto.setStanding_time(BigDecimal.valueOf(0)); } else if (pointStatus.equals("3")) { // 有料 - if (ObjectUtil.isEmpty(dto.getMaterial_id())) throw new BadRequestException("物料不能为空"); - if (ObjectUtil.isEmpty(dto.getIvt_qty())) throw new BadRequestException("库存数不能为空"); - JSONObject materialObj = materialBaseTab.query("material_id = '" + dto.getMaterial_id() + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("未找到该物料"); - dto.setStanding_time(materialObj.getBigDecimal("standing_time")); - dto.setInstorage_time(now); } JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); pointTab.update(json); @@ -199,20 +168,8 @@ public class PointServiceImpl implements PointService { @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(Long[] ids) { - Long currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - String now = DateUtil.now(); - - WQLObject wo = WQLObject.getWQLObject("sch_base_point"); - for (Long point_id : ids) { - JSONObject param = new JSONObject(); - param.put("point_id", String.valueOf(point_id)); - param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); - param.put("update_time", now); - wo.update(param); - } + String ids_str = CommonUtils.idsArrayToInStr(ids); + WQLObject.getWQLObject("sch_base_point").delete("point_id IN " + ids_str); } @Override @@ -296,7 +253,7 @@ public class PointServiceImpl implements PointService { WQLObject wo = WQLObject.getWQLObject("sch_base_Point"); JSONArray data = jsonObject.getJSONArray("data"); String used = jsonObject.getString("used"); - for ( int i = 0; i < data.size(); i++ ) { + for (int i = 0; i < data.size(); i++) { JSONObject object = data.getJSONObject(i); if (used.equals("1")) object.put("is_used", 1); else object.put("is_used", 0); @@ -314,7 +271,7 @@ public class PointServiceImpl implements PointService { WQLObject wo = WQLObject.getWQLObject("sch_base_Point"); JSONArray data = jsonObject.getJSONArray("data"); String lock = jsonObject.getString("lock_type"); - for ( int i = 0; i < data.size(); i++ ) { + for (int i = 0; i < data.size(); i++) { JSONObject object = data.getJSONObject(i); if (lock.equals("1")) object.put("lock_type", 1); else object.put("lock_type", 2); @@ -336,4 +293,9 @@ public class PointServiceImpl implements PointService { } return load_series; } + + @Override + public JSONArray getDevice() { + return WQLObject.getWQLObject("pdm_bi_device").query("1 = 1", "device_code ASC").getResultJSONArray(0); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index e3251ff..4f34900 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -13,10 +13,12 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.service.ClassstandardService; import org.nl.wms.basedata.service.dto.ClassstandardDto; -import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatus; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.RegionService; import org.nl.wms.sch.service.TaskService; @@ -123,23 +125,24 @@ public class TaskServiceImpl implements TaskService { String task_id = MapUtil.getStr(map, "task_id"); String method_name = MapUtil.getStr(map, "method_name"); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); - if (taskObj.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) throw new BadRequestException("任务已完成!"); + if (taskObj.getString("task_status").equals(TaskStatus.FINISHED.value())) throw new BadRequestException("任务已完成!"); // 任务处理类 String processing_class = taskObj.getString("handle_class"); String message = ""; // 根据任务类型获取对应的任务操作类 try { Class clz = Class.forName(processing_class); - Object obj = clz.newInstance(); + AbstractAcsTask task = (AbstractAcsTask) SpringContextHolder.getBean(clz); // 调用每个任务类的method_name()强制结束方法 - Method m; - JSONObject result; + JSONObject result = null; if (method_name.equals("immediateNotifyAcs")) { // 立即下发不需要参数 - m = obj.getClass().getMethod(method_name); - result = (JSONObject) m.invoke(obj); - } else { - m = obj.getClass().getMethod(method_name, String.class); - result = (JSONObject) m.invoke(obj, task_id); + result = task.immediateNotifyAcs(task_id); + } + if (method_name.equals("forceFinish")) { + task.forceFinish(task_id); + } + if (method_name.equals("cancel")) { + task.cancel(task_id); } if (ObjectUtil.isEmpty(result)) return; JSONArray arr = result.getJSONArray("errArr"); @@ -159,13 +162,6 @@ public class TaskServiceImpl implements TaskService { param.put("remark", "操作成功"); wo.update(param); } - } catch (InvocationTargetException e) { - if (ObjectUtil.isNull(e.getTargetException().getMessage())) { - message = e.getTargetException().toString(); - } else { - message = e.getTargetException().getMessage(); - } - throw new BadRequestException(message); } catch (Exception e) { e.printStackTrace(); throw new BadRequestException("任务操作失败!"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDTO.java similarity index 91% rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java rename to lms/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDTO.java index c76d653..50228d0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/AcsTaskDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/AcsTaskDTO.java @@ -1,11 +1,11 @@ -package org.nl.wms.sch.tasks; +package org.nl.wms.sch.task; import lombok.Builder; import lombok.Data; @Data @Builder -public class AcsTaskDto { +public class AcsTaskDTO { //任务标识 private String task_id; //任务编码 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java new file mode 100644 index 0000000..4d305dc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/HLCallEmptyTask.java @@ -0,0 +1,108 @@ +package org.nl.wms.sch.task.call.empty; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.LockType; +import org.nl.wms.sch.manage.TaskStatus; +import org.nl.wms.sch.manage.TaskType; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * 辽宁晟华混料 叫空 任务类 + * + * @author zhangjiangwei + * @date 2023/03/03 9:08 + */ +@RequiredArgsConstructor +@Component +public class HLCallEmptyTask extends AbstractAcsTask { + + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + + TaskUtils.isEmpty(point); + TaskUtils.isLocked(point); + JSONObject work_order = TaskUtils.hasWorkOrder(point); + + JSONObject task = TaskUtils.buildTask( + "混料机叫空托盘", + TaskType.CALL_EMPTY.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + VehicleType.CUP.value(), + null, + TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? "99" : "1", + HLCallEmptyTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findStartPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + HLCallEmptyTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("CALL_EMPTY_TASK") + .addParam("flag", "1") + .addParam("vehicle_type", task.getString("vehicle_type")) + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", point.getString("vehicle_code")); + task.put("remark", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point_table.update(point); + } else { + task.put("remark", "未找到合适的叫空载具点位!"); + task_table.update(task); + } + } + } + + @Override + public void forceFinish(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java new file mode 100644 index 0000000..2522c83 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/YZCallEmptyTask.java @@ -0,0 +1,207 @@ +package org.nl.wms.sch.task.call.empty; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * 辽宁晟华压制 叫空 任务类 + * + * @author zhangjiangwei + * @date 2023/04/04 11:36 + */ +@RequiredArgsConstructor +@Component +public class YZCallEmptyTask extends AbstractAcsTask { + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + JSONObject work_order = form.getJSONObject("workorder"); + String priority = "1"; + if (ObjectUtil.isNotEmpty(work_order)) { + priority = TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? "99" : "1"; + } + + JSONObject task = TaskUtils.buildTask( + "压制区叫空", + TaskType.CALL_EMPTY.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + VehicleType.STEEL_TRAY.value(), + null, + priority, + YZCallEmptyTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findStartPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + YZCallEmptyTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("CALL_EMPTY_TASK") + .addParam("flag", "1") + .addParam("point_code", task.getString("point_code2")) + .process() + .uniqueResult(0); + if (ObjectUtil.isEmpty(point)) { + point = WQL + .getWO("CALL_EMPTY_TASK") + .addParam("flag", "2") + .process() + .uniqueResult(0); + } + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("point_code")); + task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + point_table.update(point); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + TaskUtils.addCurrentUpdateColum(point1); + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql similarity index 51% rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql rename to lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql index b00f35b..f14b4bf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/empty/wql/CALL_EMPTY_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 分拣送料 + 交易名: 叫空托盘 所属模块: 功能简述: 版权所有: @@ -13,11 +13,8 @@ ################################################# ## 表字段对应输入参数 ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - + 输入.flag TYPEAS s_string + 输入.point_code TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -38,38 +35,41 @@ ########################################## - # 3、业务主过程 # + # 3、业务主过程 # ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name + + IF 输入.flag = "1" + QUERY + SELECT + * FROM - SCH_BASE_Point p + sch_base_point point + LEFT JOIN st_ivt_vehicle_detail vd ON point.vehicle_type = vd.vehicle_type + AND point.vehicle_code = vd.vehicle_code WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '1' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ORDER BY p.instorage_time - ENDSELECT - ENDQUERY - ENDIF + point.is_used = '1' + AND point.lock_type = '1' + AND point.region_code = 'CPHJ' + AND point.point_status = '1' + AND point.vehicle_type = '2' + AND vd.is_delete = '0' + AND vd.point_code = 输入.point_code + AND vd.is_full = '0' + ENDSELECT + ENDQUERY + ENDIF IF 输入.flag = "2" QUERY SELECT - p.point_code AS device_code + * FROM - SCH_BASE_Point p + sch_base_point WHERE - region_code = 'RGCPQ' - AND point_type = '2' + is_used = '1' + AND lock_type = '1' + AND region_code = 'GTK' + AND point_type = '3' ENDSELECT ENDQUERY ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java new file mode 100644 index 0000000..e4a3e51 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/SZCallMaterialTask.java @@ -0,0 +1,209 @@ +package org.nl.wms.sch.task.call.material; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zhangjiangwei + * @date 2023/04/07 15:51 + */ +@RequiredArgsConstructor +@Component +public class SZCallMaterialTask extends AbstractAcsTask { + + @Transactional(rollbackFor = Exception.class) + @Override + public void autoCreate() { + JSONArray points = WQL.getWO("CALL_MATERIAL_TASK").addParam("flag", "1").process().getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(points) && !points.isEmpty()) { + JSONObject form = new JSONObject(); + form.put("create_mode", CreateMode.ZDSC.value()); + form.put("create_id", AutoCreate.id); + form.put("create_name", AutoCreate.nick_name); + form.put("request_param", "auto"); + for (int i = 0; i < points.size(); i++) { + JSONObject point = points.getJSONObject(i); + form.put("point", point); + this.createTask(form); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + + JSONObject task = TaskUtils.buildTask( + "烧制区叫料", + TaskType.CALL_MATERIAL.value(), + TaskStatus.SURE_END.value(), + null, + point.getString("point_code"), + null, + VehicleType.STEEL_TRAY.value(), + null, + "1", + SZCallMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findStartPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_END.value() + "' AND handle_class = '" + SZCallMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("CALL_MATERIAL_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code1", point.getString("point_code")); + task.put("material_id", point.getString("material_id")); + task.put("vehicle_code", TaskUtils.formatVehicleCode(point.getString("vehicle_code"))); + task.put("remark", ""); + task_table.update(task); + + JSONObject point_update = new JSONObject(); + point_update.put("lock_type", LockType.TASK_LOCKED.value()); + point_update.put("task_code", task.getString("task_code")); + point_table.update(point_update, "point_id = " + point.getLongValue("point_id")); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + TaskUtils.addCurrentUpdateColum(point1); + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql new file mode 100644 index 0000000..03f14d2 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/call/material/wql/CALL_MATERIAL_TASK.wql @@ -0,0 +1,79 @@ +[交易说明] + 交易名: 叫空托盘 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF flag = "1" + QUERY + SELECT + point.*, + vd.material_id, + workorder.is_urgent + FROM + sch_base_point point + JOIN st_ivt_vehicle_detail vd ON point.vehicle_type = vd.vehicle_type + AND point.vehicle_code = vd.vehicle_code + AND vd.is_delete = '0' + LEFT JOIN pdm_bd_workorder workorder ON vd.workorder_id = workorder.workorder_id + WHERE + point.is_used = '1' + AND point.lock_type = '1' + AND point.region_code = 'CPHJ' + AND point.point_status = '1' + AND point.vehicle_type = '2' + AND vd.is_fire = '0' + AND vd.if_in_kiln = '1' + ORDER BY + workorder.is_urgent DESC, vd.create_time ASC + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND region_code = 'SZ' + AND point_type = '1' + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java new file mode 100644 index 0000000..1487abc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/HLSendMaterialTask.java @@ -0,0 +1,83 @@ +package org.nl.wms.sch.task.send.material; + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatus; +import org.nl.wms.sch.manage.TaskType; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * 辽宁晟华混料 送料入库 任务类 + * + * @author zhangjiangwei + * @date 2023/03/06 14:28 + */ +@RequiredArgsConstructor +@Component +public class HLSendMaterialTask extends AbstractAcsTask { + + + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + + } + + @Override + @Transactional + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + + TaskUtils.isLocked(point); + JSONObject work_order = TaskUtils.hasWorkOrder(point); + + String vehicle_code = form.getString("vehicle_code"); + if ("0000".equals(vehicle_code)) { + throw new BadRequestException("载具编码不能为空!"); + } + + // todo 组盘 + + JSONObject task = TaskUtils.buildTask( + "混料机送料入库", + TaskType.SEND_MATERIAL.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + work_order.getString("material_id"), + VehicleType.CUP.value(), + vehicle_code, + TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? "99" : "1", + HLSendMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + return task.getString("task_id"); + } + + @Override + @Transactional + public void findNextPoint() { + + } + + @Override + public void forceFinish(String task_id) { + + } + + @Override + public void cancel(String task_id) { + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java new file mode 100644 index 0000000..e631cc8 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/SZSendMaterialTask.java @@ -0,0 +1,199 @@ +package org.nl.wms.sch.task.send.material; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zhangjiangwei + * @date 2023/04/12 22:12 + */ +@RequiredArgsConstructor +@Component +public class SZSendMaterialTask extends AbstractAcsTask { + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + String vehicle_code = form.getString("vehicle_code"); + WQLObject vd_table = WQLObject.getWQLObject("st_ivt_vehicle_detail"); + JSONObject vd = vd_table + .query("is_delete = '0' AND vehicle_type = '2' AND vehicle_code = '" + vehicle_code + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(vd)) { + throw new BadRequestException("未找到 [" + vehicle_code + "] 的组盘信息!"); + } + vd.put("is_fire", "1"); + vd.put("is_in_kiln", "0"); + vd_table.update(vd); + + JSONObject task = TaskUtils.buildTask( + "烧制区送料", + TaskType.SEND_MATERIAL.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + vd.getString("material_id"), + VehicleType.STEEL_TRAY.value(), + vehicle_code, + "1", + SZSendMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findNextPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + SZSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code2", point.getString("point_code")); + task.put("remark", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + point_table.update(point); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + TaskUtils.addCurrentUpdateColum(point1); + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java new file mode 100644 index 0000000..f6c8045 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/YZSendMaterialTask.java @@ -0,0 +1,194 @@ +package org.nl.wms.sch.task.send.material; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.basedata.eum.VehicleType; +import org.nl.wms.sch.manage.*; +import org.nl.wms.sch.task.util.TaskUtils; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author zhangjiangwei + * @date 2023/04/05 17:39 + */ +@RequiredArgsConstructor +@Component +public class YZSendMaterialTask extends AbstractAcsTask { + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject task, String status) { + if (TaskStatus.EXECUTING.value().equals(status)) { + task.put("task_status", TaskStatus.EXECUTING.value()); + TaskUtils.addACSUpdateColum(task); + WQLObject.getWQLObject("sch_base_task").update(task); + } else if (TaskStatus.FINISHED.value().equals(status)) { + this.finishTask(task, OperationType.AUTO); + } else if (TaskStatus.CANCELLED.value().equals(status)) { + this.cancelTask(task, OperationType.AUTO); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String createTask(JSONObject form) { + JSONObject point = form.getJSONObject("point"); + JSONObject work_order = form.getJSONObject("workorder"); + JSONObject vd = form.getJSONObject("vd"); + + JSONObject task = TaskUtils.buildTask( + "压制区送料", + TaskType.SEND_MATERIAL.value(), + TaskStatus.SURE_START.value(), + point.getString("point_code"), + null, + work_order.getString("material_id"), + VehicleType.STEEL_TRAY.value(), + vd.getString("vehicle_code"), + TrueOrFalse.trueOrFalse(work_order.getString("is_urgent")) ? "99" : "1", + YZSendMaterialTask.class.getName(), + form.getString("create_mode"), + form.getString("request_param"), + form.getString("create_id"), + form.getString("create_name") + ); + WQLObject.getWQLObject("sch_base_task").insert(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + WQLObject.getWQLObject("sch_base_point").update(point); + + return task.getString("task_id"); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void findNextPoint() { + WQLObject task_table = WQLObject.getWQLObject("sch_base_task"); + JSONArray tasks = task_table + .query("is_delete = '0' AND task_status = '" + TaskStatus.SURE_START.value() + "' AND handle_class = '" + YZSendMaterialTask.class.getName() + "'", "priority DESC, create_time ASC") + .getResultJSONArray(0); + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + for (int i = 0; i < tasks.size(); i++) { + JSONObject task = tasks.getJSONObject(i); + + JSONObject point = WQL + .getWO("SEND_MATERIAL_TASK") + .addParam("flag", "1") + .process() + .uniqueResult(0); + + if (ObjectUtil.isNotEmpty(point)) { + task.put("task_status", TaskStatus.START_AND_END.value()); + task.put("point_code2", point.getString("point_code")); + task.put("remark", ""); + task_table.update(task); + + point.put("lock_type", LockType.TASK_LOCKED.value()); + point.put("task_code", task.getString("task_code")); + point_table.update(point); + } + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void forceFinish(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.finishTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void cancel(String task_id) { + JSONObject task = WQLObject.getWQLObject("sch_base_task").query("task_id = " + task_id).uniqueResult(0); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("未找到任务!"); + } + this.cancelTask(task, OperationType.MANUAL); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.CANCELLED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point1); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point1); + } + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject task, OperationType operation_type) { + task.put("task_status", TaskStatus.FINISHED.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(task); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(task); + } + WQLObject.getWQLObject("sch_base_task").update(task); + + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + JSONObject point1 = point_table.query("point_code = '" + task.getString("point_code1") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(point1) + && LockType.TASK_LOCKED.value().equals(point1.getString("lock_type")) + && task.getString("task_code").equals(point1.getString("task_code"))) { + point1.put("lock_type", LockType.UNLOCKED.value()); + point1.put("task_code", ""); + point1.put("vehicle_type", ""); + point1.put("vehicle_code", ""); + point1.put("point_status", PointStatus.EMPTY.value()); + TaskUtils.addCurrentUpdateColum(point1); + point_table.update(point1); + } + + JSONObject point2 = new JSONObject(); + point2.put("lock_type", LockType.UNLOCKED.value()); + point2.put("task_code", ""); + point2.put("vehicle_type", task.getString("vehicle_type")); + point2.put("vehicle_code", task.getString("vehicle_code")); + point2.put("point_status", PointStatus.NOT_EMPTY.value()); + if (operation_type == OperationType.AUTO) { + TaskUtils.addACSUpdateColum(point2); + } else if (operation_type == OperationType.MANUAL) { + TaskUtils.addCurrentUpdateColum(point2); + } + point_table.update(point2, "point_code = '" + task.getString("point_code2") + "'"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql similarity index 57% rename from lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql rename to lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql index 7546033..dd5394d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/wql/QSCH_cpOut_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/send/material/wql/SEND_MATERIAL_TASK.wql @@ -1,5 +1,5 @@ [交易说明] - 交易名: 成品出库 + 交易名: 送料入库 所属模块: 功能简述: 版权所有: @@ -13,8 +13,9 @@ ################################################# ## 表字段对应输入参数 ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string + 输入.flag TYPEAS s_string + 输入.point_type TYPEAS s_string + 输入.device_code TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -38,22 +39,18 @@ # 3、业务主过程 # ########################################## - IF 输入.flag = "1" - QUERY - SELECT - * - FROM - SCH_BASE_Point - WHERE - is_used = '1' - AND is_delete = '0' - AND lock_type = '1' - AND is_used = '1' - AND point_status = '1' - OPTION 输入.region_code <> "" - region_code = 输入.region_code - ENDOPTION - ORDER BY point_code - ENDSELECT - ENDQUERY - ENDIF \ No newline at end of file + IF 输入.flag = "1" + QUERY + SELECT + * + FROM + sch_base_point + WHERE + is_used = '1' + AND lock_type = '1' + AND region_code = 'CPHJ' + AND point_type = '1' + AND point_status = '0' + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java new file mode 100644 index 0000000..dcc131a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java @@ -0,0 +1,110 @@ +package org.nl.wms.sch.task.util; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import 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.core.bean.WQLObject; +import org.nl.wms.sch.manage.ACSSystem; +import org.nl.wms.sch.manage.LockType; +import org.nl.wms.sch.manage.PointStatus; + +/** + * 辽宁晟华任务工具类 + * + * @author zhangjiangwei + * @date 2023/03/06 14:32 + */ +public class TaskUtils { + + public static void isEmpty(JSONObject point) { + if (PointStatus.NOT_EMPTY.value().equals(point.getString("point_status"))) { + throw new BadRequestException("[" + point.getString("point_code") + "] 上有货!"); + } + } + + public static void isLocked(JSONObject point) { + String lock_type = point.getString("lock_type"); + if (!LockType.UNLOCKED.value().equals(lock_type)) { + throw new BadRequestException("[" + point.getString("point_code") + "] 已被" + LockType.get(lock_type).label() + "!"); + } + } + + public static JSONObject hasWorkOrder(JSONObject point) { + String device_code = point.getString("device_code"); + JSONObject work_order = WQLObject + .getWQLObject("pdm_bd_workorder") + .query("is_delete = '0' AND device_code = '" + device_code + "' AND order_status = '3'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(work_order)) { + throw new BadRequestException("[" + point.getString("point_code") + "] 所属设备 [" + device_code + "] 未开始生产!"); + } + return work_order; + } + + public static JSONObject buildTask( + String task_name, + String task_type, + String task_status, + String point_code1, + String point_code2, + String material_id, + String vehicle_type, + String vehicle_code, + String priority, + String handle_class, + String create_mode, + String request_param, + String create_id, + String create_name + ) { + JSONObject task = new JSONObject(); + task.put("task_id", IdUtil.getSnowflake().nextId()); + task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); + task.put("task_name", task_name); + task.put("task_type", task_type); + task.put("task_status", task_status); + task.put("point_code1", point_code1); + task.put("point_code2", point_code2); + task.put("material_id", material_id); + task.put("vehicle_type", vehicle_type); + task.put("vehicle_code", vehicle_code); + task.put("priority", priority); + task.put("handle_class", handle_class); + task.put("create_mode", create_mode); + task.put("request_param", request_param); + task.put("create_id", create_id); + task.put("create_name", create_name); + task.put("create_time", DateUtil.now()); + return task; + } + + public static String formatVehicleCode(String vehicle_code) { + if (StrUtil.isBlank(vehicle_code)) { + return "0000"; + } + + StringBuilder vehicle_code_builder = new StringBuilder(vehicle_code); + for (int i = vehicle_code_builder.length(); i < 4; i++) { + vehicle_code_builder.insert(0, "0"); + } + vehicle_code = vehicle_code_builder.toString(); + return vehicle_code; + } + + public static void addACSUpdateColum(JSONObject row) { + row.put("update_optid", ACSSystem.id); + row.put("update_optname", ACSSystem.nick_name); + row.put("update_time", DateUtil.now()); + } + + public static void addCurrentUpdateColum(JSONObject row) { + row.put("update_optid", SecurityUtils.getCurrentUserId()); + row.put("update_optname", SecurityUtils.getCurrentNickName()); + row.put("update_time", DateUtil.now()); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java deleted file mode 100644 index 4e6e115..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.nl.wms.sch.tasks; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 普通点对点任务 - */ -@Service -public class PointToPointTask extends AbstractAcsTask { - - @Override - @Transactional - public void updateTaskStatus(JSONObject taskObj, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - - String task_id = taskObj.getString("task_id"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - if (StrUtil.equals(status,"0")) { - // 取消删除任务 - taskTab.delete("task_id = '"+task_id+"'"); - } - - if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { - // 更新任务状态为执行中 - jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - jsonTask.put("update_time", DateUtil.now()); - jsonTask.put("car_no", taskObj.getString("car_no")); - taskTab.update(jsonTask); - } - - if(StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { - // 完成 - jsonTask.put("task_status",TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", SecurityUtils.getCurrentUserId()); - jsonTask.put("update_optname", SecurityUtils.getCurrentUsername()); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - } - - } - - - - @Override - @Transactional - public String createTask(JSONObject form) { - return null; - } - - @Override - public void forceFinish(String task_id) { - JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); - this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); - } - - @Override - public List addTask() { - return null; - } - - - - - @Override - public void cancel(String task_id) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java deleted file mode 100644 index 5086027..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.nl.wms.sch.tasks; - -import cn.hutool.core.date.DateUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.nl.modules.common.exception.BadRequestException; -import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; -import org.nl.wms.sch.manage.PointEnum; - -/** - * @author: lyd - * @description: 点位更新工具类 - * @Date: 2022/11/23 - */ -public class PointUpdateUtil { - /** - * 清理点位 - */ - public static void clearPoint(String point_code) { - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject pointObj = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0); - pointObj.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); - pointObj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointObj.put("vehicle_type", ""); - pointObj.put("vehicle_code", ""); - pointObj.put("vehicle_qty", "0"); - pointObj.put("material_id", ""); - pointObj.put("pcsn", ""); - pointObj.put("ivt_qty", "0"); - pointObj.put("qty_unit_id", ""); - pointObj.put("ivt_weight", "0"); - pointObj.put("weight_unit_id", ""); - pointObj.put("instorage_time", ""); - pointObj.put("is_full", "0"); - pointObj.put("standing_time", "0"); - pointObj.put("warn_time", "0"); - pointObj.put("group_id", ""); - pointTab.update(pointObj); - } - - /** - * 点位:空载具 - */ - public static void setVehicle(JSONObject jsonObject) { - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject pointObj = pointTab.query("point_code = '" + jsonObject.getString("point_code") + "'").uniqueResult(0); - pointObj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointObj.put("point_status", PointEnum.POINT_STATUS_EMPTY_VEHICLE.getCode()); - pointObj.put("vehicle_code", jsonObject.getString("vehicle_code")); - pointObj.put("vehicle_qty", "1"); - pointObj.put("instorage_time", DateUtil.now()); - pointObj.put("is_full", "1"); - pointObj.put("ivt_qty", "0"); - pointObj.put("pcsn", null); - pointObj.put("material_id", null); - pointObj.put("standing_time", "0"); - pointTab.update(pointObj); - } - - /** - * 访问acs获取点位数据更新点位信息: - * 分拣呼叫空托盘、空钢托盘叠盘架 - * @param pointCodes - * @deprecated 只更新点位状态和载具类型 - */ - public static void updatePoint(JSONArray pointCodes) { - WQLObject pointTable = WQLObject.getWQLObject("sch_base_point"); - WmsToAcsServiceImpl wmsToAcsService = new WmsToAcsServiceImpl(); - // 向ACS查询点位状态 - JSONObject pointStatus = wmsToAcsService.getPointStatus(pointCodes); - // 找到对应的载具类型再去下发 - JSONArray deviceDatas = pointStatus.getJSONArray("data"); - for (int j = 0; j < deviceDatas.size(); j++) { - JSONObject pointObj = deviceDatas.getJSONObject(j); - String point_code = pointObj.getString("device_code"); - String mode = pointObj.getString("mode"); // 工作状态:0脱机,其他正常 - String error = pointObj.getString("error"); // 0是正常 - String point_status = pointObj.getString("move"); // 点位状态:0无货,1有货(具体是空载具还是物料不知道) - //将托盘类型456.... - String vehicle_type = pointObj.getString("container_type"); - if (mode.equals("0") || !error.equals("0")) { - // 点位异常 - vehicle_type = ""; - point_status = "0"; - if (point_code.startsWith("BZX")) point_status = "1"; - } - JSONObject pointObj2 = pointTable.query("point_code = '" + point_code + "'").uniqueResult(0); - pointObj2.put("point_status", Integer.parseInt(point_status) + 1); // 1空位, 2空载具 - pointObj2.put("vehicle_type", vehicle_type); - pointTable.update(pointObj2); - } - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java deleted file mode 100644 index a812af2..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java +++ /dev/null @@ -1,312 +0,0 @@ -package org.nl.wms.sch.tasks.autoCallMaterial; - -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 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.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.nl.wms.util.IdUtil; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 入窑缓存自动送料 - * @Date: 2022/11/24 - */ -public class RykCallMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = RykCallMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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 material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0); - //任务取消 - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - 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.isNotEmpty(material_point)) { - // 点位解锁 - material_point.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(material_point); - } - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - 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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - 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", material_point.getString("qty")); - regionIoObj.put("ivt_weight", material_point.getString("weight")); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", point_code2); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - - /** - * 完成后将组盘id和任务id赋值到入窑口 - */ -// JSONObject uniqueResult = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); -// uniqueResult.put("group_id", material_point.getString("group_id")); -// uniqueResult.put("task_id", material_point.getString("task_id")); -// pointTab.update(uniqueResult); - // 物料点位解锁 并设置空位 - PointUpdateUtil.clearPoint(material_point.getString("point_code")); - } - } - - /** - * 自动生成任务 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void autoCreate() { - String point_code2 = "RYW"; - //任务表【SCH_BASE_Task】 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - //点位基础表【SCH_BASE_Point】 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - //判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) return; -// JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); -// if (ObjectUtil.isNotEmpty(object.getString("group_id"))) return; - // 判断是否有货 - // 获取RYW - JSONArray pointCodes = new JSONArray(); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("device_code", "RYW"); - pointCodes.add(jsonObject); - // 更新点位 - PointUpdateUtil.updatePoint(pointCodes); - JSONObject object1 = pointTab.query("point_code = 'RYW'").uniqueResult(0); - if (object1.getString("point_status").equals("2")) return; // 代表有货就不需要继续执行 - - SchTaskDto dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("烧制出库") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - public String createTask(JSONObject form) { - String point_code2 = form.getString("point_code2"); - String qty = form.getString("qty"); - - //生产工单表【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("烧制出库") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @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"); - JSONObject queryParam = new JSONObject(); - queryParam.put("flag", "1"); - queryParam.put("material_id", material_id); - queryParam.put("region_code", "RYZCQ"); - // 到入窑暂存区找,找满拖的 - JSONObject json1 = WQL.getWO("QSCH_rykCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(json1)) { - // 拿到点位 - JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!"); - // 物料点位上锁 - material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(material_point); - - taskObj.put("point_code1", material_point.getString("point_code")); - taskObj.put("material_id", material_point.getString("material_id")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("task_id", taskObj.getString("task_id")); - taskObj.put("group_id", json1.getString("group_id")); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - taskObj.put("remark", "入窑暂存区无所需物料"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } - - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql deleted file mode 100644 index f94a735..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql +++ /dev/null @@ -1,63 +0,0 @@ -[交易说明] - 交易名: 入窑口自动任务 - 叫料 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - * - FROM - SCH_BASE_Point p - WHERE - p.is_used = '1' - AND is_delete = '0' - AND lock_type = '1' - AND point_status = '3' - AND is_full = '1' - OPTION 输入.material_id <> "" - p.material_id = 输入.material_id - ENDOPTION - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java deleted file mode 100644 index 5b64898..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java +++ /dev/null @@ -1,307 +0,0 @@ -package org.nl.wms.sch.tasks.callEmpty; - -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.ext.acs.service.WmsToAcsService; -import org.nl.wms.sch.SchTaskDto; -import org.nl.wms.sch.manage.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.nl.wms.util.IdUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 分拣呼叫木托盘 - * @Date: 2022/11/14 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class FjCallEmptyVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = FjCallEmptyVehicleTask.class.getName(); - - @Autowired - private WmsToAcsService wmsToAcsService; - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - JSONObject requestObj = taskObj.getJSONObject("request_param"); - - String point_code1 = taskObj.getString("point_code1"); - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - /* - * 取消任务 - */ - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - if (ObjectUtil.isEmpty(startPoint)) return; - startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(startPoint); - } - - if (StrUtil.equals(status, UpdateTaskStatusEnum.EXECUTION.getCode())) { - // 更新任务状态为执行中 - taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("car_no", task.getString("car_no")); - taskTab.update(taskObj); - } - - if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - /* - * 更改任务状态为完成 - */ - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - if (ObjectUtil.isEmpty(startPoint)) return; - if (startPoint.getString("point_code").startsWith("BT")) { // 包装缓存位 - JSONObject groupObj = groupTab.query("group_id = '" + taskObj.getString("group_id") + "'").uniqueResult(0); - 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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - regionIoObj.put("region_id", startPoint.getString("region_id")); - regionIoObj.put("region_code", startPoint.getString("region_code")); - regionIoObj.put("region_name", startPoint.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", groupObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - // 点位更新,起点:空位,解锁; - PointUpdateUtil.clearPoint(startPoint.getString("point_code")); - } else { // 钢托盘每次就一个 - startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); // 出口点 - } - pointTab.update(startPoint); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表 - - //任务表【SCH_BASE_Task】 - //判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); - - - String point_code2 = form.getString("point_code2"); - 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(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("分拣呼叫木托盘") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .acs_task_type("3") - .vehicle_type(workOrderObj.getString("vehicle_type")) - .vehicle_qty(1) -// .task_group_id(org.nl.wms.util.IdUtil.getLongId()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - // 先找包装暂存区是否有半满托的,没有就呼叫空的木托盘 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); - for (int i = 0; i < taskArr.size(); i++) { - // 创建任务 - JSONObject taskObj = taskArr.getJSONObject(i); - String vehicle_type = taskObj.getString("vehicle_type"); - // 寻找入窑暂存区是否有半托 - JSONObject noFull = new JSONObject(); - noFull.put("flag", "1"); - noFull.put("region_code", "BZZCQ"); - noFull.put("material_id", taskObj.getString("material_id")); - JSONObject noFullPoint = WQL.getWO("QSCH_fjCallEmptyVehicle_01").addParamMap(noFull).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(noFullPoint)) { // 找到半满托盘,叫料出库 - taskObj.put("update_time", DateUtil.now()); - taskObj.put("point_code1", noFullPoint.getString("point_code")); - taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中 - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("remark", ""); - taskTab.update(taskObj); - - //锁住起点 - noFullPoint.put("task_id", taskObj.getString("task_id")); - noFullPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(noFullPoint); - } else { // 没有就呼叫空的木托盘 - // 获取所有的托盘堆叠位 - JSONArray pointCodes = WQL.getWO("QSCH_fjSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0); - // 更新点位 - PointUpdateUtil.updatePoint(pointCodes); - // 找到载具类型符合的覆膜机位置:真正的位置在device_code - JSONObject emptyTray = pointTab.query("region_code = 'RGCPQ' AND vehicle_type = '" + - taskObj.getString("vehicle_type") + "' AND point_status = '2' " + - "AND is_used = '1' AND is_delete = '0' AND point_type = '2'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(emptyTray)) { - // 判断出口是否锁住 - JSONObject exitPoint = pointTab.query("point_code = '" + - emptyTray.getString("device_code") + "'" + - " AND lock_type = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(exitPoint)) return; // 出口点锁住就不能呼叫空盘 - // 向ACS申请传送一个空木托盘 - JSONArray jsonArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put("device_code", exitPoint.getString("point_code")); - jsonArray.add(data); - wmsToAcsService.getTray(jsonArray); - // 去搬运 - taskObj.put("point_code1", exitPoint.getString("point_code")); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - // 锁住出口点 - exitPoint.put("task_id", taskObj.getString("task_id")); - exitPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(exitPoint); - } else { - taskObj.put("remark", "暂无空托盘"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java deleted file mode 100644 index 2aa5bd8..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java +++ /dev/null @@ -1,260 +0,0 @@ -package org.nl.wms.sch.tasks.callEmpty; - -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.PointEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 混碾呼叫空盅 - * @Date: 2022/11/9 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class HnCallEmptyVehicleTask extends AbstractAcsTask { - - private final String THIS_CLASS = HnCallEmptyVehicleTask.class.getName(); - - /** - * 添加任务进行下发 - * - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - /* - * 取消任务 - */ - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - - String point_code1 = task.getString("point_code1"); - if (ObjectUtil.isNotEmpty(point_code1)) { - JSONObject endPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { - // 更新任务状态为执行中 - taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("car_no", task.getString("car_no")); - taskTab.update(taskObj); - } - - if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - /* - * 更改任务状态为完成 - */ - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - /** - * 点位更新,起点:空位 - */ - String point_code1 = taskObj.getString("point_code1"); - if (ObjectUtil.isEmpty(point_code1)) return; - PointUpdateUtil.clearPoint(point_code1); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - /* - * 1.先生成确定终点的任务 - * 2.通过findStartPoint()找起点 - * 3.下发给ACS - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表 - - //任务表【SCH_BASE_Task】 - //判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); - - String point_code2 = form.getString("point_code2"); - 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(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("混碾机叫空盅") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .acs_task_type("3") - .workorder_id(workOrderObj.getLong("workorder_id")) - .vehicle_code(form.getString("vehicle_code")) - .vehicle_type(workOrderObj.getString("is_new"))//载具类型统一用载具表维护 - .vehicle_qty(form.getIntValue("qty")) - .task_group_id(org.nl.wms.util.IdUtil.getLongId()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 工单表 - - JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); - for (int i = 0; i < taskArr.size(); i++) { - // 创建任务 - JSONObject taskObj = taskArr.getJSONObject(i); - // 获取工单 - String workorder_id = taskObj.getString("workorder_id"); - JSONObject workOrderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - - JSONObject param1 = new JSONObject(); - param1.put("flag", "1"); - param1.put("region_code", "KLHJ"); - param1.put("is_new", workOrderObj.getString("is_new")); - // 直接到困料货架找一个空载具 (需要区分新旧载具) - JSONObject startPoint = WQL.getWO("QSCH_hnCallEmptyVehicle_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(startPoint)) { - taskObj.put("remark", "困料货架无可用载具!"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("point_code1", startPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住起点 - startPoint.put("task_id", taskObj.getString("task_id")); - startPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(startPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java deleted file mode 100644 index 21fb7c8..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java +++ /dev/null @@ -1,306 +0,0 @@ -package org.nl.wms.sch.tasks.callEmpty; - -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.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -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: 2022/11/10 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class YzjCallEmptyVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = YzjCallEmptyVehicleTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,1:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - String point_code1 = taskObj.getString("point_code1"); - String point_code2 = taskObj.getString("point_code2"); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - /* - * 取消任务 - */ - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - if (ObjectUtil.isNotEmpty(point_code1)) { - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(startPoint); - } - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { - // 更新任务状态为执行中 - taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskObj.put("car_no", task.getString("car_no")); - taskTab.update(taskObj); - } - - if (StrUtil.equals(status,UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - /* - * 更改任务状态为完成 - */ - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(startPoint)) return; - if (point_code1.startsWith("R")) { // 入窑缓存位 - 半托出库 - // 插入出库单 - 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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - regionIoObj.put("region_id", startPoint.getString("region_id")); - regionIoObj.put("region_code", startPoint.getString("region_code")); - regionIoObj.put("region_name", startPoint.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - // 点位更新,起点:空位,解锁; - PointUpdateUtil.clearPoint(startPoint.getString("point_code")); - // 终点:压制机对接位,将半托的组盘id放进去 - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("group_id", taskObj.getString("group_id")); - pointTab.update(endPoint); - } - // 起点解锁 - JSONObject object = pointTab.query("point_code = '" + startPoint.getString("point_code") + "'").uniqueResult(0); - object.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(object); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - /* - * 1.先生成确定终点的任务 - * 2.通过findStartPoint()找起点 - * 3.下发给ACS - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 生产工单表 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); //点位基础表 - - //任务表【SCH_BASE_Task】 - //判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + form.getString("point_code2") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + form.getString("point_code2") + "存在未完成的任务"); - - String point_code2 = form.getString("point_code2"); - 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(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("压制机叫空载具") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .acs_task_type("2") - .material_id(workOrderObj.getLong("material_id")) - .workorder_id(workOrderObj.getLong("workorder_id")) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .vehicle_qty(form.getIntValue("qty")) - .task_group_id(org.nl.wms.util.IdUtil.getLongId()) - .handle_class(THIS_CLASS) - .request_param(form.toJSONString()) - .create_time(DateUtil.now()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - // 找托盘:先找库存上是否有半满托盘,如果没有就到KGTDDW05找空钢托盘 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - JSONArray taskArr = taskTab.query("is_delete = '0' and handle_class = '" + this.THIS_CLASS + "' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0); - for (int i = 0; i < taskArr.size(); i++) { - // 创建任务 - JSONObject taskObj = taskArr.getJSONObject(i); - // 寻找入窑暂存区是否有半托 - JSONObject noFull = new JSONObject(); - noFull.put("flag", "1"); - noFull.put("region_code", "RYZCQ"); - noFull.put("material_id", taskObj.getString("material_id")); - JSONObject noFullPoint = WQL.getWO("QSCH_yzjCallEmptyVehicle_01").addParamMap(noFull).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(noFullPoint)) { // 找到半满托盘,叫料出库 - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中 - taskObj.put("point_code1", noFullPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住起点 - noFullPoint.put("task_id", taskObj.getString("task_id")); - noFullPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(noFullPoint); - } else { // 到KGTDDW05找空钢托盘 - // 访问acs更新点位状态 - // 向ACS查询是否有空钢托盘 - JSONArray params = new JSONArray(); - JSONObject deviceCode = new JSONObject(); - deviceCode.put("device_code", "KGTDDW05"); - params.add(deviceCode); - PointUpdateUtil.updatePoint(params); - JSONObject param = new JSONObject(); - param.put("flag", "2"); - param.put("region_code", "KGTCPQ"); - param.put("point_code", "KGTDDW05"); - JSONObject kgtPoint = WQL.getWO("QSCH_yzjCallEmptyVehicle_01").addParamMap(param).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(kgtPoint)) { - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("point_code1", kgtPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住起点 - kgtPoint.put("task_id", taskObj.getString("task_id")); - kgtPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(kgtPoint); - } else { - taskObj.put("remark", "未找到可用的载具!"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql deleted file mode 100644 index a0339da..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql +++ /dev/null @@ -1,88 +0,0 @@ -[交易说明] - 交易名: 分拣码垛呼叫空载具 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - * - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND is_full = '0' - AND point_status = '3' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.material_id <> "" - p.material_id = 输入.material_id - ENDOPTION - ORDER BY instorage_time - ENDSELECT - ENDQUERY - ENDIF - IF 输入.flag = "2" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '2' - AND point_type = '2' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.vehicle_type <> "" - p.vehicle_type = 输入.vehicle_type - ENDOPTION - ORDER BY col_num,row_num,layer_num - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql deleted file mode 100644 index 682220d..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_hnCallEmptyVehicle_01.wql +++ /dev/null @@ -1,64 +0,0 @@ -[交易说明] - 交易名: 混碾机呼叫空载具 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.is_new TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## -IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '2' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.is_new <> "" - p.vehicle_type = 输入.is_new - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql deleted file mode 100644 index 8e620f6..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_yzjCallEmptyVehicle_01.wql +++ /dev/null @@ -1,79 +0,0 @@ -[交易说明] - 交易名:压制机呼叫空钢托盘 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.point_code TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - * - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_full = '0' - AND is_delete = '0' - AND point_status = '3' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - IF 输入.flag = "2" - QUERY - SELECT - * - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.point_code <> "" - p.point_code = 输入.point_code - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java deleted file mode 100644 index 307c910..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java +++ /dev/null @@ -1,273 +0,0 @@ -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.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -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: 2022/11/11 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class FjCallMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = FjCallMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - 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.isNotEmpty(material_point)) { - // 点位解锁 - material_point.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(material_point); - } - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - 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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - 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", material_point.getString("material_id")); - regionIoObj.put("vehicle_code", material_point.getString("vehicle_code")); - regionIoObj.put("qty", material_point.getString("ivt_qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - - //完成后 - // 物料点位解锁 并设置空位 - PointUpdateUtil.clearPoint(material_point.getString("point_code")); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code2 = form.getString("point_code2"); - String qty = form.getString("qty"); - - //生产工单表【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("分拣出库") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - // 到出窑缓存区找一托物料 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); // 组盘表 - 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 queryParam = new JSONObject(); - queryParam.put("flag", "1"); - queryParam.put("material_id", material_id); - queryParam.put("region_code", "CYZCQ"); - // 到出窑暂存区找 - JSONObject json1 = WQL.getWO("QSCH_cyCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(json1)) { - // 拿到点位 - JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!"); - // 物料点位上锁 - material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - material_point.put("task_id", taskObj.getString("task_id")); - pointTab.update(material_point); - - // 将组盘标识赋给任务 - taskObj.put("group_id", material_point.getString("group_id")); - JSONObject object = groupTab.query("group_id = '" + material_point.getString("group_id") + "'").uniqueResult(0); - taskObj.put("vehicle_code", object.getString("vehicle_code")); - taskObj.put("point_code1", material_point.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - 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); - } - - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java deleted file mode 100644 index b2a1348..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java +++ /dev/null @@ -1,294 +0,0 @@ -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.apache.commons.lang3.StringUtils; -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.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.nl.wms.util.IdUtil; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; - -/** - * @author: lyd - * @description: 压制机叫料工序 - * @Date: 2022/11/10 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class YzjCallMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = YzjCallMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - 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", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(material_point); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - if (ObjectUtil.isEmpty(material_point)) return; - JSONObject requestObj = taskObj.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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - 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("ivt_weight", requestObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - //完成后 - // 物料点位解锁 并设置空位 - PointUpdateUtil.clearPoint(material_point.getString("point_code")); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code2 = form.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("该设备当前未生产或者已删除"); - - if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_NEW_MATERIAL.getCode()) && point_code2.endsWith("02")) { - // 不需要下发任务,也不能创建任务 - return null; - } - - SchTaskDto dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("压制机叫料") - .acs_task_type("2") - .vehicle_type(workOrderObj.getString("is_new")) - .workorder_id(workOrderObj.getLong("workorder_id")) - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(point_code2) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @returninvoke - * @discription 确定任务起点 - * @author ldjun - * @created 2020年6月12日 下午6:01:30 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void findStartPoint() { - /** - * 根据业务找对应的起点,直接到困料货架获取 - * 如果是普通压制机:区分新旧物料、新料有对接位,旧料需要查找放到哪个旧盅货架 - * 如果是液压机:手持呼叫,到困料货架查找相同物料的料盅(这里只能是新料盅) - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); // 工单表 - WQLObject deviceTab = WQLObject.getWQLObject("PDM_BI_Device"); // 设备表 - - 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); - // point_code2是对应的上料点 - String point_code2 = taskObj.getString("point_code2"); - JSONObject point = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - String device_code = point.getString("device_code"); - // 获取工单 - JSONObject workOrderObj = workOrderTab.query("workorder_id = '" + taskObj.getString("workorder_id") + "'").uniqueResult(0); - JSONObject deviceObj = deviceTab.query("device_code = '" + device_code + "'").uniqueResult(0); - String is_new = "1"; - if (deviceObj.getString("device_model").equals("3")) { // 普通压制机:区分新旧物料 - // 新物料終点不用修改 - if (workOrderObj.getString("is_new").equals(WorkOrderEnum.IS_MIXIN_MATERIAL.getCode()) && point_code2.endsWith("02")) { // 混料 - // 查找该设备对应的旧盅位 - JSONObject endPoint = pointTab.query("region_code = 'KLHJ' AND point_type = '4' AND device_code LIKE '%" + - point_code2 + "%' AND point_status = '1' AND is_used = '1' AND is_delete = '0' AND lock_type = '1'").uniqueResult(0); - point_code2 = endPoint.getString("point_code"); // 未锁的旧盅货架位 - is_new = "2"; - } - } - - String material_id = taskObj.getString("material_id"); - JSONObject queryParam = new JSONObject(); - queryParam.put("flag", "1"); - queryParam.put("material_id", material_id); - queryParam.put("region_code", "KLHJ"); - queryParam.put("is_new", is_new); - JSONObject json1 = WQL.getWO("QSCH_yzjCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(json1)) { - // 拿到点位 - JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!"); - // 物料点位上锁 - material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - material_point.put("task_id", taskObj.getString("task_id")); - pointTab.update(material_point); - - taskObj.put("point_code2", point_code2); - taskObj.put("remark", ""); - taskObj.put("point_code1", material_point.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskObj.put("update_time", DateUtil.now()); - } else { - taskObj.put("remark", "困料货架无所需物料"); - taskObj.put("update_time", DateUtil.now()); - } - taskTab.update(taskObj); - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_cyCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_cyCallMaterial_01.wql deleted file mode 100644 index 674b0d4..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_cyCallMaterial_01.wql +++ /dev/null @@ -1,68 +0,0 @@ -[交易说明] - 交易名: 分拣叫料 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name, - p.block_num, - p.col_num, - p.row_num - FROM - SCH_BASE_Point p - WHERE - p.is_used = '1' - AND is_delete = '0' - AND lock_type='1' - AND point_status = '3' - OPTION 输入.material_id <> "" - p.material_id = 输入.material_id - ENDOPTION - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ORDER BY instorage_time - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql deleted file mode 100644 index c324ca2..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_yzjCallMaterial_01.wql +++ /dev/null @@ -1,71 +0,0 @@ -[交易说明] - 交易名: 压制机叫料 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND p.is_used = '1' - AND standing_time is not null - AND now() > DATE_ADD(instorage_time,INTERVAL standing_time MINUTE) - AND is_delete = '0' - AND point_type = '1' - AND point_status = '3' - OPTION 输入.material_id <> "" - p.material_id = 输入.material_id - ENDOPTION - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.vehicle_type <> "" - p.vehicle_type like 输入.is_new - ENDOPTION - ORDER BY p.instorage_time - ENDSELECT - ENDQUERY - ENDIF 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 deleted file mode 100644 index 1cd708d..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/cpOut/CpOutTask.java +++ /dev/null @@ -1,269 +0,0 @@ -package org.nl.wms.sch.tasks.cpOut; - -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 CpOutTask extends AbstractAcsTask { - private final String THIS_CLASS = CpOutTask.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"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - //任务取消 - if (StrUtil.equals(status, "0")) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "任务已取消"); - taskTab.update(taskObj); - - if (ObjectUtil.isNotEmpty(point2Obj)) { - // 释放终点点位 - point2Obj.put("lock_type", "1"); - point2Obj.put("point_status", "1"); - point2Obj.put("task_id", ""); - point2Obj.put("material_id", ""); - point2Obj.put("vehicle_type", ""); - point2Obj.put("vehicle_code", ""); - pointTab.update(point2Obj); - } - } - - 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); - - // 任务表的点位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")); - // 起点 - point1Obj.put("lock_type", "1"); - point1Obj.put("point_status", "1"); - point1Obj.put("material_id", ""); - point1Obj.put("pcsn", ""); - point1Obj.put("ivt_qty", "0"); - point1Obj.put("instorage_time", ""); - point1Obj.put("vehicle_type", ""); - point1Obj.put("vehicle_code", ""); - point1Obj.put("standing_time", 0); - - pointTab.update(point1Obj); - pointTab.update(point2Obj); - } - - } - - @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 = '" + 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 param1 = new JSONObject(); - param1.put("flag", "1"); - param1.put("material_id", material_id); - param1.put("region_code", "CPCKQ01"); - //1、找空位的终点 - JSONObject endPoint = WQL.getWO("QSCH_cpOut_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(endPoint)) { - // 找到终点,上锁 - taskObj.put("update_time", DateUtil.now()); - taskObj.put("point_code2", endPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", "2"); - pointTab.update(endPoint); - } 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); - 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_code3")) - .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) { - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - - String point_code1 = whereJson.getString("point_code1"); // 起点 - String vehicle_code = whereJson.getString("vehicle_code"); - String iostorinv_id = whereJson.getString("iostorinv_id"); - String material_id = whereJson.getString("material_id"); - - 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_type("task_type") - .task_name("成品区出库") - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code1(point_code1) - .vehicle_code(vehicle_code) - .vehicle_type(vehicle_type) - .handle_class(THIS_CLASS) - .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()); - } - - @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/sendEmpty/DpSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java deleted file mode 100644 index 6539ad8..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; -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.core.bean.WQLObject; -import org.nl.wms.sch.SchTaskDto; -import org.nl.wms.sch.manage.AbstractAcsTask; -import org.nl.wms.sch.manage.PointEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 叠盘送空载具 - * @Date: 2022/11/15 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class DpSendEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = DpSendEmpVehicleTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param taskObj 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,1:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String task_id = taskObj.getString("task_id"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - String point_code1 = jsonTask.getString("point_code1"); - String point_code2 = jsonTask.getString("point_code2"); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - // 解锁终点位置 - if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行 - JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(point2); - } - // 任务设置为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("remark", "已取消"); - taskTab.update(jsonTask); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { - // 更新任务状态为执行中 - jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - jsonTask.put("update_time", DateUtil.now()); - jsonTask.put("car_no", taskObj.getString("car_no")); - taskTab.update(jsonTask); - } - - if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", "22"); - jsonTask.put("update_optname", "ACS系统"); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - // 释放点位 - if (ObjectUtil.isEmpty(point_code2)) return;// 防止只有确定起点的任务完成 - JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point_2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point_2.put("vehicle_code", jsonTask.getString("vehicle_code")); - point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty"))); - point_2.put("instorage_time", DateUtil.now()); - point_2.put("is_full", "1"); - point_2.put("ivt_qty", "0"); - point_2.put("pcsn", ""); - point_2.put("material_id", ""); - point_2.put("standing_time", "0"); - pointTab.update(point_2); - // 起点设置为空位 - JSONObject point_1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - point_1.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); - pointTab.update(point_1); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - // 送到KGTDDW01 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - String point_code1 = form.getString("point_code1"); - //判断当前点是否有未完成的任务 - 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(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("空钢托叠盘区->空钢托拆盘区") - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .vehicle_qty(form.getIntValue("qty")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - // 请求acs查看堆叠位是否可以搬运,修改对应点的点位 - JSONArray params = new JSONArray(); - JSONObject param = new JSONObject(); - param.put("device_code", "KGTDDW01"); - params.add(param); - PointUpdateUtil.updatePoint(params); - // 直接找 - JSONObject endPoint = pointTab.query("point_code = 'KGTDDW01' AND lock_type = '1' AND is_used = '1' AND is_delete = '0' AND point_status = '1'").uniqueResult(0); - - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "钢托盘堆叠位不可用!"); - taskObj.put("update_time", DateUtil.now()); - 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); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java deleted file mode 100644 index b4282a4..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java +++ /dev/null @@ -1,225 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; -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.PointEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 分拣送空钢托盘 - * @Date: 2022/11/11 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class FjSendEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = FjSendEmpVehicleTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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); - String point_code2 = taskObj.getString("point_code2"); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - // 解锁终点位置 - if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行 - JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(point2); - } - // 任务设置为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - // 释放点位 - if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成 - JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point_2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), taskObj.getString("vehicle_qty"))); - pointTab.update(point_2); - } - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - // 送到叠盘区:KGTDTW01 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - String point_code1 = form.getString("point_code1"); - //判断当前点是否有未完成的任务 - JSONObject taskObj = taskTab.query("is_delete = '0' and point_code2 = '" + 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(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("分拣送空钢托盘") - .task_status(TaskStatusEnum.SURE_START.getCode()) - .acs_task_type("4") - .point_code1(point_code1) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .vehicle_qty(1) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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 endPoint = pointTab.query("point_code = 'KGTDTW01' AND lock_type = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "钢托盘叠托位不可用!"); - taskObj.put("task_status", TaskStatusEnum.SURE_START.getCode()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("point_code2", "KGTDTW01"); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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,UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java deleted file mode 100644 index 9216cb6..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java +++ /dev/null @@ -1,238 +0,0 @@ -package org.nl.wms.sch.tasks.sendEmpty; - -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.apache.commons.lang3.StringUtils; -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.PointEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.manage.UpdateTaskStatusEnum; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 压制机送空盅入库 - * @Date: 2022/11/10 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class YzjSendEmpVehicleTask extends AbstractAcsTask { - private final String THIS_CLASS = YzjSendEmpVehicleTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param taskObj 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun 载具类型由载具表维护 - * @created 2019年4月17日 下午8:51:50 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void updateTaskStatus(JSONObject taskObj, String status) { - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - - String task_id = taskObj.getString("task_id"); - String point_code2 = taskObj.getString("point_code2"); - JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - // 解锁终点位置 - if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行 - JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(point2); - } - // 任务设置为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("remark", "已取消"); - taskTab.update(jsonTask); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) { - // 更新任务状态为执行中 - jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); - jsonTask.put("update_time", DateUtil.now()); - jsonTask.put("car_no", taskObj.getString("car_no")); - taskTab.update(jsonTask); - } - - if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", "22"); - jsonTask.put("update_optname", "ACS系统"); - jsonTask.put("update_time", DateUtil.now()); - taskTab.update(jsonTask); - // 释放点位 - if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("point_code", point_code2); - jsonObject.put("vehicle_code", jsonTask.getString("vehicle_code")); - PointUpdateUtil.setVehicle(jsonObject); - } - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - /* - * 1.先生成确定起点的任务 - * 2.通过findNextPoint()找终点 - * 3.下发给ACS - */ - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 - - String point_code1 = form.getString("point_code1"); - SchTaskDto dto = SchTaskDto.builder() - .task_id(org.nl.wms.util.IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("") - .task_name("压制机空盅入库") - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_code(form.getString("vehicle_code")) // 送空盅需要 - .vehicle_type(form.getString("vehicle_type")) - .vehicle_qty(1) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - String vehicle_type = taskObj.getString("vehicle_type"); - JSONObject param1 = new JSONObject(); - param1.put("flag", "1"); - param1.put("region_code", "KLHJ"); - param1.put("vehicle_type", "%" + vehicle_type + "%"); - //1、查找困料货架是否有空位,将空桶送过去,由于一个货架只放一个,不需要判定,有空位即可放 - JSONObject endPoint = WQL.getWO("QSCH_yzjSendEmptyVehicle_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "困料货架无可用货位!"); - taskObj.put("task_status", TaskStatusEnum.SURE_START.getCode()); - taskObj.put("update_time", DateUtil.now()); - 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); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql deleted file mode 100644 index b2a0812..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/wql/QSCH_yzjSendEmptyVehicle_01.wql +++ /dev/null @@ -1,70 +0,0 @@ -[交易说明] - 交易名: 压制机送空盘 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.point_id, - p.point_code, - p.point_name, - p.block_num, - p.col_num, - p.row_num - FROM - SCH_BASE_Point p - WHERE - p.is_used = '1' - AND is_delete = '0' - AND lock_type = '1' - AND point_status = '1' - OPTION 输入.material_id <> "" - p.material_id = 输入.material_id - ENDOPTION - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - OPTION 输入.vehicle_type <> "" - p.can_vehicle_type like 输入.vehicle_type - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java deleted file mode 100644 index 8e7f961..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java +++ /dev/null @@ -1,462 +0,0 @@ -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.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.acs.service.WmsToAcsService; -import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; -import org.nl.wms.sch.SchTaskDto; -import org.nl.wms.sch.manage.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.sch.tasks.PointUpdateUtil; -import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask; -import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask; -import org.nl.wms.util.IdUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 分拣送料入库 - * @Date: 2022/11/14 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class FjSendMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = FjSendMaterialTask.class.getName(); - - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - //任务取消 - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isNotEmpty(point_code2)) { - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - /** - * 任务完成: - * 取木托盘完成,送物料完成 - */ - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - String point_code1 = taskObj.getString("point_code1"); - String point_code2 = taskObj.getString("point_code2"); - JSONObject point1Obj = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = task.getJSONObject("request_param"); - //工单标识 - String workorder_id = taskObj.getString("workorder_id"); - JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - String sort_seq = taskObj.getString("sort_seq"); - if (sort_seq.equals("1")) { // 取空托盘任务 - // 避免没有找到位置 - if (ObjectUtil.isEmpty(point1Obj)) return; - // 需要判断取的是否为半满或者是控盘 - // 半托 - if (point1Obj.getString("region_code").equals(RegionEnum.BZZCQ.getCode())) { - // 物料出库 - // 插入出库单 - 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", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库 - regionIoObj.put("region_id", point1Obj.getString("region_id")); - regionIoObj.put("region_code", point1Obj.getString("region_code")); - regionIoObj.put("region_name", point1Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - 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); - // 点位更新,起点:空位,解锁; - PointUpdateUtil.clearPoint(point1Obj.getString("point_code")); - // 终点:码垛对接位,将半托的组盘id放进去 - point2Obj.put("group_id", taskObj.getString("group_id")); - pointTab.update(point2Obj); - } - // 起点解锁 - point1Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(point1Obj); - } - if (sort_seq.equals("2")) { // 送物料任务 - // 避免没有找到位置 - if (ObjectUtil.isEmpty(point2Obj)) return; - 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", RegionIOEnum.IO_TYPE_IN.getCode()); - regionIoObj.put("region_id", point2Obj.getString("region_id")); - regionIoObj.put("region_code", point2Obj.getString("region_code")); - regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code3")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - 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 (!point_code2.equals("BZX01")) { // 半满到包装暂存区,记录库存 - //完成后入库 - point2Obj.put("instorage_time", DateUtil.now()); - point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", requestObj.getString("qty")); - point2Obj.put("standing_time", workorderObj.getString("standing_time")); - point2Obj.put("material_id", workorderObj.getString("material_id")); - point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type")); - point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); - point2Obj.put("group_id", taskObj.getString("group_id")); // 组盘标识 - point2Obj.put("is_full", requestObj.getString("is_full")); - point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); - } - // 终点解锁 - point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(point2Obj); - } - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); - String is_full = form.getString("is_full"); - String weight = form.getString("weight"); - //任务表【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 + "存在未完成的任务"); - - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - //点位基础表【SCH_BASE_Point】 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - // 混碾机设备编码 - 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_type("task_type") - .task_name("分拣入库") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .acs_task_type("1") - .vehicle_code(vehicle_code) - .vehicle_type(workOrderObj.getString("vehicle_type")) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .handle_class(THIS_CLASS) - .group_id(form.getLong("group_id")) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .task_group_id(IdUtil.getLongId()) - .sort_seq(2) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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 requestObj = taskObj.getJSONObject("request_param"); - if (requestObj.getString("is_full").equals("1")) { // 满拖去包装线,并且叫空木托盘 - // 更新包装线点位 - JSONArray jsonArray = new JSONArray(); - JSONObject data = new JSONObject(); - data.put("device_code", "BZX01"); - jsonArray.add(data); - // 更新点位 - PointUpdateUtil.updatePoint(jsonArray); - // 找点位 - JSONObject endPoint = pointTab.query("point_code = 'BZX01' AND" + - " point_status = '1' AND lock_type = '1'").uniqueResult(0); // 空位 - //判断当前点是否有未完成的任务 - JSONObject taskObj2 = taskTab.query("task_group_id = '" + taskObj.getString("task_group_id") + "' and sort_seq = '1'").uniqueResult(0); -// JSONObject param = new JSONObject(); -// if (ObjectUtil.isNotEmpty(taskObj2)){ -// param.put("point_code2", taskObj.getString("point_code1")); // 起点 -// SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param); -// } - // 满拖先生成叫半托,没有在呼叫空托盘的任务,在执行去到包装线 - SchTaskDto dto = null; - if (ObjectUtil.isEmpty(taskObj2)) { - dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("分拣呼叫空托盘") - .vehicle_type(taskObj.getString("vehicle_type")) // 与满拖的类型一致,因为工单未结束 - .material_qty(taskObj.getString("material_qty")) - .task_status(TaskStatusEnum.SURE_END.getCode()) - .point_code2(taskObj.getString("point_code1")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .sort_seq(1) - .task_group_id(taskObj.getLong("task_group_id")) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - } - // 先呼叫半托 - JSONObject halfTray = pointTab.query("region_code = 'BZZCQ' AND lock_type = '1' " + - "AND point_status = '2' AND is_used = '1' AND is_delete = '0'").uniqueResult(0); - // 获取任务 - String id = null; - if (ObjectUtil.isNotEmpty(dto)) { - id = String.valueOf(dto.getTask_id()); - } else { - id = taskObj2.getString("task_id"); - } - JSONObject taskEnt = taskTab.query("task_id = '" + id + "'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(halfTray)) { // 半托 - // 去搬运 - taskEnt.put("point_code1", halfTray.getString("point_code")); - taskEnt.put("update_time", DateUtil.now()); - taskEnt.put("group_id", halfTray.getString("group_id")); // 半托要把组盘标识记录起来 - taskEnt.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskEnt); - // 更新半托点位状态 - halfTray.put("task_id", taskObj.getString("task_id")); - halfTray.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(halfTray); - } else { - // 没有半托呼叫空木托盘 - // 获取所有的托盘堆叠位 - JSONArray pointCodes = WQL.getWO("QSCH_fjSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0); - // 更新点位 - PointUpdateUtil.updatePoint(pointCodes); - // 找到载具类型符合的覆膜机位置:真正的位置在device_code - JSONObject emptyTray = pointTab.query("region_code = 'RGCPQ' AND vehicle_type = '" + - taskObj.getString("vehicle_type") + "' AND point_status = '2' " + - "AND is_used = '1' AND is_delete = '0'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(emptyTray)) { - // 判断出口是否锁住 - JSONObject exitPoint = pointTab.query("point_code = '" + - emptyTray.getString("device_code") + "'" + - " AND lock_type = '1'").uniqueResult(0); - if (ObjectUtil.isEmpty(exitPoint)) return; // 出口点锁住就不能呼叫空盘 - // 向ACS申请传送一个空木托盘 - JSONArray jsons = new JSONArray(); - JSONObject datas = new JSONObject(); - datas.put("device_code", emptyTray.getString("point_code")); - jsons.add(datas); - WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class); - wmsToAcsService.getTray(jsons); - // 去搬运 - taskEnt.put("point_code1", exitPoint.getString("point_code")); - taskEnt.put("update_time", DateUtil.now()); - taskEnt.put("remark", ""); - taskEnt.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskEnt); - // 更新空托盘点位状态 - exitPoint.put("task_id", taskObj.getString("task_id")); - exitPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(exitPoint); - } else { - taskEnt.put("remark", "暂无空托盘"); - taskEnt.put("update_time", DateUtil.now()); - taskTab.update(taskEnt); - // 满拖搬运也不下发 - taskObj.put("remark", "暂无空托盘"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - return; - } - } - // 更新送料任务信息 - if (ObjectUtil.isEmpty(endPoint)) return; - 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); - - //锁住送料任务终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } else { - // 半满拖就去包装暂存区 - JSONObject param1 = new JSONObject(); - param1.put("flag", "1"); - param1.put("region_code", "BZZCQ"); - //1、查找困料货架是否有响应的载具类型和对应的物料 - JSONObject endPoint = WQL.getWO("QSCH_fjSendMaterial_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "包装暂存区无可用货位"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - } else { - taskObj.put("update_time", DateUtil.now()); - taskObj.put("point_code2", endPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java deleted file mode 100644 index 48649d9..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java +++ /dev/null @@ -1,341 +0,0 @@ -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.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.*; -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: 2022/11/9 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class HnSendMaterialTask extends AbstractAcsTask { - - private final String THIS_CLASS = HnSendMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @see org.nl.wms.sch.manage.UpdateTaskStatusEnum - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - WQLObject materialTab = WQLObject.getWQLObject("MD_ME_MaterialBase"); - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); //生产工单表【PDM_BD_WorkOrder】 - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - //任务取消 - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isNotEmpty(point_code2)) { // 防止未找到终点而取消任务空指针 - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", "22"); - taskObj.put("update_optname", "ACS系统"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - String point_code2 = taskObj.getString("point_code2"); - - if (ObjectUtil.isEmpty(point_code2)) return; // 防止未找到终点而完成任务空指针 - - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = taskObj.getJSONObject("request_param"); - // 工单标识 - String workorder_id = taskObj.getString("workorder_id"); - JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - // 物料 - JSONObject materialObj = materialTab.query("material_id = '" + workorderObj.getString("material_id") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(materialObj)) throw new BadRequestException("物料不存在!"); - - // 区域出入表【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", RegionIOEnum.IO_TYPE_IN.getCode()); - regionIoObj.put("region_id", point2Obj.getString("region_id")); - regionIoObj.put("region_code", point2Obj.getString("region_code")); - regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("ivt_weight", requestObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - - //完成后入库 - point2Obj.put("instorage_time", taskObj.getString("create_time")); // 入库时间为任务生成的时间 - point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", requestObj.getString("qty")); - point2Obj.put("ivt_weight", requestObj.getString("weight")); - point2Obj.put("standing_time", materialObj.getString("standing_time")); - point2Obj.put("warn_time", materialObj.getString("warn_time")); - point2Obj.put("material_id", workorderObj.getString("material_id")); - point2Obj.put("vehicle_type", workorderObj.getString("is_new")); // 工单的新旧物料 - point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); - point2Obj.put("vehicle_qty", "1"); // 入库为1个载具 - point2Obj.put("is_full", requestObj.getString("is_full")); - - // 终点解锁 - point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); - pointTab.update(point2Obj); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - * 混碾机送料到困料货架 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); - String is_full = form.getString("is_full"); - String weight = form.getString("weight"); - //任务表【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 + "存在未完成的任务"); - - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - //判断混碾机是否存在生产中的工单 - JSONObject workOrderObj = workOrderTab.query("point_code = '" + point_code1 + "' 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("混碾机满料") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_code(vehicle_code) - .vehicle_type(workOrderObj.getString("vehicle_type")) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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 paramObj = new JSONObject(); - paramObj.put("flag", "1"); - paramObj.put("material_id", taskObj.getString("material_id")); - JSONArray workerOrders = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(paramObj).process().getResultJSONArray(0); - for (int j = 0; j < workerOrders.size(); j++) { // 根据符合的工单查找 - JSONObject workerOrder = workerOrders.getJSONObject(j); - // 判断仓库是否有该物料 - JSONObject param2 = new JSONObject(); - param2.put("flag", "2"); - param2.put("material_id", workerOrder.getString("material_id")); - param2.put("point_type", "1"); // 公用货架 - param2.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); // 有料 - JSONArray ivts = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param2).process().getResultJSONArray(0); - if (ivts.size() > 0) continue; - // 判断是否有空位 - JSONObject param3 = new JSONObject(); - param3.put("flag", "2"); - param3.put("device_code", workerOrder.getString("device_code")); - param3.put("point_type", "2"); // 液压机旁边三个位置 - param3.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode()); // 空位 - JSONObject endPoint = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param3).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) continue; - - // 找到位置就可以直接搬 - 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); - - // 点位上锁 - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - endPoint.put("task_id", taskObj.getString("task_id")); - pointTab.update(endPoint); - return; - } - // 其他情况直接搬到困料货架上 - JSONObject param1 = new JSONObject(); - param1.put("flag", "3"); - param1.put("region_code", "KLHJ"); - // 查找困料货架 - JSONObject endPoint = WQL.getWO("QSCH_hnSendMaterial_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "困料货架无可用货位"); - taskObj.put("update_time", DateUtil.now()); - 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); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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,UpdateTaskStatusEnum.CANCEL.getCode()); - else { - throw new BadRequestException("未找到该任务或者任务已完成!"); - } - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java deleted file mode 100644 index 314a234..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SendMaterialTask.java +++ /dev/null @@ -1,230 +0,0 @@ -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 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.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 java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: - * @Date: 2022/11/10 - */ -public class SendMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = this.getClass().getName(); - - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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); - - //任务取消 - if (StrUtil.equals(status, "0")) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isEmpty(point_code2)) { - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", "1"); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - 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_optid", SecurityUtils.getCurrentUserId()); - taskObj.put("update_optname", SecurityUtils.getCurrentUsername()); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - String point_code2 = taskObj.getString("point_code2"); - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject requestObj = task.getJSONObject("request_param"); - //工单标识 - String workorder_id = requestObj.getString("workorder_id"); - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0); - - //区域出入表【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", "1"); - regionIoObj.put("region_id", point2Obj.getString("region_id")); - regionIoObj.put("region_code", point2Obj.getString("region_code")); - regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("bill_status", "3"); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code3")); - 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); - - //完成后入库 - point2Obj.put("instorage_time", DateUtil.now()); - point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", requestObj.getString("qty")); - point2Obj.put("standing_time", workorderObj.getString("standing_time")); - point2Obj.put("material_id", workorderObj.getString("material_id")); - point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type")); - point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); - point2Obj.put("is_full", requestObj.getString("is_full")); - - // 终点解锁 - point2Obj.put("lock_type", "1"); - point2Obj.put("point_status", "3"); - pointTab.update(point2Obj); - } - - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - */ - @Override - public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); - String is_full = form.getString("is_full"); - String weight = form.getString("weight"); - //任务表【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 + "存在未完成的任务"); - - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - //点位基础表【SCH_BASE_Point】 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - // 混碾机设备编码 - 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_type("task_type") - .task_name("混碾机满料") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_code(vehicle_code) - .vehicle_type(workOrderObj.getString("vehicle_type")) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @Override - public void forceFinish(String task_id) { - - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @Override - public void cancel(String task_id) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java deleted file mode 100644 index 31b2e6a..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java +++ /dev/null @@ -1,279 +0,0 @@ -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.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.*; -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: 2022/11/10 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class SzSendMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = SzSendMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - //任务取消 - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isNotEmpty(point_code2)) { - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - String vehicle_code = taskObj.getString("vehicle_code"); - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", "22"); - taskObj.put("update_optname", "ACS系统"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isEmpty(point_code2)) return; - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject groupObj = groupTab.query("group_id = '" + taskObj.getString("group_id") + "'").uniqueResult(0); - - //区域出入表【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", RegionIOEnum.IO_TYPE_IN.getCode()); // 入库 - regionIoObj.put("region_id", point2Obj.getString("region_id")); - regionIoObj.put("region_code", point2Obj.getString("region_code")); - regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", groupObj.getString("material_uuid")); - regionIoObj.put("vehicle_code", vehicle_code); - regionIoObj.put("qty", groupObj.getString("qty")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code2")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - - //完成后入库 - point2Obj.put("instorage_time", DateUtil.now()); - point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", groupObj.getString("qty")); - point2Obj.put("material_id", groupObj.getString("material_uuid")); - point2Obj.put("vehicle_type", groupObj.getString("vehicle_type")); - point2Obj.put("vehicle_code", groupObj.getString("vehicle_code")); - point2Obj.put("vehicle_qty", "1"); // 入库为1个载具 - point2Obj.put("is_full", groupObj.getString("is_full")); - point2Obj.put("group_id", groupObj.getString("group_id")); - - // 终点解锁 - point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); - pointTab.update(point2Obj); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - * 压制机送料入窑缓存货架 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String vehicle_code = form.getString("vehicle_code"); - WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); - String qty = form.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 + "存在未完成的任务"); - - // 获取到组盘 - JSONObject groupObj = groupTab.query("vehicle_code = '" + vehicle_code + "'", "create_time desc").uniqueResult(0); - SchTaskDto dto = SchTaskDto.builder() - .task_id(IdUtil.getLongId()) - .task_code(CodeUtil.getNewCode("TASK_CODE")) - .task_type("task_type") - .task_name("烧制入库") - .acs_task_type("1") - .material_id(groupObj.getLong("material_uuid")) - .group_id(groupObj.getLong("group_id")) - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_code(vehicle_code) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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 param1 = new JSONObject(); - param1.put("flag", "1"); - param1.put("region_code", "CYZCQ"); - //1、查找出窑缓存区的空位 - JSONObject endPoint = WQL.getWO("QSCH_szSendMaterial_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "出窑暂存区无可用货位!"); - taskObj.put("update_time", DateUtil.now()); - 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); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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/YzjSendMaterialTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java deleted file mode 100644 index 13b9ce6..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java +++ /dev/null @@ -1,313 +0,0 @@ -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.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.*; -import org.nl.wms.sch.tasks.AcsTaskDto; -import org.nl.wms.util.IdUtil; -import org.nl.wms.util.MapOf; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: lyd - * @description: 压制机满料入库 - * @Date: 2022/11/10 - */ -@Service -@RequiredArgsConstructor -@Slf4j -public class YzjSendMaterialTask extends AbstractAcsTask { - private final String THIS_CLASS = YzjSendMaterialTask.class.getName(); - /** - * 添加任务进行下发 - * - * @return - */ - @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); - 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; - } - - /** - * @param task 代表一条任务对象 - * @param status 代表wcs任务完成状态: //0:acs,取消,:执行中,2:完成 - * @return - * @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走。生成任务的时候绑定b的物料信息,任务完成的时候,清除a的物料信息 - * @author ldjun - * @created 2019年4月17日 下午8:51:50 - */ - @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"); - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - - String task_id = task.getString("task_id"); - JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0); - - //任务取消 - if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) { - // 取消删除任务 - if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) { - throw new BadRequestException("已完成不能取消!"); - } - String point_code2 = taskObj.getString("point_code2"); - if (ObjectUtil.isNotEmpty(point_code2)) { - JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - pointTab.update(endPoint); - } - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("remark", "已取消"); - taskTab.update(taskObj); - } - - if (UpdateTaskStatusEnum.EXECUTION.getCode().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, UpdateTaskStatusEnum.FORCEFINISH.getCode())) { - // 更改任务状态为完成 - taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode()); - taskObj.put("update_optid", "22"); - taskObj.put("update_optname", "ACS系统"); - taskObj.put("update_time", DateUtil.now()); - taskTab.update(taskObj); - - String point_code2 = taskObj.getString("point_code2"); - JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(point2Obj)) return; - JSONObject requestObj = taskObj.getJSONObject("request_param"); - //工单标识 - String workorder_id = taskObj.getString("workorder_id"); - JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0); - - //区域出入表【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", RegionIOEnum.IO_TYPE_IN.getCode()); // 入库 - regionIoObj.put("region_id", point2Obj.getString("region_id")); - regionIoObj.put("region_code", point2Obj.getString("region_code")); - regionIoObj.put("region_name", point2Obj.getString("region_name")); - regionIoObj.put("material_id", taskObj.getString("material_id")); - regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code")); - regionIoObj.put("qty", requestObj.getString("qty")); - regionIoObj.put("ivt_weight", requestObj.getString("weight")); - regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode()); - regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode()); - regionIoObj.put("start_point_code", taskObj.getString("point_code1")); - regionIoObj.put("end_point_code", taskObj.getString("point_code3")); - regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode()); - regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - regionIoObj.put("create_id", "22"); - regionIoObj.put("create_name", "ACS系统"); - regionIoObj.put("create_time", DateUtil.now()); - regionIoTab.insert(regionIoObj); - - //完成后入库 - point2Obj.put("instorage_time", DateUtil.now()); - point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd")); - point2Obj.put("ivt_qty", requestObj.getString("qty")); - point2Obj.put("ivt_weight", requestObj.getString("weight")); - point2Obj.put("standing_time", workorderObj.getString("standing_time")); - point2Obj.put("warn_time", workorderObj.getString("warn_time")); - point2Obj.put("material_id", workorderObj.getString("material_id")); - point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type")); - point2Obj.put("vehicle_code", taskObj.getString("vehicle_code")); - point2Obj.put("vehicle_qty", "1"); // 入库为1个载具 - point2Obj.put("is_full", requestObj.getString("is_full")); -// point2Obj.put("group_id", taskObj.getString("group_id")); // 组盘标识 - // 解锁终点 - point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode()); - point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode()); - pointTab.update(point2Obj); - } - } - - /** - * @param form 创建任务需要的参数 - * @return 返回任务标识 - * 压制机送料入窑缓存货架 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public String createTask(JSONObject form) { - String point_code1 = form.getString("point_code1"); - String vehicle_code = form.getString("vehicle_code"); - String qty = form.getString("qty"); - String is_full = form.getString("is_full"); - String weight = form.getString("weight"); - //任务表【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 + "存在未完成的任务"); - - //生产工单表【PDM_BD_WorkOrder】 - WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder"); - //点位基础表【SCH_BASE_Point】 - WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); - // 压制机设备编码 - 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_type("task_type") - .task_name("压制机满料") - .material_qty(qty) - .task_status(TaskStatusEnum.SURE_START.getCode()) - .point_code1(point_code1) - .vehicle_code(vehicle_code) - .group_id(form.getLong("group_id")) - .vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode()) - .workorder_id(workOrderObj.getLong("workorder_id")) - .material_id(workOrderObj.getLong("material_id")) - .handle_class(THIS_CLASS) - .create_time(DateUtil.now()) - .request_param(form.toJSONString()) - .build(); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - taskTab.insert(json); - //创建好立即下发 - this.immediateNotifyAcs(); - return String.valueOf(dto.getTask_id()); - } - - /** - * @return - * @discription 确定下一点位 - * @author ldjun - * @created 2020年6月12日 下午6:01:06 - */ - @Override - @Transactional(rollbackFor = Exception.class) - 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); - String vehicle_type = taskObj.getString("vehicle_type"); - // 优先判断窑口是否空位 - JSONObject rywPoint = WQL.getWO("QSCH_yzSendMaterial_01").addParamMap(MapOf.of("flag", "1", - "point_code", "RYW")).process().uniqueResult(0); - if (ObjectUtil.isNotEmpty(rywPoint)) { - // 找到去入窑口 - taskObj.put("update_time", DateUtil.now()); - taskObj.put("remark", ""); - taskObj.put("point_code2", rywPoint.getString("point_code")); - taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - taskTab.update(taskObj); - - //锁住终点 - rywPoint.put("task_id", taskObj.getString("task_id")); - rywPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(rywPoint); - continue; - } - // 否则就去货架查找 - JSONObject param1 = new JSONObject(); - param1.put("flag", "2"); - param1.put("region_code", "RYZCQ"); - param1.put("vehicle_type", "%" + vehicle_type + "%"); - //1、查找入窑暂存货架的空位 - JSONObject endPoint = WQL.getWO("QSCH_yzSendMaterial_01").addParamMap(param1).process().uniqueResult(0); - if (ObjectUtil.isEmpty(endPoint)) { - taskObj.put("remark", "困料货架无可用货位!"); - taskObj.put("update_time", DateUtil.now()); - 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); - - //锁住终点 - endPoint.put("task_id", taskObj.getString("task_id")); - endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode()); - pointTab.update(endPoint); - } - } - } - - /** - * @param task_id 任务标识 - * @return - * @discription 强制结束完成任务 - * @author ldjun - * @created 2020年6月19日 上午10:34:58 - */ - @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, UpdateTaskStatusEnum.FORCEFINISH.getCode()); - } - - /** - * 取消任务,货物搬回原点 - * - * @param task_id - */ - @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, UpdateTaskStatusEnum.CANCEL.getCode()); - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql deleted file mode 100644 index c5ed9e8..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_hnSendMaterial_01.wql +++ /dev/null @@ -1,105 +0,0 @@ -[交易说明] - 交易名: 混碾机送料 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - 输入.device_code TYPEAS s_string - 输入.point_type TYPEAS s_string - 输入.point_status TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - workorder.* - FROM - pdm_bd_workorder workorder - WHERE - workorder.order_status = '3' - AND workorder.is_delete = '0' - AND workorder.workorder_procedure = '2' - OPTION 输入.material_id <> "" - workorder.material_id = 输入.material_id - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "2" - QUERY - SELECT - * - FROM - `sch_base_point` - WHERE - lock_type = '1' - AND region_code = 'KLHJ' - AND is_used = '1' - AND is_delete = '0' - OPTION 输入.material_id <> "" - material_id = 输入.material_id - ENDOPTION - OPTION 输入.point_type <> "" - point_type = 输入.point_type - ENDOPTION - OPTION 输入.point_status <> "" - point_status = 输入.point_status - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - QUERY - SELECT - p.point_code, - p.point_name - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '1' - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ORDER BY p.point_code - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yzSendMaterial_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yzSendMaterial_01.wql deleted file mode 100644 index ec10333..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_yzSendMaterial_01.wql +++ /dev/null @@ -1,81 +0,0 @@ -[交易说明] - 交易名: 压制机送料 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.region_code TYPEAS s_string - 输入.point_code TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.vehicle_type TYPEAS s_string - - -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - IF 输入.flag = "1" - QUERY - SELECT - p.* - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '1' - OPTION 输入.point_code <> "" - p.point_code = 输入.point_code - ENDOPTION - ENDSELECT - ENDQUERY - ENDIF - IF 输入.flag = "2" - QUERY - SELECT - p.* - FROM - SCH_BASE_Point p - WHERE - lock_type = '1' - AND is_used = '1' - AND is_delete = '0' - AND point_status = '1' - OPTION 输入.vehicle_type <> "" - p.can_vehicle_type like 输入.vehicle_type - ENDOPTION - OPTION 输入.region_code <> "" - p.region_code = 输入.region_code - ENDOPTION - ORDER BY col_num,row_num,layer_num - ENDSELECT - ENDQUERY - ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/util/PointUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/util/PointUtils.java new file mode 100644 index 0000000..584937b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/util/PointUtils.java @@ -0,0 +1,15 @@ +package org.nl.wms.sch.util; + +/** + * @author zhangjiangwei + * @date 2023/04/04 15:41 + */ +public class PointUtils { + + /** + * 从ACS获取点位状态 + */ + public static void updatePointStatusFromACS() { + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_BASE_POINT.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_BASE_POINT.wql index 4c07f81..9bf197c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_BASE_POINT.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_BASE_POINT.wql @@ -49,16 +49,11 @@ IF 输入.flag = "1" PAGEQUERY SELECT - point.*, - d3.label as lock_type_name, - ma.material_name + point.* FROM sch_base_point point - LEFT JOIN SCH_BASE_Region region ON point.region_id = region.region_id - LEFT JOIN sys_dict_detail d3 ON point.lock_type = d3.value and d3.name='d_lock_type' - LEFT JOIN md_me_materialbase ma ON ma.material_id = point.material_id WHERE - point.is_delete = '0' + 1 = 1 OPTION 输入.region_id <> "" point.region_id = 输入.region_id ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql index 729b8ca..a661003 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql @@ -72,7 +72,7 @@ task.create_time <= 输入.end_time ENDOPTION OPTION 输入.unFinish <> "" - task.task_status <> '07' + task.task_status <> '7' AND task_status <> '8' ENDOPTION OPTION 输入.task_status <> "" find_in_set( task.task_status, 输入.task_status) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls deleted file mode 100644 index 6efd924..0000000 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls and /dev/null differ 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 ab4a2dd..7d35c68 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/banner.txt b/lms/nladmin-system/src/main/resources/banner.txt index 8be4ead..d0dea47 100644 --- a/lms/nladmin-system/src/main/resources/banner.txt +++ b/lms/nladmin-system/src/main/resources/banner.txt @@ -1,8 +1,8 @@ - _ _ ___________ _ _____ _ ___________ _____ -| \ | | _ | ___ \ | | ___| | | ___| ___|_ _| -| \| | | | | |_/ / | | |__ | | | |__ | |_ | | -| . ` | | | | ___ \ | | __|| | | __|| _| | | -| |\ \ \_/ / |_/ / |____| |___| |____| |___| | | | -\_| \_/\___/\____/\_____/\____/\_____/\____/\_| \_/ + _ _ ____ ____ _ ______ _ _____ ______ _______ + | \ | |/ __ \| _ \| | | ____| | |_ _| ____|__ __| + | \| | | | | |_) | | | |__ | | | | | |__ | | + | . ` | | | | _ <| | | __| | | | | | __| | | + | |\ | |__| | |_) | |____| |____| |____ _| |_| | | | + |_| \_|\____/|____/|______|______|______|_____|_| |_| :: Spring Boot :: (v2.1.0.RELEASE) \ No newline at end of file diff --git a/lms/nladmin-system/src/main/resources/config/application-dev.yml b/lms/nladmin-system/src/main/resources/config/application-dev.yml index c177c95..84e511a 100644 --- a/lms/nladmin-system/src/main/resources/config/application-dev.yml +++ b/lms/nladmin-system/src/main/resources/config/application-dev.yml @@ -6,11 +6,9 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:lnsh_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true -# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lnsh_lms2}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:lnsh_lms3}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:Root.123456} - # password: ${DB_PWD:12356} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 # 最小连接数 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 9159158..3a8b115 100644 --- a/lms/nladmin-system/src/main/resources/config/application-prod.yml +++ b/lms/nladmin-system/src/main/resources/config/application-prod.yml @@ -6,17 +6,19 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:ndxy3_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.4.220}:${DB_PORT:3306}/${DB_NAME:lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useOldAliasMetadataBehavior=true username: ${DB_USER:root} - password: ${DB_PWD:P@ssw0rd} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 # 最小连接数 min-idle: 15 # 最大连接数 - max-active: 60 + max-active: 30 + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 # 获取连接超时时间 - max-wait: 5000 + max-wait: 3000 # 连接有效性检测时间 time-between-eviction-runs-millis: 60000 # 连接在池中最小生存的时间 @@ -36,11 +38,8 @@ spring: enabled: true stat-view-servlet: enabled: true - # 控制台管理用户名和密码 url-pattern: /druid/* reset-enable: false - login-username: admin - login-password: 123456 filter: stat: enabled: true @@ -51,23 +50,23 @@ spring: wall: config: multi-statement-allow: true - redis: - #数据库索引 - database: ${REDIS_DB:15} - host: ${REDIS_HOST:127.0.0.1} - port: ${REDIS_PORT:6379} - #连接超时时间 - timeout: 5000 - redisson: - config: | - threads: 4 - nettyThreads: 4 - singleServerConfig: - connectionMinimumIdleSize: 8 - connectionPoolSize: 8 - address: redis://127.0.0.1:6379 - idleConnectionTimeout: 10000 - timeout: 3000 +redis: + #数据库索引 + database: ${REDIS_DB:15} + host: ${REDIS_HOST:127.0.0.1} + port: ${REDIS_PORT:6379} + # password: ${REDIS_PWD:} + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 + # 登录相关配置 login: # 登录缓存 @@ -86,7 +85,7 @@ login: heigth: 36 # 内容长度 length: 2 - # 字体名称,为空则使用默认字体,如遇到线上乱码,设置其他字体即可 + # 字体名称,为空则使用默认字体 font-name: # 字体大小 font-size: 25 @@ -98,36 +97,29 @@ jwt: token-start-with: Bearer # 必须使用最少88位的Base64对该令牌进行编码 base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= - # 令牌过期时间 此处单位/毫秒 ,默认2小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html - token-validity-in-seconds: 7200000 + # 令牌过期时间 此处单位/毫秒 ,默认4小时,可在此网站生成 https://www.convertworld.com/zh-hans/time/milliseconds.html + token-validity-in-seconds: 14400000 # 在线用户key online-key: online-token- # 验证码 code-key: code-key- - # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 + # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期 detect: 1800000 - # 续期时间范围,默认 1小时,这里单位毫秒 + # 续期时间范围,默认1小时,单位毫秒 renew: 3600000 +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + # IP 本地解析 ip: local-parsing: true -#是否允许生成代码,生产环境设置为false -generator: - enabled: false - -#如果生产环境要开启swagger,需要配置请求地址 -#springfox: -# documentation: -# swagger: -# v2: -# host: # 接口域名或外网ip - -#是否开启 swagger-ui -swagger: - enabled: false - # 文件存储路径 file: mac: @@ -144,7 +136,7 @@ file: avatarMaxSize: 5 logging: file: - path: /app/jar/logs + path: d:\log\wms config: classpath:logback-spring.xml # Sa-Token配置 @@ -168,5 +160,5 @@ sa-token: token-prefix: Bearer loki: - url: http://localhost:3100/loki/api/v1 + url: http://192.168.4.220:3100/loki/api/v1 systemName: lms diff --git a/lms/nladmin-system/src/main/resources/config/application.yml b/lms/nladmin-system/src/main/resources/config/application.yml index 7e3fbea..6f01423 100644 --- a/lms/nladmin-system/src/main/resources/config/application.yml +++ b/lms/nladmin-system/src/main/resources/config/application.yml @@ -19,6 +19,7 @@ spring: hibernate: dialect: org.hibernate.dialect.MySQL5InnoDBDialect enable_lazy_load_no_trans: true + show_sql: true task: pool: # 核心线程池大小 diff --git a/lms/nladmin-system/src/main/resources/logback-spring.xml b/lms/nladmin-system/src/main/resources/logback-spring.xml index 2e4c21c..12e497b 100644 --- a/lms/nladmin-system/src/main/resources/logback-spring.xml +++ b/lms/nladmin-system/src/main/resources/logback-spring.xml @@ -12,7 +12,7 @@ https://juejin.cn/post/6844903775631572999 nlAdmin + value="%black(%contextName-) %yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %cyan(%msg%n)"/> diff --git a/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java new file mode 100644 index 0000000..0f70f58 --- /dev/null +++ b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java @@ -0,0 +1,41 @@ +package org.nl.test; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.nl.modules.wql.core.bean.WQLObject; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * @author zhangjiangwei + * @date 2023/03/02 16:54 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@RunWith(SpringRunner.class) +public class PointTest { + + @Test + public void test01() { + WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); + + JSONObject point = new JSONObject(); + String now = DateUtil.now(); + for (int i = 0; i < 52; i++) { + point.put("point_id", IdUtil.getSnowflake().nextId()); + point.put("point_code", "CPHW" + String.format("%02d", i + 1)); + point.put("point_name", "成品货位" + (i + 1)); + point.put("region_id", 1643438902574452736L); + point.put("region_code", "CPHJ"); + point.put("region_name", "成品货架"); + point.put("point_type", "1"); + point.put("device_code", null); + point.put("create_id", 1L); + point.put("create_name", "管理员"); + point.put("create_time", now); + point_table.insert(point); + } + } +} diff --git a/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java b/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java new file mode 100644 index 0000000..09a6287 --- /dev/null +++ b/lms/nladmin-system/src/test/java/org/nl/test/TempTest.java @@ -0,0 +1,30 @@ +package org.nl.test; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.manage.LockType; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Set; + +/** + * @author zhangjiangwei + * @date 2023/03/06 17:49 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@RunWith(SpringRunner.class) +public class TempTest { + + @Test + public void test01() { + Set materialbase = WQLObject.getWQLObject("md_me_materialbase").query().uniqueResult(0).keySet(); + for (String s : materialbase) { + System.out.println(s); + } + } +} diff --git a/lms/nladmin-ui/src/api/wms/pdm/device.js b/lms/nladmin-ui/src/api/wms/pdm/device.js new file mode 100644 index 0000000..b901755 --- /dev/null +++ b/lms/nladmin-ui/src/api/wms/pdm/device.js @@ -0,0 +1,74 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/device', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/device/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/device', + method: 'put', + data + }) +} + +export function getWorkprocedure() { + return request({ + url: 'api/device/getWorkprocedure', + method: 'get' + }) +} + +export function getItemByDevice(data) { + return request({ + url: 'api/device/getItemByDevice', + method: 'post', + data + }) +} + +export function savaDeviceItem(data) { + return request({ + url: 'api/device/savaDeviceItem', + method: 'post', + data + }) +} + +export function getItemByDeviceId(data) { + return request({ + url: 'api/device/getItemByDeviceId', + method: 'post', + data + }) +} + +export function copyAdd(data) { + return request({ + url: 'api/device/copyAdd', + method: 'post', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/device/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, getWorkprocedure, getItemByDeviceId, copyAdd, changeActive } diff --git a/lms/nladmin-ui/src/api/wms/sch/point.js b/lms/nladmin-ui/src/api/wms/sch/point.js index 7a78111..48523b2 100644 --- a/lms/nladmin-ui/src/api/wms/sch/point.js +++ b/lms/nladmin-ui/src/api/wms/sch/point.js @@ -68,4 +68,11 @@ export function changeLock(data) { }) } -export default { add, edit, del, changeActive, findPoints, getPoint, getRegion, changeUsed, changeLock } +export function getDevice() { + return request({ + url: 'api/point/getDevice', + method: 'post' + }) +} + +export default { add, edit, del, changeActive, findPoints, getPoint, getRegion, changeUsed, changeLock, getDevice } diff --git a/lms/nladmin-ui/src/components/Crud/UD.operation.vue b/lms/nladmin-ui/src/components/Crud/UD.operation.vue index 686247d..4a9d334 100644 --- a/lms/nladmin-ui/src/components/Crud/UD.operation.vue +++ b/lms/nladmin-ui/src/components/Crud/UD.operation.vue @@ -5,7 +5,7 @@

{{ msg }}

取消 - 确定 + 确定
删除 diff --git a/lms/nladmin-ui/src/settings.js b/lms/nladmin-ui/src/settings.js index 860639a..209575a 100644 --- a/lms/nladmin-ui/src/settings.js +++ b/lms/nladmin-ui/src/settings.js @@ -40,7 +40,7 @@ module.exports = { /** * @description token key */ - TokenKey: 'NL-LMS-TOEKN', + TokenKey: 'NL-LMS-TOKEN', /** * @description 请求超时时间,毫秒(默认2分钟) */ diff --git a/lms/nladmin-ui/src/views/system/dept/index.vue b/lms/nladmin-ui/src/views/system/dept/index.vue index e5c87df..bf20d9e 100644 --- a/lms/nladmin-ui/src/views/system/dept/index.vue +++ b/lms/nladmin-ui/src/views/system/dept/index.vue @@ -81,7 +81,7 @@ diff --git a/lms/nladmin-ui/src/views/system/dict/dictDetail.vue b/lms/nladmin-ui/src/views/system/dict/dictDetail.vue index b62c9f7..1410765 100644 --- a/lms/nladmin-ui/src/views/system/dict/dictDetail.vue +++ b/lms/nladmin-ui/src/views/system/dict/dictDetail.vue @@ -56,7 +56,7 @@ diff --git a/lms/nladmin-ui/src/views/system/dict/index.vue b/lms/nladmin-ui/src/views/system/dict/index.vue index c205c56..a8b74c3 100644 --- a/lms/nladmin-ui/src/views/system/dict/index.vue +++ b/lms/nladmin-ui/src/views/system/dict/index.vue @@ -11,7 +11,7 @@ diff --git a/lms/nladmin-ui/src/views/system/grid/index.vue b/lms/nladmin-ui/src/views/system/grid/index.vue index 2593a07..00fd6e4 100644 --- a/lms/nladmin-ui/src/views/system/grid/index.vue +++ b/lms/nladmin-ui/src/views/system/grid/index.vue @@ -87,7 +87,7 @@ diff --git a/lms/nladmin-ui/src/views/system/logicflow/image/index.vue b/lms/nladmin-ui/src/views/system/logicflow/image/index.vue index 6c1eb64..02431a0 100644 --- a/lms/nladmin-ui/src/views/system/logicflow/image/index.vue +++ b/lms/nladmin-ui/src/views/system/logicflow/image/index.vue @@ -57,7 +57,7 @@ diff --git a/lms/nladmin-ui/src/views/system/logicflow/index.vue b/lms/nladmin-ui/src/views/system/logicflow/index.vue index 90c77e1..2204632 100644 --- a/lms/nladmin-ui/src/views/system/logicflow/index.vue +++ b/lms/nladmin-ui/src/views/system/logicflow/index.vue @@ -24,7 +24,7 @@ diff --git a/lms/nladmin-ui/src/views/system/menu/index.vue b/lms/nladmin-ui/src/views/system/menu/index.vue index f88c5c2..791ac9e 100644 --- a/lms/nladmin-ui/src/views/system/menu/index.vue +++ b/lms/nladmin-ui/src/views/system/menu/index.vue @@ -89,7 +89,7 @@ diff --git a/lms/nladmin-ui/src/views/system/param/index.vue b/lms/nladmin-ui/src/views/system/param/index.vue index dddbcab..6e92c65 100644 --- a/lms/nladmin-ui/src/views/system/param/index.vue +++ b/lms/nladmin-ui/src/views/system/param/index.vue @@ -27,7 +27,7 @@ diff --git a/lms/nladmin-ui/src/views/system/role/index.vue b/lms/nladmin-ui/src/views/system/role/index.vue index 7952854..0b802c4 100644 --- a/lms/nladmin-ui/src/views/system/role/index.vue +++ b/lms/nladmin-ui/src/views/system/role/index.vue @@ -58,7 +58,7 @@ diff --git a/lms/nladmin-ui/src/views/system/timing/index.vue b/lms/nladmin-ui/src/views/system/timing/index.vue index ca1474c..010ec4a 100644 --- a/lms/nladmin-ui/src/views/system/timing/index.vue +++ b/lms/nladmin-ui/src/views/system/timing/index.vue @@ -72,7 +72,7 @@ diff --git a/lms/nladmin-ui/src/views/system/user/index.vue b/lms/nladmin-ui/src/views/system/user/index.vue index 7f76c66..0e2a05d 100644 --- a/lms/nladmin-ui/src/views/system/user/index.vue +++ b/lms/nladmin-ui/src/views/system/user/index.vue @@ -129,7 +129,7 @@ diff --git a/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue b/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue index ea3a345..aec6166 100644 --- a/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue +++ b/lms/nladmin-ui/src/views/tools/codeGen/codeDetail.vue @@ -75,7 +75,7 @@ diff --git a/lms/nladmin-ui/src/views/tools/codeGen/index.vue b/lms/nladmin-ui/src/views/tools/codeGen/index.vue index 6742313..3cb875b 100644 --- a/lms/nladmin-ui/src/views/tools/codeGen/index.vue +++ b/lms/nladmin-ui/src/views/tools/codeGen/index.vue @@ -11,7 +11,7 @@ diff --git a/lms/nladmin-ui/src/views/tools/storage/index.vue b/lms/nladmin-ui/src/views/tools/storage/index.vue index 4f82202..d99b67c 100644 --- a/lms/nladmin-ui/src/views/tools/storage/index.vue +++ b/lms/nladmin-ui/src/views/tools/storage/index.vue @@ -46,7 +46,7 @@ diff --git a/lms/nladmin-ui/src/views/wms/basedata/class/index.vue b/lms/nladmin-ui/src/views/wms/basedata/class/index.vue index 1fe5a33..fcc5820 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/class/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/class/index.vue @@ -81,7 +81,7 @@ diff --git a/lms/nladmin-ui/src/views/wms/basedata/customer/index.vue b/lms/nladmin-ui/src/views/wms/basedata/customer/index.vue index 74d9741..f2bf67a 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/customer/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/customer/index.vue @@ -110,7 +110,7 @@ diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue index 3908729..2c02be4 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue @@ -2,39 +2,26 @@
- - - - - 物料类别: - - - - - - - - 模糊查询: - - - +
+ + + + - - + +
- + - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -140,32 +122,21 @@ style="width: 100%;" @selection-change="crud.selectionChangeHandler" > - - - - - - - - - - - - + + + + + + + + + + @@ -190,7 +161,7 @@ import rrOperation from '@crud/RR.operation' import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' -import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' +import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' import crudClassstandard from '@/api/wms/basedata/classstandard' import crudMdPbMeasureunit from '@/api/wms/basedata/mdPbMeasureunit' @@ -200,40 +171,26 @@ const defaultForm = { ass_unit_id: null, material_code: null, material_name: null, - material_spec: null, - material_model: null, - english_name: null, - base_unit_id: null, - approve_fileno: null, - print_no: null, - material_type_id: null, - len_unit_id: null, - length: null, - width: null, - height: null, - weight_unit_id: null, - gross_weight: null, - net_weight: null, - cubage_unit_id: null, - cubage: null, + standing_time: null, + threshold_time: null, + a: null, + b: null, + h: null, + w: null, + product_code: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null, - is_used_time: null, - is_used: null, - is_delete: null, - ext_id: null, - material_height_type: null, - product_series: null + weight: null } export default { name: 'Materialbase', // 数据字典 dicts: ['is_used'], - components: { pagination, crudOperation, rrOperation, udOperation, Treeselect }, + components: { pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -255,73 +212,19 @@ export default { productSeries: [], permission: {}, rules: { - material_id: [ - { required: true, message: '不能为空', trigger: 'blur' } - ], material_code: [ { required: true, message: '物料编码不能为空', trigger: 'blur' } - ], - material_name: [ - { required: true, message: '物料名称不能为空', trigger: 'blur' } - ], - material_type_id: [ - { required: true, message: '物料分类不能为空', trigger: 'blur' } - ], - create_id: [ - { required: true, message: '不能为空', trigger: 'blur' } - ], - create_time: [ - { required: true, message: '不能为空', trigger: 'blur' } - ], - is_used: [ - { required: true, message: '是否启用不能为空', trigger: 'blur' } - ], - material_height_type: [ - { required: true, message: '不能为空', trigger: 'blur' } ] } } }, created() { - this.initClass1() - this.initClass2() - this.initClass3() }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 [CRUD.HOOK.beforeRefresh]() { return true }, - initClass1() { - const param = { - parent_class_code: '09' - } - crudClassstandard.getClassType(param).then(res => { - const data = res.content - this.buildTree(data) - this.classes1 = data - }) - }, - initClass2() { - const param = { - parent_class_code: '09' - } - crudClassstandard.getClassType(param).then(res => { - const data = res.content - this.buildTree(data) - this.classes2 = data - }) - }, - initClass3() { - const param = { - parent_class_code: '07' - } - crudClassstandard.getClassType(param).then(res => { - const data = res.content - this.buildTree(data) - this.classes3 = data - }) - }, [CRUD.HOOK.beforeToCU](crud, form) { crudMdPbMeasureunit.getUnit().then(res => { this.measure_unit = res.content @@ -344,10 +247,10 @@ export default { crudClassstandard.getClassSuperior(id).then(res => { const data = res.content that.buildTree(data) - if (type == '02') { + if (type === '02') { that.classes2 = data } - if (type == '03') { + if (type === '03') { that.classes3 = data } }) diff --git a/lms/nladmin-ui/src/views/wms/basedata/measure/index.vue b/lms/nladmin-ui/src/views/wms/basedata/measure/index.vue index 9f0838e..6622c32 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/measure/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/measure/index.vue @@ -36,7 +36,7 @@ diff --git a/lms/nladmin-ui/src/views/wms/basedata/supp/index.vue b/lms/nladmin-ui/src/views/wms/basedata/supp/index.vue index 487f0bd..a8760bf 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/supp/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/supp/index.vue @@ -120,7 +120,7 @@ diff --git a/lms/nladmin-ui/src/views/wms/basedata/vehicle/index.vue b/lms/nladmin-ui/src/views/wms/basedata/vehicle/index.vue index 51d0881..e197c92 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/vehicle/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/vehicle/index.vue @@ -11,6 +11,18 @@ label-width="80px" label-suffix=":" > + + + - - - + + style="width: 180px;" + @change="hand" + > + +
- - - 打印 - - + - - - - - - - - + + + + - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - + + + + + - +
@@ -126,32 +181,42 @@ import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import { getLodop } from '@/assets/js/lodop/LodopFuncs' -const defaultForm = { num: 1, vehicle_id: null, vehicle_code: null, vehicle_name: null, one_code: null, two_code: null, rfid_code: null, vehicle_type: null, vehicle_width: null, vehicle_long: null, vehicle_height: null, overstruct_type: null, occupystruct_qty: null, ext_id: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null } +const defaultForm = { + vehicle_id: null, + vehicle_code: null, + vehicle_type: null, + vehicle_status: '0', + create_id: null, + create_name: null, + create_time: null, + update_optid: null, + update_optname: null, + update_time: null +} export default { name: 'Vehicle', - dicts:['vehicle_type'], + dicts: ['vehicle_type', 'vehicle_status'], components: { pagination, crudOperation, rrOperation, udOperation }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ - title: '载具维护', + title: '载具', url: 'api/vehicle', idField: 'vehicle_id', - sort: 'vehicle_id,desc', + sort: 'create_time,desc', crudMethod: { ...crudVehicle }, optShow: { add: true, edit: false, - del: false, + del: true, download: false, - reset: true + reset: false } }) }, data() { return { - permission: { - }, + permission: {}, rules: { vehicle_code: [ { required: true, message: '载具编码不能为空', trigger: 'blur' } @@ -159,13 +224,11 @@ export default { vehicle_type: [ { required: true, message: '载具类型不能为空', trigger: 'blur' } ], - overstruct_type: [ - { required: true, message: '载具超仓位类型不能为空', trigger: 'blur' } - ], - occupystruct_qty: [ - { required: true, message: '占仓位数不能为空', trigger: 'blur' } + vehicle_status: [ + { required: true, message: '载具状态不能为空', trigger: 'blur' } ] - }} + } + } }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 @@ -175,16 +238,6 @@ export default { hand() { this.crud.toQuery() }, - getVehicle(code) { - if (!code) { - this.crud.notify('请选择载具类型', CRUD.NOTIFICATION_TYPE.INFO) - this.form.vehicle_code = '' - return false - } - crudVehicle.getVehicle(code).then(res => { - this.form.vehicle_code = res.value - }) - }, addAndprint() { const data = this.form if (!this.form.vehicle_type) { @@ -210,26 +263,6 @@ export default { this.crud.toQuery() this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS) }) - }, - print() { - const _selectData = this.$refs.table.selection - if (!_selectData || _selectData.length < 1) { - this.crud.notify('请选择一条记录', CRUD.NOTIFICATION_TYPE.INFO) - return - } - for (let i = 0; i < _selectData.length; i++) { - const code = _selectData[i].vehicle_code - const LODOP = getLodop() - LODOP.SET_SHOW_MODE('HIDE_DISBUTTIN_SETUP', 1)// 隐藏那些无效按钮 - // 打印纸张大小设置https://www.it610.com/article/2094844.html - LODOP.SET_PRINT_PAGESIZE(1, '50mm', '30mm', '') - // LODOP.ADD_PRINT_RECT('0mm', '0mm', '48mm', '28mm', 0, 1) - LODOP.ADD_PRINT_BARCODE('4.3mm', '8.2mm', '40mm', '20mm', '128Auto', code) - // LODOP.PREVIEW()// 预览 - LODOP.PRINT()// 打印 - this.crud.notify('打印成功', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.crud.toQuery() - } } } } diff --git a/lms/nladmin-ui/src/views/wms/pdm/device/index.vue b/lms/nladmin-ui/src/views/wms/pdm/device/index.vue new file mode 100644 index 0000000..3562501 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/pdm/device/index.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue index 7165edc..692e83e 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue @@ -8,7 +8,7 @@ class="demo-form-inline" label-position="right" label-width="90px" - label-suffix=":" + label-suffix=":" > @@ -26,7 +26,7 @@ v-model="query.material" clearable size="small" - placeholder="物料编码、名称或规格" + placeholder="物料编码名称" style="width: 200px;" class="filter-item" /> @@ -53,23 +53,6 @@ /> - - - - - 开工 @@ -115,145 +98,113 @@ :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" - width="1200px" + width="600px" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ item.label }} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -278,34 +229,32 @@ {{ dict.label.pdm_workorder_status[scope.row.order_status] }} - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -369,21 +318,26 @@ const defaultForm = { syscompanyid: null, is_delete: null, material_name: null, - point_code: null, - point_name: null, + device_id: null, + device_code: null, is_canupdate_update: '1', material_spec: null, sale_id: null, is_new: '1', is_package: '1', warn_time: '0', - standing_time: '0' + standing_time: '0', + is_urgent: '0', + is_pri: '0', + ext_code: null, + qualified_qty: '0', + unqualified_qty: '0' } export default { name: 'Produceshiftorder', components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl, ViewDialog, DeviceDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], - dicts: ['pdm_workorder_status', 'priority_direction', 'is_used', 'is_or_not', 'material_type', 'vehicle_type', 'workorder_procedure'], + dicts: ['pdm_workorder_status', 'priority_direction', 'is_used', 'is_or_not', 'material_type', 'vehicle_type', 'workorder_procedure', 'true_or_false', 'wood_vehicle_type'], cruds() { return CRUD({ title: '工单', url: 'api/workorder', idField: 'workorder_id', sort: 'workorder_id,desc', @@ -442,6 +396,18 @@ export default { ], is_canupdate_update: [ { required: true, message: '不能为空', trigger: 'blur' } + ], + vehicle_type: [ + { required: true, message: '木托盘类型不能为空', trigger: 'blur' } + ], + device_code: [ + { required: true, message: '生产设备不能为空', trigger: 'blur' } + ], + is_urgent: [ + { required: true, message: '是否加急不能为空', trigger: 'blur' } + ], + is_pri: [ + { required: true, message: '是否优先包装不能为空', trigger: 'blur' } ] } } @@ -488,12 +454,10 @@ export default { setMaterValue(row) { this.form.material_id = row.material_id this.form.material_code = row.material_code - this.form.material_name = row.material_name - this.form.material_spec = row.material_spec }, tableChanged(row) { - this.form.point_code = row.point_code - this.form.point_name = row.point_name + this.form.device_code = row.device_code + this.form.device_id = row.device_id }, // 下发 submits(row) { diff --git a/lms/nladmin-ui/src/views/wms/pub/DeviceDialog.vue b/lms/nladmin-ui/src/views/wms/pub/DeviceDialog.vue index 645e334..b333e84 100644 --- a/lms/nladmin-ui/src/views/wms/pub/DeviceDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pub/DeviceDialog.vue @@ -8,16 +8,24 @@ @close="close" @open="open" > - - - - - - - - - - + + + + + + - + - - - + + + + + + - + 取 消 确 定 @@ -58,20 +70,16 @@ import CRUD, { header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import pagination from '@crud/Pagination' -import crudPoint from '@/api/wms/sch/point' +import crudDevice from '@/api/wms/pdm/device' +import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' +import crudClassstandard from '@/api/wms/basedata/classstandard' export default { name: 'EndPointDialog', + dicts: ['pdm_device_type'], components: { rrOperation, pagination }, cruds() { - return CRUD({ - title: '点位', url: 'api/point', crudMethod: { ...crudPoint }, - query: { - is_have_workder: '1' - }, - - optShow: {} - }) + return CRUD({ title: '设备', url: 'api/device', crudMethod: { ...crudDevice }, optShow: {}}) }, mixins: [presenter(), header()], props: { @@ -90,34 +98,26 @@ export default { }, data() { return { - formInline: { - search: '' - }, - tableRadio: '', - tableData: [], dialogVisible: false, - material: {} + classes: [], + tableRadio: null, + class_idStr: null, + checkrow: null, + rows: [] } }, watch: { dialogShow: { - handler(newValue, oldValue) { + handler(newValue) { this.dialogVisible = newValue } } }, methods: { - handleClose(done) { - this.$confirm('确认关闭?') - .then(_ => { - done() - }) - .catch(_ => { - }) + clickChange(item) { + this.tableRadio = item }, open() { - debugger - this.query.region_id = this.openParam this.crud.toQuery() }, close() { @@ -151,11 +151,23 @@ export default { onSelectAll() { this.$refs.table.clearSelection() }, - clickChange(item) { - this.tableRadio = item - }, hand(value) { this.crud.toQuery() + }, + loadClass({ action, parentNode, callback }) { + if (action === LOAD_CHILDREN_OPTIONS) { + crudClassstandard.getClass({ pid: parentNode.id }).then(res => { + parentNode.children = res.content.map(function(obj) { + if (obj.hasChildren) { + obj.children = null + } + return obj + }) + setTimeout(() => { + callback() + }, 100) + }) + } } } } @@ -173,7 +185,7 @@ export default { margin-left: auto; } -.el-table_body tr.current-row > td { +.el-table_body tr.current-row>td { background-color: #e9e500; } diff --git a/lms/nladmin-ui/src/views/wms/pub/MaterDialog.vue b/lms/nladmin-ui/src/views/wms/pub/MaterDialog.vue index 8427c24..97e87c6 100644 --- a/lms/nladmin-ui/src/views/wms/pub/MaterDialog.vue +++ b/lms/nladmin-ui/src/views/wms/pub/MaterDialog.vue @@ -15,21 +15,12 @@ label-width="80px" label-suffix=":" > - - - - + @@ -55,14 +46,15 @@ - - - - - - - - + + + + + + + + + @@ -79,13 +71,13 @@ import crudMaterialbase from '@/api/wms/basedata/materialbase' import CRUD, { header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import pagination from '@crud/Pagination' -import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' +import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' import crudClassstandard from '@/api/wms/basedata/classstandard' export default { name: 'MaterDtl', - components: { rrOperation, pagination, Treeselect }, + components: { rrOperation, pagination }, cruds() { return CRUD({ title: '物料', url: 'api/Materialbase', crudMethod: { ...crudMaterialbase }, optShow: {}}) }, @@ -126,9 +118,6 @@ export default { clickChange(item) { this.tableRadio = item }, - seriesFormat(row) { - return this.dict.label.product_series[row.product_series] - }, open() { const param = { 'materOpt_code': this.materOptCode diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index 56a35e0..33d283e 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -10,7 +10,7 @@ label-width="90px" label-suffix=":" > - + - + @@ -47,6 +49,7 @@ > @@ -63,69 +66,30 @@ @change="hand" > - - - - - - - - - - - - - + > + + @@ -199,111 +163,124 @@ :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" - width="520px" + width="600px" > - - - + + + + + + - - - - - - - - - - - - - - - - - + - - + + + + - - + + + + - - - - - + + + + - - + + - - - - - + + + + - + @@ -317,34 +294,32 @@ @selection-change="crud.selectionChangeHandler" > - + + + + + + + + + + + - - - - - - - + - - - - - - - @@ -381,20 +355,19 @@ import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import ViewDialog from '@/views/wms/sch/point/ViewDialog' import MaterialDialog from '@/views/wms/sch/point/MaterialDialog' -import WorkOrderDialog from '@/views/wms/sch/point/WorkOrderDialog' const defaultForm = { point_id: null, point_code: null, point_name: null, point_type: null, - point_status: null, + point_status: '0', lock_type: '1', vehicle_code: null, source_id: null, remark: null, is_light: '0', - is_used: null, + is_used: '1', is_delete: null, create_id: null, create_name: null, @@ -405,8 +378,8 @@ const defaultForm = { } export default { name: 'Point', - dicts: ['vehicle_type', 'd_lock_type', 'SCH_TASK_TYPE_DTL', 'vehicle_type'], - components: { WorkOrderDialog, MaterialDialog, pagination, crudOperation, rrOperation, udOperation, ViewDialog }, + dicts: ['vehicle_type', 'lock_type', 'point_status', 'true_or_false'], + components: { MaterialDialog, pagination, crudOperation, rrOperation, udOperation, ViewDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -415,7 +388,7 @@ export default { idField: 'point_id', optShow: { add: true, - edit: true, + edit: false, del: true, download: false, reset: true @@ -428,7 +401,6 @@ export default { return { syncLoading: false, materialDialog: false, - workOrderDialog: false, choose: '物料', invtypelist: [], pointStatusList: [], @@ -438,6 +410,7 @@ export default { options: [], regionList: [], permission: {}, + deviceList: [], rules: { point_code: [ { required: true, message: '点位编码不能为空', trigger: 'blur' } @@ -445,11 +418,14 @@ export default { point_name: [ { required: true, message: '点位名称不能为空', trigger: 'blur' } ], + point_status: [ + { required: true, message: '点位状态不能为空', trigger: 'blur' } + ], point_type: [ { required: true, message: '点位类型不能为空', trigger: 'blur' } ], region_id: [ - { required: true, message: '区域类型不能为空', trigger: 'blur' } + { required: true, message: '所属区域不能为空', trigger: 'blur' } ], lock_type: [ { required: true, message: '锁定类型不能为空', trigger: 'blur' } @@ -462,6 +438,9 @@ export default { crudPoint.getRegion().then(res => { this.regionList = res }) + crudPoint.getDevice().then(res => { + this.deviceList = res + }) }, methods: { // 钩子:在获取表格数据之前执行,false 则代表不获取数据 @@ -500,7 +479,6 @@ export default { }, getPointStatusAndTypeList(id, flag) { if (id) { - this.getPointStatusList(id, flag) this.getPointTypeList(id, flag) } if (flag === 1) { @@ -549,13 +527,6 @@ export default { this.$refs.viewDialog.setParentData(row) } }, - getMaterial() { - if (this.choose == '物料') { - this.materialDialog = true - } else { - this.workOrderDialog = true - } - }, tableChanged(row) { this.form.material_name = row.material_name this.form.material_id = row.material_id diff --git a/lms/nladmin-ui/src/views/wms/sch/region/index.vue b/lms/nladmin-ui/src/views/wms/sch/region/index.vue index f98d1a2..de3e284 100644 --- a/lms/nladmin-ui/src/views/wms/sch/region/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/region/index.vue @@ -4,16 +4,26 @@
- - - + + + + + +
@@ -23,27 +33,24 @@ :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" - width="550px" + width="500px" > - + - + - + - - - - + - + @@ -56,14 +63,12 @@ style="width: 100%;" @selection-change="crud.selectionChangeHandler" > - - + - - - + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/cppoint/cppInventory.vue b/lms/nladmin-ui/src/views/wms/st/cppoint/cppInventory.vue new file mode 100644 index 0000000..0a84d50 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/cppoint/cppInventory.vue @@ -0,0 +1,401 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/cppoint/cppOutRegion.vue b/lms/nladmin-ui/src/views/wms/st/cppoint/cppOutRegion.vue new file mode 100644 index 0000000..6f42bce --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/cppoint/cppOutRegion.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/cppoint/index.vue b/lms/nladmin-ui/src/views/wms/st/cppoint/index.vue new file mode 100644 index 0000000..9c486f5 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/cppoint/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/regionio.js b/lms/nladmin-ui/src/views/wms/st/regionio.js new file mode 100644 index 0000000..f9997c2 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/regionio.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/regionio', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/regionio/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/regionio', + method: 'put', + data + }) +} + +export function makeTask(data) { + return request({ + url: 'api/regionio/makeTask', + method: 'post', + data: data + }) +} + +export default { add, edit, del, makeTask } diff --git a/lms/nladmin-ui/src/views/wms/st/structivt.js b/lms/nladmin-ui/src/views/wms/st/structivt.js new file mode 100644 index 0000000..411cd72 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/structivt.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/structivt', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/structivt/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/structivt', + method: 'put', + data + }) +} + +export function outInventory(data) { + return request({ + url: 'api/structivt/outInventory', + method: 'post', + data: data + }) +} + +export function batchEdit(data) { + return request({ + url: 'api/structivt/batchEdit', + method: 'post', + data: data + }) +} + +export default { add, edit, del, outInventory, batchEdit } diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/index.vue b/lms/nladmin-ui/src/views/wms/st/ysa/index.vue new file mode 100644 index 0000000..a0cbceb --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ysa/index.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue b/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue new file mode 100644 index 0000000..21b176e --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ysa/inventory.vue @@ -0,0 +1,412 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/ysqInRegion.vue b/lms/nladmin-ui/src/views/wms/st/ysa/ysqInRegion.vue new file mode 100644 index 0000000..1ce028b --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ysa/ysqInRegion.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/st/ysa/ysqOutRegion.vue b/lms/nladmin-ui/src/views/wms/st/ysa/ysqOutRegion.vue new file mode 100644 index 0000000..c71dbdd --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/st/ysa/ysqOutRegion.vue @@ -0,0 +1,190 @@ + + + + +