diff --git a/mes/hd/nladmin-system/pom.xml b/mes/hd/nladmin-system/pom.xml index 195ae1e6..17cbb300 100644 --- a/mes/hd/nladmin-system/pom.xml +++ b/mes/hd/nladmin-system/pom.xml @@ -43,7 +43,12 @@ jansi 1.9 - + + + org.redisson + redisson-spring-boot-starter + 3.16.4 + cn.dev33 @@ -254,6 +259,11 @@ velocity-engine-core 2.3 + + org.springframework.boot + spring-boot-starter-security + test + com.baomidou mybatis-plus-generator @@ -334,7 +344,11 @@ **/*.* + + **/*.java + + ${basedir}/src/main/resources diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 2a75a76b..75da8406 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -27,11 +27,10 @@ public enum AcsTaskEnum { TASK_CACHELINE_OUT("3","缓存线出库任务"), //回调状态 - STATUS_START("1","开始取货"), - STATUS_RUNDING("2","放货中"), - STATUS_FINISH("3","完成"), - STATUS_CANNEL("4","取消"), - + STATUS_START("1","执行中"), + STATUS_FINISH("2","完成"), + STATUS_CANNEL("3","取消"), + //专机请求 REQUEST_CALLTYPE_FULL("1","满料请求"), REQUEST_CALLTYPE_EMP("2","缺料请求"), ; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index 25b2a826..c8f49e5c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -20,12 +20,12 @@ public enum StatusEnum { //锁状态 LOCK_OFF("0","否",""), LOCK_ON("1","是",""), - //缓存线载具状态00-空位、01-绿色空箱、02-黄色满箱、03-红色异常、04不显示 - CACHE_VEL_NULL("00","空位",""), - CACHE_VEL_EMT("01","绿色空箱",""), - CACHE_VEL_FULL("02","黄色满箱",""), - CACHE_VEL_ERR("03","红色异常",""), - CACHE_VEL_DIS("04","04不显示",""), + //缓存线载具状态 1-空位、2-绿色空箱、3-黄色满箱、4-红色异常、5不显示 + CACHE_VEL_NULL("1","空位",""), + CACHE_VEL_EMT("2","绿色空箱",""), + CACHE_VEL_FULL("3","黄色满箱",""), + CACHE_VEL_ERR("4","红色异常",""), + CACHE_VEL_DIS("5","不显示",""), //任务状态 TASK_CREATE("1","生成",""), TASK_START_P("2","起点确认",""), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/WorkerOrderEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/WorkerOrderEnum.java index 6af9d1b3..11186bd7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/WorkerOrderEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/WorkerOrderEnum.java @@ -6,12 +6,13 @@ package org.nl.common.enums; * @Date: 2023/3/16 */ public enum WorkerOrderEnum { - // 1-创建、2-下发、3-生产中、4-暂停、5-完成 + // 1-创建、2-下发、3-生产中、4-暂停、5-完成 6-强制完成 CREATE("创建", "1"), SEND("下发", "2"), PRODUCTING("生产中", "3"), STOP("暂停", "4"), COMPLETE("完成", "5"), + FORCE_COMPLETE("强制完成", "6"), // 1-PC创建、2-Excel导入 PCINTO("PC创建", "1"), EXCELINTO("EXCEL导入", "2"), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/handler/LockProcess.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/handler/LockProcess.java new file mode 100644 index 00000000..5876e830 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/handler/LockProcess.java @@ -0,0 +1,7 @@ +package org.nl.common.handler; + +@FunctionalInterface +public +interface LockProcess { + void process(); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java new file mode 100644 index 00000000..29a4089b --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/RedissonUtils.java @@ -0,0 +1,45 @@ +package org.nl.common.utils; + +import lombok.SneakyThrows; +import org.nl.common.handler.LockProcess; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.util.SpringContextHolder; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; + +import java.util.concurrent.TimeUnit; + +/* + * @author ZZQ + * @Date 2023/3/27 10:30 + */ +public class RedissonUtils { + /** + * + * @param process 业务代码 + * @param key + * @param seconds 尝试获取锁的等待时间,允许为空 + */ + @SneakyThrows + public static void lock(LockProcess process, String key, Integer seconds){ + RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class); + RLock lock = redissonClient.getLock(key); + boolean isLock; + if (seconds == null){ + isLock = lock.tryLock(); + }else { + isLock = lock.tryLock(seconds, TimeUnit.SECONDS); + } + try { + if (isLock){ + process.process(); + }{ + throw new BadRequestException("当前业务 key:"+key+"正在锁定请稍后再试"); + } + }finally { + if (isLock){ + lock.unlock(); + } + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/api/RestBusinessTemplate.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/api/RestBusinessTemplate.java index 57de09bf..e2876129 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/api/RestBusinessTemplate.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/api/RestBusinessTemplate.java @@ -41,7 +41,7 @@ public class RestBusinessTemplate{ catch(Exception e) { log.error("execute error", e); result.setCode(ResultCode.FAILED.getCode()); - result.setDesc(ResultCode.FAILED.getDesc()); + result.setDesc(ResultCode.FAILED.getDesc()+",原因是:"+e.getMessage()); } return result; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java b/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java index ae0b2ec5..d5aaa6a3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/config/DataBaseConfig.java @@ -15,7 +15,7 @@ import javax.sql.DataSource; import java.sql.DriverManager; import java.sql.SQLException; -@Configuration +//@Configuration @Slf4j public class DataBaseConfig { @Value("${erp.oracle.enabled}") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java b/mes/hd/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java index 048b89c6..3e077a5f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/system/controller/dict/SysDictController.java @@ -1,6 +1,7 @@ package org.nl.system.controller.dict; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -117,5 +118,13 @@ public class SysDictController { return new ResponseEntity<>(HttpStatus.OK); } + @Log("查询字典详情") + @ApiOperation("查询字典详情") + @PostMapping("/dictDetailByCode") + @SaIgnore + public ResponseEntity createDetail(@RequestBody String code){ + return new ResponseEntity<>(dictService.getDictByName(code),HttpStatus.OK); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java index 58e8045b..432cc581 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java @@ -1,7 +1,5 @@ - package org.nl.wms.basedata.master.service.impl; - import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; @@ -14,8 +12,10 @@ import lombok.RequiredArgsConstructor; import org.json.XML; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; +import org.nl.config.thread.ThreadPoolExecutorUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; @@ -24,12 +24,15 @@ import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; - +import org.nl.wms.pda.dto.MaterialDto; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * @author zhouz @@ -39,290 +42,295 @@ import java.util.*; @Service @RequiredArgsConstructor @Slf4j -public class MaterialbaseServiceImpl implements MaterialbaseService { - private final ClassstandardService classstandardService; - //private final WmsToErpService wmsToErpService; +public class MaterialbaseServiceImpl implements MaterialbaseService{ + private final ClassstandardService classstandardService; + //private final WmsToErpService wmsToErpService; + private final RedisUtils redisUtils; - @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"); + @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"); + HashMap map = new HashMap<>(); + map.put("flag", "1"); + 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; + } + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(MaterialbaseDto.class); + return list; + } - HashMap map = new HashMap<>(); - map.put("flag", "1"); + @Override + public MaterialbaseDto findById(Long material_id) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = wo.query("material_id =" + material_id + "").uniqueResult(0); + String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); + json.put("base_unit_name", unit_name); + final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); + return obj; + } - if (!StrUtil.isEmpty(search)) { - //处理转义字符 - if (search.contains("\\")) { - search = search.replace("\\", "\\\\\\"); - } - map.put("search", "%" + search + "%"); - } + @Override + public MaterialbaseDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + if(StrUtil.isNotEmpty(code) && code.contains("\\")) { + code = code.replace("\\", "\\\\"); + } + JSONObject json = wo.query("material_code ='" + code + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(json)) { + return null; + } + String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); + json.put("base_unit_name", unit_name); + final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); + return obj; + } - //处理物料当前节点的所有子节点 - 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); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void create(MaterialbaseDto dto) { + ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); + dto.setCreate_id(currentUserId); + dto.setCreate_name(nickName); + dto.setUpdate_id(currentUserId); + dto.setUpdate_name(nickName); + dto.setUpdate_time(DateUtil.now()); + dto.setCreate_time(DateUtil.now()); + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.insert(json); + //子线程异步更新redis数据 + CompletableFuture updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool); + } - if (!StrUtil.isEmpty(class_code)) { - map.put("class_code", class_code + "%"); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void update(MaterialbaseDto dto) { + ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); + MaterialbaseDto entity = this.findById(dto.getMaterial_id()); + if(entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + dto.setUpdate_time(DateUtil.now()); + dto.setUpdate_id(currentUserId); + dto.setUpdate_name(nickName); + WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); + wo.update(json); + //子线程异步更新redis数据 + CompletableFuture updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool); + } - 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"); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + 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", DateUtil.now()); + wo.update(param); + } + //子线程异步更新redis数据 + CompletableFuture updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool); + } - JSONObject jo = WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id"); - return jo; - } + @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; + } - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(MaterialbaseDto.class); - return list; - } + @Override + public JSONObject getMaterOptType(String materOpt_code) { + return MaterOptTypeEnum.getObj(materOpt_code); + } - @Override - public MaterialbaseDto findById(Long material_id) { - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - JSONObject json = wo.query("material_id =" + material_id + "").uniqueResult(0); - String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); - json.put("base_unit_name", unit_name); - final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); - return obj; - } + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject synchronize(JSONObject form) { + ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); + log.info("导入方法开始"); + JSONObject result = new JSONObject(); + String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/z_sd0002_send_mat_md/800/z_sd0002_send_mat_md/binding"; + String method = "ZSd0002SendMatMd"; + String bill_code1 = form.getString("bill_code1"); + String bill_code2 = form.getString("bill_code2"); + HashMap map = new HashMap(); + map.put("MatnrFr", bill_code1); + map.put("MatnrTo", bill_code2); + //非必填字段 + JSONObject ZfmGetSoResponse = null; + try { + //String response = WebServiceUtil.process(url, method, map); + String response = "24026697L软管外丝直接\\C46500\\S3/16*1/4M\\URGJ00124TH2023-03-01KDEALBVGCXKDEALBVGCZ009M2401KG0.01.0KG20X24026697L201200PCNORM201224026697L204000PCNORM24026697L206000PCNORM206024026697L220000PCNORM24026697L201224026697L204024026697L206024026697L220024026697L0000000000077876000000000010S01CHAR300类别美标软管管件X24026697L0000000000077876000000000011S02CHAR300牌号C46500X24026697L0000000000077876000000000012S03CHAR300规格S3/16*1/4MX24026697L0000000000077876000000000014S05CHAR300形状软管外丝直接X24026697L0000000000077876000000000015S06CHAR300标准URGJX24026697L0000000000077876000000000016S07CHAR300图号URGJ00124THX24026697L0000000000077876000000000017S08CHAR300监管性质保税来料X24026697L0000000000077876000000000020S11CHAR300客户牌号(下单时输入)24026697L0000000000077876000000000019S10CHAR300附加说明(下单时输入)24026697L0000000000077876000000000102S13CHAR300铜管内部牌号黄铜管件-黄铜管件24026697LKG1124026697LPC19125024026697L2012101PC1000.024026697S0010PC1000.024026697L2012101PC1000.035000715L9000KG15.1724026697L2060101PC1000.024026697S0010KG15.1724026697L2060101PC1000.035000715L9000KG15.1724026697L2060501PC1.024026697S0010KG15.1724026697L2060501PC1.035000715L9000KG15.17I000共输出1 条物料数据000000"; + JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); + System.out.println("getXML返回数据-----------------" + ret.toString()); + JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); + JSONObject Body = Envelope.getJSONObject("soap-env:Body"); + ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse"); + } + catch(Exception e) { + e.printStackTrace(); + } + JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out"); + JSONObject TMara = TZtsalesorder.getJSONObject("TMara"); + JSONArray rows = TMara.getJSONArray("item"); + for(int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String Matnr = row.getString("Matnr").replaceAll("^(0+)", ""); + //查询是否存在该物料 + JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + Matnr + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(mater_jo)) { + mater_jo = new JSONObject(); + mater_jo.put("material_id", IdUtil.getSnowflake(1, 1).nextId()); + mater_jo.put("material_code", Matnr); + mater_jo.put("material_name", row.getString("Maktx")); + mater_jo.put("material_model", row.getString("Mtart")); + String unit_code = row.getString("Meins"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(unit_jo)) { + throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); + } + mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); + JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(class_jo)) { + throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); + } + mater_jo.put("material_type_id", class_jo.getString("class_id")); + mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); + mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); + mater_jo.put("create_time", DateUtil.now()); + mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + mater_jo.put("update_time", DateUtil.now()); + mater_jo.put("is_used_time", DateUtil.now()); + mater_jo.put("is_used", "1"); + mater_jo.put("is_delete", "0"); + WQLObject.getWQLObject("md_me_materialbase").insert(mater_jo); + } + else{ + mater_jo.put("material_code", Matnr); + mater_jo.put("material_name", row.getString("Maktx")); + mater_jo.put("material_model", row.getString("Mtart")); + String unit_code = row.getString("Meins"); + JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(unit_jo)) { + throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); + } + mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); + JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(class_jo)) { + throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); + } + mater_jo.put("material_type_id", class_jo.getString("class_id")); + mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); + mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); + mater_jo.put("create_time", DateUtil.now()); + mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); + mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); + mater_jo.put("update_time", DateUtil.now()); + mater_jo.put("is_used_time", DateUtil.now()); + mater_jo.put("is_used", "1"); + mater_jo.put("is_delete", "0"); + WQLObject.getWQLObject("md_me_materialbase").update(mater_jo); + } + } + //子线程异步更新redis数据 + CompletableFuture updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool); + result.put("message", "导入成功!一共导入:" + rows.size() + "条数据!"); + return new JSONObject(); + } - @Override - public MaterialbaseDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - if (StrUtil.isNotEmpty(code) && code.contains("\\")) { - code = code.replace("\\", "\\\\"); - } - JSONObject json = wo.query("material_code ='" + code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(json)) return null; - String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); - json.put("base_unit_name", unit_name); - final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); - return obj; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void create(MaterialbaseDto dto) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); - dto.setCreate_id(currentUserId); - dto.setCreate_name(nickName); - dto.setUpdate_id(currentUserId); - dto.setUpdate_name(nickName); - dto.setUpdate_time(DateUtil.now()); - dto.setCreate_time(DateUtil.now()); - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.insert(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void update(MaterialbaseDto dto) { - MaterialbaseDto entity = this.findById(dto.getMaterial_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - dto.setUpdate_time(DateUtil.now()); - dto.setUpdate_id(currentUserId); - dto.setUpdate_name(nickName); - WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); - JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); - wo.update(json); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(Long[] ids) { - String currentUserId = SecurityUtils.getCurrentUserId(); - String nickName = SecurityUtils.getCurrentNickName(); - - - 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", DateUtil.now()); - wo.update(param); - } - } - - @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; - } - - @Override - public JSONObject getMaterOptType(String materOpt_code) { - return MaterOptTypeEnum.getObj(materOpt_code); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public JSONObject synchronize(JSONObject form) { - log.info("导入方法开始"); - JSONObject result = new JSONObject(); - - String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/z_sd0002_send_mat_md/800/z_sd0002_send_mat_md/binding"; - String method = "ZSd0002SendMatMd"; - String bill_code1 = form.getString("bill_code1"); - String bill_code2 = form.getString("bill_code2"); - HashMap map = new HashMap(); - map.put("MatnrFr", bill_code1); - map.put("MatnrTo", bill_code2); - //非必填字段 - JSONObject ZfmGetSoResponse = null; - try { - //String response = WebServiceUtil.process(url, method, map); - String response = "24026697L软管外丝直接\\C46500\\S3/16*1/4M\\URGJ00124TH2023-03-01KDEALBVGCXKDEALBVGCZ009M2401KG0.01.0KG20X24026697L201200PCNORM201224026697L204000PCNORM24026697L206000PCNORM206024026697L220000PCNORM24026697L201224026697L204024026697L206024026697L220024026697L0000000000077876000000000010S01CHAR300类别美标软管管件X24026697L0000000000077876000000000011S02CHAR300牌号C46500X24026697L0000000000077876000000000012S03CHAR300规格S3/16*1/4MX24026697L0000000000077876000000000014S05CHAR300形状软管外丝直接X24026697L0000000000077876000000000015S06CHAR300标准URGJX24026697L0000000000077876000000000016S07CHAR300图号URGJ00124THX24026697L0000000000077876000000000017S08CHAR300监管性质保税来料X24026697L0000000000077876000000000020S11CHAR300客户牌号(下单时输入)24026697L0000000000077876000000000019S10CHAR300附加说明(下单时输入)24026697L0000000000077876000000000102S13CHAR300铜管内部牌号黄铜管件-黄铜管件24026697LKG1124026697LPC19125024026697L2012101PC1000.024026697S0010PC1000.024026697L2012101PC1000.035000715L9000KG15.1724026697L2060101PC1000.024026697S0010KG15.1724026697L2060101PC1000.035000715L9000KG15.1724026697L2060501PC1.024026697S0010KG15.1724026697L2060501PC1.035000715L9000KG15.17I000共输出1 条物料数据000000"; - JSONObject ret = JSONObject.parseObject(XML.toJSONObject(response).toString()); - System.out.println("getXML返回数据-----------------" + ret.toString()); - JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); - JSONObject Body = Envelope.getJSONObject("soap-env:Body"); - ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse"); - } catch (Exception e) { - e.printStackTrace(); - } - - JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out"); - JSONObject TMara = TZtsalesorder.getJSONObject("TMara"); - JSONArray rows = TMara.getJSONArray("item"); - - for (int i = 0; i < rows.size(); i++) { - JSONObject row = rows.getJSONObject(i); - String Matnr = row.getString("Matnr").replaceAll("^(0+)", ""); - //查询是否存在该物料 - JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + Matnr + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(mater_jo)) { - mater_jo = new JSONObject(); - mater_jo.put("material_id", IdUtil.getSnowflake(1, 1).nextId()); - mater_jo.put("material_code", Matnr); - mater_jo.put("material_name", row.getString("Maktx")); - mater_jo.put("material_model", row.getString("Mtart")); - String unit_code = row.getString("Meins"); - JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(unit_jo)) { - throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); - } - mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); - JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(class_jo)) { - throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); - } - mater_jo.put("material_type_id", class_jo.getString("class_id")); - mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); - mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); - mater_jo.put("create_time", DateUtil.now()); - mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); - mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); - mater_jo.put("update_time", DateUtil.now()); - mater_jo.put("is_used_time", DateUtil.now()); - mater_jo.put("is_used", "1"); - mater_jo.put("is_delete", "0"); - WQLObject.getWQLObject("md_me_materialbase").insert(mater_jo); - } else { - mater_jo.put("material_code", Matnr); - mater_jo.put("material_name", row.getString("Maktx")); - mater_jo.put("material_model", row.getString("Mtart")); - String unit_code = row.getString("Meins"); - JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(unit_jo)) { - throw new BadRequestException("未查询到该物料对应的单位信息:" + unit_code); - } - mater_jo.put("base_unit_id", unit_jo.getString("measure_unit_id")); - JSONObject class_jo = WQLObject.getWQLObject("md_pb_classstandard").query("class_code = '" + row.getString("Mtart") + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(class_jo)) { - throw new BadRequestException("未查询到该物料对应的基础类别信息:" + row.getString("Mtart")); - } - mater_jo.put("material_type_id", class_jo.getString("class_id")); - mater_jo.put("create_id", SecurityUtils.getCurrentUserId()); - mater_jo.put("create_name", SecurityUtils.getCurrentNickName()); - mater_jo.put("create_time", DateUtil.now()); - mater_jo.put("update_optid", SecurityUtils.getCurrentUserId()); - mater_jo.put("update_optname", SecurityUtils.getCurrentNickName()); - mater_jo.put("update_time", DateUtil.now()); - mater_jo.put("is_used_time", DateUtil.now()); - mater_jo.put("is_used", "1"); - mater_jo.put("is_delete", "0"); - WQLObject.getWQLObject("md_me_materialbase").update(mater_jo); - } - } - result.put("message", "导入成功!一共导入:" + rows.size() + "条数据!"); - return new JSONObject(); - } - - @Override - public JSONArray getProductSeries(String parent_class_id) { - WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); - JSONArray parentArray = wo.query("is_delete = '0' and parent_class_id = '" + parent_class_id + "'").getResultJSONArray(0); - JSONArray newParentArray = new JSONArray(); - for (int i = 0; i < parentArray.size(); i++) { - JSONObject parentMap = parentArray.getJSONObject(i); - JSONObject newParentMap = new JSONObject(); - JSONArray children = this.getProductSeries(parentMap.getString("class_id")); - newParentMap.put("children", children); - newParentMap.put("label", parentMap.getString("class_name")); - newParentMap.put("id", parentMap.getString("class_id")); - newParentArray.add(newParentMap); - } - return newParentArray; - } + @Override + public JSONArray getProductSeries(String parent_class_id) { + WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); + JSONArray parentArray = wo.query("is_delete = '0' and parent_class_id = '" + parent_class_id + "'").getResultJSONArray(0); + JSONArray newParentArray = new JSONArray(); + for(int i = 0; i < parentArray.size(); i++) { + JSONObject parentMap = parentArray.getJSONObject(i); + JSONObject newParentMap = new JSONObject(); + JSONArray children = this.getProductSeries(parentMap.getString("class_id")); + newParentMap.put("children", children); + newParentMap.put("label", parentMap.getString("class_name")); + newParentMap.put("id", parentMap.getString("class_id")); + newParentArray.add(newParentMap); + } + return newParentArray; + } + public void updateRedis() { + JSONArray materialJsonArray = WQL.getWO("PDA_QUERY").addParam("flag", "5").process().getResultJSONArray(0); + List finalMaterialList = materialJsonArray.toJavaList(MaterialDto.class); + redisUtils.set("materialList", finalMaterialList); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java index 1ce8cb61..ab7b155e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java @@ -169,6 +169,9 @@ public class SectattrServiceImpl implements SectattrService { String is_productstore = (String) whereJson.get("is_productstore"); String is_attachment = (String) whereJson.get("is_attachment"); String is_reversed = (String) whereJson.get("is_reversed"); + String stor_id = (String) whereJson.get("stor_id"); + stor_map.put("stor_id", stor_id); + if (!StrUtil.isEmpty(is_materialstore)) { stor_map.put("is_materialstore", is_materialstore); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql index 088b2ef5..ee205356 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql @@ -21,6 +21,7 @@ 输入.is_productstore TYPEAS s_string 输入.is_attachment TYPEAS s_string 输入.is_reversed TYPEAS s_string + 输入.stor_id TYPEAS s_string [临时表] @@ -95,6 +96,9 @@ ENDOPTION OPTION 输入.is_reversed <> "" stor.is_reversed = 输入.is_reversed + ENDOPTION + OPTION 输入.stor_id <> "" + stor.stor_id = 输入.stor_id ENDOPTION ENDSELECT ENDQUERY diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 29438994..6f7d3b3a 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/cacheline/position/service/dto/CachelinePositionDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/cacheline/position/service/dto/CachelinePositionDto.java index 78234925..494afd87 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/cacheline/position/service/dto/CachelinePositionDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/cacheline/position/service/dto/CachelinePositionDto.java @@ -21,7 +21,7 @@ public class CachelinePositionDto implements Serializable { private String position_name; /** 位置顺序号 */ - private BigDecimal positionOrder_no; + private BigDecimal positionorder_no; /** 缓存线编码 */ private String cacheline_code; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 59fc7276..675ab41b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -6,8 +6,11 @@ import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.api.ResultCode; +import org.nl.modules.common.exception.BizCoreException; import org.nl.wms.ext.acs.service.AcsToWmsService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** @@ -37,6 +41,17 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.apply(whereJson), HttpStatus.OK); } + @PostMapping("/receiveTaskIdToCacheLine") + @Log("ACS给WMS发送缓存线的实时任务ID") + @ApiOperation("ACS给WMS发送缓存线的实时任务ID") + public ResponseEntity receiveTaskIdToCacheLine(@RequestBody JSONObject whereJson) { + //参数校验 + if(StringUtils.isEmpty(whereJson.getString("task_id")) || StringUtils.isEmpty(whereJson.getString("position_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return new ResponseEntity<>(acsToWmsService.receiveTaskIdToCacheLine(whereJson), HttpStatus.OK); + } + @PostMapping("/status") @Log("ACS给WMS反馈任务状态") @ApiOperation("ACS给WMS反馈任务状态") @@ -44,11 +59,11 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.receiveTaskStatusAcs(string), HttpStatus.OK); } - @PostMapping("/orderFinish") + @PostMapping("/orderStatus") @Log("ACS给WMS下发工单完成状态") @ApiOperation("ACS给WMS下发工单完成状态") - public ResponseEntity orderFinish(@RequestBody String string) { - return new ResponseEntity<>(acsToWmsService.orderFinish(string), HttpStatus.OK); + public ResponseEntity orderFinish(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.orderStatus(param), HttpStatus.OK); } @PostMapping("/feedDeviceStatusType") @@ -58,10 +73,32 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(string), HttpStatus.OK); } + + + @PostMapping("/feedDeviceQty") + @Log("向wms反馈设备实时数量") + @ApiOperation("向wms反馈设备实时数量") + public ResponseEntity feedDeviceRealQty(@RequestBody List param) { + acsToWmsService.feedDevQty(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/feedcachelineVe") + @Log("向wms反馈缓存载具信息") + @ApiOperation("向wms反馈缓存载具信息") + public ResponseEntity feedcachelineVe(@RequestBody JSONObject param) { + acsToWmsService.feedcachelineVe(param); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/feedOrderRealQty") - @Log("向wms反订单实施数量") + @Log("向wms反实施数量") @ApiOperation("向wms反订单实施数量") public ResponseEntity feedOrderRealQty(@RequestBody String string) { return new ResponseEntity<>(acsToWmsService.feedOrderRealQty(string), HttpStatus.OK); } + + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java index 65182b69..cc4e0e22 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java @@ -10,6 +10,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; +import org.nl.common.enums.WorkerOrderEnum; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -64,6 +65,11 @@ public class WmsToAcsController { return new ResponseEntity<>(wmsToAcsService.order(arr), HttpStatus.OK); } + /** + * @see org.nl.common.enums.WorkerOrderEnum + * @param whereJson + * @return + */ @PostMapping("/orderStatusUpdate") @Log("WMS向acs发送强制完成") @ApiOperation("WMS强制完成向acs发送强制完成") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index a6c3355b..6e7341a3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -2,6 +2,7 @@ package org.nl.wms.ext.acs.service; import com.alibaba.fastjson.JSONObject; +import java.util.List; import java.util.Map; public interface AcsToWmsService { @@ -16,6 +17,18 @@ public interface AcsToWmsService { Map apply(JSONObject jsonObject); + /** + * + * ACS客户端--->WMS服务端 + * ACS给WMS发送缓存线的实时任务ID + * @param jsonObject 条件:1.缓存线点位编码:position_code,2.任务id:task_id + * @return JSONObject + * @author gbx + * @date 2023/3/25 + */ + + JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject); + /** * ACS客户端--->WMS服务端 * ACS向WMS反馈任务状态 @@ -37,10 +50,16 @@ public interface AcsToWmsService { /** * ACS给WMS下发工单强制完成状态 - * @param string * @return */ - Map orderFinish(String string); + Map orderStatus(JSONObject param); + + /** + * 设备实时数量 + * @param param + * @return + */ + void feedDevQty(List param); /** * ACS给WMS反馈设备状态状态 @@ -49,6 +68,13 @@ public interface AcsToWmsService { */ Map feedDeviceStatusType(String string); + /** + * acs反馈缓存线载具对应关系 + * 缓存线变化时候全部反馈 + * @param param:{""cacheline_code":"xxx","param":"01_zj001,02_zj002,...""} + */ + void feedcachelineVe(JSONObject param); + /** * ACS给WMS反馈订单实时数量 * @param string diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index b2c60897..111f532a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; import org.nl.common.enums.AcsTaskEnum; @@ -16,24 +17,33 @@ import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.pda.service.CacheLineHandService; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.dto.TaskDto; - +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @RequiredArgsConstructor @Slf4j -public class AcsToWmsServiceImpl implements AcsToWmsService { - private final TaskService taskService; - private final AgvInstService agvInstService; +public class AcsToWmsServiceImpl implements AcsToWmsService{ + + + @Autowired + private TaskService taskService; + @Autowired + private CacheLineHandService cacheLineHandService; + private final AgvInstService agvInstService; @Override public Map apply(JSONObject jsonObject) { @@ -55,6 +65,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + /** + * 更新缓存线的点位实时任务信息 + * ACS给WMS发送缓存线的实时任务ID + * @param jsonObject position_code:缓存线点位编码 task_id:任务id + */ + @Override + public JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject) { + JSONObject result = new JSONObject(); + HashMap json = new HashMap<>(2); + try { + String taskId = jsonObject.getString("position_code"); + String positionCode = jsonObject.getString("task_id"); + //缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + json.put("position_code", positionCode); + json.put("task_id", taskId); + //更新缓存线的点位实时任务信息 + positionTab.update(json); + } + catch(Exception e) { + result.put("status", 400); + result.put("message", e.getMessage()); + } + result.put("status", HttpStatus.OK.value()); + result.put("message", "设备状态反馈成功"); + return result; + } + /** * task_uuid:任务标识 * task_code:任务编码 @@ -70,15 +108,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { JSONArray errArr = new JSONArray(); for (int i = 0; i < array.size(); i++) { JSONObject row = array.getJSONObject(i); - String task_uuid = row.getString("task_uuid"); - TaskDto taskDto = taskService.findById(task_uuid); + String task_id = row.getString("task_id"); + TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); //1:执行中,2:完成 ,3:acs取消 String acs_task_status = row.getString("task_status"); String message = ""; String status = ""; if ("1".equals(acs_task_status)) { - status = AcsTaskEnum.STATUS_RUNDING.getCode(); + status = AcsTaskEnum.STATUS_START.getCode(); } if ("2".equals(acs_task_status)) { status = AcsTaskEnum.STATUS_FINISH.getCode(); @@ -101,7 +139,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("任务状态更新失败:{}", message); JSONObject json = new JSONObject(); - json.put("task_uuid", task_uuid); + json.put("task_id", task_id); json.put("message", message); errArr.add(json); @@ -111,7 +149,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { log.info("任务状态更新失败:{}", message); JSONObject json = new JSONObject(); - json.put("task_uuid", task_uuid); + json.put("task_id", task_id); json.put("message", message); errArr.add(json); @@ -132,14 +170,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } @Override - public Map orderFinish(String string) { + public Map orderStatus(JSONObject orderJson) { JSONObject result = new JSONObject(); try { - JSONObject orderJson = JSONObject.parseObject(string); - String ext_order_id = orderJson.getString("ext_order_id"); + String ext_order_id = orderJson.getString("workorder_id"); // JSONArray array = JSONArray.parseArray(string); - - WQLObject wo = WQLObject.getWQLObject("MPS_BD_ProduceShiftOrder"); + //TODO: 表未维护 + WQLObject wo = WQLObject.getWQLObject("PDM_produce_workOrder"); JSONObject map = new JSONObject(); map.put("produceorder_id", ext_order_id); map.put("order_status", "04"); @@ -214,6 +251,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + @Override + public void feedDevQty(List param) { + WQLObject deviceTab = WQLObject.getWQLObject("pdm_bi_device"); + if (CollectionUtils.isEmpty(param)){ + return; + } + for (JSONObject item : param) { + String deviceCode = item.getString("device_code"); + String qty = item.getString("qty"); + deviceTab.update(MapOf.of("deviceinstor_qty",qty),"device_code = '"+deviceCode+"'"); + } + } + + @Override + public void feedcachelineVe(JSONObject param) { + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + //{""cacheline_code":"xxx","param":"01_zj001,02_zj002,...""} + if (param == null|| StringUtils.isEmpty(param.getString("cacheline_code")) || StringUtils.isEmpty(param.getString("param"))){ + return; + } + String cachelineCode = param.getString("cacheline_code"); + String cacheVehicle = param.getString("param"); + String[] collect = cacheVehicle.split(","); + for (String positionVehicle : collect) { + String[] s = positionVehicle.split("_"); + positionTab.update(MapOf.of("position_code",s[0],"Vehicle_code",s[1]),"cacheline_code = '"+cachelineCode+"'"); + } + //更新缓存线及缓存线载具表对应关系 + cacheLineHandService.cacheLineMaterSync(param.getString("cacheline_code")); + } + @Override public Map feedOrderRealQty(String string) { JSONObject result = new JSONObject(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java index de6dc5e6..88fd3f8a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java @@ -44,7 +44,7 @@ public class AgvInstService { WQLObject basePoint = WQLObject.getWQLObject("sch_base_point"); WQLObject cacheLineSearch = WQLObject.getWQLObject("SCH_cacheLine_region_relation"); try { - String workorder = param.getString("workorder_code"); + String workorder = param.getString("workorder_code");// String point_code = param.getString("point_code"); String quantity = param.getString("quantity"); //1.PDM_produce_workOrder diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 47812660..adeb8b2a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -3,31 +3,35 @@ package org.nl.wms.ext.acs.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; -import org.nl.common.anno.Log; import lombok.extern.slf4j.Slf4j; import org.nl.common.utils.AcsUtil; import org.nl.common.utils.MapOf; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Map; + @Service @RequiredArgsConstructor @Slf4j -public class WmsToAcsServiceImpl implements WmsToAcsService { +public class WmsToAcsServiceImpl implements WmsToAcsService{ @Override public Map issueTaskToAcs(JSONArray arr) { JSONArray form = new JSONArray(); for (Object o : arr) { JSONObject task = (JSONObject) o; JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id") - , "task_type", task.getString("task_type") + , "acs_task_type", task.getString("acs_task_type") , "start_point_code", task.getString("point_code1") , "next_point_code", task.getString("point_code2") , "return_point_code", task.getString("point_code3") , "task_group_id", task.getString("task_group_id") + , "priority", task.getString("priority") + , "task_group_id", task.getString("is_send") , "vehicle_code", task.getString("vehicle_code") + , "agv_system_type", task.getString("agv_system_type") )); form.add(param); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceWorkorderServiceImpl.java index fa0ea02d..80e89b6e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceWorkorderServiceImpl.java @@ -220,9 +220,9 @@ public class ProduceWorkorderServiceImpl implements ProduceWorkorderService { if (param == null || param.size()==0){ return; } - String sql = param.stream().collect(Collectors.joining("','")); String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); + String sql = param.stream().collect(Collectors.joining("','")); WQLObject wo = WQLObject.getWQLObject("PDM_produce_workOrder"); wo.update(MapOf.of("workorder_status", WorkerOrderEnum.SEND.getCode() ,"update_id", currentUserId,"update_name" diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/dto/CachelineVehileMaterialDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/dto/CachelineVehileMaterialDto.java index 5e871d72..fcdbb903 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/dto/CachelineVehileMaterialDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/dto/CachelineVehileMaterialDto.java @@ -14,7 +14,7 @@ public class CachelineVehileMaterialDto implements Serializable{ /** * 载具库存标识 */ - private String vehmaterial_uuid; + private String vehmaterial_id; /** * 缓存线位置编码 */ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java index 9bf5c6f3..99e380af 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/rest/CacheLineHandController.java @@ -1,6 +1,7 @@ package org.nl.wms.pda.rest; import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +13,7 @@ import org.nl.common.utils.api.CommonResult; import org.nl.common.utils.api.RestBusinessTemplate; import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; +import org.nl.wms.pda.dto.MaterialDto; import org.nl.wms.pda.service.CacheLineHandService; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.PostMapping; @@ -19,10 +21,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** * 海亮缓存线手持服务 + * 返回数据CommonResult,code,desc,result是因为原有对接文档给前端返回格式,要求保留,所以就包了一层。 * * @author gbx * @since 2023/3/22 @@ -39,47 +43,64 @@ public class CacheLineHandController{ @PostMapping("/materialQuery") @Log("物料查询") @ApiOperation("物料查询") - public CommonResult materialQuery(@RequestBody JSONObject form) { + public CommonResult> materialQuery(@RequestBody JSONObject form) { + String params = form.getString("search_bar"); + //任务类型和任务ID校验,instruct_uuid为前端参数命名,本来应为task_id + if(StringUtils.isNotEmpty(params)) { + //限制查询参数过短,模糊力度大 + int length = params.length(); + if(length < 3) { + throw new BizCoreException("您输入的条件匹配的范围太大,请重新输入稍长一点的内容。"); + } + } log.info("海亮缓存线手持服务 [查询物料] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(form.getString("search_bar"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.materialQuery(params)); + } + + @PostMapping("/queryMaterial") + @Log("物料模糊查询") + @ApiOperation("物料模糊查询") + public CommonResult queryMaterial(@RequestBody JSONObject form) { + log.info("海亮缓存线手持服务 [查询物料] 接口被请求, 请求参数-{}", form); + return RestBusinessTemplate.execute(() -> cacheLineHandService.queryMaterial(form.getString("search_bar"))); } @PostMapping("/semiMaterialSpecQuery") @Log("规格下拉框查询") @ApiOperation("规格下拉框查询") - public CommonResult semiMaterialSpecQuery(@RequestBody JSONObject form) { + public CommonResult semiMaterialSpecQuery(@RequestBody JSONObject form) { log.info("海亮缓存线手持服务 [规格下拉框查询] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.semiMaterialSpecQuery(form.getString("form"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.semiMaterialSpecQuery(form.getString("search_bar"))); } - @PostMapping("/workProcedureQuery") + @PostMapping("/workprocedureQuery") @Log("工序下拉框查询") @ApiOperation("工序下拉框查询") - public CommonResult workProcedureQuery(@RequestBody JSONObject form) { + public CommonResult workProcedureQuery(@RequestBody JSONObject form) { log.info("海亮缓存线手持服务 [工序下拉框查询] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.workProcedureQuery(form.getString("form"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.workProcedureQuery(form.getString("search_bar"))); } @PostMapping("/deviceQuery") @Log("缓存线设备下拉框查询") @ApiOperation("缓存线设备下拉框查询") - public CommonResult deviceQuery(@RequestBody JSONObject form) { + public CommonResult deviceQuery(@RequestBody JSONObject form) { log.info("海亮缓存线手持服务 [缓存线设备下拉框查询] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.deviceQuery(form.getString("form"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.deviceQuery(form.getString("search_bar"))); } @PostMapping("/instStatusQuery") @Log("指令状态下拉框查询") @ApiOperation("指令状态下拉框查询") - public CommonResult instStatusQuery(@RequestBody JSONObject form) { + public CommonResult instStatusQuery(@RequestBody JSONObject form) { log.info("海亮缓存线手持服务 [指令状态下拉框查询] 接口被请求, 请求参数-{}", form); - return RestBusinessTemplate.execute(() -> cacheLineHandService.instStatusQuery(form.getString("form"))); + return RestBusinessTemplate.execute(() -> cacheLineHandService.instStatusQuery(form.getString("search_bar"))); } @PostMapping("/instPageQuery") @Log("任务分页查询") @ApiOperation("任务分页数据") - public CommonResult instPageQuery(@RequestBody Map param, Pageable page) { + public CommonResult> instPageQuery(@RequestBody Map param, Pageable page) { log.info("海亮缓存线手持服务 [任务分页查询] 接口被请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> { if(null == param) { @@ -92,22 +113,193 @@ public class CacheLineHandController{ @PostMapping("/cacheLineMaterCheck") @Log("缓存线物料盘点") @ApiOperation("缓存线物料盘点") - public CommonResult cacheLineMaterCheck(@RequestBody JSONObject param) { + public CommonResult cacheLineMaterCheck(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [缓存线物料盘点] 接口被请求, 请求参数-{}", param); - return RestBusinessTemplate.execute(cacheLineHandService::cacheLineMaterCheck); + return null; } @PostMapping("/instOperation") @Log("任务操作") @ApiOperation("任务操作") - public CommonResult instOperation(@RequestBody JSONObject param) { + public CommonResult instOperation(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [任务操作] 接口被请求, 请求参数-{}", param); return RestBusinessTemplate.execute(() -> { //任务类型和任务ID校验,instruct_uuid为前端参数命名,本来应为task_id if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("opt_type"))) { throw new BizCoreException(ResultCode.MISS_PARAMETER); } - cacheLineHandService.instOperation(param); + return cacheLineHandService.instOperation(param); }); } + + @PostMapping("/cacheLineOutBoxExceptionQuery") + @Log("缓存线出入箱异常-查询") + @ApiOperation("缓存线出入箱异常-查询") + public CommonResult cacheLineOutBoxExceptionQuery(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线出入箱异常-查询] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineOutBoxExceptionQuery(param)); + } + + @PostMapping("/cacheLineOutBoxExceptionConfirm") + @Log("缓存线出入箱异常-确认") + @ApiOperation("缓存线出入箱异常-确认") + public CommonResult cacheLineOutBoxExceptionConfirm(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线出箱异常-确认] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("position_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineOutBoxExceptionConfirm(param)); + } + + @PostMapping("/cacheLineMaterInfoQuery") + @Log("缓存线料箱条码查询料箱信息") + @ApiOperation("缓存线料箱条码查询料箱信息") + public CommonResult cacheLineMaterInfoQuery(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线料箱条码查询料箱信息] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineMaterInfoQuery(param)); + } + + @PostMapping("/inOutEmptyBox") + @Log("空箱初始化--出入空箱") + @ApiOperation("空箱初始化--出入空箱") + public CommonResult inOutEmptyBox(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [空箱初始化--出入空箱] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutEmptyBox(param)); + } + + @PostMapping("/inOutExceptionInstQuery") + @Log("缓存线出入箱异常指令查询") + @ApiOperation("缓存线出入箱异常指令查询") + public CommonResult inOutExceptionInstQuery(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线出入箱异常指令查询] 接口被·请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstQuery(param)); + } + + @PostMapping("/inOutExceptionInstConfirm") + @Log("缓存线出入箱异常指令确认") + @ApiOperation("缓存线出入箱异常指令确认") + public CommonResult inOutExceptionInstConfirm(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线出入箱异常指令确认] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("instruct_uuid")) || StringUtils.isEmpty(param.getString("inOut_type")) || StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("vehicle_code"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return RestBusinessTemplate.execute(() -> cacheLineHandService.inOutExceptionInstConfirm(param)); + } + + @PostMapping("/setfullBox") + @Log("设置满框") + @ApiOperation("设置满框") + public CommonResult setfullBox(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [设置满框] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.setfullBox(param)); + } + + @PostMapping("/setEmptyBox") + @Log("设置空框") + @ApiOperation("设置空框") + public CommonResult setEmptyBox(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [设置空框] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.setEmptyBox(param)); + } + + @PostMapping("/deleteBox") + @Log("删除箱子") + @ApiOperation("删除箱子") + public CommonResult deleteBox(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [设置空框] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.deleteBox(param)); + } + + @PostMapping("/agvInBoxExceptionQuery") + @Log("AGV入箱异常-查询") + @ApiOperation("AGV入箱异常-查询") + public CommonResult agvInBoxExceptionQuery(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [AGV入箱异常-查询] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.agvInBoxExceptionQuery(param)); + } + + @PostMapping("/agvInBoxExceptionConfirm") + @Log("AGV入箱异常-确认") + @ApiOperation("AGV入箱异常-确认") + public CommonResult agvInBoxExceptionConfirm(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [AGV入箱异常-确认] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.agvInBoxExceptionConfirm(param)); + } + + @PostMapping("/agvOutBoxExceptionQuery") + @Log("AGV出箱异常-查询") + @ApiOperation("AGV出箱异常-查询") + public CommonResult agvOutBoxExceptionQuery(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [AGV出箱异常-查询] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.agvOutBoxExceptionQuery(param)); + } + + @PostMapping("/agvOutBoxExceptionConfirm") + @Log("AGV出箱异常-确认") + @ApiOperation("AGV出箱异常-确认") + public CommonResult agvOutBoxExceptionConfirm(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [AGV出箱异常-确认] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.agvOutBoxExceptionConfirm(param)); + } + + @PostMapping("/setBlankPos") + @Log("设置缓存线货位为空位置") + @ApiOperation("设置缓存线货位为空位置") + public CommonResult setBlankPos(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [设置缓存线货位为空位置] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.setBlankPos(param)); + } + + @PostMapping("/cacheLineExcepOpt") + @Log("缓存线异常处理") + @ApiOperation("缓存线异常处理") + public CommonResult cacheLineExcepOpt(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线异常处理] 接口被请求, 请求参数-{}", param); + //参数校验 + if(StringUtils.isEmpty(param.getString("wcsdevice_code")) || StringUtils.isEmpty(param.getString("opt_type"))) { + throw new BizCoreException(ResultCode.MISS_PARAMETER); + } + return RestBusinessTemplate.execute(() -> cacheLineHandService.cacheLineExcepOpt(param)); + } + + @PostMapping("/pourMaterial") + @Log("倒料操作") + @ApiOperation("倒料操作") + public CommonResult pourMaterial(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [倒料操作] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.pourMaterial(param)); + } + + @PostMapping("/getCacheLine") + @Log("缓存线下拉框") + @ApiOperation("缓存线下拉框") + public CommonResult getCacheLine(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线盘点-缓存线下拉框] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.getCacheLine(param)); + } + + @PostMapping("/getProductArea") + @Log("获取生产区域下拉框") + @ApiOperation("获取生产区域下拉框") + public CommonResult getProductArea() { + return RestBusinessTemplate.execute(cacheLineHandService::getProductArea); + } + + @PostMapping("/getCacheLineMaterialInfo") + @Log("缓存线物料信息盘点") + @ApiOperation("缓存线物料信息盘点") + public CommonResult getCacheLineMaterialInfo(@RequestBody JSONObject param) { + log.info("海亮缓存线手持服务 [缓存线盘点-缓存线物料信息盘点] 接口被请求, 请求参数-{}", param); + return RestBusinessTemplate.execute(() -> cacheLineHandService.getCacheLineMaterialInfo(param)); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java index 148be5c4..d4c9dd40 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/CacheLineHandService.java @@ -18,8 +18,9 @@ public interface CacheLineHandService{ /** * 下拉框列表查询 * - * @Param: form 查询条件 - * @return: 下拉框列表 + * @return 下拉框列表 + * @Param form 查询条件 + * @Param type 下拉框类型 * @author gbx * @date 2023/3/22 */ @@ -35,6 +36,16 @@ public interface CacheLineHandService{ */ List materialQuery(String param); + /** + * 物料模糊查询 + * + * @Param: param 查询条件 + * @return: 物料列表 + * @author gbx + * @date 2023/3/25 + */ + JSONArray queryMaterial(String param); + /** * 规格下拉框查询 * @@ -75,6 +86,53 @@ public interface CacheLineHandService{ */ JSONArray instStatusQuery(String param); + /** + * 任务分页查询 + * + * @return 分页列表 + * @Param form 任务参数 + * @author gbx + * @date 2023/3/23 + */ + Map instPageQuery(Map param, Pageable page); + + /** + * 缓存线位置关系同步 + * + * @author gbx + * @date 2023/3/24 + */ + void cacheLineMaterSync(String cachelineCode); + + /** + * 缓存线料箱条码查询料箱信息 + * + * @param param 请求参数 + * @return 返回结果 + * @author gbx + * @date 2023/3/24 + */ + JSONArray cacheLineMaterInfoQuery(JSONObject param); + + /** + * 缓存线出入箱异常指令查询 + * + * @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 + * @return 返回结果集 + * @author gbx + * @date 2023/3/24 + */ + JSONArray inOutExceptionInstQuery(JSONObject param); + + /** + * 缓存线出入箱异常指令确认 + * + * @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 + * @author gbx + * @date 2023/3/24 + */ + String inOutExceptionInstConfirm(JSONObject param); + /** * 任务操作 * @@ -83,192 +141,148 @@ public interface CacheLineHandService{ * @author gbx * @date 2023/3/23 */ - void instOperation(JSONObject param); + String instOperation(JSONObject param); /** - * 任务分页查询 - * - * @Param: form 任务参数 - * @return: 分页列表 - * @author gbx - * @date 2023/3/23 - */ - Map instPageQuery(Map param, Pageable page); - - /** - * 缓存线盘点 + * 缓存线出箱异常-确认 * + * @param param 查询参数 + * @return String 处理结果 * @author gbx * @date 2023/3/24 */ - Object cacheLineMaterCheck(); - - /** - * 缓存线料箱条码查询料箱信息 - * - * @param param - * @return - * @author gbx - * @date 2023/3/24 - */ - Object cachelineMaterInfoQuery(JSONObject param); + String cacheLineOutBoxExceptionConfirm(JSONObject param); /** * 空箱初始化--出入空箱 * * @param param 查询参数 inOut_type:1 入空箱 2 出空箱 vehicle_code:载具编码 - * @return * @author gbx * @date 2023/3/24 */ - Object inOutEmptyBox(JSONObject param); + String inOutEmptyBox(JSONObject param); /** - * 缓存线出入箱异常指令查询 + * 设置满框 * - * @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object inOutExceptionInstQuery(JSONObject param); - - /** - * 缓存线出入箱异常指令确认 - * - * @param param 查询参数 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 - * @return - * @author gbx - * @date 2023/3/24 - */ - Object inOutExceptionInstConfirm(JSONObject param); - - /** - * 设置满匡 - * - * @param param - * @return - * @author gbx - * @date 2023/3/24 - */ - Object setfullBox(JSONObject param); + void setfullBox(JSONObject param); /** * 设置空框 * - * @param param - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object setEmptyBox(JSONObject param); + void setEmptyBox(JSONObject param); /** * AGV入箱异常-查询 * - * @param param - * @return + * @param param 查询参数 + * @return 返回结果集 * @author gbx * @date 2023/3/24 */ - Object agvInBoxExceptionQuery(JSONObject param); + JSONArray agvInBoxExceptionQuery(JSONObject param); /** * AGV入箱异常-确认 * - * @param param - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object agvInBoxExceptionConfirm(JSONObject param); + void agvInBoxExceptionConfirm(JSONObject param); /** * AGV出箱异常-查询 * - * @param param - * @return + * @param param 查询参数 + * @return 返回结果集 * @author gbx * @date 2023/3/24 */ - Object agvOutBoxExceptionQuery(JSONObject param); + JSONArray agvOutBoxExceptionQuery(JSONObject param); /** * AGV出箱异常-确认 * - * @param param - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object agvOutBoxExceptionConfirm(JSONObject param); - - /** - * 缓存线出箱异常-查询 - * - * @param param - * @return - * @author gbx - * @date 2023/3/24 - */ - Object cacheLineOutBoxExceptionQuery(String account_uuid, JSONObject param); - - /** - * 缓存线出箱异常-确认 - * - * @param param - * @return - * @author gbx - * @date 2023/3/24 - */ - Object cacheLineOutBoxExceptionConfirm( - String account_uuid, JSONObject param); + void agvOutBoxExceptionConfirm(JSONObject param); /** * 设置缓存线货位为空位置 * - * @param param - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object setBlankPos(JSONObject param); + void setBlankPos(JSONObject param); /** - * @param param - * @return + * 缓存线出入箱异常-查询 + * + * @param param 查询参数 + * @return 返回结果集 * @author gbx * @date 2023/3/24 */ - Object cacheLineOutBoxExceptionQuery( - JSONObject param); - - /** - * @param param - * @return - * @author gbx - * @date 2023/3/24 - */ - Object cacheLineOutBoxExceptionConfirm( - JSONObject param); + JSONArray cacheLineOutBoxExceptionQuery(JSONObject param); /** * 缓存线异常处理 * - * @param param - * @return + * @param param 查询参数 + * @return String 处理结果 * @author gbx * @date 2023/3/24 */ - Object cacheLineExcepOpt(JSONObject param); + String cacheLineExcepOpt(JSONObject param); /** * 倒料操作 * - * @param param - * @return + * @param param 查询参数 * @author gbx * @date 2023/3/24 */ - Object pourMaterial(JSONObject param); + void pourMaterial(JSONObject param); + + /** + * 缓存线下拉框 + * + * @param param + * @return + */ + JSONArray getCacheLine(JSONObject param); + + /** + * 缓存线物料信息盘点 + * + * @param param + * @return + */ + JSONArray getCacheLineMaterialInfo(JSONObject param); + + /** + * 获取生产区域下拉框 + * + * @return + */ + JSONArray getProductArea(); + + /** + * 删除箱子 + * + * @param param + */ + void deleteBox(JSONObject param); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java index b7d9b8a6..2a3e03ba 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/service/impl/CacheLineHandServiceImpl.java @@ -1,32 +1,41 @@ package org.nl.wms.pda.service.impl; -import cn.hutool.core.collection.CollectionUtil; 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.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; -import org.nl.common.utils.LocalCache; -import org.nl.common.utils.SecurityUtils; +import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.*; import org.nl.config.thread.ThreadPoolExecutorUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.exception.BizCoreException; import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.wms.pda.dto.CachelineVehileMaterialDto; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.pda.dto.MaterialDto; import org.nl.wms.pda.service.CacheLineHandService; -import org.nl.wms.sch.service.impl.TaskServiceImpl; import org.nl.wms.sch.tasks.SpeMachineryTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.xml.transform.Result; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -42,9 +51,10 @@ import java.util.stream.Collectors; @Slf4j public class CacheLineHandServiceImpl implements CacheLineHandService{ private final RedisUtils redisUtils; - private final TaskServiceImpl taskServiceImp; @Autowired private LocalCache cache; + @Autowired + private ClassstandardService classstandardService; @Override public JSONArray dropdownListQuery(String param, String type) { @@ -52,12 +62,20 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ return WQL.getWO("PDA_QUERY").addParam("flag", type).addParam("condition", param).process().getResultJSONArray(0); } + @Override + public JSONArray queryMaterial(String param) { + return WQL.getWO("PDA_QUERY").addParam("flag", "6").addParam("condition", param).process().getResultJSONArray(0); + } + @Override public List materialQuery(String param) { // StopWatch stopWatch = new StopWatch(); // stopWatch.start(); // stopWatch.stop(); // System.out.println("缓存本地花费时间 totalTime = " + stopWatch.getTotalTimeMillis()); + if(StringUtils.isEmpty(param)) { + return WQL.getWO("PDA_QUERY").addParam("flag", "6").addParam("condition", param).process().getResultJSONArray(0).toJavaList(MaterialDto.class); + } List materialList; ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); //12W种物料信息,查本地缓存 @@ -68,7 +86,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ //2.查reids materialList = redisUtils.get("materialList", MaterialDto.class); if(null != materialList) { - //设置本地缓存 + // //设置本地缓存 cache.setLocalCache("materialList", materialList); return getMaterialDto(materialList, param); } @@ -77,24 +95,16 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ materialList = materialJsonArray.toJavaList(MaterialDto.class); //缓存到redis List finalMaterialList1 = materialList; - CompletableFuture f1 = CompletableFuture.runAsync(() -> { - try { - redisUtils.set("materialList", finalMaterialList1, 3600, TimeUnit.SECONDS); - } - catch(Exception e) { - log.error("物料信息缓存redis失败: {}", e.getMessage(), e); - } - }, pool); + CompletableFuture f1 = CompletableFuture.runAsync(() -> redisUtils.set("materialList", finalMaterialList1), pool); //缓存到本地 List finalMaterialList = materialList; - CompletableFuture f2 = CompletableFuture.runAsync(() -> { - try { - cache.setLocalCache("materialList", finalMaterialList); - } - catch(Exception e) { - log.error("物料信息缓存本地失败: {}", e.getMessage(), e); - } - }, pool); + CompletableFuture f2 = CompletableFuture.runAsync(() -> cache.setLocalCache("materialList", finalMaterialList), pool); + f1.exceptionally((e) -> { + throw new BadRequestException("物料信息缓存redis失败"); + }); + f2.exceptionally((e) -> { + throw new BadRequestException("物料信息缓存本地失败"); + }); return materialList; } @@ -133,448 +143,593 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ @Override public Map instPageQuery(Map param, Pageable page) { - return taskServiceImp.queryAll(param, page); + HashMap map = new HashMap<>(); + map.put("flag", "10"); + JSONObject whereJson = JSONObject.parseObject(JSON.toJSONString(param)); + //任务状态 + String task_status = whereJson.getString("status"); + if(StrUtil.isNotEmpty(task_status)) { + task_status = task_status.replace("[\"", "").replace("\"]", "").replace("\"", ""); + } + String moreTaskStatus = whereJson.getString("more_task_status"); + if(ObjectUtil.isNotEmpty(moreTaskStatus)) { + task_status = moreTaskStatus; + } + map.put("status", task_status); + //处理状态为未完成 + if(StrUtil.isNotEmpty(task_status) && task_status.contains("-1")) { + map.put("unFinish", "-1"); + map.put("status", task_status.replace("-1", "")); + } + //任务编号 + if(StrUtil.isNotEmpty(whereJson.getString("task_code"))) { + map.put("task_code", "%" + whereJson.getString("task_code") + "%"); + } + //起点 + if(StrUtil.isNotEmpty(whereJson.getString("start_point"))) { + map.put("start_point", "%" + whereJson.getString("start_point") + "%"); + } + //终点 + if(StrUtil.isNotEmpty(whereJson.getString("end_point"))) { + map.put("end_point", "%" + whereJson.getString("end_point") + "%"); + } + //载具编码 + if(StrUtil.isNotEmpty(whereJson.getString("vehicle_code"))) { + map.put("vehicle_code", "%" + whereJson.getString("vehicle_code") + "%"); + } + //开始时间 + if(StrUtil.isNotEmpty(whereJson.getString("start_date"))) { + map.put("start_date", whereJson.getString("start_date")); + } + //结束时间 + if(StrUtil.isNotEmpty(whereJson.getString("end_date"))) { + map.put("end_date", whereJson.getString("end_date")); + } + return WQL.getWO("PDA_QUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "task.update_time desc"); } @Override - public void instOperation(JSONObject param) { + public String instOperation(JSONObject param) { String optType = param.getString("opt_type"); SpeMachineryTask SpeMachineryTask = new SpeMachineryTask(); WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); JSONObject taskObject = taskTab.query("task_id =" + param.getString("instruct_uuid")).uniqueResult(0); //01-取消、02-完成、03-任务下发,根据操作类型执行相关操作 - if("01".equals(optType) || "02".equals(optType)) { - updateTaskStatus(taskObject, optType); + if("1".equals(optType) || "2".equals(optType)) { + return updateTaskStatus(taskObject, optType); } //任务下发 - if("03".equals(optType)) { - SpeMachineryTask.createTask(taskObject); + else if("3".equals(optType)) { + return SpeMachineryTask.createTask(taskObject); + } + else{ + return null; } } /** * 任务取消和完成操作,更新任务状态 */ - public void updateTaskStatus(JSONObject taskObj, String status) { + public String updateTaskStatus(JSONObject taskObj, String status) { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - HashMap map = new HashMap(4); + HashMap map = new HashMap<>(4); map.put("task_status", status); map.put("update_optid", currentUserId); map.put("update_optname", nickName); map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("sch_base_task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); + int result = (WQLObject.getWQLObject("sch_base_task").update(map, "task_id = '" + taskObj.getString("task_id") + "'").getSucess()); + return Integer.toString(result); } @Override - public Object cacheLineMaterCheck() { - WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); - JSONArray positionArr = positionTab.query("is_delete = '0'").getResultJSONArray(0); - // 缓存线位置表 - List positionList = positionArr.toJavaList(CachelineVehileMaterialDto.class); - WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - JSONArray ivtArr = ivtTab.query("is_delete = '0'").getResultJSONArray(0); - // 缓存线载具物料表 - List ivtList = ivtArr.toJavaList(CachelineVehileMaterialDto.class); - //取缓存线位置表多出来的物料 - List resultList = positionList.stream().filter(p -> !ivtList.stream().map(e -> e.getCacheLine_code() + "&" + e.getVehicle_code()).collect(Collectors.toList()).contains(p.getCacheLine_code() + "&" + p.getVehicle_code())).collect(Collectors.toList()); - //取载具物料表多出来的物料 - List resultLists = ivtList.stream().filter(i -> !positionList.stream().map(e -> e.getCacheLine_code() + "&" + e.getVehicle_code()).collect(Collectors.toList()).contains(i.getCacheLine_code() + "&" + i.getVehicle_code())).collect(Collectors.toList()); - if(CollectionUtil.isNotEmpty(resultList)) { - //TODO 缓存线位置表多出来的物料处理 + @Async + public void cacheLineMaterSync( + String cachelineCode) { + if(StringUtils.isEmpty(cachelineCode)) { + return; } - if(CollectionUtil.isNotEmpty(resultLists)) { - //TODO 载具物料表多出来的物料处理 - } - return null; + RedissonUtils.lock(() -> { + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + JSONArray positionArr = positionTab.query("cacheline_code = '" + cachelineCode + "'").getResultJSONArray(0); + if(positionArr.size() == 0) { + log.warn("CacheLineHandServiceImpl#cacheLineMaterSync"); + return; + } + // 缓存线位置表 + Set cacheLineVehiles = positionArr.stream().map(a -> ((JSONObject) a).getString("vehicle_code")).collect(Collectors.toSet()); + JSONArray ivtArr = ivtTab.query("cacheline_code = '" + cachelineCode + "'").getResultJSONArray(0); + Set relationVehiles = ivtArr.stream().map(a -> ((JSONObject) a).getString("vehicle_code")).collect(Collectors.toSet()); + Collection cacheLineVehilesSub = CollectionUtils.subtract(cacheLineVehiles, relationVehiles); + Collection relationVehilesSub = CollectionUtils.subtract(relationVehiles, cacheLineVehiles); + if(!CollectionUtils.isEmpty(relationVehilesSub)) { + String sql = relationVehilesSub.stream().collect(Collectors.joining("','")); + ivtTab.delete("cacheline_code = '" + cachelineCode + "' and vehicle_code in ('" + sql + "')"); + } + if(!CollectionUtils.isEmpty(cacheLineVehilesSub)) { + for(String vehileCode : cacheLineVehilesSub) { + ivtTab.insert(MapOf.of("vehmaterial_id", IdUtil.getStringId(), "vehicle_code", vehileCode, "vehicle_status", StatusEnum.CACHE_VEL_ERR.getCode(), "cacheline_code", cachelineCode, "err_type", StatusEnum.STATUS_TRUE.getCode())); + } + } + }, cachelineCode, 3); } /** - * 0空位 status = 1: 绿色空箱 || status = 2:黄色满箱 || status = 3:红色异常 || status = 4 :不显示 + * status = 0: 空位 status = 1: 绿色空箱 || status = 2:黄色满箱 || status = 3:红色异常 || status = 4 :不展示 */ @Override - public Object cachelineMaterInfoQuery(JSONObject param) { - /* - * JSONArray arr = WQL.getWO("QWCS_CACHE_004").addParam("flag", "3") - * .addParam("extdevice_code", - * param.opt("wcsdevice_code")).process().getResultJSONArray(0); for (int i = 0; - * i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); // 默认非异常 - * json.put("is_err", "0"); // 去掉小数 json.put("weight", - * uMath.multiply(obj.getString("weight"), "1", 0)); json.put("status", - * obj.getString("status").substring(1, 2)); - * - * if (!"00".equals(obj.getString("err_type"))) { json.put("is_err", "1"); } } - */ - // for(int i = 0; i < arr.size(); i++) { - // JSONObject json = arr.getJSONObject(i); - // json.put("seat_order_num", json.opt("order_no")); - // // 0空位 status = 1: 绿色空箱 || status = 2:黄色满箱 || status = 3:红色异常 || status = 4 :不显示 - // json.put("weight", "0"); - // json.put("quantity", "0"); - // if("0".equals(obj.getString("is_show"))) { - // json.put("vehicle_status", "04"); - // } - // else{// 显示 - // if("1".equals(obj.getString("is_blank"))) { - // json.put("vehicle_status", "00"); - // } - // else{// 载具不为空 - // String vehicle_code = obj.getString("vehicle_code"); - // JSONObject ivtObj = ivtTab.query("vehicle_code = '" + vehicle_code + "' and extdevice_code like '%" + param.opt("wcsdevice_code") + "%'").uniqueResult(0); - // if(ivtObj == null) { - // // 异常 - // json.put("vehicle_status", "03"); - // } - // else{ - // json.put("vehicle_status", ivtObj.optString("vehicle_status")); - // json.put("weight", ivtObj.optString("weight")); - // json.put("quantity", ivtObj.optString("quantity")); - // json.putAll(ivtObj); - // } - // } - // } - // json.put("is_err", "0"); - // json.put("wcsdevice_code", obj.getString("extdevice_code")); - // // 去掉小数 - // json.put("weight", uMath.multiply(obj.getString("weight"), "1", 0)); - // json.put("status", obj.getString("vehicle_status").substring(1, 2)); - // if(!"00".equals(obj.getString("err_type"))) { - // json.put("is_err", "1"); - // } - // } - // srb.addJSONArray("result", arr); - // srb.setDesc("查询成功!"); - return null; + public JSONArray cacheLineMaterInfoQuery(JSONObject param) { + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + //获取缓存线位置信息 + JSONArray arr = positionTab.query("cacheLine_code like '%" + param.getString("cacheLine_code") + "%'", "layer_num desc,order_no").getResultJSONArray(0); + // 获取缓存线物料库存信息 + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + for(int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + //料箱展示顺序号 + json.put("seat_order_num", json.getString("order_no")); + //初始化料箱重量和数量 + json.put("weight", "0"); + json.put("quantity", "0"); + //不展示 + if("0".equals(json.getString("is_show"))) { + json.put("vehicle_status", "4"); + } + //展示 + else{ + //是否空位 + if("1".equals(json.getString("is_empty"))) { + json.put("vehicle_status", "0"); + } + else{ + // 载具不是空位 + String vehicle_code = json.getString("vehicle_code"); + //从缓存线物料库存中 根据缓存线编码和载具编码获取绑定信息 + JSONObject ivtObj = ivtTab.query("vehicle_code = '" + vehicle_code + "' and cacheLine_code like '%" + param.getString("wcsdevice_code") + "%'").uniqueResult(0); + if(ivtObj == null) { + //标记为红色异常 + json.put("vehicle_status", "3"); + } + else{ + json.put("vehicle_status", ivtObj.getString("vehicle_status")); + json.put("weight", ivtObj.getString("weight")); + json.put("quantity", ivtObj.getString("quantity")); + json.putAll(ivtObj); + } + } + } + json.put("cacheLine_code", json.getString("cacheLine_code")); + json.put("weight", NumberUtil.mul(json.getString("weight"), "1")); + json.put("status", json.getString("vehicle_status").substring(1, 2)); + } + return arr; + } + + /** + * 设置满箱物料 缓存线编码 wcsdevice_code 料箱码 vehicle_code 工序标识 workprocedure_uuid 物料标识 material_uuid + * 数量 quantity 重量 weight + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void setfullBox(JSONObject param) { + //物料ID + String semimanufactures_uuid = param.getString("material_uuid"); + // 缓存线位置编码 + String position_code = param.getString("position_code"); + // 料箱码 + String vehicle_code = param.getString("vehicle_code"); + //工序 + String workprocedure_code = param.getString("workprocedure_code"); + // 缓存线 + String cacheLine_code = param.getString("wcsdevice_code"); + String weight = param.getString("weight"); + String quantity = param.getString("quantity"); + if(StringUtils.isEmpty(quantity) || param.getInteger("quantity") <= 0) { + throw new BadRequestException("数量必须大于0!"); + } + //缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + // 缓存线位置 + JSONObject vehiobj = positionTab.query("position_code = '" + position_code + "'").uniqueResult(0); + if(vehiobj == null) { + throw new BadRequestException("位置不存在,设置有误!"); + } + //工序表 + WQLObject wpTab = WQLObject.getWQLObject("pdm_bi_workprocedure"); + //物料表 + WQLObject meTab = WQLObject.getWQLObject("md_me_materialbase"); + // 查询工序信息 + JSONObject wpObj = wpTab.query("workprocedure_code = '" + workprocedure_code + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(wpObj)) { + throw new BadRequestException("工序查询错误,请检查工序"); + } + JSONObject meObj = meTab.query("material_id = '" + semimanufactures_uuid + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(meObj)) { + throw new BadRequestException("物料查询错误,请检查物料"); + } + vehiobj.put("vehicle_code", vehicle_code); + //2.缓存线位置通过扫码绑定料箱条码 + positionTab.update(vehiobj); + // 缓存线载具物料表 + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + //3.先删除料箱的所有关联信息,包括物料,工序,生产区域 + ivtTab.delete("vehicle_code = '" + vehicle_code + "'"); + // 物料信息 + HashMap json = new HashMap<>(); + json.put("vehmaterial_id", IdUtil.getStringId()); + json.put("vehicle_code", vehicle_code); + json.put("cacheLine_code", cacheLine_code); + json.put("material_uuid", meObj.getString("material_id")); + json.put("material_code", meObj.getString("material_code")); + json.put("material_spec", meObj.getString("material_spec")); + json.put("material_name", meObj.getString("material_name")); + json.put("weight", weight); + json.put("quantity", quantity); + json.put("workprocedure_code", wpObj.getString("workprocedure_code")); + json.put("workprocedure_name", wpObj.getString("workprocedure_name")); + //有箱有料 + json.put("vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode()); + json.put("create_time", DateUtil.now()); + //4.重新新建该缓存线位置上的料箱为满箱及所属工序,生产区域等信息 + ivtTab.insert(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void setEmptyBox( + JSONObject param) { + // 缓存线位置编码 + String position_code = param.getString("position_code"); + // 载具条码 + String vehicle_code = param.getString("vehicle_code"); + // 缓存线载具物料表 + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + // 缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + JSONObject vehiobj = positionTab.query("position_code = '" + position_code + "'").uniqueResult(0); + if(vehiobj == null) { + throw new BadRequestException("位置不存在,设置有误!"); + } + //1.缓存线位置通过扫码绑定料箱条码 + vehiobj.put("vehicle_code", vehicle_code); + positionTab.update(vehiobj); + //2.清空 + JSONObject json = ivtTab.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + json.put("vehicle_status", StatusEnum.CACHE_VEL_EMT.getCode()); + json.put("material_uuid", ""); + json.put("material_code", ""); + json.put("material_spec", ""); + json.put("material_name", ""); + json.put("weight", "0"); + json.put("quantity", "0"); + json.put("workprocedure_code", ""); + json.put("workprocedure_name", ""); + json.put("update_time", DateUtil.now()); + ivtTab.update(json); + } + + @Override + public void setBlankPos(JSONObject param) { + // 层数 + String layer_num = param.getString("layer_num"); + // 顺序号 + String seat_order_num = param.getString("seat_order_num"); + // 缓存线编码 + String wcsdevice_code = param.getString("wcsdevice_code"); + // 缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + JSONObject json = positionTab.query("order_no = " + seat_order_num + " and layer_num = " + layer_num + " and cacheLine_code like '%" + wcsdevice_code + "%'").uniqueResult(0); + // 状态设置为空位 + json.put("is_empty", "1"); + json.put("vehicle_code", ""); + positionTab.update(json); } /** * 出入空箱,出入类型 inOut_type 1 入空箱 2 出空箱 缓存线编码 wcsdevice_code 料箱码 vehicle_code */ @Override - public Object inOutEmptyBox(JSONObject param) { - // - // String inOut_type = param.optString("inOut_type"); - // String extdevice_code = param.optString("wcsdevice_code"); - // String vehicle_code = param.optString("vehicle_code"); - // // 缓存线位置表【IF_CacheLine_Position】 - // WQLObject positionTab = WQLObject.getWQLObject("IF_CacheLine_Position"); - // WQLObject vehMaterTab = WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); - // // 入空箱 - // if("1".equals(inOut_type)) { - // // 判断是否可以放入空箱子 - // JSONObject ivtObj = positionTab.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); - // // 判断箱子是否在缓存线内 - // if(ivtObj != null) { - // throw new WDKException("箱子【" + vehicle_code + "】已在库内,无法入空箱!"); - // } - // // 判断是否可以放入空箱子 - // JSONObject json = positionTab.query("extdevice_code = '" + extdevice_code + "' and is_blank= '1'").uniqueResult(0); - // if(json == null) { - // throw new WDKException("无法找到缓存线【" + extdevice_code + "】的空位,无法入空箱!"); - // } - // // 入了空箱子 - // JSONObject afterIvt = new JSONObject(); - // afterIvt.put("vehmaterial_uuid", WDK.getUUID()); - // afterIvt.put("vehicle_uuid", vehicle_code); - // afterIvt.put("vehicle_code", vehicle_code); - // afterIvt.put("extdevice_code", extdevice_code); - // afterIvt.put("vehicle_status", "01"); - // afterIvt.put("update_time", WDK.getDateTime()); - // afterIvt.put("create_time", WDK.getDateTime()); - // vehMaterTab.insert(afterIvt); - // } - // // 出空箱 - // if("2".equals(inOut_type)) { - // // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 - // JSONObject json = vehMaterTab.query("extdevice_code = '" + extdevice_code + "' and vehicle_status= '01' and vehicle_code = '" + vehicle_code + "'").uniqueResult(0); - // if(json == null) { - // throw new WDKException("无法找到缓存线【" + extdevice_code + "】的空箱【" + vehicle_code + "】,出空箱失败"); - // } - // // 删除掉出库的箱子 - // vehMaterTab.delete("extdevice_code = '" + extdevice_code + "' and vehicle_code = '" + vehicle_code + "'"); - // } - return null; - } - - @Override - public Object inOutExceptionInstQuery(JSONObject param) { - // - // // 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 - // // 出入类型 inOut_type - // // 缓存线编码 wcsdevice_code - // // 料箱码 vehicle_code - // // {"inOut_type":"1","wcsdevice_code":"HCX01","vehicle_code":"10001"} - // String vehicle_code = param.optString("vehicle_code"); - // String wcsdevice_code = param.optString("wcsdevice_code"); - // String inOut_type = param.optString("inOut_type"); - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // JSONArray result = new JSONArray(); - // // 入箱扫码异常 - // if("1".equals(inOut_type)) { - // String where = "nextwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'"; - // if(uString.isNotBlank(vehicle_code)) { - // where = "nextwcsdevice_code = '" + wcsdevice_code + "' and invehicle_code = '" + vehicle_code + "' and instruct_status <> '06'"; - // } - // JSONArray arr = instructTab.query(where).getResultJSONArray(0); - // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); - // JSONObject json = new JSONObject(); - // json.put("instruct_uuid", row.optString("instruct_uuid")); - // json.put("instructorder_no", row.optString("instructorder_no")); - // json.put("wcsdevice_code", row.optString("nextwcsdevice_code")); - // json.put("vehicle_code", row.optString("invehicle_code")); - // json.put("startpoint_code", row.optString("startpoint_code")); - // json.put("nextpoint_code", row.optString("nextpoint_code")); - // json.put("nextpoint_code2", row.optString("nextpoint_code2")); - // result.add(json); - // } - // } - // // 出箱扫码异常 - // if("2".equals(inOut_type)) { - // String where = "startwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'"; - // if(uString.isNotBlank(vehicle_code)) { - // where = "startwcsdevice_code = '" + wcsdevice_code + "' and outvehicle_code = '" + vehicle_code + "' and instruct_status <> '06'"; - // } - // JSONArray arr = instructTab.query(where).getResultJSONArray(0); - // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); - // JSONObject json = new JSONObject(); - // json.put("instruct_uuid", row.optString("instruct_uuid")); - // json.put("instructorder_no", row.optString("instructorder_no")); - // json.put("vehicle_code", row.optString("outvehicle_code")); - // json.put("wcsdevice_code", row.optString("startwcsdevice_code")); - // json.put("startpoint_code", row.optString("startpoint_code")); - // json.put("nextpoint_code", row.optString("nextpoint_code")); - // json.put("nextpoint_code2", row.optString("nextpoint_code2")); - // result.add(json); - // } - // } - // srb.addJSONArray("result", result); - return null; + public String inOutEmptyBox(JSONObject param) { + String inOut_type = param.getString("inOut_type"); + String cacheLine_code = param.getString("wcsdevice_code"); + String vehicle_code = param.getString("vehicle_code"); + String position_code = param.getString("position_code"); + int result = 1; + // 缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + //缓存线载具物料表 + WQLObject vehMaterTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + // 入空箱 + if("1".equals(inOut_type)) { + // 1.判断是否可以放入空箱子 + JSONObject ivtObj = positionTab.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + if(ivtObj != null) { + throw new BadRequestException("箱子【" + vehicle_code + "】已在库内,无法入空箱!"); + } + // 3.判断是否可以放入空箱子 + JSONObject json = positionTab.query("cacheLine_code = '" + cacheLine_code + "position_code = '" + position_code + "' and is_blank= '1'").uniqueResult(0); + if(json == null) { + throw new BadRequestException("无法找到缓存线【" + position_code + "】的空位,无法入空箱!"); + } + // 3.入空箱子 + JSONObject afterIvt = new JSONObject(); + afterIvt.put("vehmaterial_id", IdUtil.getStringId()); + afterIvt.put("vehicle_code", vehicle_code); + afterIvt.put("cacheLine_code", cacheLine_code); + afterIvt.put("vehicle_status", "1"); + afterIvt.put("update_time", DateUtil.now()); + afterIvt.put("create_time", DateUtil.now()); + result = vehMaterTab.insert(afterIvt).getSucess(); + } + // 出空箱 + if("2".equals(inOut_type)) { + // 缓存线载具物料表 + JSONObject json = vehMaterTab.query("cacheLine_code = '" + cacheLine_code + "'and vehicle_code = '" + vehicle_code + "' and vehicle_status= '1'").uniqueResult(0); + if(json == null) { + throw new BadRequestException("无法找到缓存线【" + cacheLine_code + "】的空箱【" + vehicle_code + "】,出空箱失败"); + } + // 删除掉出库的箱子及关联物料 + result = vehMaterTab.delete("cacheLine_code = '" + cacheLine_code + "' and vehicle_code = '" + vehicle_code + "'").getSucess(); + } + return Integer.toString(result); } /** - * "inOut_type": "1",1 扫码异常-入箱扫码,2 扫码异常-出箱扫码 "wcsdevice_code": "HCX01", - * "vehicle_code": "10001", "instruct_uuid": "uuid_0101" } + * 出入类型 inOut_type 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 + * 缓存线编码 wcsdevice_code + * 缓存线位置编码 position_code + * 料箱码 vehicle_code */ @Override - public Object inOutExceptionInstConfirm(JSONObject param) { - // - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // // 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 - // String inOut_type = param.optString("inOut_type"); - // // 缓存线编码 - // String wcsdevice_code = param.optString("wcsdevice_code"); - // // - // String vehicle_code = param.optString("vehicle_code"); - // // 指令标识 - // // String instruct_uuid = param.optString("instruct_uuid"); - // // JSONObject instObj = instructTab.query("instruct_uuid = '" + instruct_uuid + - // // "'").uniqueResult(0); - // // 封装给wcs的数据 - // Object[] data = new Object[3]; - // data[0] = inOut_type; - // data[1] = wcsdevice_code; - // data[2] = vehicle_code; - // uWcsSchedule.notifyWcs(99, 3001, data); - return null; + public JSONArray inOutExceptionInstQuery(JSONObject param) { + //料箱号 + String vehicle_code = param.getString("vehicle_code"); + //缓存线编号 + String wcsdevice_code = param.getString("wcsdevice_code"); + //出入箱类型 + String inOut_type = param.getString("inOut_type"); + //任务表信息 + WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); + JSONArray result = new JSONArray(); + // 入箱扫码异常 + if("1".equals(inOut_type)) { + String where = "point_code2 = '" + wcsdevice_code + "' and task_status <> '7'"; + if(StringUtils.isNotBlank(vehicle_code)) { + where = "point_code2 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; + } + JSONArray arr = instructTab.query(where).getResultJSONArray(0); + for(int i = 0; i < arr.size(); i++) { + JSONObject row = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("instruct_uuid", row.getString("task_id")); + json.put("instructorder_no", row.getString("task_code")); + json.put("wcsdevice_code", row.getString("point_code2")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); + result.add(json); + } + } + // 出箱扫码异常 + if("2".equals(inOut_type)) { + String where = "point_code1 = '" + wcsdevice_code + "' and task_status <> '7'"; + if(StringUtils.isNotBlank(vehicle_code)) { + where = "point_code1 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; + } + JSONArray arr = instructTab.query(where).getResultJSONArray(0); + for(int i = 0; i < arr.size(); i++) { + JSONObject row = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("instruct_uuid", row.getString("task_id")); + json.put("instructorder_no", row.getString("task_code")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("wcsdevice_code", row.getString("point_code1")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); + result.add(json); + } + } + return result; } /** - * 设置满箱物料 缓存线编码 wcsdevice_code 料箱码 vehicle_code 工序标识 workprocedure_uuid 物料标识 - * material_uuid 数量 quantity 重量 weight + * 出入类型 inOut_type 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 + * 缓存线编码 wcsdevice_code + * 缓存线位置编码 position_code + * 料箱码 vehicle_code */ @Override - public Object setfullBox(JSONObject param) { - // - // String semimanufactures_uuid = param.optString("material_uuid"); - // // 料箱码 - // String vehicle_code = param.optString("vehicle_code"); - // // 层数 - // String layer_num = param.optString("layer_num"); - // // 顺序号 - // String seat_order_num = param.optString("seat_order_num"); - // // 缓存线 - // String wcsdevice_code = param.optString("wcsdevice_code"); - // String weight = param.optString("weight"); - // String quantity = param.optString("quantity"); - // if(uString.isEmpty(quantity) || param.optInt("quantity") <= 0) { - // srb.setFailure(); - // srb.setDesc("数量必须大于0!"); - // return null; - // } - // String workprocedure_code = param.optString("workprocedure_uuid"); - // // 判断载具编码是否存在 - // // 缓存线载具条码表【IF_CacheLine_Vehicle】 - // /* - // * WQLObject wql=WQLObject.getWQLObject("IF_CacheLine_Vehicle"); JSONObject - // * vehiobj = - // * wql.query("is_delete='0' AND is_active='1' AND vehicle_code = '"+vehicle_code - // * +"'").uniqueResult(0); if (vehiobj==null) { srb.setFailure(); - // * srb.setDesc("条码【" + vehicle_code + "】不存在或已被删除,操作失败!"); return null; } - // */ - // WQLObject positionTab = WQLObject.getWQLObject("IF_CacheLine_Position"); - // JSONObject vehiobj = positionTab.query("order_no = " + seat_order_num + " and layer_num = " + layer_num + " and extdevice_code like '%" + wcsdevice_code + "%'").uniqueResult(0); - // if(vehiobj == null) { - // srb.setFailure(); - // srb.setDesc("位置不存在,设置有误!"); - // return null; - // } - // // 判断物料去的缓存线是否正确 - // // PDM_BI_WorkshopMaterialCorr - // WQLObject corrTab = WQLObject.getWQLObject("PDM_BI_WorkshopMaterialCorr"); - // WQLObject wpTab = WQLObject.getWQLObject("PDM_BI_WorkProcedure"); - // // 设置工序信息 - // JSONObject wpObj = wpTab.query("workprocedure_code = '" + workprocedure_code + "'").uniqueResult(0); - // // 物料系列 - // String materialprocess_series = corrTab.query("semimanufactures_uuid = '" + semimanufactures_uuid + "'").uniqueResult(0).optString("materialprocess_series"); - // AgvTwoInst inst = new AgvTwoInst(); - // String cachelineCode2 = inst.getCachelineCode(materialprocess_series, wpObj.optString("workprocedure_code")); - // if(!wcsdevice_code.equals(cachelineCode2)) { - // String materialprocess_seriesname = WQLObject.getWQLObject("PF_PB_SysDicInfo").query("sysdic_type = 'IF_WCS_DEVICESERIES' and sysdic_code = '" + materialprocess_series + "'").uniqueResult(0).optString("sysdic_name"); - // srb.setFailure(); - // srb.setDesc("该缓存线【" + wcsdevice_code + "】不能存放【" + materialprocess_seriesname + "】物料,操作失败!"); - // return null; - // } - // vehiobj.put("vehicle_code", vehicle_code); - // vehiobj.put("vehicle_uuid", vehicle_code); - // positionTab.update(vehiobj); - // WQLObject materTab = WQLObject.getWQLObject("PDM_BI_SemiMaterialCorr"); - // // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 - // WQLObject ivtTab = WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); - // // ivtTab.delete("extdevice_code = '" + wcsdevice_code + "' and vehicle_code = - // // '" + vehicle_code + "'"); - // ivtTab.delete("vehicle_code = '" + vehicle_code + "'"); - // // 物料信息 - // JSONObject materObj = materTab.query("semimanufactures_uuid = '" + semimanufactures_uuid + "'").uniqueResult(0); - // HashMap json = new HashMap(); - // json.put("vehmaterial_uuid", WDK.getUUID()); - // json.put("vehicle_code", vehicle_code); - // json.put("vehicle_uuid", vehicle_code); - // json.put("extdevice_code", wcsdevice_code); - // json.put("material_uuid", materObj.optString("semimanufactures_uuid")); - // json.put("material_code", materObj.optString("semimanufactures_code")); - // json.put("material_spec", materObj.optString("semimanufactures_spec")); - // json.put("material_name", materObj.optString("semimanufactures_name")); - // json.put("weight", weight); - // json.put("quantity", quantity); - // json.put("workprocedure_uuid", wpObj.optString("workprocedure_uuid")); - // json.put("workprocedure_code", wpObj.optString("workprocedure_code")); - // json.put("workprocedure_name", wpObj.optString("workprocedure_name")); - // // 有箱有料 - // json.put("vehicle_status", "02"); - // json.put("create_time", WDK.getDateTime()); - // ivtTab.insert(json); - return null; + @Transactional(rollbackFor = Exception.class) + public String inOutExceptionInstConfirm(JSONObject param) { + // 1 扫码异常-入箱扫码 2 扫码异常-出箱扫码 + String inOut_type = param.getString("inOut_type"); + // 缓存线编码 + String wcsdevice_code = param.getString("wcsdevice_code"); + //缓存线点位 + String position_code = param.getString("position_code"); + //载具编码 + String vehicle_code = param.getString("vehicle_code"); + // 封装给acs的数据 + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("inOut_type", inOut_type); + jsonObject.put("wcsdevice_code", wcsdevice_code); + jsonObject.put("vehicle_code", vehicle_code); + jsonObject.put("position_code", position_code); + jsonArray.add(jsonObject); + try { + //TOFIX 等确定api后,换成下发的url + return AcsUtil.notifyAcs("api", jsonArray).getString("status"); + } + catch(Exception e) { + throw new BadRequestException(e.getMessage()); + } } @Override - public Object setEmptyBox(JSONObject param) { - // - // // 层数 - // String layer_num = param.optString("layer_num"); - // // 顺序号 - // String seat_order_num = param.optString("seat_order_num"); - // // 载具条码 - // String vehicle_code = param.optString("vehicle_code"); - // // 缓存线编码 - // String wcsdevice_code = param.optString("wcsdevice_code"); - // // 判断载具编码是否存在 - // // 缓存线载具条码表【IF_CacheLine_Vehicle】 - // /* - // * WQLObject wql=WQLObject.getWQLObject("IF_CacheLine_Vehicle"); JSONObject - // * vehiobj = - // * wql.query("is_delete='0' AND is_active='1' AND vehicle_code = '"+vehicle_code - // * +"'").uniqueResult(0); if (vehiobj==null) { srb.setFailure(); - // * srb.setDesc("条码【" + vehicle_code + "】不存在或已被删除,操作失败!"); return null; } - // */ - // // 缓存线位置表【IF_CacheLine_Position】 - // WQLObject positionTab = WQLObject.getWQLObject("IF_CacheLine_Position"); - // JSONObject vehiobj = positionTab.query("order_no = " + seat_order_num + " and layer_num = " + layer_num + " and extdevice_code like '%" + wcsdevice_code + "%'").uniqueResult(0); - // if(vehiobj == null) { - // srb.setFailure(); - // srb.setDesc("位置不存在,设置有误!"); - // return null; - // } - // vehiobj.put("vehicle_code", vehicle_code); - // vehiobj.put("vehicle_uuid", vehicle_code); - // positionTab.update(vehiobj); - // // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 - // WQLObject ivtTab = WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); - // // 先删除空箱子位置 - // // ivtTab.delete("extdevice_code = '" + wcsdevice_code + "' and vehicle_code = - // // '" + vehicle_code + "'"); - // ivtTab.delete("vehicle_code = '" + vehicle_code + "'"); - // JSONObject json = new JSONObject(); - // // 状态设置为空箱 - // json.put("vehmaterial_uuid", WDK.getUUID()); - // json.put("vehicle_code", vehicle_code); - // json.put("vehicle_uuid", vehicle_code); - // json.put("extdevice_code", wcsdevice_code); - // json.put("vehicle_status", "01"); - // json.put("vehicle_code", vehicle_code); - // // json.put("vehicle_uuid", vehiobj.optString("vehicle_uuid")); - // json.put("material_uuid", ""); - // json.put("material_code", ""); - // json.put("material_spec", ""); - // json.put("material_name", ""); - // json.put("weight", "0"); - // json.put("quantity", "0"); - // json.put("workprocedure_uuid", ""); - // json.put("workprocedure_code", ""); - // json.put("workprocedure_name", ""); - // json.put("create_time", WDK.getDateTime()); - // ivtTab.insert(json); - return null; + @Transactional(rollbackFor = Exception.class) + public String cacheLineExcepOpt(JSONObject param) { + // 缓存线编码 + String wcsdevice_code = param.getString("wcsdevice_code"); + // 1-暂停、2-启动 + String opt_type = param.getString("opt_type"); + // 类型:恢复是0,暂停是1 + String type = "1"; + if("2".equals(opt_type)) { + type = "0"; + } + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("type", type); + jsonObject.put("wcsdevice_code", wcsdevice_code); + jsonArray.add(jsonObject); + try { + //TOFIX 等确定api后,换成下发的url + return AcsUtil.notifyAcs("api", jsonArray).getString("status"); + } + catch(Exception e) { + throw new BadRequestException(e.getMessage()); + } } + /** + * 缓存线出箱异常-查询 + * 缓存线编码 wcsdevice_code + * 缓存线位置编码 position_code + */ @Override - public Object setBlankPos(JSONObject param) { - // - // // 层数 - // String layer_num = param.optString("layer_num"); - // // 顺序号 - // String seat_order_num = param.optString("seat_order_num"); - // // 缓存线编码 - // String wcsdevice_code = param.optString("wcsdevice_code"); - // // 缓存线位置表【IF_CacheLine_Position】 - // WQLObject ivtTab = WQLObject.getWQLObject("IF_CacheLine_Position"); - // JSONObject json = ivtTab.query("layer_num = " + layer_num + " and extdevice_code like '%" + wcsdevice_code + "%' and order_no = " + seat_order_num + "").uniqueResult(0); - // // 状态设置为空位 - // json.put("is_blank", "1"); - // json.put("vehicle_uuid", ""); - // json.put("vehicle_code", ""); - // ivtTab.update(json); - return null; + public JSONArray cacheLineOutBoxExceptionQuery(JSONObject param) { + // JSONArray arr = WQLObject.getWQLObject("sch_cacheline_position").query("cacheLine_code like '%" + wcsdevice_code + "%'").getResultJSONArray(0); + // StringBuilder sd = new StringBuilder(); + // for(int i = 0; i < arr.size(); i++) { + // JSONObject row = arr.getJSONObject(i);. + // sd.append(row.getString("task_id")).append(","); + // } + // String taskIdList = sd.toString(); + // taskIdList = taskIdList.substring(0, taskIdList.length() - 1); + // return WQLObject.getWQLObject("sch_base_task").query("task_id in ('" + taskIdList + "')").getResultJSONArray(0); + String wcsdevice_code = param.getString("wcsdevice_code"); + String position_code = param.getString("position_code"); + //根据缓存线编码和缓存线点位查找任务ID + JSONObject posiObj = WQLObject.getWQLObject("sch_cacheline_position").query("position_code like '%" + position_code + "%'" + " and cacheLine_code like '%" + wcsdevice_code + "%'").uniqueResult(0); + //查不到点位信息 + if(null == posiObj) { + throw new BadRequestException("未找到该缓存线的点位信息!"); + } + //查不到任务信息 + if(StringUtils.isEmpty(posiObj.getString("task_id"))) { + throw new BadRequestException("未找到该缓存线的点位的任务信息!"); + } + return WQL.getWO("PDA_QUERY").addParam("flag", "10").addParam("task_id", posiObj.getString("task_id")).process().getResultJSONArray(0); + } + + /** + * 缓存线出箱异常确认 + * 出入类型 inOut_type:1.入满箱异常,2.出满箱异常 + * 缓存线位置编码 wcsdevice_code + * 缓存线点位编码 position_code + * 料箱码 vehicle_code + */ + @Override + public String cacheLineOutBoxExceptionConfirm(JSONObject param) { + String inOut_type = param.getString("inOut_type"); + String cacheLine_code = param.getString("wcsdevice_code"); + String position_code = param.getString("position_code"); + String vehicle_code = param.getString("vehicle_code"); + //缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + // 缓存线载具物料表 + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + //1.确定缓存线点位 + JSONObject vehiobj = positionTab.query("position_code = " + position_code + " and cacheLine_code like '%" + cacheLine_code + "%'").uniqueResult(0); + //2.绑定新料箱条码(入满箱或者入空箱),设置缓存线点位不为空 + vehiobj.put("vehicle_code", vehicle_code); + vehiobj.put("is_empty", "0"); + positionTab.update(vehiobj); + //3.删除入料箱之前的所有关联信息,包括物料,工序,生产区域 + ivtTab.delete("vehicle_code = '" + vehicle_code + "'"); + //4.初始化料箱 + HashMap json = new HashMap<>(); + json.put("vehicle_code", vehicle_code); + json.put("cacheLine_code", cacheLine_code); + json.put("vehmaterial_id", IdUtil.getStringId()); + json.put("create_time", DateUtil.now()); + // 入满箱扫码异常 + if("1".equals(inOut_type)) { + //5.通过缓存线位置表当前执行任务id,获取任务信息中的物料信息 + JSONObject positionInfo = positionTab.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0); + //查不到点位信息 + if(null == positionInfo) { + throw new BadRequestException("未找到该缓存线的点位信息!"); + } + //获取当前任务信息 + JSONObject instructObj = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + positionInfo.getString("task_id") + "'").uniqueResult(0); + //查不到点位信息 + if(null == instructObj) { + throw new BadRequestException("未找到该任务信息!"); + } + //获取物料信息 + JSONObject meObj = WQLObject.getWQLObject("md_me_materialbase").query("material_id = '" + instructObj.get("material_id") + "'").uniqueResult(0); + //查不到点位信息 + if(null == meObj) { + throw new BadRequestException("未找到该物料信息!"); + } + //6.重新新建该缓存线位置上的料箱为满箱及所属工序,生产区域等信息 + json.put("material_uuid", meObj.getString("material_id")); + json.put("material_code", meObj.getString("material_code")); + json.put("material_spec", meObj.getString("material_spec")); + json.put("material_name", meObj.getString("material_name")); + json.put("quantity", instructObj.getString("material_qty")); + json.put("product_area", instructObj.getString("product_area")); + json.put("vehicle_status", "2"); + } + // 出满箱扫码异常 + if("2".equals(inOut_type)) { + //5.重新新建该缓存线位置上的料箱为空箱子,是空料箱没有放物料等其他信息 + json.put("vehicle_status", "1"); + json.put("material_uuid", ""); + json.put("material_code", ""); + json.put("material_spec", ""); + json.put("material_name", ""); + json.put("weight", "0"); + json.put("quantity", "0"); + json.put("workprocedure_code", ""); + json.put("workprocedure_name", ""); + json.put("product_area", ""); + } + int result = ivtTab.insert(json).getSucess(); + return Integer.toString(result); } /** * AGV入箱子异常,(怎么判断入箱子异常) 缓存线编码 wcsdevice_code 满箱码 vehicle_code */ @Override - public Object agvInBoxExceptionQuery(JSONObject param) { - // String vehicle_code = param.optString("vehicle_code"); - // String wcsdevice_code = param.optString("wcsdevice_code"); - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // String where = "nextwcsdevice_code = '" + wcsdevice_code + "' and invehicle_code = '" + vehicle_code + "' and instruct_status <> '06'"; - // if(uString.isEmpty(vehicle_code)) { - // where = "nextwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'"; - // } - // JSONArray arr = instructTab.query(where).getResultJSONArray(0); - // JSONArray result = new JSONArray(); - // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); - // JSONObject json = new JSONObject(); - // json.put("instruct_uuid", row.optString("instruct_uuid")); - // json.put("instructorder_no", row.optString("instructorder_no")); - // json.put("wcsdevice_code", row.optString("nextwcsdevice_code")); - // json.put("startpoint_code", row.optString("startpoint_code")); - // json.put("nextpoint_code", row.optString("nextpoint_code")); - // json.put("nextpoint_code2", row.optString("nextpoint_code2")); - // result.add(json); - // } - // srb.addJSONArray("result", result); - return null; + public JSONArray agvInBoxExceptionQuery(JSONObject param) { + String vehicle_code = param.getString("vehicle_code"); + String wcsdevice_code = param.getString("wcsdevice_code"); + WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); + String where = "point_code2 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'"; + if(StringUtils.isEmpty(vehicle_code)) { + where = "point_code2 = '" + wcsdevice_code + "' and task_status <> '7'"; + } + JSONArray arr = instructTab.query(where).getResultJSONArray(0); + JSONArray result = new JSONArray(); + for(int i = 0; i < arr.size(); i++) { + JSONObject row = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("instruct_uuid", row.getString("task_id")); + json.put("instructorder_no", row.getString("task_code")); + json.put("wcsdevice_code", row.getString("point_code2")); + json.put("point_code1", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); + result.add(json); + } + return result; } /** @@ -584,111 +739,54 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ * "empty_vehicle_code": "10002", "instruct_uuid": "uuid_0101" } */ @Override - public Object agvInBoxExceptionConfirm(JSONObject param) { - // - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // String instruct_uuid = param.optString("instruct_uuid"); - // String extdevice_code = param.optString("wcsdevice_code"); - // String empty_vehicle_code = param.optString("empty_vehicle_code"); - // String full_vehicle_code = param.optString("full_vehicle_code"); - // // 缓存线位置表【IF_CacheLine_Position】 - // WQLObject positionTab = WQLObject.getWQLObject("IF_CacheLine_Position"); - // - // - // /* - // * JSONObject emptyObj = positionTab - // * .query("is_active = '1' and is_delete = '0' and vehicle_code = '" + - // * empty_vehicle_code + "'") .uniqueResult(0); - // * - // * // 判断箱子是否存在 if (emptyObj == null) { srb.setFailure(); srb.setDesc("条码【" + - // * empty_vehicle_code + "】不存在,操作失败"); return null; } JSONObject fullObj = - // * positionTab .query("is_active = '1' and is_delete = '0' and vehicle_code = '" - // * + full_vehicle_code + "'") .uniqueResult(0); // 判断箱子是否存在 if (fullObj == null) - // * { srb.setFailure(); srb.setDesc("条码【" + full_vehicle_code + "】不存在,操作失败"); - // * return null; } - // */ - // JSONObject instObj = instructTab.query("instruct_uuid = '" + instruct_uuid + "'").uniqueResult(0); - // // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 - // WQLObject ivtTab = WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); - // // 出的空箱子 - // /* - // * JSONObject emptyBoxObj = - // * ivtTab.query("vehicle_status = '01' AND extdevice_code = '" + extdevice_code - // * + "' and outvehicle_code = '" + empty_vehicle_code + "'").uniqueResult(0); if - // * (emptyBoxObj == null || - // * uString.isEmpty(emptyBoxObj.optString("vehicle_code"))) { srb.setFailure(); - // * srb.setDesc("缓存线内的空箱:" + empty_vehicle_code + "不存在,操作失败"); return null; } - // * - // * // 找到空位子入满箱 JSONObject fullBoxObj = - // * ivtTab.query("is_blank = '1' AND extdevice_code = '" + extdevice_code + "'") - // * .uniqueResult(0); if (fullBoxObj == null) { srb.setFailure(); - // * srb.setDesc("在缓存线:" + extdevice_code + "未找到可用的货位进行满箱入库!"); return null; } - // */ - // // 删除出的空箱 - // /* - // * ivtTab.delete(("vehicle_status = '01' AND extdevice_code = '" + - // * extdevice_code + "' and vehicle_code = '" + empty_vehicle_code + "'")); // - // * 更新入库物料信息 JSONObject afterIvt = new JSONObject(); - // * afterIvt.put("vehmaterial_uuid", WDK.getUUID()); afterIvt.put("vehicle_code", - // * full_vehicle_code); afterIvt.put("vehicle_uuid", full_vehicle_code); - // * afterIvt.put("vehicle_status", "02"); afterIvt.put("produceorder_uuid", - // * instObj.optString("produceorder_uuid")); afterIvt.put("produceorder_code", - // * instObj.optString("produceorder_code")); afterIvt.put("workprocedure_uuid", - // * instObj.optString("startworkprocedure_uuid")); - // * afterIvt.put("workprocedure_code", - // * instObj.optString("startworkprocedure_code")); - // * afterIvt.put("workprocedure_name", - // * instObj.optString("startworkprocedure_name")); afterIvt.put("material_uuid", - // * instObj.optString("processmaterial_uuid")); afterIvt.put("material_code", - // * instObj.optString("processmaterial_code")); afterIvt.put("material_name", - // * instObj.optString("processmaterial_name")); afterIvt.put("material_spec", - // * instObj.optString("processmaterial_spec")); - // * afterIvt.put("deviceprocess_series", - // * instObj.optString("deviceprocess_series")); afterIvt.put("quantity", - // * instObj.optString("quantity")); afterIvt.put("weight", - // * instObj.optString("weight")); afterIvt.put("update_time", WDK.getDateTime()); - // * afterIvt.put("create_time", WDK.getDateTime()); - // * - // * ivtTab.insert(afterIvt); - // */ - // AgvTwoInst inst = new AgvTwoInst(); - // instObj.put("inboxtxm", full_vehicle_code); - // instObj.put("outboxtxm", empty_vehicle_code); - // inst.updateInstStatus(instObj, "1"); - // inst.updateInstStatus(instObj, "2"); - return null; + public void agvInBoxExceptionConfirm(JSONObject param) { + WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); + String instruct_uuid = param.getString("task_id"); + String cacheLine_code = param.getString("wcsdevice_code"); + String empty_vehicle_code = param.getString("empty_vehicle_code"); + String full_vehicle_code = param.getString("full_vehicle_code"); + // 缓存线位置表 + WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position"); + // 缓存线载具物料表 + WQLObject ivtTab = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); + JSONObject instObj = instructTab.query("task_id = '" + instruct_uuid + "'").uniqueResult(0); + //TOFIX + //AgvTwoInst inst = new AgvTwoInst(); + instObj.put("inboxtxm", full_vehicle_code); + instObj.put("outboxtxm", empty_vehicle_code); + // inst.updateInstStatus(instObj, "1"); + // inst.updateInstStatus(instObj, "2"); } /** * AGV出空箱异常 */ @Override - public Object agvOutBoxExceptionQuery(JSONObject param) { - // String vehicle_code = param.optString("vehicle_code"); - // String wcsdevice_code = param.optString("wcsdevice_code"); - // JSONArray arr = new JSONArray(); - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // if(uString.isEmpty(vehicle_code)) { - // arr = instructTab.query("startwcsdevice_code = '" + wcsdevice_code + "' and instruct_status <> '06'").getResultJSONArray(0); - // } - // else{ - // arr = instructTab.query("startwcsdevice_code = '" + wcsdevice_code + "' and outvehicle_code = '" + vehicle_code + "' and instruct_status <> '06'").getResultJSONArray(0); - // } - // JSONArray result = new JSONArray(); - // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); - // JSONObject json = new JSONObject(); - // json.put("instruct_uuid", row.optString("instruct_uuid")); - // json.put("instructorder_no", row.optString("instructorder_no")); - // json.put("wcsdevice_code", row.optString("startwcsdevice_code")); - // json.put("vehicle_code", row.optString("outvehicle_code")); - // json.put("startpoint_code", row.optString("startpoint_code")); - // json.put("nextpoint_code", row.optString("nextpoint_code")); - // json.put("nextpoint_code2", row.optString("nextpoint_code2")); - // result.add(json); - // } - // srb.addJSONArray("result", result); - return null; + public JSONArray agvOutBoxExceptionQuery(JSONObject param) { + String vehicle_code = param.getString("vehicle_code"); + String wcsdevice_code = param.getString("wcsdevice_code"); + JSONArray arr; + WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); + if(StringUtils.isEmpty(vehicle_code)) { + arr = instructTab.query("point_code1 = '" + wcsdevice_code + "' and task_status <> '7'").getResultJSONArray(0); + } + else{ + arr = instructTab.query("point_code1 = '" + wcsdevice_code + "' and vehicle_code = '" + vehicle_code + "' and task_status <> '7'").getResultJSONArray(0); + } + JSONArray result = new JSONArray(); + for(int i = 0; i < arr.size(); i++) { + JSONObject row = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("instruct_uuid", row.getString("task_id")); + json.put("instructorder_no", row.getString("task_code")); + json.put("wcsdevice_code", row.getString("point_code1")); + json.put("vehicle_code", row.getString("vehicle_code")); + json.put("startpoint_code", row.getString("point_code1")); + json.put("nextpoint_code", row.getString("point_code2")); + json.put("nextpoint_code2", row.getString("point_code3")); + result.add(json); + } + return result; } /** @@ -696,190 +794,72 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{ * "vehicle_code": "10001", "instruct_uuid": "222" } */ @Override - public Object agvOutBoxExceptionConfirm(JSONObject param) { - // - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // String instruct_uuid = param.optString("instruct_uuid"); - // String vehicle_code = param.optString("vehicle_code"); - // String extdevice_code = param.optString("wcsdevice_code"); - // JSONObject instObj = instructTab.query("instruct_uuid = '" + instruct_uuid + "'").uniqueResult(0); - // - // /* - // * // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 WQLObject ivtTab = - // * WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); // - // * 缓存线位置表【IF_CacheLine_Position】 WQLObject positionTab = - // * WQLObject.getWQLObject("IF_CacheLine_Position"); // 查看是否有空位入 JSONObject - // * positionObj = positionTab.query("is_blank = '1' AND extdevice_code = '" + - // * extdevice_code + "'") .uniqueResult(0); - // * - // * if (positionObj == null) { - // * srb.setFailure(); srb.setDesc("缓存线无剩余位置,操作失败"); return null; - // * - // * } - // * - // * // 入的空箱子 JSONObject afterIvt = new JSONObject(); - // * afterIvt.put("vehmaterial_uuid", WDK.getUUID()); afterIvt.put("vehicle_uuid", - // * vehicle_code); afterIvt.put("vehicle_code", vehicle_code); - // * afterIvt.put("extdevice_code", extdevice_code); - // * - // * afterIvt.put("vehicle_status", "01"); afterIvt.put("produceorder_uuid", ""); - // * afterIvt.put("produceorder_code", ""); afterIvt.put("workprocedure_uuid", - // * ""); afterIvt.put("workprocedure_code", ""); - // * afterIvt.put("workprocedure_name", ""); afterIvt.put("material_uuid", ""); - // * afterIvt.put("material_code", ""); afterIvt.put("material_name", ""); - // * afterIvt.put("material_spec", ""); afterIvt.put("deviceprocess_series", ""); - // * afterIvt.put("quantity", "0"); afterIvt.put("weight", "0"); - // * afterIvt.put("update_time", WDK.getDateTime()); ivtTab.insert(afterIvt); - // */ - // AgvTwoInst inst = new AgvTwoInst(); - // // 出箱的时候入箱码和出箱码相同 - // instObj.put("inboxtxm", vehicle_code); - // instObj.put("outboxtxm", vehicle_code); - // inst.updateInstStatus(instObj, "1"); - // inst.updateInstStatus(instObj, "2"); - return null; - } - - /** - * 缓存线出箱异常查询 - *

- * {"wcsdevice_code":"HCX01","agv_no":"2"} - *

- * 入满箱查找空箱,出满箱查找满箱时,如果电气经过一圈后查找不到指定条码的箱子,则报警提示; 入满箱空箱找不到: 1、 - * 人工先将满箱拿下放在缓存线边上,然后人工找个有条码的空箱拿到满箱的专机上; 2、 - * 通过手持选择缓存线设备,输入agv车号,查询出agv正在执行的指令,点击确认按钮,mes完成该任务,进行满箱物料条码和缓存线设备的绑定;同时wcs和agv删除指令。 - *

- * 3、 Mes系统需要将指令中下发的空箱条码全部设置为异常,指令也标识为异常; 4、 - * 人工还需要将缓存线锁定的任务状态进行复位操作,不影响其他任务的进行;(只有先复位,才能进行盘点,两者冲突) 5、 - * 此时空箱说明已经没有了,管理人员必须立即处理,进行盘点检查缓存线物料和箱子信息,通过手持盘点操作保证缓存线有空箱,才能让缓存线设备继续进行出入操作。 - * 出满箱找不到满箱: 1、 - * 通过手持选择缓存线设备,输入agv车号,查询出agv正在执行的指令,点击确认按钮,mes将指令标识为异常;同时wcs和agv删除指令。 2、 - * Mes系统需要将指令中下发的满箱条码全部设置为异常; 3、 - * 人工还需要将缓存线锁定的任务状态进行复位操作,不影响其他任务的进行;(只有先复位,才能进行盘点,两者冲突) 4、 - * 此时满箱说明已经没有了,管理人员必须立即处理,进行盘点检查缓存线物料和箱子信息,通过手持盘点操作保证缓存线满箱物料和mes系统物料一致,才能让缓存线设备继续进行出入操作。 - */ - @Override - public Object cacheLineOutBoxExceptionQuery( - JSONObject param) { - // - // String agv_no = param.optString("agv_no"); - // String wcsdevice_code = param.optString("wcsdevice_code"); - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // JSONArray arr = instructTab.query("(startwcsdevice_code = '" + wcsdevice_code + "' or nextwcsdevice_code = '" + wcsdevice_code + "') and instruct_status <> '06' and agv_no like '%" + agv_no + "%'").getResultJSONArray(0); - // JSONArray result = new JSONArray(); - // for(int i = 0; i < arr.size(); i++) { - // JSONObject row = arr.getJSONObject(i); - // JSONObject json = new JSONObject(); - // json.put("instruct_uuid", row.optString("instruct_uuid")); - // json.put("instructorder_no", row.optString("instructorder_no")); - // json.put("wcsdevice_code", row.optString("startwcsdevice_code")); - // json.put("vehicle_code", "0"); - // json.put("startpoint_code", row.optString("startpoint_code")); - // json.put("nextpoint_code", row.optString("nextpoint_code")); - // json.put("nextpoint_code2", row.optString("nextpoint_code2")); - // result.add(json); - // } - // srb.addJSONArray("result", result); - return null; - } - - /** - * 缓存线出箱异常确认 - */ - @Override - public Object cacheLineOutBoxExceptionConfirm( - JSONObject param) { - // - // WQLObject instructTab = WQLObject.getWQLObject("IF_WCS_InstructPoint"); - // String instruct_uuid = param.optString("instruct_uuid"); - // JSONObject instObj = instructTab.query("instruct_uuid = '" + instruct_uuid + "'").uniqueResult(0); - // if(instObj != null) { - // instObj.put("instruct_status", "06"); - // instObj.put("instructfinish_mode", "02"); - // instObj.put("update_time", WDK.getDateTime()); - // instObj.put("remark", "缓存线出箱异常确认完成!"); - // instructTab.update(instObj); - // // 把所以来该缓存线的AGV指令都完成掉 - // if(instObj.optString("nextwcsdevice_code").contains("HCX")) { - // HashMap map = new HashMap<>(); - // map.put("instruct_status", "06"); - // map.put("instructfinish_mode", "02"); - // map.put("update_time", WDK.getDateTime()); - // map.put("remark", "缓存线出箱异常确认完成!"); - // instructTab.update(map, "nextwcsdevice_code = '" + instObj.optString("nextwcsdevice_code") + "' and instruct_status <> '06'"); - // } - // // 把所以从该缓存线出AGV指令都完成掉 - // if(instObj.optString("startwcsdevice_code").contains("HCX")) { - // HashMap map = new HashMap<>(); - // map.put("instruct_status", "06"); - // map.put("instructfinish_mode", "02"); - // map.put("update_time", WDK.getDateTime()); - // map.put("remark", "缓存线出箱异常确认完成!"); - // instructTab.update(map, "startwcsdevice_code = '" + instObj.optString("startwcsdevice_code") + "' and instruct_status <> '06'"); - // } - // // 得到异常的载具号 - // String vehicle_codeStr = instObj.optString("vehicle_code"); - // String[] arr = vehicle_codeStr.split(","); - // // 缓存线载具物料表【IF_CacheLine_VehileMaterial】 - // WQLObject ivtTab = WQLObject.getWQLObject("IF_CacheLine_VehileMaterial"); - // for(String vehicle_code : arr) { - // HashMap map = new HashMap<>(); - // // 异常 - // map.put("vehicle_status", "03"); - // ivtTab.update(map, "vehicle_code = '" + vehicle_code + "'"); - // } - // } - return null; + public void agvOutBoxExceptionConfirm(JSONObject param) { + WQLObject instructTab = WQLObject.getWQLObject("sch_base_task"); + String instruct_uuid = param.getString("instruct_uuid"); + String vehicle_code = param.getString("vehicle_code"); + JSONObject instObj = instructTab.query("task_id = '" + instruct_uuid + "'").uniqueResult(0); + //TOFIX + // AgvTwoInst inst = new AgvTwoInst(); + // inst.updateInstStatus(instObj, "1"); + //出箱的时候入箱码和出箱码相同 + instObj.put("inboxtxm", vehicle_code); + instObj.put("outboxtxm", vehicle_code); + // inst.updateInstStatus(instObj, "1"); + // inst.updateInstStatus(instObj, "2"); } @Override - public Object cacheLineExcepOpt(JSONObject param) { - // // 缓存线编码 - // String wcsdevice_code = param.optString("wcsdevice_code"); - // // 01-暂停、02-启动 - // String opt_type = param.optString("opt_type"); - // System.out.println("操作类型:" + opt_type); - // Object[] objs = new Object[2]; - // objs[0] = wcsdevice_code; - // // 类型:恢复是0,暂停是1 - // String type = "1"; - // if("02".equals(opt_type)) { - // type = "0"; - // } - // objs[1] = type; - // // 下发给wcs - // uWcsSchedule.notifyWcs(99, 1000, objs); - return null; - } - - /** - * public static HttpContext getHttpContext(Pageable pageable) { HttpContext ctx - * = new HttpContext(getUUID()); ctx.setPage(pageable.getPageNumber() + 1 + ""); - * ctx.setRows(pageable.getPageSize() + ""); return ctx; } - */ - @Override - public Object pourMaterial(JSONObject param) { - // // 指令标识 - // String instruct_uuid = param.optString("instruct_uuid"); - // // 指令点位表【IF_WCS_InstructPoint】 - // JSONObject instObj = WQLObject.getWQLObject("IF_WCS_InstructPoint").query("instruct_uuid = '" + instruct_uuid + "'").uniqueResult(0); - // int putquantity = instObj.optInt("quantity"); - // String producer = instObj.optString("nextwcsdevice_code"); - // Object[] objs = new Object[2]; - // objs[0] = producer; - // objs[1] = putquantity; - // // 下发给wcs - // uWcsSchedule.notifyWcs(99, 3002, objs); - return null; + public void pourMaterial(JSONObject param) { + // 指令标识 + String instruct_uuid = param.getString("instruct_uuid"); + // 指令点位表【sch_base_task】 + JSONObject instObj = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + instruct_uuid + "'").uniqueResult(0); + int putquantity = instObj.getInteger("material_qty"); + String producer = instObj.getString("point_code2"); + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("producer", producer); + jsonObject.put("putquantity", putquantity); + jsonArray.add(jsonObject); + //TOFIX 等确定api后,换成下发的url + AcsUtil.notifyAcs("api", jsonArray); } @Override - public Object cacheLineOutBoxExceptionQuery(String account_uuid, JSONObject param) { - return null; + public JSONArray getCacheLine(JSONObject param) { + // 生产区域 + String product_area = param.getString("product_area"); + JSONArray resultJSONArray = WQL.getWO("PDA_QUERY").addParamMap(MapOf.of("flag", "7", "product_area", product_area)).process().getResultJSONArray(0); + return resultJSONArray; } @Override - public Object cacheLineOutBoxExceptionConfirm(String account_uuid, JSONObject param) { - return null; + public JSONArray getCacheLineMaterialInfo(JSONObject param) { + // 缓存线编码 point_code + String pointCode = param.getString("wcsdevice_code"); + String productArea = param.getString("product_area"); + AtomicReference res = new AtomicReference<>(new JSONArray()); + RedissonUtils.lock(()->{ + // 生产区域 + res.set(WQL.getWO("PDA_QUERY").addParamMap(MapOf.of("flag", "8", "product_area", productArea, "cacheLine_code", pointCode)).process().getResultJSONArray(0)); + },pointCode,3); + return res.get(); + } + + @Override + public JSONArray getProductArea() { + JSONArray res = WQL.getWO("PDA_QUERY").addParamMap(MapOf.of("flag", "9")).process().getResultJSONArray(0); + return res; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBox(JSONObject param) { + WQLObject cvTab = WQLObject.getWQLObject("SCH_CacheLine_VehileMaterial"); + String vehicleCode = param.getString("vehicle_code"); + if(ObjectUtil.isNotEmpty(vehicleCode)) { + cvTab.delete("vehicle_code = '" + vehicleCode + "'"); + } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql index fbe79220..2b215acb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda/wql/PDA_QUERY.wql @@ -15,6 +15,16 @@ ################################################# 输入.flag TYPEAS s_string 输入.condition TYPEAS s_string + 输入.cacheLine_code TYPEAS s_string + 输入.product_area TYPEAS s_string + 输入.status TYPEAS s_string + 输入.inst_num TYPEAS s_string + 输入.start_point TYPEAS s_string + 输入.end_point TYPEAS s_string + 输入.start_date TYPEAS s_string + 输入.end_date TYPEAS s_string + 输入.task_id TYPEAS s_string + [临时表] @@ -49,7 +59,7 @@ WHERE is_delete = '0' OPTION 输入.condition <> "" - material_spec LIKE CONCAT ( '%', 输入.condition, '%' ) + material_spec LIKE CONCAT ('%', 输入.condition, '%') ENDOPTION GROUP BY material_spec ENDSELECT @@ -59,7 +69,7 @@ IF 输入.flag = "2" QUERY SELECT - workprocedure_id value, + workprocedure_id `value`, workprocedure_name text, workprocedure_code FROM @@ -67,8 +77,8 @@ WHERE is_used = '1' OPTION 输入.condition <> "" - workprocedure_code LIKE CONCAT ( '%', 输入.condition, '%' ) - OR workprocedure_name LIKE CONCAT ( '%', 输入.condition, '%' ) + workprocedure_code LIKE CONCAT ('%', 输入.condition, '%') + OR workprocedure_name LIKE CONCAT ('%', 输入.condition, '%') ENDOPTION ENDSELECT ENDQUERY @@ -77,14 +87,14 @@ IF 输入.flag = "3" QUERY SELECT - dict_id value, + dict_id `value`, label text FROM sys_dict WHERE CODE = 'task_status' OPTION 输入.condition <> "" - label LIKE CONCAT ( '%', 输入.condition, '%' ) + label LIKE CONCAT ('%', 输入.condition, '%') ENDOPTION ORDER BY dict_sort ENDSELECT @@ -94,14 +104,14 @@ IF 输入.flag = "4" QUERY SELECT - device_code value, + device_code `value`, device_name text FROM `pdm_bi_device` WHERE is_delete = '0' OPTION 输入.condition <> "" - device_name LIKE CONCAT ( '%', 输入.condition, '%' ) + device_name LIKE CONCAT ('%', 输入.condition, '%') ENDOPTION ORDER BY device_code DESC ENDSELECT @@ -111,22 +121,159 @@ IF 输入.flag = "5" QUERY SELECT - mb.material_id, - mb.material_code, - mb.material_spec, - mb.material_name, - class.class_name + MB.MATERIAL_ID, + MB.MATERIAL_CODE, + MB.MATERIAL_SPEC, + MB.MATERIAL_NAME, + CLASS.CLASS_NAME FROM - md_me_materialbase mb - LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id + MD_ME_MATERIALBASE MB + LEFT JOIN MD_PB_CLASSSTANDARD CLASS ON CLASS.CLASS_ID = MB.MATERIAL_TYPE_ID WHERE - mb.is_delete = '0' + MB.IS_DELETE = '0' ENDSELECT ENDQUERY ENDIF - - + IF 输入.flag = "6" + QUERY + SELECT + mb.material_id, + mb.material_code, + mb.material_spec, + mb.material_name, + class.class_name + FROM + md_me_materialbase mb + LEFT JOIN MD_PB_ClassStandard class ON class.class_id = mb.material_type_id + WHERE + mb.is_delete = '0' + ORDER BY + mb.material_id desc + LIMIT 1000 + OPTION 输入.condition <> "" + mb.material_name LIKE CONCAT ('%', 输入.condition, '%') + OR mb.material_code LIKE CONCAT ('%', 输入.condition, '%') + OR mb.material_spec LIKE CONCAT ('%', 输入.condition, '%') + OR class.class_name LIKE CONCAT ('%', 输入.condition, '%') + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "7" + QUERY + SELECT + p.point_code as value, + p.point_name as text + FROM + sch_base_point p + WHERE + p.region_code = 'A1_HCX' + OPTION 输入.product_area <> "" + p.product_area = 输入.product_area + ENDOPTION + ORDER BY + p.point_code + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "8" + QUERY + SELECT + sch_cacheline_position.cacheLine_code as wcsdevice_code, + sch_cacheline_position.position_code, + sch_cacheline_position.position_name, + sch_cacheline_position.vehicle_code, + sch_cacheline_position.layer_num, + sch_cacheline_position.positionorder_no as seat_order_num, + sch_cacheline_vehilematerial.workprocedure_code, + sch_cacheline_vehilematerial.workprocedure_name, + sch_cacheline_vehilematerial.material_uuid, + sch_cacheline_vehilematerial.material_code, + sch_cacheline_vehilematerial.material_name, + sch_cacheline_vehilematerial.material_spec, + sch_cacheline_vehilematerial.quantity, + sch_cacheline_vehilematerial.weight, + IF(length(sch_cacheline_position.vehicle_code) > 0, IFNULL(sch_cacheline_vehilematerial.vehicle_status, 4), 5) AS vehicle_status + FROM + sch_cacheline_position + LEFT JOIN sch_cacheline_vehilematerial ON sch_cacheline_position.vehicle_code = sch_cacheline_vehilematerial.vehicle_code + WHERE + 1 = 1 + OPTION 输入.product_area <> "" + sch_cacheline_position.product_area = 输入.product_area + ENDOPTION + OPTION 输入.cacheLine_code <> "" + sch_cacheline_position.cacheLine_code = 输入.cacheLine_code + ENDOPTION + ORDER BY + sch_cacheline_position.cacheLine_code + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "9" + QUERY + SELECT + d.value, + d.label as text + FROM + sys_dict d + WHERE + code = 'product_area' + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "10" + PAGEQUERY + SELECT + task.task_id as instruct_uuid, + task.task_code as instructoperate_num, + task.task_name as mes_no, + task.vehicle_code as invehicle_code, + task.vehicle_code2 as outvehicle_code, + task.create_time, + dict.label as status_name, + mater.material_code as processmaterial_code, + point1.point_name as startpoint_code, + point2.point_name as nextpoint_code, + point3.point_name as nextpoint_code2 + FROM + sch_base_task task + left join sch_base_point point1 on task.point_code1 = point1.point_code + left join sch_base_point point2 on task.point_code2 = point2.point_code + left join sch_base_point point3 on task.point_code3 = point3.point_code + left join md_me_materialbase mater on task.material_id = mater.material_id + left join sys_dict dict on dict.`value` = task.task_status + and dict.`code` = 'task_status' + WHERE task.is_delete = '0' + OPTION 输入.status <> "" + find_in_set(task.task_status,输入.status) + ENDOPTION + OPTION 输入.inst_num <> "" + (task.task_code like CONCAT ('%', 输入.inst_num, '%')) + ENDOPTION + OPTION 输入.vehicle_code <> "" + (task.vehicle_code like CONCAT ('%', 输入.vehicle_code, '%')) + ENDOPTION + OPTION 输入.start_point <> "" + (task.point_code1 like CONCAT ('%', 输入.start_point, '%')) + ENDOPTION + OPTION 输入.task_id <> "" + (task.task_id = 输入.task_id ) + ENDOPTION + OPTION 输入.end_point <> "" + (task.point_code2 like CONCAT ('%', 输入.end_point, '%')) + ENDOPTION + OPTION 输入.start_date <> "" + task.create_time >= 输入.start_date + ENDOPTION + OPTION 输入.end_date <> "" + task.create_time <= 输入.end_date + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 1c827962..17b8d79f 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index cbef8cfb..499a3f97 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -16,6 +16,8 @@ import lombok.extern.slf4j.Slf4j; */ @Slf4j public abstract class AbstractAcsTask { + + private static final String OPT_NAME = "acs回调#"; public abstract void updateTaskStatus(JSONObject taskObj,String status); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java index 8727d465..c470ad07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.rest; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -79,5 +80,12 @@ public class RegionController { return new ResponseEntity<>(regionService.getPointTypeSelectByCode(region_code), HttpStatus.CREATED); } + @PostMapping("/getRegionSelect") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + public ResponseEntity getRegionSelect(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(regionService.getRegionSelect(whereJson), HttpStatus.CREATED); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java index 628b71a4..32bce07e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.service; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import org.nl.wms.sch.service.dto.RegionDto; import org.springframework.data.domain.Pageable; @@ -74,4 +75,11 @@ public interface RegionService { * @return */ JSONArray getPointTypeSelectByCode(String region_code); + + /** + * 获取区域类型下拉框 + * @param + * @return JSONObject + */ + JSONObject getRegionSelect(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index c47de2c5..ad54e35b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -245,7 +245,7 @@ public class PointServiceImpl implements PointService { @Override public JSONArray getPoint(Map wherJson) { String area_type = (String) wherJson.get("area_type"); - JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("area_type IN (" + area_type + ") AND is_used = '1' AND is_delete = '0' order by point_code").getResultJSONArray(0); + JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("region_code = '"+area_type+"' and is_used = '1' and is_delete = '0'").getResultJSONArray(0); return point_rows; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java index 895f894c..384cdbf3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java @@ -166,4 +166,38 @@ public class RegionServiceImpl implements RegionService { return res; } + @Override + public JSONObject getRegionSelect(JSONObject whereJson) { + String stor_id = whereJson.getString("stor_id"); + JSONArray prodArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value",stor_id).process().getResultJSONArray(0); + + JSONArray new_ja = new JSONArray(); + for (int i = 0; i < prodArr.size(); i++) { + JSONObject json = prodArr.getJSONObject(i); + + JSONObject jsonMst = new JSONObject(); + jsonMst.put("value",json.getString("value")); + jsonMst.put("label",json.getString("label")); + + // 查询子类 + JSONArray DtlArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "3").addParam("product_area", json.getString("value")).process().getResultJSONArray(0); + if (DtlArr.size() > 0) { + JSONArray sect_ja = new JSONArray(); + + for (int j = 0; j < DtlArr.size(); j++) { + JSONObject json2 = DtlArr.getJSONObject(j); + JSONObject sect_cas = new JSONObject(); + sect_cas.put("value", json2.getString("region_code")); + sect_cas.put("label", json2.getString("region_name")); + sect_ja.add(sect_cas); + } + jsonMst.put("children", sect_ja); + } + new_ja.add(jsonMst); + } + JSONObject jo = new JSONObject(); + jo.put("content", new_ja); + return jo; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java index 1132339f..10206ada 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/TaskServiceImpl.java @@ -17,9 +17,13 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.basedata.master.service.dto.ClassstandardDto; +import org.nl.wms.ext.acs.service.AcsToWmsService; +import org.nl.wms.ext.acs.service.impl.AcsToWmsServiceImpl; +import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.service.TaskService; import org.nl.wms.sch.service.dto.TaskDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,11 +40,13 @@ import java.util.Map; * @date 2021-08-19 **/ @Service -@RequiredArgsConstructor @Slf4j public class TaskServiceImpl implements TaskService { - private final ClassstandardService classstandardService; + @Autowired + private ClassstandardService classstandardService; + @Autowired + private AcsToWmsService acsToWmsService; @Override public Map queryAll(Map form, Pageable page) { @@ -176,55 +182,35 @@ public class TaskServiceImpl implements TaskService { @Override public void operation(Map map) { + WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl(); 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("任务已完成!"); - // 任务处理类 - String processing_class = taskObj.getString("handle_class"); - String message = ""; - // 根据任务类型获取对应的任务操作类 - try { - Class clz = Class.forName(processing_class); - Object obj = clz.newInstance(); - // 调用每个任务类的method_name()强制结束方法 - Method m; - JSONObject result; - 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); - } - if (ObjectUtil.isEmpty(result)) return; - JSONArray arr = result.getJSONArray("errArr"); - WQLObject wo = WQLObject.getWQLObject("sch_base_task"); - if (ObjectUtil.isNotEmpty(arr)) { - for (int i = 0; i < arr.size(); i++) { - JSONObject json = arr.getJSONObject(i); - JSONObject param = new JSONObject(); - param.put("task_id", json.getString("task_id")); - param.put("remark", json.getString("message")); - wo.update(param); - } - throw new BadRequestException("任务操作失败!"); - } else { - JSONObject param = new JSONObject(); - param.put("task_id", task_id); - 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("任务操作失败!"); + + switch (method_name) { // forceFinish, cancel + case "immediateNotifyAcs": + JSONArray array = new JSONArray(); + array.add(taskObj); + wms.issueTaskToAcs(array); + break; + case "forceFinish": + JSONArray finish = new JSONArray(); + JSONObject res = new JSONObject(); + res.put("task_id", task_id); + res.put("task_status", "2"); + finish.add(res); + acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish)); + break; + case "cancel": + JSONArray cancel = new JSONArray(); + JSONObject res2 = new JSONObject(); + res2.put("task_id", task_id); + res2.put("task_status", "1"); + cancel.add(res2); + acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel)); + break; + default: break; } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java index aa1a95a7..9b697de1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SpeMachineryTask.java @@ -14,7 +14,7 @@ import org.nl.modules.system.util.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.manage.AbstractAcsTask; -import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; import java.util.HashMap; @@ -24,6 +24,7 @@ import java.util.Map; * 专机任务 */ @Slf4j +@Service public class SpeMachineryTask extends AbstractAcsTask { private final Map SpeHandles= new HashMap<>(); private static String OPT_NAME = "ACS回调# "; @@ -52,8 +53,8 @@ public class SpeMachineryTask extends AbstractAcsTask { @Override public String createTask(JSONObject form) { - String start_point_code = form.getString("start_point_code"); - String next_point_code = form.getString("next_point_code"); + String start_point_code = form.getString("point_code1"); + String next_point_code = form.getString("point_code2"); String vehicle_code = form.getString("vehicle_code"); String type = form.getString("type"); if (StrUtil.isEmpty(start_point_code)) { @@ -67,7 +68,6 @@ public class SpeMachineryTask extends AbstractAcsTask { } String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = new JSONObject(); - task.put("taskdtl_id", taskdtl_id); task.put("task_id", taskdtl_id); task.put("task_code", CodeUtil.getNewCode("TASK_CODE")); task.put("task_type", type); @@ -116,8 +116,6 @@ public class SpeMachineryTask extends AbstractAcsTask { case STATUS_START: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); break; - case STATUS_RUNDING: - break; case STATUS_FINISH: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); //到专机:更新设备上料位物料数量 @@ -146,8 +144,6 @@ public class SpeMachineryTask extends AbstractAcsTask { switch (status){ case STATUS_START: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - break; - case STATUS_RUNDING: cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); break; case STATUS_FINISH: diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskScheduleService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskScheduleService.java index 4015bef4..498b087a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskScheduleService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/TaskScheduleService.java @@ -38,13 +38,14 @@ public class TaskScheduleService { private ReentrantLock lock = new ReentrantLock(); private final WmsToAcsService wmsToAcsService; - @Scheduled(cron = "0/10 * * * * ?") + @Scheduled(cron = "0/30 * * * * ?") public void taskPublish(){ boolean islock = lock.tryLock(); try { if (islock){ WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - JSONArray all = taskTable.query("task_type < '" + StatusEnum.TASK_PUBLISH + "'").getResultJSONArray(0); + //查询所有自动下发的任务 + JSONArray all = taskTable.query("is_auto_issue = '1' and task_type < '" + StatusEnum.TASK_PUBLISH + "'").getResultJSONArray(0); //分区域:不同区域调用不同acs接口 log.info("TaskScheduleService#taskPublish all_task:{}",all.size()); Map> areaCollent = all.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("product_area"))); @@ -65,8 +66,10 @@ public class TaskScheduleService { String taskGroupId = IdUtil.getStringId(); JSONObject task = (JSONObject) o; String taskId = task.getString("task_id"); + task.put("is_send","1"); if (taskGroupMap.get(taskId) != null){ task.put("task_group_id",taskGroupMap.get(taskId)); + task.put("is_send","0"); continue; } String start = task.getString("point_code1"); @@ -96,10 +99,15 @@ public class TaskScheduleService { String waitingTaskId = waitingTask.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(",")); String MergeId = Merge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(",")); log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId); - //下发任务:一次暂时下发十条:同一个区域任务不超过10条 - JSONArray form = new JSONArray(); Merge.addAll(notMerge); JSONArray jsonArray = new JSONArray(Merge); + //批量更新任务状态,is_send,task_group_id + for (Object task : Merge) { + JSONObject task1 = (JSONObject) task; + task1.put("task_type",StatusEnum.TASK_PUBLISH.getCode()); + taskTable.update(task1,"task_id = '"+task1.getString("task_id")+"'"); + } + //缓存线任务待确认是否生成多个 wmsToAcsService.issueTaskToAcs(jsonArray); } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql index 523cf075..a5232908 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql @@ -16,6 +16,7 @@ 输入.flag TYPEAS s_string 输入.region_code TYPEAS s_string 输入.product_area TYPEAS s_string + 输入.value TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -57,3 +58,35 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + sys_dict + WHERE + code = 'product_area' + + OPTION 输入.value <> "" + value = 输入.value + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + sch_base_region + WHERE + 1=1 + + OPTION 输入.product_area <> "" + product_area = 输入.product_area + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql index 8938c9ab..058835ed 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_TASK_01.wql @@ -61,7 +61,7 @@ FROM sch_base_task task LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code - LEFT JOIN sys_dict_detail dict ON dict.`value` = task.task_status AND dict.`name` = 'task_status' + LEFT JOIN SYS_DICT DICT ON DICT.`VALUE` = TASK.TASK_STATUS AND DICT.`CODE` = 'TASK_STATUS' LEFT JOIN SCH_BASE_Region reg1 ON reg1.region_code = ( SELECT p1.region_code FROM SCH_BASE_Point p1 WHERE p1.point_code = task.point_code1 ) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls index 7c7bbc47..ada8eefe 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls differ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java new file mode 100644 index 00000000..f6d3d05e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java @@ -0,0 +1,204 @@ +package org.nl.wms.st.in.rest; + +import com.alibaba.fastjson.JSONArray; +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.common.anno.Log; +import org.nl.wms.st.in.service.ProductInService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "成品入库") +@RequestMapping("/api/in/productIn") +@Slf4j +public class ProductInController { + + private final ProductInService productInService; + + @GetMapping + @Log("查询入库单据") + @ApiOperation("查询入库单据") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(productInService.pageQuery(whereJson, page), HttpStatus.OK); + } + + @Log("删除出入库单") + @ApiOperation("删除出入库单") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + productInService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getBillDtl") + @Log("查询入库单来源") + @ApiOperation("查询入库单来源") + public ResponseEntity getBillDtl(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(productInService.getBillDtl(whereJson, page), HttpStatus.OK); + } + + @PostMapping() + @Log("新增入库单") + @ApiOperation("新增入库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson) { + productInService.insertDtl(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改入库单") + @ApiOperation("修改入库单") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + productInService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/queryStor") + @Log("查询仓库") + @ApiOperation("查询仓库") + public ResponseEntity queryStor() { + return new ResponseEntity<>(productInService.queryStor(), HttpStatus.OK); + } + + @PostMapping("/getIODtl") + @Log("查询出入库单明细") + @ApiOperation("查询出入库单明细") + public ResponseEntity getIODtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productInService.getIODtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/commit") + @Log("出入单提交") + @ApiOperation("出入单提交") + public ResponseEntity commit(@RequestBody Map whereJson) { + productInService.commit(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getDisDtl") + @Log("查询入库分配明细") + @ApiOperation("查询入库分配明细") + public ResponseEntity getDisDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productInService.getDisDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/divStruct") + @Log("分配货位") + @ApiOperation("分配货位") + public ResponseEntity divStruct(@RequestBody Map whereJson) { + productInService.divStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/unDivStruct") + @Log("取消分配货位") + @ApiOperation("取消分配货位") + public ResponseEntity unDivStruct(@RequestBody Map whereJson) { + productInService.unDivStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/divPoint") + @Log("设置起点") + @ApiOperation("设置起点") + public ResponseEntity divPoint(@RequestBody Map whereJson) { + productInService.divPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/queryTask") + @Log("查询任务") + @ApiOperation("查询任务") + public ResponseEntity queryTask(@RequestBody Map whereJson) { + return new ResponseEntity<>(productInService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/delDis") + @Log("删除分配") + @ApiOperation("删除分配") + public ResponseEntity delDis(@RequestBody JSONObject whereJson) { + productInService.delDis(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/queryBoxMater") + @Log("查询箱内子卷") + @ApiOperation("查询箱内子卷") + public ResponseEntity queryBoxMater(@RequestBody JSONArray whereJson) { + + return new ResponseEntity<>(productInService.queryBoxMater(whereJson), HttpStatus.OK); + } + + @PostMapping("/updateTask") + @Log("变更任务") + @ApiOperation("变更任务") + public ResponseEntity updateTask(@RequestBody Map whereJson) { + productInService.updateTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/delTask") + @Log("删除任务") + @ApiOperation("删除任务") + public ResponseEntity delTask(@RequestBody Map whereJson) { + productInService.delTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/reIssueTask") + @Log("下发") + @ApiOperation("下发") + public ResponseEntity reIssueTask(@RequestBody Map whereJson) { + productInService.reIssueTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirmTask") + @Log("完成任务") + @ApiOperation("完成任务") + public ResponseEntity confirmTask(@RequestBody Map whereJson) { + productInService.confirmTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/cancelTask") + @Log("取消完成任务") + @ApiOperation("取消完成任务") + public ResponseEntity cancelTask(@RequestBody Map whereJson) { + productInService.cancelTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("完成单据") + @ApiOperation("完成单据") + public ResponseEntity confirm(@RequestBody Map whereJson) { + productInService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/backConfirm") + @Log("完成入库负单") + @ApiOperation("完成入库负单") + public ResponseEntity backConfirm(@RequestBody Map whereJson) { + productInService.backConfirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/autoDis") + @Log("自动分配") + @ApiOperation("自动分配") + public ResponseEntity autoDis(@RequestBody JSONObject whereJson) { + productInService.autoDis(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java new file mode 100644 index 00000000..13f89688 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java @@ -0,0 +1,91 @@ +package org.nl.wms.st.in.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +public interface ProductInService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + Map getBillDtl(Map whereJson,Pageable page); + + /** + * 新增单据 + * @param whereJson / + * @return iostorinv_id + */ + String insertDtl (JSONObject whereJson); + + /** + * 删除单据 + * @param ids / + */ + void deleteAll(Long[] ids); + + void delDis(JSONObject whereJson); + + JSONArray queryBoxMater(JSONArray rows); + + /** + * 修改单据 + * @param whereJson / + */ + void update(JSONObject whereJson); + + void commit(Map whereJson); + + /** + * 查询出入库单明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getIODtl(JSONObject whereJson); + + void divStruct(Map whereJson); + + void unDivStruct(Map whereJson); + + void divPoint(Map whereJson); + + void updateTask(Map whereJson); + + void delTask(Map whereJson); + + void reIssueTask(Map whereJson); + + void confirmTask(Map whereJson); + + void cancelTask(Map whereJson); + + void confirm(Map whereJson); + + void backConfirm(Map whereJson); + + /** + * 查询入库分配明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getDisDtl(JSONObject whereJson); + + JSONArray queryTask(Map whereJson); + + JSONObject autoDis(JSONObject whereJson); + + JSONObject autoDisMove(JSONObject whereJson); + + /** + * 查询仓库 + * @return JSONArray + */ + JSONArray queryStor(); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java new file mode 100644 index 00000000..e26979fd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java @@ -0,0 +1,1701 @@ +package org.nl.wms.st.in.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.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.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +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.st.service.StorattrService; +import org.nl.wms.basedata.st.service.StructattrService; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.st.in.service.ProductInService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class ProductInServiceImpl implements ProductInService { + + private final StorattrService storattrService; + + private final StructattrService structattrService; + + private final PointService pointService; + + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String bill_status = MapUtil.getStr(whereJson, "bill_status"); + String bill_type = MapUtil.getStr(whereJson, "bill_type"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("stor_id",stor_id); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("bill_status",bill_status); + map.put("bill_type",bill_type); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code","%"+bill_code+"%"); + + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTIN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time desc"); + return jo; + } + + @Override + public Map getBillDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + String bill_code = (String) whereJson.get("bill_code"); + String material_search = (String) whereJson.get("material_search"); + String begin_time = (String) whereJson.get("begin_time"); + String end_time = (String) whereJson.get("end_time"); + String container_name = (String) whereJson.get("container_name"); + String package_box_sn = (String) whereJson.get("package_box_sn"); + String sap_pcsn = (String) whereJson.get("sap_pcsn"); + map.put("flag", "2"); + if (StrUtil.isNotEmpty(package_box_sn)) { + map.put("package_box_sn", package_box_sn); + } + if (StrUtil.isNotEmpty(container_name)) { + map.put("container_name", container_name); + } + if (StrUtil.isNotEmpty(bill_code)) { + map.put("bill_code", bill_code); + } + if (StrUtil.isNotEmpty(sap_pcsn)) { + map.put("sap_pcsn", sap_pcsn); + } + if (StrUtil.isNotEmpty(material_search)) { + map.put("material_search", "%" + material_search + "%"); + } + if (StrUtil.isNotEmpty(begin_time)) { + map.put("begin_time", begin_time.substring(0, 10)); + map.put("end_time", end_time.substring(0, 10)); + } + JSONObject jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "date_of_FG_inbound,package_box_sn desc"); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String insertDtl(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONArray rows = whereJson.getJSONArray("tableData"); + + // 插入主表 + JSONObject io_mst = new JSONObject(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + double total_qty = 0; + + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("bill_code", bill_code); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("bill_status", whereJson.getString("bill_status")); + io_mst.put("input_optid", currentUserId + ""); + io_mst.put("input_optname", nickName); + io_mst.put("input_time", now); + io_mst.put("update_optid", currentUserId + ""); + io_mst.put("update_optname", nickName); + io_mst.put("update_time", now); + io_mst.put("is_delete", "0"); + + for (int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(row); + + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").insert(dis); + } + io_mst.put("total_qty", total_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(io_mst); + + return iostorinv_id; + } + + @Override + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + for (Long id : ids) { + JSONObject param = new JSONObject(); + param.put("iostorinv_id", String.valueOf(id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } + + @Override + public void delDis(JSONObject whereJson) { + String box_no = whereJson.getString("package_box_sn"); + //将状态为包装的改为生成 + HashMap map = new HashMap<>(); + map.put("status", "0"); + WQLObject.getWQLObject("PDM_BI_SubPackageRelation").update(map, "package_box_SN = '" + box_no + "' AND status = '1'"); + } + + @Override + public JSONArray queryBoxMater(JSONArray rows) { + JSONArray total_rows = new JSONArray(); + HashSet set = new HashSet<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String package_box_sn = row.getString("package_box_sn"); + set.add(package_box_sn); + } + for (String s : set) { + JSONArray maters = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "16").addParam("package_box_sn", s).process().getResultJSONArray(0); + for (int i = 0; i < maters.size(); i++) { + JSONObject mater = maters.getJSONObject(i); + total_rows.add(mater); + } + } + return total_rows; + } + + @Override + public void update(JSONObject whereJson) { + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject wo_dis = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + + //先删除该单据下的所有明细 + String iostorinv_id = whereJson.getString("iostorinv_id"); + wo_dtl.delete("iostorinv_id = '" + iostorinv_id + "'"); + wo_dis.delete("iostorinv_id = '" + iostorinv_id + "'"); + + JSONArray rows = whereJson.getJSONArray("tableData"); + + // 更新主表 + JSONObject io_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + double total_qty = 0; + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("update_optid", currentUserId + ""); + io_mst.put("update_optname", nickName); + io_mst.put("update_time", now); + + for (int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + + wo_dtl.insert(row); + + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + wo_dis.insert(dis); + } + io_mst.put("total_qty", total_qty); + wo_mst.update(io_mst); + } + + @Override + public void commit(Map whereJson) { + String iostorinv_id = (String) whereJson.get("iostorinv_id"); + JSONObject mst = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (!mst.getString("bill_status").equals("10")) { + throw new BadRequestException("请选择单据状态为生成的进行提交!"); + } + HashMap map = new HashMap<>(); + map.put("bill_status", "20"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", nickName); + map.put("update_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + } + + @Override + public JSONArray getIODtl(JSONObject whereJson) { + String bill_code = whereJson.getString("bill_code"); + JSONArray ja = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "2").addParam("bill_code", bill_code) + .process().getResultJSONArray(0); + return ja; + } + + @Override + public JSONArray getDisDtl(JSONObject whereJson) { + //查询该明细下的所有入库分配明细 + JSONArray resultJSONArray = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "3").addParam("iostorinvdtl_id", whereJson.get("iostorinvdtl_id")).process().getResultJSONArray(0); + return resultJSONArray; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void divStruct(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String sect_id = ""; + String sect_code = ""; + String sect_name = ""; + String struct_id = ""; + String struct_code = ""; + String struct_name = ""; + ArrayList rows = (ArrayList) whereJson.get("tableMater"); + JSONObject whereJson2 = JSONObject.parseObject(JSON.toJSONString(whereJson)); + HashMap map = rows.get(0); + + Boolean auto_div = false; + if (whereJson2.containsKey("auto_div")) { + auto_div = whereJson2.getBoolean("auto_div"); + } + //判断该载具是否已经分配货位或者起点 + JSONArray now_dis_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "17").addParam("box_no", map.get("box_no")).process().getResultJSONArray(0); + if (now_dis_rows.size() > 0 && !auto_div) { + throw new BadRequestException("该木箱已经分配过货位,无法继续分配!"); + } + + String point_code = map.get("point_code"); + if (StrUtil.isNotEmpty(point_code)) { + HashMap point_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode(point_code); + point_map.put("point_code", pointDto.getPoint_code()); + point_map.put("point_id", pointDto.getPoint_id() + ""); + point_map.put("point_name", pointDto.getPoint_name()); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + } + + Boolean checked = whereJson2.getBoolean("checked"); + //是否分配货位 + if (ObjectUtil.isNotEmpty(checked) && checked) { + JSONObject jo_form = new JSONObject(); + jo_form.put("box_no", map.get("box_no")); + JSONObject struct_jo = new JSONObject(); + if (whereJson.containsKey("sect_id")) { + String need_sect = (String) whereJson.get("sect_id"); + JSONObject need_sect_jo = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_id = '" + need_sect + "'").uniqueResult(0); + //判断是否为主存区,主存区调用自动分配,虚拟区调用普通查询 + if (StrUtil.isNotEmpty(need_sect) && !need_sect_jo.getString("sect_type_attr").equals("00")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0); + } else { + jo_form.put("sect_id", whereJson.get("sect_id")); + struct_jo = this.autoDis(jo_form); + } + } else { + throw new BadRequestException("请选择需要分配的库区!"); + } + + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到适用仓位!"); + } + sect_id = struct_jo.getString("sect_id"); + sect_code = struct_jo.getString("sect_code"); + sect_name = struct_jo.getString("sect_name"); + struct_id = struct_jo.getString("struct_id"); + struct_code = struct_jo.getString("struct_code"); + struct_name = struct_jo.getString("struct_name"); + } else { + //更新入库分配表仓位相关字段 + sect_id = map.get("sect_id"); + sect_code = map.get("sect_code"); + sect_name = map.get("sect_name"); + struct_id = map.get("struct_id"); + struct_code = map.get("struct_code"); + struct_name = map.get("struct_name"); + } + HashMap dis_map = new HashMap(); + dis_map.put("sect_id", sect_id); + dis_map.put("sect_code", sect_code); + dis_map.put("sect_name", sect_name); + dis_map.put("struct_id", struct_id); + dis_map.put("struct_code", struct_code); + dis_map.put("struct_name", struct_name); + + //锁定货位 + JSONObject lock_map = new JSONObject(); + lock_map.put("end_point", struct_code); + //查询主表信息 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + lock_map.put("inv_type", mst.get("bill_type")); + lock_map.put("inv_id", mst.get("iostorinv_id")); + lock_map.put("inv_code", mst.get("bill_code")); +// inbillService.operatePoint("0", lock_map); + + //判断起点是否不为空 + JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").uniqueResult(0); + + JSONObject sect_jo = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_id ='" + sect_id + "'").uniqueResult(0); + boolean is_virtual = false; + if (sect_jo.getString("sect_type_attr").equals("09")) { + is_virtual = true; + String task_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + dis_map.put("task_id", task_id); + dis_map.put("work_status", "01"); + } + if (StrUtil.isNotEmpty(ios_dis.getString("point_id")) && !is_virtual) { +// Boolean transfer = whereJson2.getBoolean("transfer",false); + Boolean transfer = whereJson2.getBoolean("transfer"); + if (ObjectUtil.isEmpty(transfer)) { + transfer = false; + } + + //创建任务并下发 +// InTask task = new InTask(); + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "010501"); + task_form.put("start_device_code", map.get("point_code")); + task_form.put("next_device_code", struct_code); + task_form.put("vehicle_code", map.get("box_no")); + task_form.put("storagevehicle_type", map.get("storagevehicle_type")); +// String task_id = task.createTask(task_form); + // 下发 +// task.immediateNotifyAcs(task_id); + /* if (whereJson.containsKey("auto_issue")) { + }*/ +// dis_map.put("task_id", task_id); + dis_map.put("work_status", "01"); + } + + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(dis_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + + //修改库存 + //直接取出入库分配表的库存 + JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").getResultJSONArray(0); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_jo = dis_rows.getJSONObject(i); + JSONObject i_form = new JSONObject(); + i_form.put("struct_id", dis_jo.getString("struct_id")); + i_form.put("material_id", dis_jo.getString("material_id")); + i_form.put("pcsn", dis_jo.getString("pcsn")); + i_form.put("change_qty", dis_jo.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("quality_scode", "01"); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_jo.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_jo.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "31"); + + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "'").uniqueResult(0); + if (StrUtil.isNotEmpty(ios_dis.getString("point_id")) || is_virtual) { + if (dtl_jo.getDoubleValue("unassign_qty") == 0) { + //判断该明细下是否还存在未分配货位的分配明细 + JSONArray disdiv_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "' AND (struct_id = '' OR struct_id is null) AND (point_id = '' OR point_id is null)").getResultJSONArray(0); + if (disdiv_rows.size() == 0) { + dtl_jo.put("bill_status", "40"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + //判断主表下的明细是否都为40 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '40'").getResultJSONArray(0); + if (dtl_rows.size() == 0) { + mst_jo.put("bill_status", "40"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } else { + mst_jo.put("bill_status", "30"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + } + } + } else { + dtl_jo.put("bill_status", "30"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + mst_jo.put("bill_status", "30"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + } + //如果是虚拟区,直接更新完成分配任务 + if (is_virtual) { + JSONObject dis_form = new JSONObject(); + dis_form.put("task_id", dis_map.get("task_id")); +// inbillService.confirmDis(dis_form); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unDivStruct(Map jo) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + ArrayList rows = (ArrayList) jo.get("tableMater"); + HashMap whereJson = rows.get(0); + + //解锁原货位点位 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + unlock_map.put("taskdtl_type", ""); + unlock_map.put("taskdtl_id", ""); + unlock_map.put("task_code", ""); + unlock_map.put("inv_type", ""); + unlock_map.put("inv_id", ""); + unlock_map.put("inv_code", ""); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + //减去原货位的待入数 + JSONArray dis_rows = dis_wql.query("struct_code = '" + whereJson.get("struct_code") + "' AND work_status < '99'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("ivt_level", dis_row.getString("ivt_level")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + } + + //更新分配状态 + HashMap map = new HashMap<>(); + map.put("point_id", ""); + map.put("sect_id", ""); + map.put("sect_code", ""); + map.put("sect_name", ""); + map.put("struct_id", ""); + map.put("struct_code", ""); + map.put("struct_name", ""); + map.put("work_status", "00"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //修改明细状态 + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_rows.getJSONObject(0).getString("iostorinvdtl_id") + "'").uniqueResult(0); + + HashMap dtl_map = new HashMap<>(); + dtl_map.put("bill_status", "10"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //更新主表状态 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND bill_status IN ('20','30')").getResultJSONArray(0); + if (dtl_rows.size() > 0) { + mst_jo.put("bill_status", "30"); + } else { + mst_jo.put("bill_status", "10"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void divPoint(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + ArrayList rows = (ArrayList) whereJson.get("tableMater"); + String point_code = (String) whereJson.get("point_code"); + HashMap map = rows.get(0); + + HashMap point_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode(point_code); + point_map.put("point_code", pointDto.getPoint_code()); + point_map.put("point_id", pointDto.getPoint_id() + ""); + point_map.put("point_name", pointDto.getPoint_name()); + + //判断起点终点是否不为空 + JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").uniqueResult(0); + if (StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { + //创建任务 +// AbstractAcsTask task = new InTask(); + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "010501"); + task_form.put("start_device_code", point_code); + task_form.put("next_device_code", ios_dis.getString("struct_code")); + task_form.put("vehicle_code", map.get("box_no")); + //查询主表信息 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + task_form.put("inv_type", mst.get("bill_type")); + task_form.put("inv_id", mst.get("iostorinv_id")); + task_form.put("inv_code", mst.get("bill_code")); + /* String task_id = task.createTask(task_form); + point_map.put("task_id", task_id); + point_map.put("work_status", "01");*/ + } + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + + if (StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { + //修改库存 + //直接取出入库分配表的库存 + JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").getResultJSONArray(0); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_jo = dis_rows.getJSONObject(i); + //更新明细表状态 + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "'").uniqueResult(0); + if (dtl_jo.getDoubleValue("unassign_qty") == 0) { + //判断该明细下是否还存在未分配货位的分配明细 + JSONArray disdiv_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "' AND (struct_id = '' OR struct_id is null) AND (point_id = '' OR point_id is null)").getResultJSONArray(0); + if (disdiv_rows.size() == 0) { + dtl_jo.put("bill_status", "40"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + //判断主表下的明细是否都为40 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '40'").getResultJSONArray(0); + if (dtl_rows.size() == 0) { + mst_jo.put("bill_status", "40"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + } + } + } + } + } + + @Override + public JSONArray queryTask(Map whereJson) { + HashMap map = new HashMap<>(); + map.put("flag", "5"); + map.put("iostorinvdtl_id", (String) whereJson.get("iostorinvdtl_id")); + map.put("is_finish", (String) whereJson.get("checked")); + JSONArray rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).process().getResultJSONArray(0); + return rows; + } + + @Override + public JSONObject autoDis(JSONObject whereJson) { + /* + * 分配逻辑: + * 1、先查找该木箱内属于什么物料、订单,定位到具体的块、排,查看是否存在空位 + * a、存在的话,优先放在这一块这一排中(遍历) + * b、不存在则根据该订单物料大概数量、选择数量相近的一个空巷道 + * 1)存在空巷道 + * 2)不存在,则找一个双通有空位置、数量相近的巷道 + * */ + + JSONObject struct_jo = new JSONObject(); + + String box_no = whereJson.getString("box_no"); + + String sect_id = whereJson.getString("sect_id"); + + JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + box_no + "' AND status < 3").uniqueResult(0); + + String material_code = sub_jo.getString("product_name"); + + String sale_order_name = sub_jo.getString("sale_order_name"); + + HashMap row_map = new HashMap<>(); + row_map.put("material_code", material_code); + row_map.put("sale_order_name", sale_order_name); + row_map.put("sect_id", sect_id); + row_map.put("flag", "11"); + //查询到当前可用的巷道 + JSONArray rowArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + for (int i = 0; i < rowArr.size(); i++) { + JSONObject row_jo = rowArr.getJSONObject(i); + + String block_num = row_jo.getString("block_num"); + String row_num = row_jo.getString("row_num"); + String placement_type = row_jo.getString("placement_type"); + + // 判断此排是否有除:入库锁、移入锁以外的锁 + JSONArray isLock = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(isLock)) { + if (placement_type.equals("02")) { + // 左通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + break; + } else if (placement_type.equals("03")) { + // 右通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + break; + } else { + // 双通 + + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox)) { + String out_order_seq = jsonDescBox.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct)) { + struct_jo = jsonDescStruct; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox)) { + String out_order_seq2 = jsonAscBox.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct)) { + struct_jo = jsonAscStruct; + break; + } else { + // 说明这排有任务在执行,新开一排 + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num2 = empty_row.getString("block_num"); + String row_num2 = empty_row.getString("row_num"); + String placement_type2 = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + break; + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + break; + } + } else { + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + break; + } + } + } else { + continue; + } + } + } + } + } + } + } else { + continue; + } + } + + if (ObjectUtil.isEmpty(rowArr) || ObjectUtil.isEmpty(struct_jo)) { + //如果不存在相同订单物料的巷道 或者未找到相同物料订单号巷道中的货位 则 + + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + } + } else { + + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + break; + } + } + } else { + continue; + } + } + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的仓位!"); + } + return struct_jo; + } + + @Override + public JSONObject autoDisMove(JSONObject whereJson) { + /* + * 分配逻辑: + * 1、先查找该木箱内属于什么物料、订单,定位到具体的块、排,查看是否存在空位 + * a、存在的话,优先放在这一块这一排中(遍历) + * b、不存在则根据该订单物料大概数量、选择数量相近的一个空巷道 + * 1)存在空巷道 + * 2)不存在,则找一个双通有空位置、数量相近的巷道 + * */ + + + JSONObject struct_jo = new JSONObject(); + + String box_no = whereJson.getString("box_no"); + + String sect_id = whereJson.getString("sect_id"); + + String col_num = whereJson.getString("layer_num"); // 转库时用 + + JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + box_no + "' AND status < 3").uniqueResult(0); + + String material_code = sub_jo.getString("product_name"); + + String sale_order_name = sub_jo.getString("sale_order_name"); + + HashMap row_map = new HashMap<>(); + row_map.put("material_code", material_code); + row_map.put("sale_order_name", sale_order_name); + row_map.put("col_num", col_num); + row_map.put("sect_id", sect_id); + row_map.put("flag", "11"); + //查询到当前可用的巷道 + JSONArray rowArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + for (int i = 0; i < rowArr.size(); i++) { + JSONObject row_jo = rowArr.getJSONObject(i); + + String block_num = row_jo.getString("block_num"); + String row_num = row_jo.getString("row_num"); + String placement_type = row_jo.getString("placement_type"); + + // 判断此排是否有除:入库锁、移入锁以外的锁 + JSONArray isLock = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(isLock)) { + if (placement_type.equals("02")) { + // 左通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + break; + } else if (placement_type.equals("03")) { + // 右通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + break; + } else { + // 双通 + + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox)) { + String out_order_seq = jsonDescBox.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct)) { + struct_jo = jsonDescStruct; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox)) { + String out_order_seq2 = jsonAscBox.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct)) { + struct_jo = jsonAscStruct; + break; + } else { + // 说明这排有任务在执行,新开一排 + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("col_num", col_num).addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num2 = empty_row.getString("block_num"); + String row_num2 = empty_row.getString("row_num"); + String placement_type2 = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + break; + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + break; + } + } else { + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("col_num", col_num).addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + break; + } + } + } else { + continue; + } + } + } + } + } + } + } else { + continue; + } + } + + if (ObjectUtil.isEmpty(rowArr) || ObjectUtil.isEmpty(struct_jo)) { + //如果不存在相同订单物料的巷道 或者未找到相同物料订单号巷道中的货位 则 + + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("col_num", col_num).addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + } + } else { + + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("col_num", col_num).addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + break; + } + } + } else { + continue; + } + } + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的仓位!"); + } + return struct_jo; + } + + @Override + public JSONArray queryStor() { + WQLObject storTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONArray resultJSONArray = storTab.query("is_delete = '0' and is_used = '1'").getResultJSONArray(0); + return resultJSONArray; + } + + public JSONObject queryEmpStruct(JSONObject whereJson) { + JSONObject struct_jo = new JSONObject(); + String sect_id = whereJson.getString("sect_id"); + String placement_type = whereJson.getString("placement_type"); + String material_code = whereJson.getString("material_code"); + String sale_order_name = whereJson.getString("sale_order_name"); + + //根据分切计划查询该订单物料大概还有多少未入 + JSONObject row_map = new JSONObject(); + row_map.put("material_code", material_code); + row_map.put("sale_order_name", sale_order_name); + row_map.put("sect_id", sect_id); + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num2 = empty_row.getString("block_num"); + String row_num2 = empty_row.getString("row_num"); + String placement_type2 = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + } + } else { + + //如果查询不到空的一排,则查询有空位双通的一排 + JSONObject have_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(have_row)) { + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + //判断该排是左边为空,还是右边为空 + JSONObject right_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq").uniqueResult(0); + JSONObject left_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq desc").uniqueResult(0); + if (StrUtil.isNotEmpty(right_str.getString("storagevehicle_code")) || !right_str.getString("lock_type").equals("1")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq").uniqueResult(0); + } + if (StrUtil.isNotEmpty(left_str.getString("storagevehicle_code")) || !left_str.getString("lock_type").equals("1")) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq desc").uniqueResult(0); + } + } + + } + return struct_jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + + //判断指令状态,只能修改生成状态的任务 + String task_code = (String) whereJson.get("task_code");/* + TaskDto taskDto = taskService.findByCode(task_code); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("01")) { + throw new BadRequestException("只能修改任务状态为生成的任务!"); + }*/ + + //判断入库点是否修改 + if (!whereJson.get("point_code").equals(whereJson.get("new_point_code"))) { + HashMap dis_map = new HashMap<>(); + HashMap task_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode((String) whereJson.get("new_point_code")); + dis_map.put("point_code", pointDto.getPoint_code()); + dis_map.put("point_id", pointDto.getPoint_id() + ""); + dis_map.put("point_name", pointDto.getPoint_name()); + task_map.put("start_point_code", (String) whereJson.get("new_point_code")); + //修改分配表起点,任务表起点 + dis_wql.update(dis_map, "task_id = '" + whereJson.get("task_id") + "'"); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + } + + + //判断目标货位是否修改 + if (!whereJson.get("struct_code").equals(whereJson.get("new_struct_code"))) { + //修改任务表终点 + HashMap task_map = new HashMap<>(); + task_map.put("next_point_code", (String) whereJson.get("new_struct_code")); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + + //更新分配表的目的仓位 + StructattrDto structattrDto = structattrService.findByCode((String) whereJson.get("new_struct_code")); + HashMap str_map = new HashMap<>(); + str_map.put("sect_id", structattrDto.getSect_id()); + str_map.put("sect_code", structattrDto.getSect_code()); + str_map.put("sect_name", structattrDto.getSect_name()); + str_map.put("struct_id", structattrDto.getStruct_id()); + str_map.put("struct_code", structattrDto.getStruct_code()); + str_map.put("struct_name", structattrDto.getStruct_name()); + dis_wql.update(str_map, "task_id = '" + whereJson.get("task_id") + "'"); + + //原货位解锁,新货位加锁 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "2"); + point_table.update(lock_map, "point_code = '" + whereJson.get("new_struct_code") + "'"); + struct_table.update(lock_map, "struct_code = '" + whereJson.get("new_struct_code") + "'"); + + //减去原库位待入数,加上新货位待入数 + //查询为该任务id的入库分配表,进行循环物料修改库存 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("ivt_level", dis_row.getString("ivt_level")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + i_form.put("struct_id", structattrDto.getStruct_id()); +// storPublicService.IOStor(i_form, "31"); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + + //判断指令状态,只能修改生成状态的任务 + /* String task_id = (String) whereJson.get("task_id"); + TaskDto taskDto = taskService.findByDtlId(task_id); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("01")) { + throw new BadRequestException("只能修改任务状态为生成的任务!"); + }*/ + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + //更新任务表状态为删除 + HashMap task_map = new HashMap<>(); + task_map.put("is_delete", "1"); + task_map.put("update_optid", currentUserId); + task_map.put("update_optname", nickName); + task_map.put("update_time", now); + //修改分配表起点,任务表起点 + task_wql.update(task_map, "task_id = '" + whereJson.get("task_id") + "'"); + + //解锁原货位点位 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + unlock_map.put("taskdtl_type", ""); + unlock_map.put("taskdtl_id", ""); + unlock_map.put("task_code", ""); + unlock_map.put("inv_type", ""); + unlock_map.put("inv_id", ""); + unlock_map.put("inv_code", ""); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + //减去原货位的待入数 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + } + //更新分配状态 + HashMap map = new HashMap<>(); + map.put("point_id", ""); + map.put("sect_id", ""); + map.put("sect_code", ""); + map.put("sect_name", ""); + map.put("struct_id", ""); + map.put("struct_code", ""); + map.put("struct_name", ""); + map.put("task_id", ""); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //修改明细状态 + HashMap dtl_map = new HashMap<>(); + map.put("bill_status", "10"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //更新主表状态 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND bill_status IN ('20','30')").getResultJSONArray(0); + if (dtl_rows.size() > 0) { + mst_jo.put("bill_status", "30"); + } else { + mst_jo.put("bill_status", "10"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void reIssueTask(Map whereJson) { + String task_id = (String) whereJson.get("task_id"); + //判断指令状态,只能下发生成、执行中状态的任务 + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!task_jo.getString("task_status").equals("04")) { + throw new BadRequestException("只能修改任务状态为未下发的任务!"); + } +// AbstractAcsTask task = new InTask(); + //调用ACS接受任务接口 + /* JSONObject result = task.immediateNotifyAcs(task_id); + if (ObjectUtil.isNotEmpty(result)) { + String status = result.getString("status"); + if ("200".equals(status)) { + HashMap map = new HashMap<>(); + //更新任务指令为下发 + JSONObject task_map = new JSONObject(); + task_map.put("task_id", task_id); + task.updateTaskStatus(task_map, "1"); + } else { + throw new BadRequestException("任务下发失败:" + result.getString("message")); + } + }*/ + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirmTask(Map whereJson) { + //判断指令状态,只能下发生成、执行中状态的任务 + String task_code = (String) whereJson.get("task_code"); + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_code = '" + task_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("请输入正确的任务号!"); + } + /*if (!task_jo.getString("task_status").equals("03")) { + throw new BadRequestException("只能修改任务状态为执行中的任务!"); + }*/ + +/* AbstractAcsTask task = new InTask(); + task.updateTaskStatus(task_jo, TaskStatusEnum.FINISHED.getCode());*/ + } + + @Override + public void cancelTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject dtl_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + + + //判断指令状态,只能取消完成状态的任务 + String task_code = (String) whereJson.get("task_code"); + /* TaskDto taskDto = taskService.findByCode(task_code); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("99")) { + throw new BadRequestException("只能取消任务状态为完成中的任务!"); + }*/ + + //判断主表是否为99,如果为99不允许取消 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (mst_jo.getString("bill_status").equals("99")) { + throw new BadRequestException("单据已完成,无法进行取消任务操作!"); + } + + //变更任务状态 + HashMap task_map = new HashMap(); + task_map.put("task_status", "01"); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + + //更新实际数量 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_row = dis_rows.getJSONObject(i); + double real_qty = dis_row.getDoubleValue("real_qty"); + dis_row.put("real_qty", "0"); + dis_row.put("work_status", "01"); + dis_wql.update(dis_row); + + //更新明细实际数量 + JSONObject dtl_jo = dtl_wql.query("iostorinvdtl_id = '" + dis_row.getString("iostorinvdtl_id") + "'").uniqueResult(0); + double old_real_qty = dtl_jo.getDoubleValue("real_qty"); + dtl_jo.put("real_qty", NumberUtil.sub(old_real_qty, real_qty)); + dtl_wql.update(dtl_jo); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + + //校验主表状态为分配中、分配完 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (!mst_jo.getString("bill_status").equals("30") && !mst_jo.getString("bill_status").equals("40")) { + throw new BadRequestException("主表状态必须为分配中、分配完!"); + } + + //分配中任务状态必须全部为完成 + JSONArray dis_rows = dis_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND work_status < '99'").getResultJSONArray(0); + if (dis_rows.size() > 0) { + throw new BadRequestException("存在未完成的作业,或存在组盘记录!"); + } + + //将明细全部变为99 + HashMap map = new HashMap(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND bill_status < '99'").getResultJSONArray(0); + + //完成单据 +// inbillService.confirmMst(JSONObject.parseObject(JSON.toJSONString(whereJson))); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void backConfirm(Map whereJson) { + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + WQLObject mst_wql = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + //校验主表状态为生成 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (!mst_jo.getString("bill_status").equals("10")) { + throw new BadRequestException("主表状态必须为生成!"); + } + + JSONObject mst_row = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + JSONArray dtl_rows = dtl_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").getResultJSONArray(0); + + //生成手工出库单 + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + whereJson.put("iostorinv_id", iostorinv_id); + whereJson.put("bill_code", bill_code); + whereJson.put("io_type", "1"); + whereJson.put("bill_type", "010601"); + whereJson.put("buss_type", ((String) whereJson.get("bill_type")).substring(0, 4)); + mst_wql.insert(whereJson); + for (int i = 0; i < dtl_rows.size(); i++) { + JSONObject dtl_row = dtl_rows.getJSONObject(i); + dtl_row.put("source_billdtl_id", dtl_row.getString("iostorinvdtl_id")); + dtl_row.put("source_bill_type", mst_row.getString("bill_type")); + dtl_row.put("source_bill_code", mst_row.getString("bill_code")); + dtl_row.put("source_bill_table", "ST_IVT_IOStorInvDtl"); + dtl_row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId()); + dtl_row.put("iostorinv_id", iostorinv_id); + dtl_row.put("bill_status", "10"); + dtl_wql.insert(dtl_row); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + mst_row.put("bill_status", "99"); + mst_row.put("confirm_optid", currentUserId); + mst_row.put("confirm_optname", nickName); + mst_row.put("confirm_time", now); + //更新主表状态为99 + mst_wql.update(mst_row); + + HashMap map = new HashMap<>(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + mst_row.get("iostorinv_id") + "'"); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql new file mode 100644 index 00000000..1dcef70c --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql @@ -0,0 +1,134 @@ +[交易说明] + 交易名: 成品入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.bill_type TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.iostorinvdtl_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + ST_IVT_IOStorInv + WHERE + io_type = '0' + AND is_delete = '0' + + OPTION 输入.stor_id <> "" + stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.begin_time <> "" + input_time <= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + input_time >= 输入.end_time + ENDOPTION + + OPTION 输入.bill_status <> "" + bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.bill_type <> "" + bill_type = 输入.bill_type + ENDOPTION + + OPTION 输入.bill_code <> "" + bill_code LIKE 输入.bill_code + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + dtl.*, + mater.material_code, + mater.material_name, + mater.material_spec + FROM + ST_IVT_IOStorInvDtl dtl + LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id + WHERE + mst.io_type = '0' + AND mst.is_delete = '0' + + OPTION 输入.bill_code <> "" + mst.bill_code = 输入.bill_code + ENDOPTION + + order by dtl.seq_no ASC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + dis.*, + mater.material_code, + mater.material_name, + mater.material_spec, + point.point_code + FROM + ST_IVT_IOStorInvDis dis + LEFT JOIN sch_base_point point ON point.point_id = dis.point_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + WHERE + IFNULL(dis.task_id,'') = '' + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + order by dis.seq_no ASC + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml index c3d14591..1e901c3b 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -73,6 +73,16 @@ spring: password: ${REDIS_PWD:} #连接超时时间 timeout: 5000 + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 # 登录相关配置 login: # 登录缓存 diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml new file mode 100644 index 00000000..b1296e0a --- /dev/null +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev1.yml @@ -0,0 +1,201 @@ +server: + port: 8011 +#配置数据源 +spring: + data: + elasticsearch: + repositories: + enabled: true + client: + reactive: + #endpoints: 172.31.185.110:9200,172.31.154.9:9200 #内网 + # endpoints: 47.96.133.178:8200 #外网 + endpoints: http://47.96.133.178:8200 #外网 + elasticsearch: + rest: + #uris: 172.31.185.110:9200,172.31.154.9:9200 #内网 + # uris: 47.96.133.178:8200 #外网 + uris: http://47.96.133.178:8200 #外网 + username: elastic + password: 123456 + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + #url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + username: ${DB_USER:shenhua} + #password: ${DB_PWD:P@ssw0rd} + #password: ${DB_PWD:root} + #password: ${DB_PWD:Root.123456} + password: ${DB_PWD:123456789} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 30 + # 是否自动回收超时连接 + remove-abandoned: true + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + + redis: + #数据库索引 + database: ${REDIS_DB:1} + #host: ${REDIS_HOST:127.0.0.1} + host: ${REDIS_HOST:localhost} + port: ${REDIS_PORT:6379} + password: ${REDIS_PWD:} + #连接超时时间 + timeout: 5000 + redisson: + config: | + threads: 4 + nettyThreads: 4 + singleServerConfig: + connectionMinimumIdleSize: 8 + connectionPoolSize: 8 + address: redis://127.0.0.1:6379 + idleConnectionTimeout: 10000 + timeout: 3000 +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#jwt +jwt: + header: Authorization + # 令牌前缀 + token-start-with: Bearer + # 必须使用最少88位的Base64对该令牌进行编码 + base64-secret: ZmQ0ZGI5NjQ0MDQwY2I4MjMxY2Y3ZmI3MjdhN2ZmMjNhODViOTg1ZGE0NTBjMGM4NDA5NzYxMjdjOWMwYWRmZTBlZjlhNGY3ZTg4Y2U3YTE1ODVkZDU5Y2Y3OGYwZWE1NzUzNWQ2YjFjZDc0NGMxZWU2MmQ3MjY1NzJmNTE0MzI= + # 令牌过期时间 此处单位/毫秒 ,默认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续期 + detect: 1800000 + # 续期时间范围,默认1小时,单位毫秒 + renew: 3600000 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +#是否开启 swagger-ui +swagger: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 + +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: + cookie: + # 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com + domain: + +#jetcache: +# defaultCacheType: LOCAL +# statIntervalMinutes: 15 +# areaInCacheName: false +# hiddenPackages: com.yb +# local: +# default: +# type: caffeine +# limit: 100 +# keyConvertor: fastjson +# expireAfterWriteInMillis: 60000 +# remote: +# default: +# type: redis.lettuce +# keyConvertor: fastjson +# valueEncoder: kryo +# valueDecoder: kryo +# poolConfig: +# minIdle: 5 +# maxIdle: 200 +# maxTotal: 1000 +# uri: +# - redis://127.0.0.1:6379 +es: + index: mes_log diff --git a/mes/hd/nladmin-system/src/main/resources/config/application.yml b/mes/hd/nladmin-system/src/main/resources/config/application.yml index be230f1c..82bf6f08 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application.yml @@ -43,7 +43,7 @@ rsa: private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A== logging: file: - path: E:\logs\nlwms\ + path: D:\logs\nlwms\ demo: monitor: server-url: https://www.demo-monitor.com diff --git a/mes/qd/src/api/wms/sch/region.js b/mes/qd/src/api/wms/sch/region.js index cfaf0da6..fa7605e5 100644 --- a/mes/qd/src/api/wms/sch/region.js +++ b/mes/qd/src/api/wms/sch/region.js @@ -48,4 +48,12 @@ export function getPointTypeSelectByCode(code) { }) } -export default { add, edit, del, changeActive, getPointStatusSelectByCode, getPointTypeSelectByCode } +export function getRegionSelect(data) { + return request({ + url: 'api/region/getRegionSelect', + method: 'post', + data + }) +} + +export default { add, edit, del, changeActive, getPointStatusSelectByCode, getPointTypeSelectByCode, getRegionSelect } diff --git a/mes/qd/src/views/wms/cacheline/position/index.vue b/mes/qd/src/views/wms/cacheline/position/index.vue index 5032cc9e..7afff139 100644 --- a/mes/qd/src/views/wms/cacheline/position/index.vue +++ b/mes/qd/src/views/wms/cacheline/position/index.vue @@ -61,7 +61,7 @@ - + diff --git a/mes/qd/src/views/wms/mps/produce/index.vue b/mes/qd/src/views/wms/mps/produce/index.vue index c2eac439..2ebe10db 100644 --- a/mes/qd/src/views/wms/mps/produce/index.vue +++ b/mes/qd/src/views/wms/mps/produce/index.vue @@ -752,10 +752,8 @@ export default { var orders = [] console.log(rows) rows.forEach((item) => { - debugger orders.push(item.workprocedure_id) }) - debugger crudProduceshiftorder.submits(orders).then(res => { this.crud.notify('下发成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.toQuery() diff --git a/mes/qd/src/views/wms/pub/PointDialog.vue b/mes/qd/src/views/wms/pub/PointDialog.vue new file mode 100644 index 00000000..83ddd448 --- /dev/null +++ b/mes/qd/src/views/wms/pub/PointDialog.vue @@ -0,0 +1,202 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/AddDialog.vue b/mes/qd/src/views/wms/st/productIn/AddDialog.vue new file mode 100644 index 00000000..49f5a9ab --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/AddDialog.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/AddDtl.vue b/mes/qd/src/views/wms/st/productIn/AddDtl.vue new file mode 100644 index 00000000..d09dd0f7 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/AddDtl.vue @@ -0,0 +1,182 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/DivDialog.vue b/mes/qd/src/views/wms/st/productIn/DivDialog.vue new file mode 100644 index 00000000..89dec7ea --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/DivDialog.vue @@ -0,0 +1,573 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue b/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue new file mode 100644 index 00000000..a8f2c51d --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue @@ -0,0 +1,268 @@ + + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/ViewDialog.vue b/mes/qd/src/views/wms/st/productIn/ViewDialog.vue new file mode 100644 index 00000000..3a9cf8ff --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/ViewDialog.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/index.vue b/mes/qd/src/views/wms/st/productIn/index.vue new file mode 100644 index 00000000..7fd266c8 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/index.vue @@ -0,0 +1,321 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/productin.js b/mes/qd/src/views/wms/st/productIn/productin.js new file mode 100644 index 00000000..acc83091 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/productin.js @@ -0,0 +1,220 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: '/api/in/productIn', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: '/api/in/productIn', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: '/api/in/productIn', + method: 'put', + data + }) +} + +export function getType(params) { + return request({ + url: '/api/in/productIn/getType', + method: 'get', + params + }) +} + +export function getBillDtl(params) { + return request({ + url: '/api/in/productIn/getBillDtl', + method: 'get', + params + }) +} + +export function getIODtl(data) { + return request({ + url: '/api/in/productIn/getIODtl', + method: 'post', + data + }) +} + +export function insertDtl(data) { + return request({ + url: '/api/in/productIn/insertDtl', + method: 'post', + data + }) +} + +export function commit(data) { + return request({ + url: '/api/in/productIn/commit', + method: 'post', + data + }) +} + +export function checkVehicle(data) { + return request({ + url: '/api/in/productIn/checkVehicle', + method: 'post', + data + }) +} + +export function confirmvehicle(data) { + return request({ + url: '/api/in/productIn/confirmvehicle', + method: 'post', + data + }) +} + +export function deleteDisDtl(data) { + return request({ + url: '/api/in/productIn/deleteDisDtl', + method: 'post', + data + }) +} + +export function getDisDtl(data) { + return request({ + url: '/api/in/productIn/getDisDtl', + method: 'post', + data + }) +} + +export function divStruct(data) { + return request({ + url: '/api/in/productIn/divStruct', + method: 'post', + data + }) +} + +export function unDivStruct(data) { + return request({ + url: '/api/in/productIn/unDivStruct', + method: 'post', + data + }) +} + +export function divPoint(data) { + return request({ + url: '/api/in/productIn/divPoint', + method: 'post', + data + }) +} + +export function queryTask(data) { + return request({ + url: '/api/in/productIn/queryTask', + method: 'post', + data + }) +} + +export function bucketDtl(data) { + return request({ + url: '/api/in/productIn/bucketDtl', + method: 'post', + data + }) +} + +export function updateTask(data) { + return request({ + url: '/api/in/productIn/updateTask', + method: 'post', + data + }) +} + +export function delTask(data) { + return request({ + url: '/api/in/productIn/delTask', + method: 'post', + data + }) +} + +export function reIssueTask(data) { + return request({ + url: '/api/in/productIn/reIssueTask', + method: 'post', + data + }) +} + +export function confirmTask(data) { + return request({ + url: '/api/in/productIn/confirmTask', + method: 'post', + data + }) +} + +export function cancelTask(data) { + return request({ + url: '/api/in/productIn/cancelTask', + method: 'post', + data + }) +} + +export function confirm(data) { + return request({ + url: '/api/in/productIn/confirm', + method: 'post', + data + }) +} + +export function backConfirm(data) { + return request({ + url: '/api/in/productIn/backConfirm', + method: 'post', + data + }) +} + +export function delDis(data) { + return request({ + url: '/api/in/productIn/delDis', + method: 'post', + data + }) +} + +export function queryBoxMater(data) { + return request({ + url: '/api/in/productIn/queryBoxMater', + method: 'post', + data + }) +} + +export function queryStor() { + return request({ + url: '/api/in/productIn/queryStor', + method: 'post' + }) +} + +export default { add, edit, del, getType, getBillDtl, insertDtl, getIODtl, commit, checkVehicle, + confirmvehicle, deleteDisDtl, getDisDtl, divStruct, unDivStruct, divPoint, delDis, queryBoxMater, + queryTask, bucketDtl, updateTask, delTask, reIssueTask, confirmTask, cancelTask, confirm, backConfirm, queryStor } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java index 13fe7cce..d50cf619 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java @@ -9,7 +9,6 @@ import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.agv.server.AgvService; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.impl.NDCAgvServiceImpl; import org.nl.acs.auto.run.NDCSocketConnectionAutoRun; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/StatusEnum.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/StatusEnum.java new file mode 100644 index 00000000..34203c8b --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/StatusEnum.java @@ -0,0 +1,27 @@ +package org.nl.acs.ext.wms.statusEnum; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.Arrays; + +/* + * @author ZZQ + * @Date 2023/3/15 4:33 下午 + */ +@Getter +@AllArgsConstructor +public enum StatusEnum { + TASK_READY("0", "就绪", ""), + TASK_RUNNING("1", "执行中", "6"), + TASK_FINISH("2", "完成", "7"), + TASK_CANNEL("3", "取消", "8"); + + private String code; + private String desc; + private String ext; + + +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/WorkerOrderEnum.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/WorkerOrderEnum.java new file mode 100644 index 00000000..b76c5ddf --- /dev/null +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/statusEnum/WorkerOrderEnum.java @@ -0,0 +1,36 @@ +package org.nl.acs.ext.wms.statusEnum; + +/** + * @Author: lyd + * @Description: 工单枚举 + * @Date: 2023/3/16 + */ +public enum WorkerOrderEnum { + READY("就绪", "0", ""), + PRODUCTING("生产中", "1", "3"), + COMPLETE("完成", "2", "5"), + CANCEL("取消", "3", "3"), + STOP("暂停", "4", "4"); + + private String name; + private String code; + private String mesCode; + + WorkerOrderEnum(String name, String code, String mesCode) { + this.name = name; + this.code = code; + this.mesCode = mesCode; + } + + public String getName() { + return name; + } + + public String getCode() { + return code; + } + + public String getMesCode() { + return mesCode; + } +} diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java index f0bc3c21..3cb8d580 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -86,6 +86,8 @@ public interface InstructionService { */ Instruction findByTaskcode(String code); + Instruction findByTaskCodeFromCache(String taskCode); + Instruction findByTaskcodeAndStatus(String code); Instruction findByTaskcodeAndStatus(String code,String status); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 4e37d525..6c99efbd 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -256,6 +256,17 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu return obj; } + @Override + public Instruction findByTaskCodeFromCache(String taskCode) { + return Optional + .ofNullable(this.instructions) + .orElse(new ArrayList<>()) + .stream() + .filter(i -> i.getTask_code().equals(taskCode)) + .findFirst() + .orElse(null); + } + @Override public Instruction findByTaskcodeAndStatus(String code) { Iterator var3 = instructions.iterator(); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java index 571976df..8534eec4 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java @@ -53,6 +53,19 @@ public interface ProduceshiftorderService { */ ProduceshiftorderDto findByCode(String code); + /** + * 根据编码从内存查询 + * @param code code + * @return Produceshiftorder + */ + ProduceshiftorderDto findByCodeFromCache(String code); + + /** + * 根据id从内存查询 + * @param id id + * @return Produceshiftorder + */ + ProduceshiftorderDto findByIdFromCache(String id); /** * 创建 @@ -102,6 +115,8 @@ public interface ProduceshiftorderService { ProduceshiftorderDto findOrderByDeviceCode(String device_code); + ProduceshiftorderDto findOrderByExtOrderId(String ext_order_id); + /** * 工单同步 */ diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java index f45fd129..da8afd29 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java @@ -6,8 +6,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import org.nl.acs.auto.initial.ApplicationAutoInitial; -import org.nl.acs.device.service.DeviceExtraService; -import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_machine_storage_station.HailiangCleaningMachineStorageStationDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_engraving_machine.HailiangEngravingMachineDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_packer_station.HailiangPackerStationDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_device.HailiangSpecialDeviceDriver; @@ -15,6 +13,7 @@ import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_stacking_statio import org.nl.acs.device_driver.basedriver.hailiang_smart_plc_test.HailiangSmartplcTestDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; import org.nl.acs.order.service.ProduceshiftorderService; import org.nl.acs.order.service.dto.ProduceshiftorderDto; import org.nl.modules.common.exception.BadRequestException; @@ -33,6 +32,8 @@ import org.springframework.data.domain.Pageable; import java.math.BigDecimal; import java.util.*; import java.io.IOException; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.date.DateUtil; @@ -51,10 +52,9 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, ApplicationAutoInitial { - private final org.nl.acs.opc.DeviceAppService deviceAppService; - private final DeviceExtraService deviceExtraService; + private final DeviceAppService deviceAppService; - List order = new ArrayList(); + CopyOnWriteArrayList order = new CopyOnWriteArrayList<>(); @Autowired AcsToWmsService acsToWmsService; @@ -65,13 +65,16 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } public synchronized void reload() { - this.order = this.queryAll(" order_status !='2' and order_status !='3' and is_deleted =0"); + this.order = (CopyOnWriteArrayList) this.queryAll("order_status !='2' and order_status != '3' and is_deleted =0"); } @Override public List queryAll(String whereJson) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); - JSONArray arr = wo.query(whereJson).getResultJSONArray(0); + JSONArray arr = wo.query(whereJson, "create_time").getResultJSONArray(0); + if (ObjectUtil.isEmpty(arr)) { + return null; + } List list = arr.toJavaList(ProduceshiftorderDto.class); return list; } @@ -87,7 +90,10 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A @Override public List queryAll(Map whereJson) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); - JSONArray arr = wo.query().getResultJSONArray(0); + JSONArray arr = wo.query("is_deleted = '0'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(arr)) { + return null; + } List list = arr.toJavaList(ProduceshiftorderDto.class); return list; } @@ -95,7 +101,10 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A @Override public ProduceshiftorderDto findById(String order_id) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); - JSONObject json = wo.query("order_id ='" + order_id + "'").uniqueResult(0); + JSONObject json = wo.query("order_id ='" + order_id + "' and is_deleted = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) { + return null; + } final ProduceshiftorderDto obj = (ProduceshiftorderDto) JSONObject.toJavaObject(json, ProduceshiftorderDto.class); return obj; } @@ -103,25 +112,39 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A @Override public ProduceshiftorderDto findByCode(String code) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); - JSONObject json = wo.query("order_code ='" + code + "'").uniqueResult(0); + JSONObject json = wo.query("order_code ='" + code + "' and is_deleted = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(json)) { + return null; + } final ProduceshiftorderDto obj = (ProduceshiftorderDto) JSONObject.toJavaObject(json, ProduceshiftorderDto.class); return obj; } + @Override + public ProduceshiftorderDto findByCodeFromCache(String code) { + return Optional.ofNullable(this.order).orElse(new CopyOnWriteArrayList<>()).stream().filter(o -> o.getOrder_code().equals(code)).findFirst().orElse(null); + } + + @Override + public ProduceshiftorderDto findByIdFromCache(String id) { + return Optional.ofNullable(this.order).orElse(new CopyOnWriteArrayList<>()).stream().filter(o -> o.getOrder_id().equals(id)).findFirst().orElse(null); + } + @Override @Transactional(rollbackFor = Exception.class) public void create(ProduceshiftorderDto dto) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); Device device = deviceAppService.findDeviceByCode(dto.getDevice_code()); if (ObjectUtil.isEmpty(device)) { throw new BadRequestException("未找到对应设备:" + dto.getDevice_code()); } - JSONArray resultJSONArray = wo.query("is_deleted = '0' and order_status in ('0', '1') and device_code = '" + dto.getDevice_code() + "'").getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(resultJSONArray)) { - throw new BadRequestException("该设备已存在未完成工单,不能下发"); + //判断是否存在该设备未完成的工单信息 + ProduceshiftorderDto pdNow = this.findOrderByDeviceCode(dto.getDevice_code()); + if (ObjectUtil.isNotEmpty(pdNow)) { + throw new BadRequestException("该设备已存在未完成工单,不能下发!"); } - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); dto.setOrder_id(IdUtil.simpleUUID()); if (StrUtil.isEmpty(dto.getOrder_code())) { String order_no = CodeUtil.getNewCode("ORDER_NO"); @@ -131,11 +154,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A if (StrUtil.isEmpty(dto.getCreate_by())) { dto.setCreate_by(currentUsername); } - if (StrUtil.isEmpty(dto.getUpdate_by())) { - dto.setUpdate_by(currentUsername); - } dto.setCreate_time(now); - dto.setUpdate_time(now); String is_needmove = dto.getIs_needmove(); //海亮专机 @@ -151,24 +170,12 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); - //专机下发工单信号:倒料数量(-99999) 当前产量清零(1) 订单生产总量 每箱接料数量 工单号 - - String extra_value = hailiangSpecialDeviceDriver.getExtraValue().get("one_qty").toString(); - - if (StrUtil.equals(is_needmove, "1")) { - if (ObjectUtil.isEmpty(extra_value)) { - throw new BadRequestException("满料框数量为空"); - } - } else { - extra_value = "99999"; - } - if (!hailiangSpecialDeviceDriver.getItemProtocol().getIsonline()){ + if (!hailiangSpecialDeviceDriver.getItemProtocol().getIsonline()) { throw new BadRequestException("设备未开机,开工失败!"); } - dto.setOne_qty(BigDecimal.valueOf((Long.parseLong(extra_value)))); hailiangSpecialDeviceDriver.writing("to_clear", "1"); hailiangSpecialDeviceDriver.writing("to_order", dto.getOrder_code()); - hailiangSpecialDeviceDriver.writing("to_one_box_num", extra_value); + hailiangSpecialDeviceDriver.writing("to_one_box_num", String.valueOf(dto.getOne_qty())); hailiangSpecialDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); hailiangSpecialDeviceDriver.writing("to_out_num", "0"); hailiangSpecialDeviceDriver.writing("to_pause", "0"); @@ -176,36 +183,30 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); - String extra_value = hailiangEngravingMachineDeviceDriver.getExtraValue().get("one_qty").toString(); - if (StrUtil.equals(is_needmove, "1")) { - if (ObjectUtil.isEmpty(extra_value)) { - throw new BadRequestException("满料框数量为空"); - } - } else { - extra_value = "99999"; - } - dto.setOne_qty(BigDecimal.valueOf((Long.parseLong(extra_value)))); - if (!hailiangEngravingMachineDeviceDriver.getItemProtocol().getIsonline()){ + if (!hailiangEngravingMachineDeviceDriver.getItemProtocol().getIsonline()) { throw new BadRequestException("设备未开机,工单下发失败!"); } hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); hailiangEngravingMachineDeviceDriver.writing("to_order", dto.getOrder_code()); - hailiangEngravingMachineDeviceDriver.writing("to_one_box_num", extra_value); - hailiangEngravingMachineDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); + hailiangEngravingMachineDeviceDriver.writing("to_one_box_num", String.valueOf(dto.getOne_qty())); + hailiangEngravingMachineDeviceDriver.writing("to_order_prod_num", String.valueOf(dto.getQty())); } if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); - if (!hailiangPackerStationDeviceDriver.getItemProtocol().getIsonline()){ + if (!hailiangPackerStationDeviceDriver.getItemProtocol().getIsonline()) { throw new BadRequestException("设备未开机,工单下发失败"); } hailiangPackerStationDeviceDriver.writing("to_clear", "1"); hailiangPackerStationDeviceDriver.writing("to_order", dto.getOrder_code()); - hailiangPackerStationDeviceDriver.writing("to_order_prod_num", dto.getQty().toString()); + hailiangPackerStationDeviceDriver.writing("to_order_prod_num", String.valueOf(dto.getQty())); } if (device.getDeviceDriver() instanceof HailiangSmartplcTestDeviceDriver) { hailiangSmartplcTestDeviceDriver = (HailiangSmartplcTestDeviceDriver) device.getDeviceDriver(); + if (!hailiangSmartplcTestDeviceDriver.getItemProtocol().getIsonline()) { + throw new BadRequestException("设备未开机,工单下发失败"); + } hailiangSmartplcTestDeviceDriver.writing("to_clear", "1"); hailiangSmartplcTestDeviceDriver.writing("to_task", dto.getOrder_code()); hailiangSmartplcTestDeviceDriver.writing("to_qty", dto.getQty().toString()); @@ -213,27 +214,27 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A hailiangSmartplcTestDeviceDriver.writing("to_pause", "0"); } - if (device.getDeviceDriver() instanceof HailiangStackingStationDriver){ + if (device.getDeviceDriver() instanceof HailiangStackingStationDriver) { String lane_tray_template = dto.getLane_tray_template(); String to_tray_info = ""; - if (lane_tray_template.equals("1")){ + if (lane_tray_template.equals("1")) { to_tray_info = lane_tray_template + "12"; } - if (lane_tray_template.equals("2")){ + if (lane_tray_template.equals("2")) { to_tray_info = lane_tray_template + "24"; } - if (StrUtil.isEmpty(dto.getTray_num())){ + if (StrUtil.isEmpty(dto.getTray_num())) { dto.setTray_num("1"); } hailiangStackingStationDriver = (HailiangStackingStationDriver) device.getDeviceDriver(); - if (!hailiangStackingStationDriver.getItemProtocol().getIsonline()){ + if (!hailiangStackingStationDriver.getItemProtocol().getIsonline()) { throw new BadRequestException("设备未开机,工单下发失败"); } - hailiangStackingStationDriver.writing("to_clear","1"); - hailiangStackingStationDriver.writing("to_order",dto.getOrder_code()); - hailiangStackingStationDriver.writing("to_order_prod_num",dto.getQty().toString()); - hailiangStackingStationDriver.writing("to_tray_num",dto.getTray_num()); - hailiangStackingStationDriver.writing("to_tray_info",to_tray_info); + hailiangStackingStationDriver.writing("to_clear", "1"); + hailiangStackingStationDriver.writing("to_order", dto.getOrder_code()); + hailiangStackingStationDriver.writing("to_order_prod_num", dto.getQty().toString()); + hailiangStackingStationDriver.writing("to_tray_num", dto.getTray_num()); + hailiangStackingStationDriver.writing("to_tray_info", to_tray_info); } JSONObject json = (JSONObject) JSONObject.toJSON(dto); @@ -254,30 +255,26 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.update(json); - Iterator iterator = order.iterator(); - while (iterator.hasNext()) { - ProduceshiftorderDto instruction = iterator.next(); - if (instruction.getOrder_code().equals(dto.getOrder_code())) { - iterator.remove(); - } - } + this.order.removeIf(o -> { + return o.getOrder_code().equals(dto.getOrder_code()); + }); if (StrUtil.equals(dto.getOrder_status(), "0") || StrUtil.equals(dto.getOrder_status(), "1")) { - order.add(dto); + this.order.add(dto); } if (StrUtil.equals(dto.getOrder_status(), "3")) { WQLObject wo1 = WQLObject.getWQLObject("acs_deviceisonline"); String device_code = dto.getDevice_code(); JSONObject jsonObject = wo1.query("device_code = '" + device_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonObject)){ + if (ObjectUtil.isEmpty(jsonObject)) { jsonObject = new JSONObject(); } JSONObject map = new JSONObject(); - map.put("online_id",IdUtil.simpleUUID()); - map.put("device_code",device_code); + map.put("online_id", IdUtil.simpleUUID()); + map.put("device_code", device_code); map.put("order_code", dto.getOrder_code()); - map.put("online_status","0"); - map.put("create_by",currentUsername); - map.put("create_time",now); + map.put("online_status", "0"); + map.put("create_by", currentUsername); + map.put("create_time", now); Device device = deviceAppService.findDeviceByCode(device_code); HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; HailiangPackerStationDeviceDriver hailiangPackerStationDeviceDriver; @@ -285,61 +282,61 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A HailiangStackingStationDriver hailiangStackingStationDriver; if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); - if (hailiangSpecialDeviceDriver.getStatus_type() == 1){ - if (ObjectUtil.isEmpty(jsonObject)){ + if (hailiangSpecialDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)) { wo1.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",dto.getOrder_code()); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", dto.getOrder_code()); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo1.update(jsonObject); } - }else { - hailiangSpecialDeviceDriver.writing("to_order_compel_finished","1"); + } else { + hailiangSpecialDeviceDriver.writing("to_order_compel_finished", "1"); hailiangSpecialDeviceDriver.writing("to_confirm_finished", "1"); hailiangSpecialDeviceDriver.writing("to_order", "0"); hailiangSpecialDeviceDriver.writing("to_clear", "1"); } } else if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); - if (hailiangPackerStationDeviceDriver.getStatus_type() == 1){ - if (ObjectUtil.isEmpty(jsonObject)){ + if (hailiangPackerStationDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)) { wo1.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",dto.getOrder_code()); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", dto.getOrder_code()); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo1.update(jsonObject); } - }else { - hailiangPackerStationDeviceDriver.writing("to_order_compel_finished","1"); + } else { + hailiangPackerStationDeviceDriver.writing("to_order_compel_finished", "1"); hailiangPackerStationDeviceDriver.writing("to_confirm_finished", "1"); hailiangPackerStationDeviceDriver.writing("to_order", "0"); hailiangPackerStationDeviceDriver.writing("to_clear", "1"); } } else if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); - if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1){ - if (ObjectUtil.isEmpty(jsonObject)){ + if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)) { wo1.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",dto.getOrder_code()); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", dto.getOrder_code()); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo1.update(jsonObject); } - }else { - hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished","1"); + } else { + hailiangEngravingMachineDeviceDriver.writing("to_order_compel_finished", "1"); hailiangEngravingMachineDeviceDriver.writing("to_confirm_finished", "1"); hailiangEngravingMachineDeviceDriver.writing("to_order", "0"); hailiangEngravingMachineDeviceDriver.writing("to_clear", "1"); } - } else if (device.getDeviceDriver() instanceof HailiangStackingStationDriver){ + } else if (device.getDeviceDriver() instanceof HailiangStackingStationDriver) { hailiangStackingStationDriver = (HailiangStackingStationDriver) device.getDeviceDriver(); - hailiangStackingStationDriver.writing("to_compel_finish","1"); + hailiangStackingStationDriver.writing("to_compel_finish", "1"); } } } @@ -357,13 +354,9 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); JSONObject json = (JSONObject) JSONObject.toJSON(entity); wo.update(json, "order_code = '" + dto.getOrder_code() + "'"); - Iterator iterator = order.iterator(); - while (iterator.hasNext()) { - ProduceshiftorderDto oneorder = iterator.next(); - if (oneorder.getOrder_code().equals(dto.getOrder_code())) { - iterator.remove(); - } - } + this.order.removeIf(o -> { + return o.getOrder_code().equals(dto.getOrder_code()); + }); if (StrUtil.equals(dto.getOrder_status(), "0") || StrUtil.equals(dto.getOrder_status(), "1")) { order.add(dto); } @@ -373,15 +366,12 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A @Transactional(rollbackFor = Exception.class) public void deleteAll(String[] ids) { WQLObject wo = WQLObject.getWQLObject("acs_produceshiftorder"); + String order_ids = Arrays.stream(Optional.ofNullable(ids).orElse(new String[0])).map(String::valueOf).collect(Collectors.joining(",")); + wo.delete("order_id in '" + order_ids + "'"); for (String order_id : ids) { - wo.delete("order_id = '" + order_id + "'"); - Iterator iterator = order.iterator(); - while (iterator.hasNext()) { - ProduceshiftorderDto instruction = iterator.next(); - if (instruction.getOrder_id().equals(order_id)) { - iterator.remove(); - } - } + this.order.removeIf(o -> { + return o.getOrder_id().equals(order_id); + }); } } @@ -432,26 +422,26 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; HailiangStackingStationDriver hailiangStackingStationDriver; JSONObject jsonObject = wo.query("device_code = '" + device_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonObject)){ + if (ObjectUtil.isEmpty(jsonObject)) { jsonObject = new JSONObject(); } JSONObject map = new JSONObject(); - map.put("online_id",IdUtil.simpleUUID()); - map.put("device_code",device_code); - map.put("order_code",order_code); - map.put("online_status","0"); - map.put("create_by",currentUsername); - map.put("create_time",now); + map.put("online_id", IdUtil.simpleUUID()); + map.put("device_code", device_code); + map.put("order_code", order_code); + map.put("online_status", "0"); + map.put("create_by", currentUsername); + map.put("create_time", now); if (device.getDeviceDriver() instanceof HailiangSpecialDeviceDriver) { hailiangSpecialDeviceDriver = (HailiangSpecialDeviceDriver) device.getDeviceDriver(); if (hailiangSpecialDeviceDriver.getStatus_type() == 1) { - if (ObjectUtil.isEmpty(jsonObject)){ + if (ObjectUtil.isEmpty(jsonObject)) { wo.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",order_code); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", order_code); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo.update(jsonObject); } } else { @@ -464,13 +454,13 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A if (device.getDeviceDriver() instanceof HailiangPackerStationDeviceDriver) { hailiangPackerStationDeviceDriver = (HailiangPackerStationDeviceDriver) device.getDeviceDriver(); if (hailiangPackerStationDeviceDriver.getStatus_type() == 1) { - if (ObjectUtil.isEmpty(jsonObject)){ + if (ObjectUtil.isEmpty(jsonObject)) { wo.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",order_code); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", order_code); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo.update(jsonObject); } } else { @@ -482,14 +472,14 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); - if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1){ - if (ObjectUtil.isEmpty(jsonObject)){ + if (hailiangEngravingMachineDeviceDriver.getStatus_type() == 1) { + if (ObjectUtil.isEmpty(jsonObject)) { wo.insert(map); } else { - jsonObject.put("online_status","0"); - jsonObject.put("order_code",order_code); - jsonObject.put("update_by",currentUsername); - jsonObject.put("update_time",now); + jsonObject.put("online_status", "0"); + jsonObject.put("order_code", order_code); + jsonObject.put("update_by", currentUsername); + jsonObject.put("update_time", now); wo.update(jsonObject); } } else { @@ -501,7 +491,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } if (device.getDeviceDriver() instanceof HailiangStackingStationDriver) { hailiangStackingStationDriver = (HailiangStackingStationDriver) device.getDeviceDriver(); - hailiangStackingStationDriver.writing("to_compel_finish","1"); + hailiangStackingStationDriver.writing("to_compel_finish", "1"); } JSONObject map1 = new JSONObject(); map1.put("order_id", order_id); @@ -510,29 +500,36 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A map1.put("update_time", now); WQLObject wo1 = WQLObject.getWQLObject("acs_produceshiftorder"); wo1.update(map1); - Iterator iterator = order.iterator(); - while (iterator.hasNext()) { - ProduceshiftorderDto instruction = iterator.next(); - if (instruction.getOrder_code().equals(order_code)) { - iterator.remove(); - } - } + this.order.removeIf(o -> { + return o.getOrder_code().equals(order_code); + }); } @Override public List findAllOrderFromCache() { - return order; + return this.order; } @Override public ProduceshiftorderDto findOrderByDeviceCode(String device_code) { - for (int i = 0; i < this.order.size(); i++) { - ProduceshiftorderDto dto = order.get(i); - if (StrUtil.equals(device_code, dto.getDevice_code())) { - return dto; - } - } - return null; + return Optional + .ofNullable(this.order) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(o -> o.getDevice_code().equals(device_code)) + .findFirst() + .orElse(null); + } + + @Override + public ProduceshiftorderDto findOrderByExtOrderId(String ext_order_id) { + return Optional + .ofNullable(this.order) + .orElse(new CopyOnWriteArrayList<>()) + .stream() + .filter(o -> o.getExt_order_id().equals(ext_order_id)) + .findFirst() + .orElse(null); } @Override diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskDto.java b/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskDto.java index db8e149a..cab8c65b 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskDto.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/dto/TaskDto.java @@ -74,7 +74,8 @@ public class TaskDto implements Serializable { /** * 是否立刻下发 */ - private String is_send; + private String is_send = "0"; + private String material; private String quantity; @@ -82,7 +83,7 @@ public class TaskDto implements Serializable { /** * 任务优先级 */ - private String priority; + private String priority = "1"; /** * 创建类型 @@ -225,12 +226,12 @@ public class TaskDto implements Serializable { /** * 是否启用 */ - private String is_active; + private String is_active = "1"; /** * 是否删除 */ - private String is_delete; + private String is_delete = "0"; /** * 创建者 diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index a1c1e5b1..30f7b782 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -69,308 +69,323 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { - List tasks = new CopyOnWriteArrayList<>(); + List tasks = new CopyOnWriteArrayList<>(); - @Autowired DeviceAppService deviceAppService; - @Autowired RouteLineService routelineserver; - @Autowired AcsToWmsService acstowmsService; - @Autowired TaskFeedbackService taskFeedbackService; - @Autowired ParamService paramService; - @Autowired XianGongAgvService agvService; - @Autowired RouteLineService routeLineService; - @Autowired DeviceAssignedService deviceAssignedService; - @Autowired InstructionService instructionService; - @Autowired StorageCellService storageCellService; + @Autowired + DeviceAppService deviceAppService; + @Autowired + RouteLineService routelineserver; + @Autowired + AcsToWmsService acstowmsService; + @Autowired + TaskFeedbackService taskFeedbackService; + @Autowired + ParamService paramService; + @Autowired + XianGongAgvService agvService; + @Autowired + RouteLineService routeLineService; + @Autowired + DeviceAssignedService deviceAssignedService; + @Autowired + InstructionService instructionService; + @Autowired + StorageCellService storageCellService; - @Override - public void autoInitial() throws Exception { - Class var1 = TaskInstructionLock.class; - synchronized (TaskInstructionLock.class) { - this.reload(); - } - } - - public synchronized void reload() { - List list = this.queryAll("task_status <2 and is_delete =0 order by create_time"); - - tasks = new CopyOnWriteArrayList<>(list); - } - - @Override - public List queryAll(String whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONArray arr = wo.query(whereJson).getResultJSONArray(0); - List list = arr.toJavaList(TaskDto.class); - return list; - } - - @Override - public Map queryAll(Map whereJson, Pageable page) { - - HashMap map = new HashMap<>(); - map.put("flag", "1"); - String task_code = (String) whereJson.get("task_code"); - String vehicle_code = (String) whereJson.get("vehicle_code"); - String material_type = (String) whereJson.get("material_type"); - String status = (String) whereJson.get("status"); - String point_code = (String) whereJson.get("point_code"); - String is_over = (String) whereJson.get("is_over"); - if (!StrUtil.isEmpty(task_code)) { - map.put("task_code", task_code); - } - if (!StrUtil.isEmpty(vehicle_code)) { - map.put("vehicle_code", vehicle_code); - } - if (!StrUtil.isEmpty(material_type)) { - map.put("material_type", material_type); - } - if (!StrUtil.isEmpty(status)) { - map.put("status", status); - } - if (!StrUtil.isEmpty(point_code)) { - map.put("point_code", point_code); - } - if (!StrUtil.isEmpty(is_over)) { - map.put("is_over", is_over); - } - final JSONObject jo = - WQL.getWO("QTASK_QUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), ""); - return jo; - } - - @Override - public Map queryAllByCache(Map whereJson, Pageable page) { - this.reload(); - String task_code = (String) whereJson.get("task_code"); - String vehicle_code = (String) whereJson.get("vehicle_code"); - String material_type = (String) whereJson.get("material_type"); - String status = (String) whereJson.get("status"); - String point_code = (String) whereJson.get("point_code"); - String is_over = (String) whereJson.get("is_over"); - String task_type = (String) whereJson.get("task_type"); - List taskList = new ArrayList(); - - synchronized (TaskServiceImpl.class){ - Iterator it = tasks.iterator(); - while (it.hasNext()) { - TaskDto task = it.next(); - if ("1".equals(is_over) && Integer.valueOf(task.getTask_status()) < 2) { - continue; - } - if (!"1".equals(is_over) && Integer.valueOf(task.getTask_status()) >= 2) { - continue; - } - if (!ObjectUtil.isEmpty(task_code) && !task.getTask_code().contains(task_code)) { - continue; - } - if (!ObjectUtil.isEmpty(status) && !task.getTask_status().equals(status)) { - continue; - } - if (!ObjectUtil.isEmpty(vehicle_code) && !task.getVehicle_code().contains(vehicle_code)) { - continue; - } - if (!ObjectUtil.isEmpty(material_type) && !task.getMaterial().equals(material_type)) { - continue; - } - if (!ObjectUtil.isEmpty(point_code) - && !(task.getStart_point_code().contains(point_code) - || task.getNext_point_code().contains(point_code))) { - continue; - } - if (!ObjectUtil.isEmpty(task_type) && !task.getTask_type().equals(task_type)) { - continue; - } - taskList.add(task); - } - - // 按照创建时间排序 - taskList = - taskList.stream() - .sorted( - (task1, task2) -> - DateUtil.compare( - DateUtil.parseDate(task1.getCreate_time()), - DateUtil.parse(task2.getCreate_time()))) - .collect(Collectors.toList()); - - } - - Integer currentPageNumber = page.getPageNumber() + 1; - Integer pageMaxSize = page.getPageSize(); - List taskDtoList = - taskList.stream() - .skip((currentPageNumber - 1) * pageMaxSize) - .limit(pageMaxSize) - .collect(Collectors.toList()); - JSONObject jo = new JSONObject(); - jo.put("content", taskDtoList); - jo.put("totalElements", taskList.size()); - return jo; - - } - - @Override - public Map getAll(Map whereJson, Pageable page) { - // WQLObject wo = WQLObject.getWQLObject("acs_task"); - // ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "task_status < 2 ", "update_time - // desc"); - HashMap map = new HashMap<>(); - map.put("flag", "2"); - String task_code = (String) whereJson.get("task_code"); - String vehicle_code = (String) whereJson.get("vehicle_code"); - String task_type = (String) whereJson.get("task_type"); - String status = (String) whereJson.get("status"); - String point_code = (String) whereJson.get("point_code"); - String create_time = (String) whereJson.get("createTime"); - String end_time = (String) whereJson.get("end_time"); - if (!StrUtil.isEmpty(task_code)) { - map.put("task_code", task_code); - } - if (!StrUtil.isEmpty(vehicle_code)) { - map.put("vehicle_code", vehicle_code); - } - if (!StrUtil.isEmpty(task_type)) { - map.put("task_type", task_type); - } - if (!StrUtil.isEmpty(status)) { - map.put("status", status); - } - if (!StrUtil.isEmpty(point_code)) { - map.put("point_code", point_code); - } - if (!StrUtil.isEmpty(create_time) && !StrUtil.isEmpty(end_time)) { - map.put("create_time", create_time); - map.put("end_time", end_time); - } - JSONObject jsonObject1 = - WQL.getWO("QTASK_QUERY") - .addParamMap(map) - .pageQuery(WqlUtil.getHttpContext(page), "create_time desc"); - JSONArray array = jsonObject1.getJSONArray("content"); - int totalElements = (Integer) jsonObject1.get("totalElements"); - JSONArray arr = new JSONArray(); - for (int i = 0; i < array.size(); i++) { - JSONObject jsonObject = (JSONObject) array.get(i); - jsonObject.put("hasChildren", true); - arr.add(jsonObject); - } - JSONObject jo = new JSONObject(); - jo.put("content", arr); - jo.put("totalElements", totalElements); - return jo; - } - - @Override - public List queryAll(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONArray arr = wo.query().getResultJSONArray(0); - List list = arr.toJavaList(TaskDto.class); - return list; - } - - @Override - public TaskDto findById(String task_id) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = wo.query("task_id ='" + task_id + "'").uniqueResult(0); - final TaskDto obj = json.toJavaObject(TaskDto.class); - return obj; - } - - @Override - public TaskDto findByTaskCode(String task_code) { - - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getTask_code(),task_code)) { - return task; - } - } - return null; - } - - - @Override - public List queryAllUnfinished(Map whereJson) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONArray arr = wo.query("task_status < 2 ").getResultJSONArray(0); - List list = arr.toJavaList(TaskDto.class); - return list; - } - - @Override - public TaskDto findByCode(String code) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = wo.query("task_code ='" + code + "'").uniqueResult(0); - final TaskDto obj = json.toJavaObject(TaskDto.class); - return obj; - } - - @Override - public List queryTaskByDeviceCode(String device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getStart_device_code().equals(device_code) - && StrUtil.equals(task.getTask_status(), "0")) { - list.add(task); + @Override + public void autoInitial() throws Exception { + Class var1 = TaskInstructionLock.class; + synchronized (TaskInstructionLock.class) { + this.reload(); } - } - return list; - } + } - @Override - public List queryTaskByStartDeviceCode(String start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if ((task.getStart_device_code().equals(start_device_code) - || task.getStart_device_code2().equals(start_device_code)) - && StrUtil.equals(task.getTask_status(), "0")) { - list.add(task); - } - } - return list; - } + public synchronized void reload() { + List list = this.queryAll("task_status <2 and is_delete =0 order by create_time"); - @Override - public List queryTaskByBackDeviceCode(String back_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; - } - if (task.getStart_device_code().equals(back_start_device_code) - && StrUtil.equals(task.getTask_status(), "0")) { - list.add(task); - } - } - return list; - } + tasks = new CopyOnWriteArrayList<>(list); + } - @Override - public List queryTaskByDeviceCodeAndStatus(String device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getStart_device_code().equals(device_code) - && StrUtil.equals(task.getTask_status(), "1")) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } - } else { - if(StrUtil.equals(task.getTask_type(),"8") && StrUtil.isNotEmpty(task.getPut_device_code())) - { + @Override + public List queryAll(String whereJson) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONArray arr = wo.query(whereJson).getResultJSONArray(0); + List list = arr.toJavaList(TaskDto.class); + return list; + } + + @Override + public Map queryAll(Map whereJson, Pageable page) { + + HashMap map = new HashMap<>(); + map.put("flag", "1"); + String task_code = (String) whereJson.get("task_code"); + String vehicle_code = (String) whereJson.get("vehicle_code"); + String material_type = (String) whereJson.get("material_type"); + String status = (String) whereJson.get("status"); + String point_code = (String) whereJson.get("point_code"); + String is_over = (String) whereJson.get("is_over"); + if (!StrUtil.isEmpty(task_code)) { + map.put("task_code", task_code); + } + if (!StrUtil.isEmpty(vehicle_code)) { + map.put("vehicle_code", vehicle_code); + } + if (!StrUtil.isEmpty(material_type)) { + map.put("material_type", material_type); + } + if (!StrUtil.isEmpty(status)) { + map.put("status", status); + } + if (!StrUtil.isEmpty(point_code)) { + map.put("point_code", point_code); + } + if (!StrUtil.isEmpty(is_over)) { + map.put("is_over", is_over); + } + final JSONObject jo = + WQL.getWO("QTASK_QUERY").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), ""); + return jo; + } + + @Override + public Map queryAllByCache(Map whereJson, Pageable page) { + this.reload(); + String task_code = (String) whereJson.get("task_code"); + String vehicle_code = (String) whereJson.get("vehicle_code"); + String material_type = (String) whereJson.get("material_type"); + String status = (String) whereJson.get("status"); + String point_code = (String) whereJson.get("point_code"); + String is_over = (String) whereJson.get("is_over"); + String task_type = (String) whereJson.get("task_type"); + List taskList = new ArrayList(); + + synchronized (TaskServiceImpl.class) { + Iterator it = tasks.iterator(); + while (it.hasNext()) { + TaskDto task = it.next(); + if ("1".equals(is_over) && Integer.valueOf(task.getTask_status()) < 2) { + continue; + } + if (!"1".equals(is_over) && Integer.valueOf(task.getTask_status()) >= 2) { + continue; + } + if (!ObjectUtil.isEmpty(task_code) && !task.getTask_code().contains(task_code)) { + continue; + } + if (!ObjectUtil.isEmpty(status) && !task.getTask_status().equals(status)) { + continue; + } + if (!ObjectUtil.isEmpty(vehicle_code) && !task.getVehicle_code().contains(vehicle_code)) { + continue; + } + if (!ObjectUtil.isEmpty(material_type) && !task.getMaterial().equals(material_type)) { + continue; + } + if (!ObjectUtil.isEmpty(point_code) + && !(task.getStart_point_code().contains(point_code) + || task.getNext_point_code().contains(point_code))) { + continue; + } + if (!ObjectUtil.isEmpty(task_type) && !task.getTask_type().equals(task_type)) { + continue; + } + taskList.add(task); + } + + // 按照创建时间排序 + taskList = + taskList.stream() + .sorted( + (task1, task2) -> + DateUtil.compare( + DateUtil.parseDate(task1.getCreate_time()), + DateUtil.parse(task2.getCreate_time()))) + .collect(Collectors.toList()); + + } + + Integer currentPageNumber = page.getPageNumber() + 1; + Integer pageMaxSize = page.getPageSize(); + List taskDtoList = + taskList.stream() + .skip((currentPageNumber - 1) * pageMaxSize) + .limit(pageMaxSize) + .collect(Collectors.toList()); + JSONObject jo = new JSONObject(); + jo.put("content", taskDtoList); + jo.put("totalElements", taskList.size()); + return jo; + + } + + @Override + public Map getAll(Map whereJson, Pageable page) { + // WQLObject wo = WQLObject.getWQLObject("acs_task"); + // ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "task_status < 2 ", "update_time + // desc"); + HashMap map = new HashMap<>(); + map.put("flag", "2"); + String task_code = (String) whereJson.get("task_code"); + String vehicle_code = (String) whereJson.get("vehicle_code"); + String task_type = (String) whereJson.get("task_type"); + String status = (String) whereJson.get("status"); + String point_code = (String) whereJson.get("point_code"); + String create_time = (String) whereJson.get("createTime"); + String end_time = (String) whereJson.get("end_time"); + if (!StrUtil.isEmpty(task_code)) { + map.put("task_code", task_code); + } + if (!StrUtil.isEmpty(vehicle_code)) { + map.put("vehicle_code", vehicle_code); + } + if (!StrUtil.isEmpty(task_type)) { + map.put("task_type", task_type); + } + if (!StrUtil.isEmpty(status)) { + map.put("status", status); + } + if (!StrUtil.isEmpty(point_code)) { + map.put("point_code", point_code); + } + if (!StrUtil.isEmpty(create_time) && !StrUtil.isEmpty(end_time)) { + map.put("create_time", create_time); + map.put("end_time", end_time); + } + JSONObject jsonObject1 = + WQL.getWO("QTASK_QUERY") + .addParamMap(map) + .pageQuery(WqlUtil.getHttpContext(page), "create_time desc"); + JSONArray array = jsonObject1.getJSONArray("content"); + int totalElements = (Integer) jsonObject1.get("totalElements"); + JSONArray arr = new JSONArray(); + for (int i = 0; i < array.size(); i++) { + JSONObject jsonObject = (JSONObject) array.get(i); + jsonObject.put("hasChildren", true); + arr.add(jsonObject); + } + JSONObject jo = new JSONObject(); + jo.put("content", arr); + jo.put("totalElements", totalElements); + return jo; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(TaskDto.class); + return list; + } + + @Override + public TaskDto findById(String task_id) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = wo.query("task_id ='" + task_id + "'").uniqueResult(0); + final TaskDto obj = json.toJavaObject(TaskDto.class); + return obj; + } + + @Override + public TaskDto findByTaskCode(String task_code) { + return Optional + .ofNullable(this.tasks) + .orElse(new ArrayList<>()) + .stream() + .filter(t -> t.getTask_code().equals(task_code)) + .findFirst() + .orElse(null); +// List list = new ArrayList<>(); +// Iterator iterator = tasks.iterator(); +// while (iterator.hasNext()) { +// TaskDto task = iterator.next(); +// if (StrUtil.equals(task.getTask_code(), task_code)) { +// return task; +// } +// } +// return null; + } + + + @Override + public List queryAllUnfinished(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONArray arr = wo.query("task_status < 2 ").getResultJSONArray(0); + List list = arr.toJavaList(TaskDto.class); + return list; + } + + @Override + public TaskDto findByCode(String code) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = wo.query("task_code ='" + code + "'").uniqueResult(0); + final TaskDto obj = json.toJavaObject(TaskDto.class); + return obj; + } + + @Override + public List queryTaskByDeviceCode(String device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (task.getStart_device_code().equals(device_code) + && StrUtil.equals(task.getTask_status(), "0")) { + list.add(task); + } + } + return list; + } + + @Override + public List queryTaskByStartDeviceCode(String start_device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (!StrUtil.equals(task.getTask_type(), "6")) { + continue; + } + if ((task.getStart_device_code().equals(start_device_code) + || task.getStart_device_code2().equals(start_device_code)) + && StrUtil.equals(task.getTask_status(), "0")) { + list.add(task); + } + } + return list; + } + + @Override + public List queryTaskByBackDeviceCode(String back_start_device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (!StrUtil.equals(task.getTask_type(), "6")) { + continue; + } + if (task.getStart_device_code().equals(back_start_device_code) + && StrUtil.equals(task.getTask_status(), "0")) { + list.add(task); + } + } + return list; + } + + @Override + public List queryTaskByDeviceCodeAndStatus(String device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (task.getStart_device_code().equals(device_code) + && StrUtil.equals(task.getTask_status(), "1")) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); + if (ObjectUtil.isNotEmpty(instruction)) { + list.add(task); + } + } else { + if (StrUtil.equals(task.getTask_type(), "8") && StrUtil.isNotEmpty(task.getPut_device_code())) { // if(task.getNext_device_code().equals(device_code) // && StrUtil.equals(task.getTask_status(), "1")){ // Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); @@ -378,285 +393,287 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { // list.add(task); // } // } - Instruction instruction = instructionService.findByDeviceCodeFromCache(device_code); - if (ObjectUtil.isNotEmpty(instruction)) { - if(StrUtil.equals(instruction.getStart_device_code(),device_code)){ - list.add(task); - } + Instruction instruction = instructionService.findByDeviceCodeFromCache(device_code); + if (ObjectUtil.isNotEmpty(instruction)) { + if (StrUtil.equals(instruction.getStart_device_code(), device_code)) { + list.add(task); + } + } + } } - } } - } - return list; - } + return list; + } - public List queryTaskByStartAndIntStatus(String head_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; + public List queryTaskByStartAndIntStatus(String head_start_device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (!StrUtil.equals(task.getTask_type(), "6")) { + continue; + } + if ((task.getStart_device_code().equals(head_start_device_code) + || task.getStart_device_code2().equals(head_start_device_code)) + && StrUtil.equals(task.getTask_status(), "1")) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); + if (ObjectUtil.isNotEmpty(instruction)) { + list.add(task); + } + } } - if ((task.getStart_device_code().equals(head_start_device_code) - || task.getStart_device_code2().equals(head_start_device_code)) - && StrUtil.equals(task.getTask_status(), "1")) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } + return list; + } + + public List queryTaskByNextAndIntStatus(String back_start_device_code) { + List list = new ArrayList<>(); + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (!StrUtil.equals(task.getTask_type(), "6")) { + continue; + } + if ((task.getStart_device_code().equals(back_start_device_code)) + && StrUtil.equals(task.getTask_status(), "1")) { + Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); + if (ObjectUtil.isNotEmpty(instruction)) { + list.add(task); + } + } } - } - return list; - } + return list; + } - public List queryTaskByNextAndIntStatus(String back_start_device_code) { - List list = new ArrayList<>(); - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (!StrUtil.equals(task.getTask_type(), "6")) { - continue; + @Override + public TaskDto queryTaskByLinkNum(String link_num) { + return null; + } + + @Override + public List queryByStauts(String status) { + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONArray arr = wo.query("task_status = '" + status + "'").getResultJSONArray(0); + List list = arr.toJavaList(TaskDto.class); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(TaskDto dto) throws Exception { + dto = foramte(dto); + if (!StrUtil.isEmpty(dto.getVehicle_code())) { + TaskDto vehicle_dto = this.findByContainer(dto.getVehicle_code()); + if (vehicle_dto != null) { + throw new WDKException("已存在该载具号的任务!"); + } } - if ((task.getStart_device_code().equals(back_start_device_code)) - && StrUtil.equals(task.getTask_status(), "1")) { - Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code()); - if (ObjectUtil.isNotEmpty(instruction)) { - list.add(task); - } + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + String task_uuid = dto.getTask_id(); + if (StrUtil.isEmpty(task_uuid)) { + dto.setTask_id(IdUtil.simpleUUID()); } - } - return list; - } + String task_code = dto.getTask_code(); + if (StrUtil.isEmpty(task_code)) { + task_code = CodeUtil.getNewCode("TASK_NO"); + task_code = "-" + task_code; + } + String start_point_code = dto.getStart_point_code(); + String next_point_code = dto.getNext_point_code(); + String start_device_code = dto.getStart_device_code(); + String next_device_code = dto.getNext_device_code(); + String route_plan_code = dto.getRoute_plan_code(); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setTask_code(task_code); + dto.setRoute_plan_code(route_plan_code); + dto.setTask_status("0"); + dto.setStart_device_code2(dto.getStart_point_code2()); + dto.setNext_device_code2(dto.getNext_point_code2()); - @Override - public TaskDto queryTaskByLinkNum(String link_num) { - return null; - } + if (StrUtil.isEmpty(dto.getPriority())) { + dto.setPriority("1"); + } + String plan_code = dto.getRoute_plan_code(); + // 判断起点终点设备类型 + String startDeviceType = deviceAppService.findDeviceTypeByCode(dto.getStart_device_code()); + String nextDeviceType = deviceAppService.findDeviceTypeByCode(dto.getNext_device_code()); + if (routelineserver + .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code) + .size() + == 0) { + throw new Exception(dto.getStart_point_code() + "->" + dto.getNext_point_code() + "路由不通!"); + } + String createTaskCheck = paramService.findByCode(AcsConfig.CREATETASKCHECK).getValue(); + DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device nextdevice = appService.findDeviceByCode(next_device_code); + Device startdevice = appService.findDeviceByCode(start_device_code); + dto.setMaterial(startdevice.getMaterial_type()); + if (StrUtil.equals(createTaskCheck, "1")) { + // 判断起点为输送设备 + if (StrUtil.equals(DeviceType.conveyor.toString(), startDeviceType)) { + } - @Override - public List queryByStauts(String status) { - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONArray arr = wo.query("task_status = '" + status + "'").getResultJSONArray(0); - List list = arr.toJavaList(TaskDto.class); - return list; - } + if (StrUtil.equals(DeviceType.conveyor.toString(), nextDeviceType)) { + } + } else { + // 判断起点为输送设备 - @Override - @Transactional(rollbackFor = Exception.class) - public void create(TaskDto dto) throws Exception { - dto = foramte(dto); - if (!StrUtil.isEmpty(dto.getVehicle_code())) { - TaskDto vehicle_dto = this.findByContainer(dto.getVehicle_code()); - if (vehicle_dto != null) { - throw new WDKException("已存在该载具号的任务!"); - } - } - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - String task_uuid = dto.getTask_id(); - if (StrUtil.isEmpty(task_uuid)) { - dto.setTask_id(IdUtil.simpleUUID()); - } - String task_code = dto.getTask_code(); - if (StrUtil.isEmpty(task_code)) { - task_code = CodeUtil.getNewCode("TASK_NO"); - task_code = "-" + task_code; - } - String start_point_code = dto.getStart_point_code(); - String next_point_code = dto.getNext_point_code(); - String start_device_code = dto.getStart_device_code(); - String next_device_code = dto.getNext_device_code(); - String route_plan_code = dto.getRoute_plan_code(); - dto.setCreate_by(currentUsername); - dto.setUpdate_by(currentUsername); - dto.setUpdate_time(now); - dto.setCreate_time(now); - dto.setTask_code(task_code); - dto.setRoute_plan_code(route_plan_code); - dto.setTask_status("0"); - dto.setStart_device_code2(dto.getStart_point_code2()); - dto.setNext_device_code2(dto.getNext_point_code2()); + } + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = (JSONObject) JSONObject.toJSON(dto); - if (StrUtil.isEmpty(dto.getPriority())) { - dto.setPriority("1"); - } - String plan_code = dto.getRoute_plan_code(); - // 判断起点终点设备类型 - String startDeviceType = deviceAppService.findDeviceTypeByCode(dto.getStart_device_code()); - String nextDeviceType = deviceAppService.findDeviceTypeByCode(dto.getNext_device_code()); - if (routelineserver - .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code) - .size() - == 0) { - throw new Exception(dto.getStart_point_code() + "->" + dto.getNext_point_code() + "路由不通!"); - } - String createTaskCheck = paramService.findByCode(AcsConfig.CREATETASKCHECK).getValue(); - DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class); - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - Device nextdevice = appService.findDeviceByCode(next_device_code); - Device startdevice = appService.findDeviceByCode(start_device_code); - dto.setMaterial(startdevice.getMaterial_type()); - if (StrUtil.equals(createTaskCheck, "1")) { - // 判断起点为输送设备 - if (StrUtil.equals(DeviceType.conveyor.toString(), startDeviceType)) {} + wo.insert(json); + synchronized (TaskServiceImpl.class) { + System.out.println("-------------------" + dto.getTask_code()); + System.out.println("-------------1" + tasks.size()); - if (StrUtil.equals(DeviceType.conveyor.toString(), nextDeviceType)) {} - } else { - // 判断起点为输送设备 + tasks.add(dto); + System.out.println("-------------2" + tasks.size()); - } - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); - - wo.insert(json); - synchronized(TaskServiceImpl.class){ - System.out.println("-------------------"+dto.getTask_code()); - System.out.println("-------------1"+tasks.size()); - - tasks.add(dto); - System.out.println("-------------2"+tasks.size()); - - } - } - - /** - * 常规任务保存 - * - * @param / - * @throws Exception - */ - @Override - public void ordinaryTaskCreate(JSONObject json) throws Exception { - JSONArray array = json.getJSONArray("data"); - - if (array.size() == 0) { - throw new RuntimeException("请选择起点"); - } - for (int i = 0; i < array.size(); i++) { - JSONObject arrjo = array.getJSONObject(i); - String material_type = arrjo.getString("material_type"); - String quantity = arrjo.getString("quantity"); - String remark = arrjo.getString("remark"); - TaskDto dto = new TaskDto(); - Map whereJson = (Map) array.get(i); - - // String device_code = (String) whereJson.get("device_code"); - String device_code = MapUtil.getStr(whereJson, "device_code"); - dto.setRoute_plan_code("one"); - String next_device_code = ""; - String plan_uuid = - WQLObject.getWQLObject("acs_route_plan") - .query("plan_code= '" + dto.getRoute_plan_code() + "'") - .uniqueResult(0) - .getString("plan_uuid"); - JSONArray ja = routelineserver.queryNextLine(device_code, plan_uuid); - for (int j = 0; j < ja.size(); j++) { - JSONObject jo = (JSONObject) ja.get(j); - next_device_code = jo.get("next_device_code").toString(); - } - if (ObjectUtil.isNotEmpty(this.findByStartCode(device_code))) { - throw new WDKException("已存在该起点的任务!"); - } - if (StrUtil.equals(material_type, "") || StrUtil.equals(quantity, "")) { - throw new RuntimeException("请填写物料信息!"); - } - dto.setStart_device_code(device_code); - dto.setStart_point_code(device_code); - dto.setNext_device_code(next_device_code); - dto.setNext_point_code(next_device_code); - dto.setRemark(remark); - dto.setMaterial(material_type); - create(dto); - } - } - - /** - * 特殊任务保存 - * - * @param / - * @throws Exception - */ - @Override - public void specialTaskCreate(JSONObject json) throws Exception { - - JSONArray array = json.getJSONArray("data1"); - JSONArray array2 = json.getJSONArray("data2"); - JSONArray array3 = json.getJSONArray("data3"); - if (array.size() != 0 && array3.size() != 0) { - throw new RuntimeException("只能选择一个终点"); + } } - for (int i = 0; i < array2.size(); i++) { - JSONObject arrjo = array2.getJSONObject(i); - String material_type = arrjo.getString("material_type"); - String quantity = arrjo.getString("quantity"); - String remark = arrjo.getString("remark"); - TaskDto dto = new TaskDto(); - Map whereJson; - Map whereJson2; - Map whereJson3; - if (array.size() != 0) { - whereJson = (Map) array.get(i); - } else { - whereJson = null; - } - if (array2.size() != 0) { - whereJson2 = (Map) array2.get(i); - } else { - whereJson2 = null; - } - if (array3.size() != 0) { - whereJson3 = (Map) array3.get(i); - } else { - whereJson3 = null; - } - String start_device_code = MapUtil.getStr(whereJson2, "device_code"); - String next_device_code = ""; - if (ObjectUtil.isEmpty(whereJson)) { - next_device_code = MapUtil.getStr(whereJson3, "device_code"); - } else { - next_device_code = MapUtil.getStr(whereJson, "device_code"); - } + /** + * 常规任务保存 + * + * @param / + * @throws Exception + */ + @Override + public void ordinaryTaskCreate(JSONObject json) throws Exception { + JSONArray array = json.getJSONArray("data"); - if (ObjectUtil.isNotEmpty(this.findByStartCode(start_device_code)) - || ObjectUtil.isNotEmpty(this.findByNextCode(next_device_code))) { - throw new WDKException("已存在该起点或终点的任务!"); - } - if (StrUtil.equals(material_type, "") || StrUtil.equals(quantity, "")) { - throw new RuntimeException("请填写物料信息!"); - } - dto.setRoute_plan_code("two"); - dto.setStart_device_code(start_device_code); - dto.setStart_point_code(start_device_code); - dto.setNext_device_code(next_device_code); - dto.setNext_point_code(next_device_code); - dto.setRemark(remark); - dto.setMaterial(material_type); - create(dto); + if (array.size() == 0) { + throw new RuntimeException("请选择起点"); + } + for (int i = 0; i < array.size(); i++) { + JSONObject arrjo = array.getJSONObject(i); + String material_type = arrjo.getString("material_type"); + String quantity = arrjo.getString("quantity"); + String remark = arrjo.getString("remark"); + TaskDto dto = new TaskDto(); + Map whereJson = (Map) array.get(i); + + // String device_code = (String) whereJson.get("device_code"); + String device_code = MapUtil.getStr(whereJson, "device_code"); + dto.setRoute_plan_code("one"); + String next_device_code = ""; + String plan_uuid = + WQLObject.getWQLObject("acs_route_plan") + .query("plan_code= '" + dto.getRoute_plan_code() + "'") + .uniqueResult(0) + .getString("plan_uuid"); + JSONArray ja = routelineserver.queryNextLine(device_code, plan_uuid); + for (int j = 0; j < ja.size(); j++) { + JSONObject jo = (JSONObject) ja.get(j); + next_device_code = jo.get("next_device_code").toString(); + } + if (ObjectUtil.isNotEmpty(this.findByStartCode(device_code))) { + throw new WDKException("已存在该起点的任务!"); + } + if (StrUtil.equals(material_type, "") || StrUtil.equals(quantity, "")) { + throw new RuntimeException("请填写物料信息!"); + } + dto.setStart_device_code(device_code); + dto.setStart_point_code(device_code); + dto.setNext_device_code(next_device_code); + dto.setNext_point_code(next_device_code); + dto.setRemark(remark); + dto.setMaterial(material_type); + create(dto); + } } - } - @Override - @Transactional(rollbackFor = Exception.class) - public void update(TaskDto dto) { + /** + * 特殊任务保存 + * + * @param / + * @throws Exception + */ + @Override + public void specialTaskCreate(JSONObject json) throws Exception { - TaskDto entity = this.findById(dto.getTask_id()); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } + JSONArray array = json.getJSONArray("data1"); + JSONArray array2 = json.getJSONArray("data2"); + JSONArray array3 = json.getJSONArray("data3"); + if (array.size() != 0 && array3.size() != 0) { + throw new RuntimeException("只能选择一个终点"); + } - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - dto.setUpdate_time(now); - dto.setUpdate_by(currentUsername); + for (int i = 0; i < array2.size(); i++) { + JSONObject arrjo = array2.getJSONObject(i); + String material_type = arrjo.getString("material_type"); + String quantity = arrjo.getString("quantity"); + String remark = arrjo.getString("remark"); + TaskDto dto = new TaskDto(); + Map whereJson; + Map whereJson2; + Map whereJson3; + if (array.size() != 0) { + whereJson = (Map) array.get(i); + } else { + whereJson = null; + } + if (array2.size() != 0) { + whereJson2 = (Map) array2.get(i); + } else { + whereJson2 = null; + } + if (array3.size() != 0) { + whereJson3 = (Map) array3.get(i); + } else { + whereJson3 = null; + } + String start_device_code = MapUtil.getStr(whereJson2, "device_code"); + String next_device_code = ""; + if (ObjectUtil.isEmpty(whereJson)) { + next_device_code = MapUtil.getStr(whereJson3, "device_code"); + } else { + next_device_code = MapUtil.getStr(whereJson, "device_code"); + } - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = (JSONObject) JSONObject.toJSON(dto); + if (ObjectUtil.isNotEmpty(this.findByStartCode(start_device_code)) + || ObjectUtil.isNotEmpty(this.findByNextCode(next_device_code))) { + throw new WDKException("已存在该起点或终点的任务!"); + } + if (StrUtil.equals(material_type, "") || StrUtil.equals(quantity, "")) { + throw new RuntimeException("请填写物料信息!"); + } + dto.setRoute_plan_code("two"); + dto.setStart_device_code(start_device_code); + dto.setStart_point_code(start_device_code); + dto.setNext_device_code(next_device_code); + dto.setNext_point_code(next_device_code); + dto.setRemark(remark); + dto.setMaterial(material_type); + create(dto); + } + } - wo.update(json); + @Override + @Transactional(rollbackFor = Exception.class) + public void update(TaskDto dto) { - Iterator iterator = tasks.iterator(); + TaskDto entity = this.findById(dto.getTask_id()); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_by(currentUsername); + + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = (JSONObject) JSONObject.toJSON(dto); + + wo.update(json); + + Iterator iterator = tasks.iterator(); // while (iterator.hasNext()) { // TaskDto task = iterator.next(); // if (task.getTask_code().equals(dto.getTask_code())) { @@ -665,254 +682,254 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { // } - removeByCodeFromCache(entity.getTask_code()); + removeByCodeFromCache(entity.getTask_code()); - if (StrUtil.equals(dto.getTask_status(), "0") || StrUtil.equals(dto.getTask_status(), "1")) { - tasks.add(dto); - } - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - if (!StrUtil.startWith(dto.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { - TaskFeedbackDto feefbackdto = taskFeedbackService.findByCode(entity.getTask_code()); - JSONObject feed_jo = new JSONObject(); - feed_jo.put("task_id", entity.getExt_task_id()); - feed_jo.put("task_code", dto.getTask_code()); - feed_jo.put("task_status", dto.getTask_status()); - if(ObjectUtil.isNotEmpty(dto.getWeight())){ - feed_jo.put("weight",dto.getWeight()); + if (StrUtil.equals(dto.getTask_status(), "0") || StrUtil.equals(dto.getTask_status(), "1")) { + tasks.add(dto); } - if(ObjectUtil.isNotEmpty(dto.getCarno())){ - feed_jo.put("car_no",dto.getCarno()); - } - JSONArray ja = new JSONArray(); - ja.add(feed_jo); - String message = null; - HttpResponse body = null; - boolean flag = false; - try { - body = acstowmsService.feedbackTaskStatusToWms(ja); - } catch (Exception e) { - flag = true; - message = e.getMessage(); - e.printStackTrace(); - } finally { - - } - if (flag) { - if (ObjectUtil.isEmpty(feefbackdto)) { - feefbackdto = new TaskFeedbackDto(); - feefbackdto.setTask_id(entity.getTask_id()); - feefbackdto.setTask_code(entity.getTask_code()); - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setVehicle_type(entity.getVehicle_type()); - feefbackdto.setVehicle_code(entity.getVehicle_code()); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getStart_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - feefbackdto.setError_code("400"); - feefbackdto.setIs_finished("0"); - feefbackdto.setRemark(message); - taskFeedbackService.create(feefbackdto); - } else { - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getStart_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - feefbackdto.setError_code("400"); - feefbackdto.setRemark(message); - taskFeedbackService.update(feefbackdto); - } - } else { - int status = body.getStatus(); - JSONObject jo = JSONObject.parseObject(body.body()); - if (ObjectUtil.isEmpty(feefbackdto)) { - feefbackdto = new TaskFeedbackDto(); - feefbackdto.setTask_id(entity.getTask_id()); - feefbackdto.setTask_code(entity.getTask_code()); - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setVehicle_type(entity.getVehicle_type()); - feefbackdto.setVehicle_code(entity.getVehicle_code()); - feefbackdto.setError_code(String.valueOf(body.getStatus())); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getNext_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - if (status == 200) { - if (StrUtil.equals(entity.getTask_status(), "2")) { - feefbackdto.setIs_finished("1"); - } else { - feefbackdto.setIs_finished("0"); - } - } else { - feefbackdto.setIs_finished("0"); - feefbackdto.setRemark(jo.getString("message")); + // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); + if (!StrUtil.startWith(dto.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { + TaskFeedbackDto feefbackdto = taskFeedbackService.findByCode(entity.getTask_code()); + JSONObject feed_jo = new JSONObject(); + feed_jo.put("task_id", entity.getExt_task_id()); + feed_jo.put("task_code", dto.getTask_code()); + feed_jo.put("task_status", dto.getTask_status()); + if (ObjectUtil.isNotEmpty(dto.getWeight())) { + feed_jo.put("weight", dto.getWeight()); } - taskFeedbackService.create(feefbackdto); - } else { - feefbackdto.setTask_status(entity.getTask_status()); - if (status == 200) { - } else { - if (StrUtil.equals(entity.getTask_status(), "2")) { - feefbackdto.setIs_finished("1"); - } else { - feefbackdto.setIs_finished("0"); - } + if (ObjectUtil.isNotEmpty(dto.getCarno())) { + feed_jo.put("car_no", dto.getCarno()); } - taskFeedbackService.update(feefbackdto); - } - } - } + JSONArray ja = new JSONArray(); + ja.add(feed_jo); + String message = null; + HttpResponse body = null; + boolean flag = false; + try { + body = acstowmsService.feedbackTaskStatusToWms(ja); + } catch (Exception e) { + flag = true; + message = e.getMessage(); + e.printStackTrace(); + } finally { - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteAll(String[] ids) throws Exception { - for (String task_id : ids) { - this.cancel(task_id); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void finish(String id) { - TaskDto entity = this.findById(id); - if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); - if (instdto != null) throw new BadRequestException("有指令未完成!"); - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - entity.setUpdate_time(now); - entity.setUpdate_by(currentUsername); - entity.setTask_status("2"); - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = (JSONObject) JSONObject.toJSON(entity); - wo.update(json); - removeByCodeFromCache(entity.getTask_code()); - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - if (!StrUtil.startWith(entity.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { - TaskFeedbackDto feefbackdto = taskFeedbackService.findByCode(entity.getTask_code()); - System.out.println(feefbackdto == null); - JSONObject feed_jo = new JSONObject(); - feed_jo.put("task_id", entity.getExt_task_id()); - feed_jo.put("task_code", entity.getTask_code()); - feed_jo.put("task_status", entity.getTask_status()); - JSONArray ja = new JSONArray(); - ja.add(feed_jo); - String message = null; - HttpResponse body = null; - boolean flag = false; - try { - body = acstowmsService.feedbackTaskStatusToWms(ja); - } catch (Exception e) { - flag = true; - message = e.getMessage(); - e.printStackTrace(); - } finally { - - } - if (flag) { - if (ObjectUtil.isEmpty(feefbackdto)) { - feefbackdto = new TaskFeedbackDto(); - feefbackdto.setTask_id(entity.getTask_id()); - feefbackdto.setTask_code(entity.getTask_code()); - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setVehicle_type(entity.getVehicle_type()); - feefbackdto.setVehicle_code(entity.getVehicle_code()); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getStart_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - feefbackdto.setError_code("400"); - feefbackdto.setIs_finished("0"); - feefbackdto.setRemark(message); - taskFeedbackService.create(feefbackdto); - } else { - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getStart_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - feefbackdto.setError_code("400"); - feefbackdto.setRemark(message); - taskFeedbackService.update(feefbackdto); - } - } else { - int status = body.getStatus(); - JSONObject jo = JSONObject.parseObject(body.body()); - if (ObjectUtil.isEmpty(feefbackdto)) { - feefbackdto = new TaskFeedbackDto(); - feefbackdto.setTask_id(entity.getTask_id()); - feefbackdto.setTask_code(entity.getTask_code()); - feefbackdto.setTask_status(entity.getTask_status()); - feefbackdto.setVehicle_type(entity.getVehicle_type()); - feefbackdto.setVehicle_code(entity.getVehicle_code()); - feefbackdto.setError_code(String.valueOf(body.getStatus())); - feefbackdto.setStart_device_code(entity.getStart_device_code()); - feefbackdto.setStart_point_code(entity.getStart_point_code()); - feefbackdto.setNext_device_code(entity.getNext_device_code()); - feefbackdto.setNext_point_code(entity.getNext_point_code()); - if (status == 200) { - if (StrUtil.equals(entity.getTask_status(), "2")) { - feefbackdto.setIs_finished("1"); - } else { - feefbackdto.setIs_finished("0"); } - } else { - feefbackdto.setIs_finished("0"); - feefbackdto.setRemark(jo.getString("message")); - } - taskFeedbackService.create(feefbackdto); - } else { - feefbackdto.setTask_status(entity.getTask_status()); - if (status == 200) { - if (StrUtil.equals(entity.getTask_status(), "2")) { - feefbackdto.setIs_finished("1"); + if (flag) { + if (ObjectUtil.isEmpty(feefbackdto)) { + feefbackdto = new TaskFeedbackDto(); + feefbackdto.setTask_id(entity.getTask_id()); + feefbackdto.setTask_code(entity.getTask_code()); + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setVehicle_type(entity.getVehicle_type()); + feefbackdto.setVehicle_code(entity.getVehicle_code()); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getStart_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + feefbackdto.setError_code("400"); + feefbackdto.setIs_finished("0"); + feefbackdto.setRemark(message); + taskFeedbackService.create(feefbackdto); + } else { + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getStart_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + feefbackdto.setError_code("400"); + feefbackdto.setRemark(message); + taskFeedbackService.update(feefbackdto); + } } else { - feefbackdto.setIs_finished("0"); + int status = body.getStatus(); + JSONObject jo = JSONObject.parseObject(body.body()); + if (ObjectUtil.isEmpty(feefbackdto)) { + feefbackdto = new TaskFeedbackDto(); + feefbackdto.setTask_id(entity.getTask_id()); + feefbackdto.setTask_code(entity.getTask_code()); + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setVehicle_type(entity.getVehicle_type()); + feefbackdto.setVehicle_code(entity.getVehicle_code()); + feefbackdto.setError_code(String.valueOf(body.getStatus())); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getNext_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + if (status == 200) { + if (StrUtil.equals(entity.getTask_status(), "2")) { + feefbackdto.setIs_finished("1"); + } else { + feefbackdto.setIs_finished("0"); + } + } else { + feefbackdto.setIs_finished("0"); + feefbackdto.setRemark(jo.getString("message")); + } + taskFeedbackService.create(feefbackdto); + } else { + feefbackdto.setTask_status(entity.getTask_status()); + if (status == 200) { + } else { + if (StrUtil.equals(entity.getTask_status(), "2")) { + feefbackdto.setIs_finished("1"); + } else { + feefbackdto.setIs_finished("0"); + } + } + taskFeedbackService.update(feefbackdto); + } } - } else { - feefbackdto.setIs_finished("0"); - feefbackdto.setRemark(jo.getString("message")); - } - taskFeedbackService.update(feefbackdto); } - } - } - // 如果属于先知AGV,关闭运单序列 - if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { - try { - agvService.markComplete(entity.getTask_code()); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - @Override - @Transactional(rollbackFor = Exception.class) - public void cancel(String id) throws Exception { - TaskDto entity = this.findById(id); - if (entity == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); } - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); - if (instdto != null) { - throw new BadRequestException("有指令未完成!"); + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) throws Exception { + for (String task_id : ids) { + this.cancel(task_id); + } } - String currentUsername = SecurityUtils.getCurrentUsername(); - String now = DateUtil.now(); - entity.setUpdate_time(now); - entity.setUpdate_by(currentUsername); - entity.setTask_status("3"); - WQLObject wo = WQLObject.getWQLObject("acs_task"); - JSONObject json = (JSONObject) JSONObject.toJSON(entity); - wo.update(json); + + @Override + @Transactional(rollbackFor = Exception.class) + public void finish(String id) { + TaskDto entity = this.findById(id); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); + InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); + if (instdto != null) throw new BadRequestException("有指令未完成!"); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + entity.setUpdate_time(now); + entity.setUpdate_by(currentUsername); + entity.setTask_status("2"); + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = (JSONObject) JSONObject.toJSON(entity); + wo.update(json); + removeByCodeFromCache(entity.getTask_code()); + // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); + if (!StrUtil.startWith(entity.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { + TaskFeedbackDto feefbackdto = taskFeedbackService.findByCode(entity.getTask_code()); + System.out.println(feefbackdto == null); + JSONObject feed_jo = new JSONObject(); + feed_jo.put("task_id", entity.getExt_task_id()); + feed_jo.put("task_code", entity.getTask_code()); + feed_jo.put("task_status", entity.getTask_status()); + JSONArray ja = new JSONArray(); + ja.add(feed_jo); + String message = null; + HttpResponse body = null; + boolean flag = false; + try { + body = acstowmsService.feedbackTaskStatusToWms(ja); + } catch (Exception e) { + flag = true; + message = e.getMessage(); + e.printStackTrace(); + } finally { + + } + if (flag) { + if (ObjectUtil.isEmpty(feefbackdto)) { + feefbackdto = new TaskFeedbackDto(); + feefbackdto.setTask_id(entity.getTask_id()); + feefbackdto.setTask_code(entity.getTask_code()); + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setVehicle_type(entity.getVehicle_type()); + feefbackdto.setVehicle_code(entity.getVehicle_code()); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getStart_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + feefbackdto.setError_code("400"); + feefbackdto.setIs_finished("0"); + feefbackdto.setRemark(message); + taskFeedbackService.create(feefbackdto); + } else { + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getStart_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + feefbackdto.setError_code("400"); + feefbackdto.setRemark(message); + taskFeedbackService.update(feefbackdto); + } + } else { + int status = body.getStatus(); + JSONObject jo = JSONObject.parseObject(body.body()); + if (ObjectUtil.isEmpty(feefbackdto)) { + feefbackdto = new TaskFeedbackDto(); + feefbackdto.setTask_id(entity.getTask_id()); + feefbackdto.setTask_code(entity.getTask_code()); + feefbackdto.setTask_status(entity.getTask_status()); + feefbackdto.setVehicle_type(entity.getVehicle_type()); + feefbackdto.setVehicle_code(entity.getVehicle_code()); + feefbackdto.setError_code(String.valueOf(body.getStatus())); + feefbackdto.setStart_device_code(entity.getStart_device_code()); + feefbackdto.setStart_point_code(entity.getStart_point_code()); + feefbackdto.setNext_device_code(entity.getNext_device_code()); + feefbackdto.setNext_point_code(entity.getNext_point_code()); + if (status == 200) { + if (StrUtil.equals(entity.getTask_status(), "2")) { + feefbackdto.setIs_finished("1"); + } else { + feefbackdto.setIs_finished("0"); + } + } else { + feefbackdto.setIs_finished("0"); + feefbackdto.setRemark(jo.getString("message")); + } + taskFeedbackService.create(feefbackdto); + } else { + feefbackdto.setTask_status(entity.getTask_status()); + if (status == 200) { + if (StrUtil.equals(entity.getTask_status(), "2")) { + feefbackdto.setIs_finished("1"); + } else { + feefbackdto.setIs_finished("0"); + } + } else { + feefbackdto.setIs_finished("0"); + feefbackdto.setRemark(jo.getString("message")); + } + taskFeedbackService.update(feefbackdto); + } + } + } + // 如果属于先知AGV,关闭运单序列 + if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { + try { + agvService.markComplete(entity.getTask_code()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancel(String id) throws Exception { + TaskDto entity = this.findById(id); + if (entity == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); + InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 "); + if (instdto != null) { + throw new BadRequestException("有指令未完成!"); + } + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + entity.setUpdate_time(now); + entity.setUpdate_by(currentUsername); + entity.setTask_status("3"); + WQLObject wo = WQLObject.getWQLObject("acs_task"); + JSONObject json = (JSONObject) JSONObject.toJSON(entity); + wo.update(json); // synchronized (TaskServiceImpl.class){ // Iterator it = tasks.iterator(); @@ -924,636 +941,651 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { // } // }} - removeByCodeFromCache(entity.getTask_code()); + removeByCodeFromCache(entity.getTask_code()); - // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS - String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); - if (!StrUtil.startWith(entity.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { - JSONObject feed_jo = new JSONObject(); - feed_jo.put("task_id", entity.getExt_task_id()); - feed_jo.put("task_code", entity.getTask_code()); - feed_jo.put("task_status", entity.getTask_status()); - JSONArray ja = new JSONArray(); - ja.add(feed_jo); - acstowmsService.feedbackTaskStatusToWms(ja); - } - List shortPathsList = - routeLineService.getShortPathLines( - entity.getStart_device_code(), - entity.getNext_device_code(), - entity.getRoute_plan_code()); - String type = shortPathsList.get(0).getType(); - // != 0 为agv任务 - if (!StrUtil.equals(type, "0")) { - if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { - agvService.markComplete(entity.getTask_code()); - } - } - } - - @Override - public Instruction createTemporaryInst(TaskDto acsTask) { - if (acsTask == null) { - throw new BadRequestException("被删除或无权限,操作失败!"); - } - acsTask = foramte(acsTask); - ParamService paramService = SpringContextHolder.getBean(ParamService.class); - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - - String taskid = acsTask.getTask_id(); - String taskcode = acsTask.getTask_code(); - String vehiclecode = acsTask.getVehicle_code(); - String priority = acsTask.getPriority(); - String start_point_code = acsTask.getStart_point_code(); - String start_device_code = acsTask.getStart_device_code(); - String route_plan_code = acsTask.getRoute_plan_code(); - String vehicleType = acsTask.getVehicle_type(); - // 是否复合任务 =0非复合任务 - String compound_task = acsTask.getCompound_task(); - String next_point_code = acsTask.getNext_point_code(); - String next_device_code = acsTask.getNext_device_code(); - String start_point_code2 = acsTask.getStart_point_code2(); - String next_point_code2 = acsTask.getNext_point_code2(); - String agv_system_type = acsTask.getAgv_system_type(); - String task_type = acsTask.getTask_type(); - String from_x = acsTask.getFrom_x(); - String from_y = acsTask.getFrom_y(); - String from_z = acsTask.getFrom_z(); - String to_x = acsTask.getTo_x(); - String to_y = acsTask.getTo_y(); - String to_z = acsTask.getTo_z(); - - /** 开始平均分解校验 */ - String this_device_code = - this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); - if (StrUtil.isEmpty(this_device_code)) { - List shortPathsList = - routeLineService.getShortPathLines( - start_device_code, acsTask.getNext_device_code(), route_plan_code); - if(ObjectUtil.isEmpty(shortPathsList)){ - throw new BadRequestException(start_device_code + "->" + acsTask.getNext_device_code() + "路由不通!"); - } - RouteLineDto routeLineDto = shortPathsList.get(0); - String path = routeLineDto.getPath(); - String type = routeLineDto.getType(); - String[] str = path.split("->"); - List pathlist = Arrays.asList(str); - int index = 0; - for (int m = 0; m < pathlist.size(); m++) { - if (pathlist.get(m).equals(start_device_code)) { - index = m + 1; - break; + // 判断是否为WMS下发的任务,如果是反馈任务状态给WMS + String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue(); + if (!StrUtil.startWith(entity.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) { + JSONObject feed_jo = new JSONObject(); + feed_jo.put("task_id", entity.getExt_task_id()); + feed_jo.put("task_code", entity.getTask_code()); + feed_jo.put("task_status", entity.getTask_status()); + JSONArray ja = new JSONArray(); + ja.add(feed_jo); + acstowmsService.feedbackTaskStatusToWms(ja); + } + List shortPathsList = + routeLineService.getShortPathLines( + entity.getStart_device_code(), + entity.getNext_device_code(), + entity.getRoute_plan_code()); + String type = shortPathsList.get(0).getType(); + // != 0 为agv任务 + if (!StrUtil.equals(type, "0")) { + if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) { + agvService.markComplete(entity.getTask_code()); + } } - } - next_device_code = pathlist.get(index); - } else { - next_device_code = this_device_code; } - if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { - next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); - } else { - next_point_code = next_device_code; - } - - Instruction instdto = new Instruction(); - if (StrUtil.isEmpty(instdto.getInstruction_code())) { - instdto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); - } - instdto.setInstruction_type(task_type); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(acsTask.getRemark()); - instdto.setMaterial(acsTask.getMaterial()); - instdto.setQuantity(acsTask.getQuantity()); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - instdto.setCreate_time(now); - instdto.setCreate_by("auto"); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instdto.setVehicle_type(vehicleType); - instdto.setStart_point_code2(start_point_code2); - instdto.setStart_device_code2(start_point_code2); - instdto.setNext_device_code2(next_point_code2); - instdto.setNext_point_code2(next_point_code2); - instdto.setAgv_system_type(agv_system_type); - instdto.setFrom_x(from_x); - instdto.setFrom_y(from_y); - instdto.setFrom_z(from_z); - instdto.setTo_x(to_x); - instdto.setTo_y(to_y); - instdto.setTo_z(to_z); - - // 判断agv系统 - // 1、1楼叉车系统 - // 2、2楼1区域AGV系统 - // 3、2楼2区域AGV系统 - if (!StrUtil.equals(agv_system_type, "1")) { - // task_type - // 1、生箔; Itype=1:取空,取满,放空,放满; - // 2、分切 Itype=3取满、取空、放满、放空; - // 3、普通任务 Itype=2:取货、放货; - // 4、叉车任务 - // 5、输送任务 - // 6、行架 - // 7、立库 - if (StrUtil.equals(task_type, "1")) { - instdto.setAgv_inst_type("1"); - } else if (StrUtil.equals(task_type, "3")) { - instdto.setAgv_inst_type("2"); - } else if (StrUtil.equals(task_type, "2")) { - instdto.setAgv_inst_type("3"); - } - } else { - instdto.setAgv_inst_type("4"); - } - return instdto; - } - - @Override - public Instruction createInst(String ids) throws Exception { - TaskService taskserver = SpringContextHolder.getBean(TaskService.class); - TaskDto acsTask = this.findById(ids); - if (acsTask == null) throw new BadRequestException("被删除或无权限,操作失败!"); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - InstructionDto inst = instructionservice.findByTaskid(ids, "instruction_status < 2 "); - if (inst != null) throw new BadRequestException("有指令未完成!"); - String link_no = CodeUtil.getNewCode("LINK_NO"); - String taskid = acsTask.getTask_id(); - String taskcode = acsTask.getTask_code(); - String vehiclecode = acsTask.getVehicle_code(); - String priority = acsTask.getPriority(); - String material = acsTask.getMaterial(); - String start_point_code = acsTask.getStart_point_code(); - String start_device_code = acsTask.getStart_device_code(); - String route_plan_code = acsTask.getRoute_plan_code(); - String vehicleType = acsTask.getVehicle_type(); - //是否复合任务 =0非复合任务 - String compound_task = acsTask.getCompound_task(); - String next_point_code = acsTask.getNext_point_code(); - String next_device_code = acsTask.getNext_device_code(); - String agv_system_type = acsTask.getAgv_system_type(); - String put_device_code = acsTask.getPut_device_code(); - String put_point_code = acsTask.getPut_point_code(); - String remark = acsTask.getRemark(); - String task_type = acsTask.getTask_type(); - String quantity = acsTask.getQuantity(); - String is_send = acsTask.getIs_send(); - if(StrUtil.equals(is_send,"0")){ - throw new BadRequestException("is_send"); - } - Instruction instdto = new Instruction(); - instdto.setInstruction_type(task_type); - instdto.setInstruction_id(IdUtil.simpleUUID()); - instdto.setRoute_plan_code(route_plan_code); - instdto.setRemark(remark); - instdto.setLink_num(link_no); - instdto.setMaterial(material); - instdto.setQuantity(quantity); - instdto.setPut_device_code(put_device_code); - instdto.setPut_point_code(put_point_code); - instdto.setAgv_system_type(agv_system_type); - instdto.setTask_id(taskid); - instdto.setTask_code(taskcode); - instdto.setVehicle_code(vehiclecode); - String now = DateUtil.now(); - String currentUsername = SecurityUtils.getCurrentUsername(); - instdto.setCreate_time(now); - instdto.setCreate_by(currentUsername); - instdto.setStart_device_code(start_device_code); - instdto.setNext_device_code(next_device_code); - instdto.setStart_point_code(start_point_code); - instdto.setNext_point_code(next_point_code); - instdto.setPriority(priority); - instdto.setInstruction_status("0"); - instdto.setExecute_device_code(start_point_code); - instdto.setVehicle_type(vehicleType); - instructionservice.create(instdto); - //创建指令后修改任务状态 - acsTask.setTask_status("1"); - acsTask.setTask_type("2"); - acsTask.setLink_num(link_no); - taskserver.update(acsTask); - return instdto; - } - - @Override - public Instruction createInst(Instruction inst) throws Exception { - - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); - InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - - instructionservice.create2(inst); - return inst; - } - - @Override - public void download(List all, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (TaskDto acsTask : all) { - Map map = new LinkedHashMap<>(); - map.put("任务号", acsTask.getTask_code()); - map.put("载具号", acsTask.getVehicle_code()); - map.put("载具类型", acsTask.getVehicle_type()); - map.put("任务类型", acsTask.getTask_type()); - map.put("任务状态", acsTask.getTask_status()); - map.put("任务优先级", acsTask.getPriority()); - map.put("创建类型", acsTask.getCreate_type()); - map.put("完成类型", acsTask.getFinish_type()); - map.put("执行描述编码", acsTask.getExecute_code()); - map.put("执行描述信息", acsTask.getExecute_message()); - map.put("起始点位编码", acsTask.getStart_point_code()); - map.put("起始设备编码", acsTask.getStart_device_code()); - map.put("目标点位编码", acsTask.getNext_point_code()); - map.put("目标设备编码", acsTask.getNext_device_code()); - map.put("起始点位编码2", acsTask.getStart_point_code2()); - map.put("起始设备编码2", acsTask.getStart_device_code2()); - map.put("目标点位编码2", acsTask.getNext_point_code2()); - map.put("目标设备编码2", acsTask.getNext_device_code2()); - map.put("放货点位编码", acsTask.getPut_point_code()); - map.put("放货设备编码", acsTask.getPut_device_code()); - map.put("列", acsTask.getTo_y()); - map.put("层", acsTask.getTo_z()); - map.put("重量", acsTask.getWeight()); - map.put("agv系统类型", acsTask.getAgv_system_type()); - map.put("立库任务类型", acsTask.getStorage_task_type()); - map.put("烘箱温度", acsTask.getTemperature()); - map.put("烘箱时间", acsTask.getOven_time()); - map.put("agv车号", acsTask.getCarno()); - map.put("路由方案名称", acsTask.getRoute_plan_name()); - map.put("路由方案编码", acsTask.getRoute_plan_code()); - map.put("是否需要反馈上位系统", acsTask.getIs_needfeedback()); - map.put("备注", acsTask.getRemark()); - map.put("是否启用", acsTask.getIs_active()); - map.put("是否删除", acsTask.getIs_delete()); - map.put("创建者", acsTask.getCreate_by()); - map.put("创建时间", acsTask.getCreate_time()); - map.put("修改者", acsTask.getUpdate_by()); - map.put("修改时间", acsTask.getUpdate_time()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } - - @Override - public void createTaskByClick(JSONObject json) {} - - @Override - public int checkAllowCreate(String devicecode) { - Map map = new HashMap(); - List taskList = this.queryAllUnfinished(map); - int num = 0; - for (int i = 0; i < taskList.size(); i++) { - TaskDto onetask = taskList.get(i); - String next_code = onetask.getNext_point_code(); - if (StrUtil.equals(devicecode, next_code)) { - num = num + 1; - } - } - return num; - } - - @Override - public boolean removeByCodeFromCache(String code) { - CopyOnWriteArrayList taskDtos = (CopyOnWriteArrayList) this.tasks; - taskDtos.removeIf((task) -> { - return task.getTask_code().equals(code); - }); - return true; - } - - @Override - public List findAllTaskFromCache() { - return tasks; - } - - public TaskDto findByContainer(String container_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getVehicle_code(), container_code)) { - return task; + @Override + public Instruction createTemporaryInst(TaskDto acsTask) { + if (acsTask == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); } - } + acsTask = foramte(acsTask); + ParamService paramService = SpringContextHolder.getBean(ParamService.class); + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - return null; - } + String taskid = acsTask.getTask_id(); + String taskcode = acsTask.getTask_code(); + String vehiclecode = acsTask.getVehicle_code(); + String priority = acsTask.getPriority(); + String start_point_code = acsTask.getStart_point_code(); + String start_device_code = acsTask.getStart_device_code(); + String route_plan_code = acsTask.getRoute_plan_code(); + String vehicleType = acsTask.getVehicle_type(); + // 是否复合任务 =0非复合任务 + String compound_task = acsTask.getCompound_task(); + String next_point_code = acsTask.getNext_point_code(); + String next_device_code = acsTask.getNext_device_code(); + String start_point_code2 = acsTask.getStart_point_code2(); + String next_point_code2 = acsTask.getNext_point_code2(); + String agv_system_type = acsTask.getAgv_system_type(); + String task_type = acsTask.getTask_type(); + String from_x = acsTask.getFrom_x(); + String from_y = acsTask.getFrom_y(); + String from_z = acsTask.getFrom_z(); + String to_x = acsTask.getTo_x(); + String to_y = acsTask.getTo_y(); + String to_z = acsTask.getTo_z(); - public TaskDto findByCodeFromCache(String task_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getTask_code(), task_code)) { - return task; - } - } - return null; - } - - @Override - public TaskDto findByNextCode(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getNext_device_code(), device_code)) { - return task; - } - } - return null; - } - - @Override - public List findAllByNextCode(String device_code) { - return null; - } - - @Override - public Integer queryAllTaskMaterialQty(String device_code) { - return null; - } - - @Override - public TaskDto findByStartCodeAndReady(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - // if (!StrUtil.equals(task.getTask_type(), "5")) { - // continue; - // } - if (StrUtil.equals(task.getStart_device_code(), device_code) - && StrUtil.equals(task.getTask_status(), "0")) { - return task; - } - } - return null; - } - - @Override - public TaskDto findByStartCode(String device_code) { - Iterator var3 = tasks.iterator(); - - while (var3.hasNext()) { - TaskDto task = (TaskDto) var3.next(); - if (StrUtil.equals(task.getStart_device_code(), device_code)) { - return task; - } - } - return null; - } - - @Override - public TaskDto foramte(TaskDto task) { - String start_point_code = task.getStart_point_code(); - String next_point_code = task.getNext_point_code(); - String from_y = null; - String from_z = null; - String to_y = null; - String to_z = null; - if (StrUtil.contains(start_point_code, "-") && StrUtil.count(start_point_code, "-") == 2) { - String[] start_point = start_point_code.split("-"); - task.setFrom_x(start_point[0]); - task.setStart_device_code(start_point[0]); - if (Integer.parseInt(start_point[1]) < 10 && start_point[1].length() == 1) { - from_y = "0" + start_point[1]; - task.setFrom_y(from_y); - } else { - from_y = start_point[1]; - task.setFrom_y(from_y); - } - if (Integer.parseInt(start_point[2]) < 10 && start_point[2].length() == 1) { - from_z = "0" + start_point[2]; - task.setFrom_z(from_z); - } else if (start_point[2].length() == 2) { - from_z = start_point[2]; - task.setFrom_z(start_point[2]); - } else { - from_z = start_point[2]; - } - task.setStart_point_code(task.getStart_device_code() + "-" + from_y + "-" + from_z); - task.setStart_device_code(task.getStart_device_code()); - - } else { - String start_device = - deviceAppService - .findDeviceByCode(start_point_code) - .getDeviceDriverDefination() - .getFitDeviceTypes() - .get(0) - .name(); - // 如果point_device为货架,则不包含列层信息,需要重新拼接 - if (StrUtil.equals("storage", start_device)) { - if (StrUtil.isEmpty(task.getFrom_x())) { - throw new BadRequestException("货位信息起点需要包含列信息"); - } - if (StrUtil.isEmpty(task.getFrom_y())) { - throw new BadRequestException("货位信息起点需要包含层信息"); - } - if (Integer.parseInt(task.getFrom_y()) < 10 && task.getFrom_y().length() == 1) { - from_y = "0" + task.getFrom_y(); - task.setFrom_y(from_y); + /** 开始平均分解校验 */ + String this_device_code = + this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { + List shortPathsList = + routeLineService.getShortPathLines( + start_device_code, acsTask.getNext_device_code(), route_plan_code); + if (ObjectUtil.isEmpty(shortPathsList)) { + throw new BadRequestException(start_device_code + "->" + acsTask.getNext_device_code() + "路由不通!"); + } + RouteLineDto routeLineDto = shortPathsList.get(0); + String path = routeLineDto.getPath(); + String type = routeLineDto.getType(); + String[] str = path.split("->"); + List pathlist = Arrays.asList(str); + int index = 0; + for (int m = 0; m < pathlist.size(); m++) { + if (pathlist.get(m).equals(start_device_code)) { + index = m + 1; + break; + } + } + next_device_code = pathlist.get(index); } else { - from_y = task.getFrom_y(); + next_device_code = this_device_code; } - if (Integer.parseInt(task.getFrom_z()) < 10 && task.getFrom_z().length() == 1) { - from_z = "0" + task.getFrom_z(); - task.setFrom_z(from_z); - } else if (task.getFrom_z().length() == 2) { - from_z = task.getFrom_z(); - task.setFrom_z(from_z); + + if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { + next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); } else { - from_z = task.getFrom_z(); + next_point_code = next_device_code; } - task.setFrom_x(start_point_code); - task.setStart_point_code(start_point_code + "-" + from_y + "-" + from_z); - task.setStart_device_code(start_point_code); - } else { - task.setStart_device_code(start_point_code); - task.setStart_device_code(start_point_code); - } - } - if (StrUtil.contains(next_point_code, "-") && StrUtil.count(next_point_code, "-") == 2) { - String[] next_point = next_point_code.split("-"); - task.setNext_device_code(next_point[0]); - task.setTo_x(next_point[0]); - if (Integer.parseInt(next_point[1]) < 10 && next_point[1].length() == 1) { - to_y = "0" + next_point[1]; - task.setTo_y(to_y); - } else { - to_y = next_point[1]; - task.setTo_y(to_y); - } - if (Integer.parseInt(next_point[2]) < 10 && next_point[2].length() == 1) { - to_z = "0" + next_point[2]; - task.setTo_z(to_z); - } else if (next_point[2].length() == 2) { - to_z = next_point[2]; - task.setTo_z(to_z); - } else { - to_z = next_point[2]; - task.setTo_z(to_z); - } - task.setNext_point_code(task.getNext_device_code() + "-" + to_y + "-" + to_z); - task.setNext_device_code(task.getNext_device_code()); + Instruction instdto = new Instruction(); + if (StrUtil.isEmpty(instdto.getInstruction_code())) { + instdto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); + } + instdto.setInstruction_type(task_type); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(acsTask.getRemark()); + instdto.setMaterial(acsTask.getMaterial()); + instdto.setQuantity(acsTask.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instdto.setVehicle_type(vehicleType); + instdto.setStart_point_code2(start_point_code2); + instdto.setStart_device_code2(start_point_code2); + instdto.setNext_device_code2(next_point_code2); + instdto.setNext_point_code2(next_point_code2); + instdto.setAgv_system_type(agv_system_type); + instdto.setFrom_x(from_x); + instdto.setFrom_y(from_y); + instdto.setFrom_z(from_z); + instdto.setTo_x(to_x); + instdto.setTo_y(to_y); + instdto.setTo_z(to_z); - } else { - String next_device = - deviceAppService - .findDeviceByCode(next_point_code) - .getDeviceDriverDefination() - .getFitDeviceTypes() - .get(0) - .name(); - if (StrUtil.equals("storage", next_device)) { - if (StrUtil.isEmpty(task.getTo_x())) { - throw new BadRequestException("货位信息终点需要包含列信息"); - } - if (StrUtil.isEmpty(task.getTo_y())) { - throw new BadRequestException("货位信息终点需要包含层信息"); - } - if (Integer.parseInt(task.getTo_y()) < 10 && task.getTo_y().length() == 1) { - to_y = "0" + task.getTo_y(); - task.setTo_y(to_y); + // 判断agv系统 + // 1、1楼叉车系统 + // 2、2楼1区域AGV系统 + // 3、2楼2区域AGV系统 + if (!StrUtil.equals(agv_system_type, "1")) { + // task_type + // 1、生箔; Itype=1:取空,取满,放空,放满; + // 2、分切 Itype=3取满、取空、放满、放空; + // 3、普通任务 Itype=2:取货、放货; + // 4、叉车任务 + // 5、输送任务 + // 6、行架 + // 7、立库 + if (StrUtil.equals(task_type, "1")) { + instdto.setAgv_inst_type("1"); + } else if (StrUtil.equals(task_type, "3")) { + instdto.setAgv_inst_type("2"); + } else if (StrUtil.equals(task_type, "2")) { + instdto.setAgv_inst_type("3"); + } } else { - to_y = task.getTo_y(); + instdto.setAgv_inst_type("4"); } - if (Integer.parseInt(task.getTo_z()) < 10 && task.getTo_z().length() == 1) { - to_z = "0" + task.getTo_z(); - task.setTo_z(to_z); - } else if (task.getTo_z().length() == 2) { - to_z = task.getTo_z(); - task.setTo_z(to_z); + return instdto; + } + + @Override + public Instruction createInst(String ids) throws Exception { + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); + TaskDto acsTask = this.findById(ids); + if (acsTask == null) throw new BadRequestException("被删除或无权限,操作失败!"); + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); + InstructionDto inst = instructionservice.findByTaskid(ids, "instruction_status < 2 "); + if (inst != null) throw new BadRequestException("有指令未完成!"); + String link_no = CodeUtil.getNewCode("LINK_NO"); + String taskid = acsTask.getTask_id(); + String taskcode = acsTask.getTask_code(); + String vehiclecode = acsTask.getVehicle_code(); + String priority = acsTask.getPriority(); + String material = acsTask.getMaterial(); + String start_point_code = acsTask.getStart_point_code(); + String start_device_code = acsTask.getStart_device_code(); + String route_plan_code = acsTask.getRoute_plan_code(); + String vehicleType = acsTask.getVehicle_type(); + //是否复合任务 =0非复合任务 + String compound_task = acsTask.getCompound_task(); + String next_point_code = acsTask.getNext_point_code(); + String next_device_code = acsTask.getNext_device_code(); + String agv_system_type = acsTask.getAgv_system_type(); + String put_device_code = acsTask.getPut_device_code(); + String put_point_code = acsTask.getPut_point_code(); + String remark = acsTask.getRemark(); + String task_type = acsTask.getTask_type(); + String quantity = acsTask.getQuantity(); + String is_send = acsTask.getIs_send(); + if (StrUtil.equals(is_send, "0")) { + throw new BadRequestException("is_send"); + } + Instruction instdto = new Instruction(); + instdto.setInstruction_type(task_type); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setRemark(remark); + instdto.setLink_num(link_no); + instdto.setMaterial(material); + instdto.setQuantity(quantity); + instdto.setPut_device_code(put_device_code); + instdto.setPut_point_code(put_point_code); + instdto.setAgv_system_type(agv_system_type); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + String currentUsername = SecurityUtils.getCurrentUsername(); + instdto.setCreate_time(now); + instdto.setCreate_by(currentUsername); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instdto.setVehicle_type(vehicleType); + instructionservice.create(instdto); + //创建指令后修改任务状态 + acsTask.setTask_status("1"); + acsTask.setTask_type("2"); + acsTask.setLink_num(link_no); + taskserver.update(acsTask); + return instdto; + } + + @Override + public Instruction createInst(Instruction inst) throws Exception { + + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); + + instructionservice.create2(inst); + return inst; + } + + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (TaskDto acsTask : all) { + Map map = new LinkedHashMap<>(); + map.put("任务号", acsTask.getTask_code()); + map.put("载具号", acsTask.getVehicle_code()); + map.put("载具类型", acsTask.getVehicle_type()); + map.put("任务类型", acsTask.getTask_type()); + map.put("任务状态", acsTask.getTask_status()); + map.put("任务优先级", acsTask.getPriority()); + map.put("创建类型", acsTask.getCreate_type()); + map.put("完成类型", acsTask.getFinish_type()); + map.put("执行描述编码", acsTask.getExecute_code()); + map.put("执行描述信息", acsTask.getExecute_message()); + map.put("起始点位编码", acsTask.getStart_point_code()); + map.put("起始设备编码", acsTask.getStart_device_code()); + map.put("目标点位编码", acsTask.getNext_point_code()); + map.put("目标设备编码", acsTask.getNext_device_code()); + map.put("起始点位编码2", acsTask.getStart_point_code2()); + map.put("起始设备编码2", acsTask.getStart_device_code2()); + map.put("目标点位编码2", acsTask.getNext_point_code2()); + map.put("目标设备编码2", acsTask.getNext_device_code2()); + map.put("放货点位编码", acsTask.getPut_point_code()); + map.put("放货设备编码", acsTask.getPut_device_code()); + map.put("列", acsTask.getTo_y()); + map.put("层", acsTask.getTo_z()); + map.put("重量", acsTask.getWeight()); + map.put("agv系统类型", acsTask.getAgv_system_type()); + map.put("立库任务类型", acsTask.getStorage_task_type()); + map.put("烘箱温度", acsTask.getTemperature()); + map.put("烘箱时间", acsTask.getOven_time()); + map.put("agv车号", acsTask.getCarno()); + map.put("路由方案名称", acsTask.getRoute_plan_name()); + map.put("路由方案编码", acsTask.getRoute_plan_code()); + map.put("是否需要反馈上位系统", acsTask.getIs_needfeedback()); + map.put("备注", acsTask.getRemark()); + map.put("是否启用", acsTask.getIs_active()); + map.put("是否删除", acsTask.getIs_delete()); + map.put("创建者", acsTask.getCreate_by()); + map.put("创建时间", acsTask.getCreate_time()); + map.put("修改者", acsTask.getUpdate_by()); + map.put("修改时间", acsTask.getUpdate_time()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void createTaskByClick(JSONObject json) { + } + + @Override + public int checkAllowCreate(String devicecode) { + Map map = new HashMap(); + List taskList = this.queryAllUnfinished(map); + int num = 0; + for (int i = 0; i < taskList.size(); i++) { + TaskDto onetask = taskList.get(i); + String next_code = onetask.getNext_point_code(); + if (StrUtil.equals(devicecode, next_code)) { + num = num + 1; + } + } + return num; + } + + @Override + public boolean removeByCodeFromCache(String code) { + CopyOnWriteArrayList taskDtos = (CopyOnWriteArrayList) this.tasks; + taskDtos.removeIf((task) -> { + return task.getTask_code().equals(code); + }); + return true; + } + + @Override + public List findAllTaskFromCache() { + return tasks; + } + + public TaskDto findByContainer(String container_code) { + return Optional + .ofNullable(this.tasks) + .orElse(new ArrayList<>()) + .stream() + .filter(t -> t.getVehicle_code().equals(container_code)) + .findFirst() + .orElse(null); +// Iterator var3 = tasks.iterator(); +// +// while (var3.hasNext()) { +// TaskDto task = (TaskDto) var3.next(); +// if (StrUtil.equals(task.getVehicle_code(), container_code)) { +// return task; +// } +// } +// +// return null; + } + + public TaskDto findByCodeFromCache(String task_code) { + return Optional + .ofNullable(this.tasks) + .orElse(new ArrayList<>()) + .stream() + .filter(t -> t.getTask_code().equals(task_code)) + .findFirst() + .orElse(null); +// Iterator var3 = tasks.iterator(); +// +// while (var3.hasNext()) { +// TaskDto task = (TaskDto) var3.next(); +// if (StrUtil.equals(task.getTask_code(), task_code)) { +// return task; +// } +// } +// return null; + } + + @Override + public TaskDto findByNextCode(String device_code) { + Iterator var3 = tasks.iterator(); + + while (var3.hasNext()) { + TaskDto task = (TaskDto) var3.next(); + if (StrUtil.equals(task.getNext_device_code(), device_code)) { + return task; + } + } + return null; + } + + @Override + public List findAllByNextCode(String device_code) { + return null; + } + + @Override + public Integer queryAllTaskMaterialQty(String device_code) { + return null; + } + + @Override + public TaskDto findByStartCodeAndReady(String device_code) { + Iterator var3 = tasks.iterator(); + + while (var3.hasNext()) { + TaskDto task = (TaskDto) var3.next(); + // if (!StrUtil.equals(task.getTask_type(), "5")) { + // continue; + // } + if (StrUtil.equals(task.getStart_device_code(), device_code) + && StrUtil.equals(task.getTask_status(), "0")) { + return task; + } + } + return null; + } + + @Override + public TaskDto findByStartCode(String device_code) { + Iterator var3 = tasks.iterator(); + + while (var3.hasNext()) { + TaskDto task = (TaskDto) var3.next(); + if (StrUtil.equals(task.getStart_device_code(), device_code)) { + return task; + } + } + return null; + } + + @Override + public TaskDto foramte(TaskDto task) { + String start_point_code = task.getStart_point_code(); + String next_point_code = task.getNext_point_code(); + String from_y = null; + String from_z = null; + String to_y = null; + String to_z = null; + if (StrUtil.contains(start_point_code, "-") && StrUtil.count(start_point_code, "-") == 2) { + String[] start_point = start_point_code.split("-"); + task.setFrom_x(start_point[0]); + task.setStart_device_code(start_point[0]); + if (Integer.parseInt(start_point[1]) < 10 && start_point[1].length() == 1) { + from_y = "0" + start_point[1]; + task.setFrom_y(from_y); + } else { + from_y = start_point[1]; + task.setFrom_y(from_y); + } + if (Integer.parseInt(start_point[2]) < 10 && start_point[2].length() == 1) { + from_z = "0" + start_point[2]; + task.setFrom_z(from_z); + } else if (start_point[2].length() == 2) { + from_z = start_point[2]; + task.setFrom_z(start_point[2]); + } else { + from_z = start_point[2]; + } + task.setStart_point_code(task.getStart_device_code() + "-" + from_y + "-" + from_z); + task.setStart_device_code(task.getStart_device_code()); + } else { - to_z = task.getTo_z(); + String start_device = + deviceAppService + .findDeviceByCode(start_point_code) + .getDeviceDriverDefination() + .getFitDeviceTypes() + .get(0) + .name(); + // 如果point_device为货架,则不包含列层信息,需要重新拼接 + if (StrUtil.equals("storage", start_device)) { + if (StrUtil.isEmpty(task.getFrom_x())) { + throw new BadRequestException("货位信息起点需要包含列信息"); + } + if (StrUtil.isEmpty(task.getFrom_y())) { + throw new BadRequestException("货位信息起点需要包含层信息"); + } + if (Integer.parseInt(task.getFrom_y()) < 10 && task.getFrom_y().length() == 1) { + from_y = "0" + task.getFrom_y(); + task.setFrom_y(from_y); + } else { + from_y = task.getFrom_y(); + } + if (Integer.parseInt(task.getFrom_z()) < 10 && task.getFrom_z().length() == 1) { + from_z = "0" + task.getFrom_z(); + task.setFrom_z(from_z); + } else if (task.getFrom_z().length() == 2) { + from_z = task.getFrom_z(); + task.setFrom_z(from_z); + } else { + from_z = task.getFrom_z(); + } + task.setFrom_x(start_point_code); + task.setStart_point_code(start_point_code + "-" + from_y + "-" + from_z); + task.setStart_device_code(start_point_code); + } else { + task.setStart_device_code(start_point_code); + task.setStart_device_code(start_point_code); + } } - task.setTo_x(next_point_code); - task.setNext_point_code(next_point_code + "-" + to_y + "-" + to_z); - task.setNext_device_code(next_point_code); - } else { - task.setNext_device_code(next_point_code); - task.setNext_device_code(next_point_code); - } + if (StrUtil.contains(next_point_code, "-") && StrUtil.count(next_point_code, "-") == 2) { + String[] next_point = next_point_code.split("-"); + task.setNext_device_code(next_point[0]); + task.setTo_x(next_point[0]); + if (Integer.parseInt(next_point[1]) < 10 && next_point[1].length() == 1) { + to_y = "0" + next_point[1]; + task.setTo_y(to_y); + } else { + to_y = next_point[1]; + task.setTo_y(to_y); + } + if (Integer.parseInt(next_point[2]) < 10 && next_point[2].length() == 1) { + to_z = "0" + next_point[2]; + task.setTo_z(to_z); + } else if (next_point[2].length() == 2) { + to_z = next_point[2]; + task.setTo_z(to_z); + } else { + to_z = next_point[2]; + task.setTo_z(to_z); + } + task.setNext_point_code(task.getNext_device_code() + "-" + to_y + "-" + to_z); + task.setNext_device_code(task.getNext_device_code()); + + } else { + String next_device = + deviceAppService + .findDeviceByCode(next_point_code) + .getDeviceDriverDefination() + .getFitDeviceTypes() + .get(0) + .name(); + if (StrUtil.equals("storage", next_device)) { + if (StrUtil.isEmpty(task.getTo_x())) { + throw new BadRequestException("货位信息终点需要包含列信息"); + } + if (StrUtil.isEmpty(task.getTo_y())) { + throw new BadRequestException("货位信息终点需要包含层信息"); + } + if (Integer.parseInt(task.getTo_y()) < 10 && task.getTo_y().length() == 1) { + to_y = "0" + task.getTo_y(); + task.setTo_y(to_y); + } else { + to_y = task.getTo_y(); + } + if (Integer.parseInt(task.getTo_z()) < 10 && task.getTo_z().length() == 1) { + to_z = "0" + task.getTo_z(); + task.setTo_z(to_z); + } else if (task.getTo_z().length() == 2) { + to_z = task.getTo_z(); + task.setTo_z(to_z); + } else { + to_z = task.getTo_z(); + } + task.setTo_x(next_point_code); + task.setNext_point_code(next_point_code + "-" + to_y + "-" + to_z); + task.setNext_device_code(next_point_code); + + } else { + task.setNext_device_code(next_point_code); + task.setNext_device_code(next_point_code); + } + } + return task; } - return task; - } - @Override - public void updateByCodeFromCache(TaskDto dto) { - removeByCodeFromCache(dto.getTask_code()); - tasks.add(dto); - } - - @Override - public String queryAssignedByDevice(String device_code, String task_nextdeice_code) { - List list = - deviceAssignedService.queryAssignedBydevice(device_code, task_nextdeice_code); - int flag1 = 0; - String flag2 = null; - for (int i = 0; i < list.size(); i++) { - DeviceAssignedDto dto = list.get(i); - String inst_nextDevice_code = dto.getInst_nextdevice_code(); - String task_nextDevice_code = dto.getTask_nextdevice_code(); - String param = dto.getParam(); - JSONObject jo = JSON.parseObject(param); - String regEx = "[`~!@#$%^&*()+=|{}':;'\\[\\].<>/?~!@#¥%……&*()——+|{}【】':”“’。、?]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(inst_nextDevice_code); - String toSpeechText = m.replaceAll("").trim(); - - String[] str = toSpeechText.split(","); - List pathlist = Arrays.asList(str); - for (int j = 0; j < pathlist.size(); j++) { - String this_device_code = pathlist.get(j).toString(); - JSONObject data = JSON.parseObject(jo.getString(this_device_code)); - String limit = data.getString("limit"); - int num = instructionService.querySameDestinationInst(this_device_code); - if (num >= Integer.parseInt(limit)) { - continue; - } - if (j == 0) { - flag1 = num; - } - if (num <= flag1) { - flag2 = this_device_code; - } - } + @Override + public void updateByCodeFromCache(TaskDto dto) { + removeByCodeFromCache(dto.getTask_code()); + tasks.add(dto); } - if (!StrUtil.isEmpty(flag2)) { - return flag2; + + @Override + public String queryAssignedByDevice(String device_code, String task_nextdeice_code) { + List list = + deviceAssignedService.queryAssignedBydevice(device_code, task_nextdeice_code); + int flag1 = 0; + String flag2 = null; + for (int i = 0; i < list.size(); i++) { + DeviceAssignedDto dto = list.get(i); + String inst_nextDevice_code = dto.getInst_nextdevice_code(); + String task_nextDevice_code = dto.getTask_nextdevice_code(); + String param = dto.getParam(); + JSONObject jo = JSON.parseObject(param); + String regEx = "[`~!@#$%^&*()+=|{}':;'\\[\\].<>/?~!@#¥%……&*()——+|{}【】':”“’。、?]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(inst_nextDevice_code); + String toSpeechText = m.replaceAll("").trim(); + + String[] str = toSpeechText.split(","); + List pathlist = Arrays.asList(str); + for (int j = 0; j < pathlist.size(); j++) { + String this_device_code = pathlist.get(j).toString(); + JSONObject data = JSON.parseObject(jo.getString(this_device_code)); + String limit = data.getString("limit"); + int num = instructionService.querySameDestinationInst(this_device_code); + if (num >= Integer.parseInt(limit)) { + continue; + } + if (j == 0) { + flag1 = num; + } + if (num <= flag1) { + flag2 = this_device_code; + } + } + } + if (!StrUtil.isEmpty(flag2)) { + return flag2; + } + return null; } - return null; - } - @Override - public Integer querySameDeviceReadyTask(String start_device, String next_device, String status) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getStart_device_code(), start_device) - && StrUtil.equals(task.getNext_device_code(), next_device) - && StrUtil.equals(task.getTask_status(), status)) { - num++; + @Override + public Integer querySameDeviceReadyTask(String start_device, String next_device, String status) { + int num = 0; + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (StrUtil.equals(task.getStart_device_code(), start_device) + && StrUtil.equals(task.getNext_device_code(), next_device) + && StrUtil.equals(task.getTask_status(), status)) { + num++; + } } - } - return num; - } + return num; + } - @Override - public Integer querySameTaskByType(String taskType) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (task.getTask_type().equals(taskType) && task.getTask_status().equals("1")) { - num++; + @Override + public Integer querySameTaskByType(String taskType) { + int num = 0; + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (task.getTask_type().equals(taskType) && task.getTask_status().equals("1")) { + num++; + } } - } - return num; - } + return num; + } - @Override - public Integer querySameOriginTask(String code) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getStart_device_code(), code)) { - num++; + @Override + public Integer querySameOriginTask(String code) { + int num = 0; + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (StrUtil.equals(task.getStart_device_code(), code)) { + num++; + } } - } - return num; - } + return num; + } - @Override - public Integer querySameDestinationTask(String code) { - int num = 0; - Iterator iterator = tasks.iterator(); - while (iterator.hasNext()) { - TaskDto task = iterator.next(); - if (StrUtil.equals(task.getNext_device_code(), code)) { - num++; + @Override + public Integer querySameDestinationTask(String code) { + int num = 0; + Iterator iterator = tasks.iterator(); + while (iterator.hasNext()) { + TaskDto task = iterator.next(); + if (StrUtil.equals(task.getNext_device_code(), code)) { + num++; + } } - } - return num; + return num; } }